)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"08502d13a00549c4975906f518333e6c09af59dd","unresolved":false,"context_lines":[{"line_number":12,"context_line":"and the messaging server handler can use it and configure the executor"},{"line_number":13,"context_line":"layer accordling."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Test coverage is added by the following patch"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Partial implements blueprint notification-subscriber-server"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAATn%2F9FjM%3D","line":15,"updated":"2013-12-16 22:26:26.000000000","message":"I\u0027m not really comfortable with that approach, since it means we might end up with broken code in the repository. Is there no way to include some basic tests here, too?","commit_id":"c4922446b6b1d595eb0703f2aec606dfd621c705"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"05d6027d6d31920161e931c63980686b7b007760","unresolved":false,"context_lines":[{"line_number":12,"context_line":"and the messaging server handler can use it and configure the executor"},{"line_number":13,"context_line":"layer accordling."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Test coverage is added by the following patch"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Partial implements blueprint notification-subscriber-server"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAATn%2F88dk%3D","line":15,"in_reply_to":"AAAATn%2F9FjM%3D","updated":"2013-12-18 16:10:15.000000000","message":"Because most of the code of this patch have disappear, I have merged this patch into the next one that have the tests.","commit_id":"c4922446b6b1d595eb0703f2aec606dfd621c705"}],"oslo/messaging/_drivers/amqpdriver.py":[{"author":{"_account_id":8784,"name":"Gordon Sim","email":"gsim@redhat.com","username":"gordonsim"},"change_message_id":"0cbbf515ba080ea21c69855060d1489229cb8497","unresolved":false,"context_lines":[{"line_number":423,"context_line":""},{"line_number":424,"context_line":"        listener \u003d AMQPListener(self, None, conn)"},{"line_number":425,"context_line":"        for target in targets:"},{"line_number":426,"context_line":"            topic \u003d target.topic + \u0027.*\u0027"},{"line_number":427,"context_line":"            conn.declare_topic_consumer(topic, listener)"},{"line_number":428,"context_line":"        return listener"},{"line_number":429,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BAgA%3D","line":426,"updated":"2013-12-03 17:50:04.000000000","message":"if topic is the only attribute of target that is relevant to listen_notification, would it be clearer to simply supply the list of topics?","commit_id":"0f06639f046fd1c794bb2bf4490f59d9a6797b09"},{"author":{"_account_id":8784,"name":"Gordon Sim","email":"gsim@redhat.com","username":"gordonsim"},"change_message_id":"0cbbf515ba080ea21c69855060d1489229cb8497","unresolved":false,"context_lines":[{"line_number":424,"context_line":"        listener \u003d AMQPListener(self, None, conn)"},{"line_number":425,"context_line":"        for target in targets:"},{"line_number":426,"context_line":"            topic \u003d target.topic + \u0027.*\u0027"},{"line_number":427,"context_line":"            conn.declare_topic_consumer(topic, listener)"},{"line_number":428,"context_line":"        return listener"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"    def cleanup(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F9%2FbA%3D","line":427,"updated":"2013-12-03 17:50:04.000000000","message":"In both the rabbit and qpid implementations, declare_topic_consumer will use the topic name as the queue name. So if there are different processes that call listen_notification() for the same topic name, they will compete for the messages rather than each seeing its own copy. Is this the intended behaviour?","commit_id":"0f06639f046fd1c794bb2bf4490f59d9a6797b09"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"485cd623f72893f17e6a270fdae09563e6eb9c4d","unresolved":false,"context_lines":[{"line_number":405,"context_line":""},{"line_number":406,"context_line":"        return listener"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    def listen_notification(self, targets, priorities):"},{"line_number":409,"context_line":"        conn \u003d self._get_connection(pooled\u003dFalse)"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"        listener \u003d AMQPListener(self, None, conn)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9Cos%3D","line":408,"updated":"2013-12-17 12:35:47.000000000","message":"I\u0027m thinking this should be (topic, priority) tuples\n\nWe don\u0027t really want to unconditionally listen for all priorities on all targets, do we ?\n\nThat would mean we don\u0027t need a get_notification_topics() helper either:\n\n  targets \u003d [Target(topic\u003d\u0027%s.%s\u0027 % (topic, priority)) for (topic, priority) in topics]\n\nI do want to make it the responsibility of the driver to concatenate topic and priority since drivers might do this differently, but I think that\u0027s all we need to allow for","commit_id":"c4922446b6b1d595eb0703f2aec606dfd621c705"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"05d6027d6d31920161e931c63980686b7b007760","unresolved":false,"context_lines":[{"line_number":405,"context_line":""},{"line_number":406,"context_line":"        return listener"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    def listen_notification(self, targets, priorities):"},{"line_number":409,"context_line":"        conn \u003d self._get_connection(pooled\u003dFalse)"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"        listener \u003d AMQPListener(self, None, conn)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F88eA%3D","line":408,"in_reply_to":"AAAATn%2F9Cos%3D","updated":"2013-12-18 16:10:15.000000000","message":"Done","commit_id":"c4922446b6b1d595eb0703f2aec606dfd621c705"}],"oslo/messaging/_drivers/base.py":[{"author":{"_account_id":8784,"name":"Gordon Sim","email":"gsim@redhat.com","username":"gordonsim"},"change_message_id":"0cbbf515ba080ea21c69855060d1489229cb8497","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        \"\"\"Construct a Listener for the given target.\"\"\""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    @abc.abstractmethod"},{"line_number":91,"context_line":"    def listen_notification(self, targets):"},{"line_number":92,"context_line":"        \"\"\"Construct a notification Listener for the given targets.\"\"\""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BAeo%3D","line":91,"updated":"2013-12-03 17:50:04.000000000","message":"In what way do the implied semantics differ between listen() and listen_notification()?","commit_id":"0f06639f046fd1c794bb2bf4490f59d9a6797b09"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"485cd623f72893f17e6a270fdae09563e6eb9c4d","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        \"\"\"Construct a Listener for the given target.\"\"\""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    @abc.abstractmethod"},{"line_number":78,"context_line":"    def listen_notification(self, targets, priorities):"},{"line_number":79,"context_line":"        \"\"\"Construct a notification Listener for the given targets"},{"line_number":80,"context_line":"        and priorities."},{"line_number":81,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9CnI%3D","line":78,"updated":"2013-12-17 12:35:47.000000000","message":"Maybe list_for_notifications() ? meh","commit_id":"c4922446b6b1d595eb0703f2aec606dfd621c705"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"05d6027d6d31920161e931c63980686b7b007760","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        \"\"\"Construct a Listener for the given target.\"\"\""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    @abc.abstractmethod"},{"line_number":78,"context_line":"    def listen_notification(self, targets, priorities):"},{"line_number":79,"context_line":"        \"\"\"Construct a notification Listener for the given targets"},{"line_number":80,"context_line":"        and priorities."},{"line_number":81,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F88dg%3D","line":78,"in_reply_to":"AAAATn%2F9CnI%3D","updated":"2013-12-18 16:10:15.000000000","message":"Done, with \u0027listen_for_notifications\u0027","commit_id":"c4922446b6b1d595eb0703f2aec606dfd621c705"}],"oslo/messaging/_drivers/impl_qpid.py":[{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"485cd623f72893f17e6a270fdae09563e6eb9c4d","unresolved":false,"context_lines":[{"line_number":834,"context_line":"    @staticmethod"},{"line_number":835,"context_line":"    def listen_notificiation(targets, topics):"},{"line_number":836,"context_line":"        raise NotImplementedError(\u0027The QPID driver does not yet support \u0027"},{"line_number":837,"context_line":"                                  \u0027listening notification\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9Cmo%3D","line":837,"updated":"2013-12-17 12:35:47.000000000","message":"That\u0027s a bit weird - the implementation in amqpdriver.py should just work fine?\n\nAlso the signature doesn\u0027t match the base class","commit_id":"c4922446b6b1d595eb0703f2aec606dfd621c705"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"05d6027d6d31920161e931c63980686b7b007760","unresolved":false,"context_lines":[{"line_number":834,"context_line":"    @staticmethod"},{"line_number":835,"context_line":"    def listen_notificiation(targets, topics):"},{"line_number":836,"context_line":"        raise NotImplementedError(\u0027The QPID driver does not yet support \u0027"},{"line_number":837,"context_line":"                                  \u0027listening notification\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F88dU%3D","line":837,"in_reply_to":"AAAATn%2F9Cmo%3D","updated":"2013-12-18 16:10:15.000000000","message":"I have removed that from here, only the requeue of message seems to be different between qpid and rabbit, and this is the purpose of an other patch","commit_id":"c4922446b6b1d595eb0703f2aec606dfd621c705"}],"oslo/messaging/_utils.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"08502d13a00549c4975906f518333e6c09af59dd","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    :param priorities: a list of proirity"},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    targets_topics \u003d map(lambda x: getattr(x, \u0027topic\u0027), targets)"},{"line_number":55,"context_line":"    topics \u003d map(\u0027.\u0027.join, itertools.product("},{"line_number":56,"context_line":"        targets_topics, priorities))"},{"line_number":57,"context_line":"    return set(topics)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9FmE%3D","line":54,"updated":"2013-12-16 22:26:26.000000000","message":"This lambda could be replaced with attrgetter().\n\nhttp://docs.python.org/2/library/operator.html#operator.attrgetter","commit_id":"c4922446b6b1d595eb0703f2aec606dfd621c705"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"05d6027d6d31920161e931c63980686b7b007760","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    :param priorities: a list of proirity"},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    targets_topics \u003d map(lambda x: getattr(x, \u0027topic\u0027), targets)"},{"line_number":55,"context_line":"    topics \u003d map(\u0027.\u0027.join, itertools.product("},{"line_number":56,"context_line":"        targets_topics, priorities))"},{"line_number":57,"context_line":"    return set(topics)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F88c8%3D","line":54,"in_reply_to":"AAAATn%2F9FmE%3D","updated":"2013-12-18 16:10:15.000000000","message":"Done, this code have moved to the notification dispatcher","commit_id":"c4922446b6b1d595eb0703f2aec606dfd621c705"}],"oslo/messaging/server.py":[{"author":{"_account_id":8784,"name":"Gordon Sim","email":"gsim@redhat.com","username":"gordonsim"},"change_message_id":"0cbbf515ba080ea21c69855060d1489229cb8497","unresolved":false,"context_lines":[{"line_number":150,"context_line":"            if self.mode \u003d\u003d \u0027rpc\u0027:"},{"line_number":151,"context_line":"                listener \u003d self.transport._listen(self.targets[0])"},{"line_number":152,"context_line":"            elif self.mode \u003d\u003d \u0027notification\u0027:"},{"line_number":153,"context_line":"                listener \u003d self.transport._listen_notification(self.targets)"},{"line_number":154,"context_line":"        except driver_base.TransportDriverError as ex:"},{"line_number":155,"context_line":"            raise ServerListenError(self.target, ex)"},{"line_number":156,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F9%2F%2Fs%3D","line":153,"updated":"2013-12-03 17:50:04.000000000","message":"Is the only distinction between modes that roc mode takes a single target and notification mode can take more than one?","commit_id":"0f06639f046fd1c794bb2bf4490f59d9a6797b09"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"485cd623f72893f17e6a270fdae09563e6eb9c4d","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        self.conf \u003d transport.conf"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        self.transport \u003d transport"},{"line_number":108,"context_line":"        self.targets \u003d targets if isinstance(targets, list) else [targets]"},{"line_number":109,"context_line":"        self.dispatcher \u003d dispatcher"},{"line_number":110,"context_line":"        self.executor \u003d executor"},{"line_number":111,"context_line":"        self.mode \u003d mode"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9Cj4%3D","line":108,"updated":"2013-12-17 12:35:47.000000000","message":"I\u0027m not loving this","commit_id":"c4922446b6b1d595eb0703f2aec606dfd621c705"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"05d6027d6d31920161e931c63980686b7b007760","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        self.conf \u003d transport.conf"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        self.transport \u003d transport"},{"line_number":108,"context_line":"        self.targets \u003d targets if isinstance(targets, list) else [targets]"},{"line_number":109,"context_line":"        self.dispatcher \u003d dispatcher"},{"line_number":110,"context_line":"        self.executor \u003d executor"},{"line_number":111,"context_line":"        self.mode \u003d mode"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F88cw%3D","line":108,"in_reply_to":"AAAATn%2F9Cj4%3D","updated":"2013-12-18 16:10:15.000000000","message":"Removed","commit_id":"c4922446b6b1d595eb0703f2aec606dfd621c705"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"08502d13a00549c4975906f518333e6c09af59dd","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            return"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        try:"},{"line_number":150,"context_line":"            if self.mode \u003d\u003d \u0027rpc\u0027:"},{"line_number":151,"context_line":"                listener \u003d self.transport._listen(self.targets[0])"},{"line_number":152,"context_line":"            elif self.mode \u003d\u003d \u0027notification\u0027:"},{"line_number":153,"context_line":"                listener \u003d self.transport._listen_notification("}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9Fj4%3D","line":150,"updated":"2013-12-16 22:26:26.000000000","message":"Why limit the server to a single mode? Why not let it listen for RPC and notifications?","commit_id":"c4922446b6b1d595eb0703f2aec606dfd621c705"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"05d6027d6d31920161e931c63980686b7b007760","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            return"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        try:"},{"line_number":150,"context_line":"            if self.mode \u003d\u003d \u0027rpc\u0027:"},{"line_number":151,"context_line":"                listener \u003d self.transport._listen(self.targets[0])"},{"line_number":152,"context_line":"            elif self.mode \u003d\u003d \u0027notification\u0027:"},{"line_number":153,"context_line":"                listener \u003d self.transport._listen_notification("}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F88cQ%3D","line":150,"in_reply_to":"AAAATn%2F8%2BG0%3D","updated":"2013-12-18 16:10:15.000000000","message":"Done","commit_id":"c4922446b6b1d595eb0703f2aec606dfd621c705"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"315f186ca463cddcc4037b587bd9f37f306f3626","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            return"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        try:"},{"line_number":150,"context_line":"            if self.mode \u003d\u003d \u0027rpc\u0027:"},{"line_number":151,"context_line":"                listener \u003d self.transport._listen(self.targets[0])"},{"line_number":152,"context_line":"            elif self.mode \u003d\u003d \u0027notification\u0027:"},{"line_number":153,"context_line":"                listener \u003d self.transport._listen_notification("}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F8%2BG0%3D","line":150,"in_reply_to":"AAAATn%2F9Cjs%3D","updated":"2013-12-18 09:49:01.000000000","message":"I agree that target/targets and mode don\u0027t looks very sexy. But I need to have a different listener for rpc and notification, the differences are:\n\n- rpc listen on one topic (with/without server, and a fanout), notification listen on many topic (without server/fanout)\n- rpc message need to be replied, notification doesn\u0027t need that \n- notification message can be manually requeued, rpc doesn\u0027t need this.\n\n_listen() in dispatcher make sense for me, it will simplify thing a lot. \n\nThe listen method (rpc or notification) to use is strictly linked with the dispatcher.\n\nThe dispatcher can introspect the endpoints to know their capabilities/requirements and configure the transport like is needed.\n\nIn some next patches I have made the instropection a bit in the driver, the server, and the notification dispatcher, if the dispatcher get the listen() method, all of this will move to the notification dispatcher.\n\nThe server just do \u0027self.dispatcher._listen(self.transport)\u0027  and drivers are just dump and receive a list of (topic, priority) (like you propose earlier) and all the notification logic is moved to the notification dispatcher.","commit_id":"c4922446b6b1d595eb0703f2aec606dfd621c705"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"485cd623f72893f17e6a270fdae09563e6eb9c4d","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            return"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        try:"},{"line_number":150,"context_line":"            if self.mode \u003d\u003d \u0027rpc\u0027:"},{"line_number":151,"context_line":"                listener \u003d self.transport._listen(self.targets[0])"},{"line_number":152,"context_line":"            elif self.mode \u003d\u003d \u0027notification\u0027:"},{"line_number":153,"context_line":"                listener \u003d self.transport._listen_notification("}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9Cjs%3D","line":150,"in_reply_to":"AAAATn%2F9Fj4%3D","updated":"2013-12-17 12:35:47.000000000","message":"I think this is related to this idea: http://lists.openstack.org/pipermail/openstack-dev/2013-May/008960.html\n\nThe issue, though, is that you\u0027d want messages on some targets dispatched to the RPC dispatcher and other messages dispatched to the notification dispatcher\n\nYou\u0027d also need a single transport listener to support modes - you don\u0027t want to have multiple listener objects and the executor polling each in turn\n\nThis gets complicated quickly - I\u0027d like to just make sure the abstraction supports doing this later. And really, all of this is internal library implementation details. The only public part of the server class are the attributes and the start(), stop() and wait() methods\n\n\nI wonder ... should we just have a _listen() method on the dispatcher, and have the target associated with the dispatcher instead of the server ?","commit_id":"c4922446b6b1d595eb0703f2aec606dfd621c705"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"485cd623f72893f17e6a270fdae09563e6eb9c4d","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        try:"},{"line_number":150,"context_line":"            if self.mode \u003d\u003d \u0027rpc\u0027:"},{"line_number":151,"context_line":"                listener \u003d self.transport._listen(self.targets[0])"},{"line_number":152,"context_line":"            elif self.mode \u003d\u003d \u0027notification\u0027:"},{"line_number":153,"context_line":"                listener \u003d self.transport._listen_notification("},{"line_number":154,"context_line":"                    self.targets, [\u0027audit\u0027, \u0027debug\u0027, \u0027info\u0027, \u0027warn\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9CjY%3D","line":151,"updated":"2013-12-17 12:35:47.000000000","message":"Don\u0027t like this either - i.e. if it\u0027s an RPC server we only care about the first one","commit_id":"c4922446b6b1d595eb0703f2aec606dfd621c705"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"05d6027d6d31920161e931c63980686b7b007760","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        try:"},{"line_number":150,"context_line":"            if self.mode \u003d\u003d \u0027rpc\u0027:"},{"line_number":151,"context_line":"                listener \u003d self.transport._listen(self.targets[0])"},{"line_number":152,"context_line":"            elif self.mode \u003d\u003d \u0027notification\u0027:"},{"line_number":153,"context_line":"                listener \u003d self.transport._listen_notification("},{"line_number":154,"context_line":"                    self.targets, [\u0027audit\u0027, \u0027debug\u0027, \u0027info\u0027, \u0027warn\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F88cM%3D","line":151,"in_reply_to":"AAAATn%2F9CjY%3D","updated":"2013-12-18 16:10:15.000000000","message":"Removed","commit_id":"c4922446b6b1d595eb0703f2aec606dfd621c705"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"08502d13a00549c4975906f518333e6c09af59dd","unresolved":false,"context_lines":[{"line_number":151,"context_line":"                listener \u003d self.transport._listen(self.targets[0])"},{"line_number":152,"context_line":"            elif self.mode \u003d\u003d \u0027notification\u0027:"},{"line_number":153,"context_line":"                listener \u003d self.transport._listen_notification("},{"line_number":154,"context_line":"                    self.targets, [\u0027audit\u0027, \u0027debug\u0027, \u0027info\u0027, \u0027warn\u0027,"},{"line_number":155,"context_line":"                                   \u0027error\u0027, \u0027critical\u0027])"},{"line_number":156,"context_line":"        except driver_base.TransportDriverError as ex:"},{"line_number":157,"context_line":"            raise ServerListenError(self.target, ex)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9Fjs%3D","line":154,"updated":"2013-12-16 22:26:26.000000000","message":"This list of levels looks like the sort of thing that should live in the notification code somewhere as a constant.","commit_id":"c4922446b6b1d595eb0703f2aec606dfd621c705"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"05d6027d6d31920161e931c63980686b7b007760","unresolved":false,"context_lines":[{"line_number":151,"context_line":"                listener \u003d self.transport._listen(self.targets[0])"},{"line_number":152,"context_line":"            elif self.mode \u003d\u003d \u0027notification\u0027:"},{"line_number":153,"context_line":"                listener \u003d self.transport._listen_notification("},{"line_number":154,"context_line":"                    self.targets, [\u0027audit\u0027, \u0027debug\u0027, \u0027info\u0027, \u0027warn\u0027,"},{"line_number":155,"context_line":"                                   \u0027error\u0027, \u0027critical\u0027])"},{"line_number":156,"context_line":"        except driver_base.TransportDriverError as ex:"},{"line_number":157,"context_line":"            raise ServerListenError(self.target, ex)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F88co%3D","line":154,"in_reply_to":"AAAATn%2F9Fjs%3D","updated":"2013-12-18 16:10:15.000000000","message":"Done","commit_id":"c4922446b6b1d595eb0703f2aec606dfd621c705"}],"oslo/messaging/transport.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"08502d13a00549c4975906f518333e6c09af59dd","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    def _listen_notification(self, targets, priorities):"},{"line_number":102,"context_line":"        for target in targets:"},{"line_number":103,"context_line":"            if not target.topic:"},{"line_number":104,"context_line":"                raise exceptions.InvalidTarget(\u0027A server\\\u0027s target must have \u0027"},{"line_number":105,"context_line":"                                               \u0027topic specified\u0027, target)"},{"line_number":106,"context_line":"        return self._driver.listen_notification(targets, priorities)"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9Fjk%3D","line":104,"updated":"2013-12-16 22:26:26.000000000","message":"This case needs a test.","commit_id":"c4922446b6b1d595eb0703f2aec606dfd621c705"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"05d6027d6d31920161e931c63980686b7b007760","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    def _listen_notification(self, targets, priorities):"},{"line_number":102,"context_line":"        for target in targets:"},{"line_number":103,"context_line":"            if not target.topic:"},{"line_number":104,"context_line":"                raise exceptions.InvalidTarget(\u0027A server\\\u0027s target must have \u0027"},{"line_number":105,"context_line":"                                               \u0027topic specified\u0027, target)"},{"line_number":106,"context_line":"        return self._driver.listen_notification(targets, priorities)"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F88c4%3D","line":104,"in_reply_to":"AAAATn%2F9Fjk%3D","updated":"2013-12-18 16:10:15.000000000","message":"This code does not exist anymore.","commit_id":"c4922446b6b1d595eb0703f2aec606dfd621c705"}]}
