)]}'
{"oslo/messaging/_drivers/impl_unix.py":[{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"9dc4290f489c5a6c2315400c78619e29872c9172","unresolved":false,"context_lines":[{"line_number":18,"context_line":"#"},{"line_number":19,"context_line":"# @author: Isaku Yamahata, Intel Corporation."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import greenlet"},{"line_number":22,"context_line":"import logging"},{"line_number":23,"context_line":"import os"},{"line_number":24,"context_line":"import os.path"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAW3%2F%2F5yc%3D","line":21,"updated":"2014-04-09 15:59:13.000000000","message":"greenlet is third-party lib,  please group it with eventlet.","commit_id":"a9ac8b5ada828681c98111d37a3188a8250b0f06"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"ec25472c962537454f217f0adc7e91180aa80428","unresolved":false,"context_lines":[{"line_number":18,"context_line":"#"},{"line_number":19,"context_line":"# @author: Isaku Yamahata, Intel Corporation."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import greenlet"},{"line_number":22,"context_line":"import logging"},{"line_number":23,"context_line":"import os"},{"line_number":24,"context_line":"import os.path"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXH%2F%2F2o4%3D","line":21,"in_reply_to":"AAAAW3%2F%2F5yc%3D","updated":"2014-04-18 17:17:12.000000000","message":"Done","commit_id":"a9ac8b5ada828681c98111d37a3188a8250b0f06"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"28f417a4d503797c0a8962e3ca1d7fd0c9879a33","unresolved":false,"context_lines":[{"line_number":37,"context_line":"from oslo.messaging._drivers import common"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"_ \u003d lambda s: s"},{"line_number":41,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":42,"context_line":"unix_opts \u003d ["},{"line_number":43,"context_line":"    cfg.StrOpt(\u0027rpc_unix_ipc_dir\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXH%2F%2FLaQ%3D","line":40,"updated":"2014-04-23 14:29:11.000000000","message":"Better Add FIXME like we did with other places.","commit_id":"a9ac8b5ada828681c98111d37a3188a8250b0f06"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"1d6f4b62206a15b73273a602bf4a04735ecbaf31","unresolved":false,"context_lines":[{"line_number":37,"context_line":"from oslo.messaging._drivers import common"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"_ \u003d lambda s: s"},{"line_number":41,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":42,"context_line":"unix_opts \u003d ["},{"line_number":43,"context_line":"    cfg.StrOpt(\u0027rpc_unix_ipc_dir\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXX%2F%2FwUo%3D","line":40,"in_reply_to":"AAAAXH%2F%2FLaQ%3D","updated":"2014-04-28 08:32:23.000000000","message":"Done","commit_id":"a9ac8b5ada828681c98111d37a3188a8250b0f06"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"9dc4290f489c5a6c2315400c78619e29872c9172","unresolved":false,"context_lines":[{"line_number":42,"context_line":"unix_opts \u003d ["},{"line_number":43,"context_line":"    cfg.StrOpt(\u0027rpc_unix_ipc_dir\u0027,"},{"line_number":44,"context_line":"               default\u003d\u0027/var/run/opentsack/rpc_unix_ipc_dir\u0027,"},{"line_number":45,"context_line":"               help\u003d_(\u0027Directory for holding UNIX domain socket for RPC\u0027)),"},{"line_number":46,"context_line":"]"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAW3%2F%2F58Y%3D","line":45,"updated":"2014-04-09 15:59:13.000000000","message":"As I know , we didn\u0027t  have i18n support for config help string now.","commit_id":"a9ac8b5ada828681c98111d37a3188a8250b0f06"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"ec25472c962537454f217f0adc7e91180aa80428","unresolved":false,"context_lines":[{"line_number":42,"context_line":"unix_opts \u003d ["},{"line_number":43,"context_line":"    cfg.StrOpt(\u0027rpc_unix_ipc_dir\u0027,"},{"line_number":44,"context_line":"               default\u003d\u0027/var/run/opentsack/rpc_unix_ipc_dir\u0027,"},{"line_number":45,"context_line":"               help\u003d_(\u0027Directory for holding UNIX domain socket for RPC\u0027)),"},{"line_number":46,"context_line":"]"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXH%2F%2F2o0%3D","line":45,"in_reply_to":"AAAAW3%2F%2F58Y%3D","updated":"2014-04-18 17:17:12.000000000","message":"So are you suggesting to remove _ totally?\nI just followed the style of other code.","commit_id":"a9ac8b5ada828681c98111d37a3188a8250b0f06"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"28f417a4d503797c0a8962e3ca1d7fd0c9879a33","unresolved":false,"context_lines":[{"line_number":42,"context_line":"unix_opts \u003d ["},{"line_number":43,"context_line":"    cfg.StrOpt(\u0027rpc_unix_ipc_dir\u0027,"},{"line_number":44,"context_line":"               default\u003d\u0027/var/run/opentsack/rpc_unix_ipc_dir\u0027,"},{"line_number":45,"context_line":"               help\u003d_(\u0027Directory for holding UNIX domain socket for RPC\u0027)),"},{"line_number":46,"context_line":"]"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXH%2F%2FLa0%3D","line":45,"in_reply_to":"AAAAXH%2F%2F2o0%3D","updated":"2014-04-23 14:29:11.000000000","message":"just for cfg help parameter , we don\u0027t use _(  for this ,but somewhere for logging.","commit_id":"a9ac8b5ada828681c98111d37a3188a8250b0f06"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"1d6f4b62206a15b73273a602bf4a04735ecbaf31","unresolved":false,"context_lines":[{"line_number":42,"context_line":"unix_opts \u003d ["},{"line_number":43,"context_line":"    cfg.StrOpt(\u0027rpc_unix_ipc_dir\u0027,"},{"line_number":44,"context_line":"               default\u003d\u0027/var/run/opentsack/rpc_unix_ipc_dir\u0027,"},{"line_number":45,"context_line":"               help\u003d_(\u0027Directory for holding UNIX domain socket for RPC\u0027)),"},{"line_number":46,"context_line":"]"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXX%2F%2FwUk%3D","line":45,"in_reply_to":"AAAAXH%2F%2FLa0%3D","updated":"2014-04-28 08:32:23.000000000","message":"Done","commit_id":"a9ac8b5ada828681c98111d37a3188a8250b0f06"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"9dc4290f489c5a6c2315400c78619e29872c9172","unresolved":false,"context_lines":[{"line_number":49,"context_line":"class RpcContext(common.CommonRpcContext):"},{"line_number":50,"context_line":"    _TARGET_KEYS \u003d ["},{"line_number":51,"context_line":"        \u0027exchange\u0027, \u0027topic\u0027, \u0027namespace\u0027, \u0027version\u0027, \u0027server\u0027, \u0027fanout\u0027]"},{"line_number":52,"context_line":"    _MESSAGE_KEYS \u003d [\u0027msg_id\u0027, \u0027reply_q\u0027, \u0027conf\u0027]"},{"line_number":53,"context_line":"    _ADDITIONAL_KEYS \u003d _TARGET_KEYS + _MESSAGE_KEYS"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def __init__(self, **kwargs):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAW3%2F%2F5zw%3D","line":52,"updated":"2014-04-09 15:59:13.000000000","message":"use tuple ?","commit_id":"a9ac8b5ada828681c98111d37a3188a8250b0f06"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"ec25472c962537454f217f0adc7e91180aa80428","unresolved":false,"context_lines":[{"line_number":49,"context_line":"class RpcContext(common.CommonRpcContext):"},{"line_number":50,"context_line":"    _TARGET_KEYS \u003d ["},{"line_number":51,"context_line":"        \u0027exchange\u0027, \u0027topic\u0027, \u0027namespace\u0027, \u0027version\u0027, \u0027server\u0027, \u0027fanout\u0027]"},{"line_number":52,"context_line":"    _MESSAGE_KEYS \u003d [\u0027msg_id\u0027, \u0027reply_q\u0027, \u0027conf\u0027]"},{"line_number":53,"context_line":"    _ADDITIONAL_KEYS \u003d _TARGET_KEYS + _MESSAGE_KEYS"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def __init__(self, **kwargs):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXH%2F%2F2oM%3D","line":52,"in_reply_to":"AAAAW3%2F%2F5zw%3D","updated":"2014-04-18 17:17:12.000000000","message":"Done","commit_id":"a9ac8b5ada828681c98111d37a3188a8250b0f06"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"9dc4290f489c5a6c2315400c78619e29872c9172","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            #             in kwargs."},{"line_number":80,"context_line":"            key \u003d str(key)"},{"line_number":81,"context_line":"            if key.startswith(\u0027_context_\u0027):"},{"line_number":82,"context_line":"                value \u003d msg.pop(key)"},{"line_number":83,"context_line":"                ctxt_dict[key[9:]] \u003d value"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        for key in cls._MESSAGE_KEYS:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAW3%2F%2F5wU%3D","line":82,"updated":"2014-04-09 15:59:13.000000000","message":"should object msg always have key \u0027key\u0027 here ? If not , better msg.pop(key, None)","commit_id":"a9ac8b5ada828681c98111d37a3188a8250b0f06"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"ec25472c962537454f217f0adc7e91180aa80428","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            #             in kwargs."},{"line_number":80,"context_line":"            key \u003d str(key)"},{"line_number":81,"context_line":"            if key.startswith(\u0027_context_\u0027):"},{"line_number":82,"context_line":"                value \u003d msg.pop(key)"},{"line_number":83,"context_line":"                ctxt_dict[key[9:]] \u003d value"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        for key in cls._MESSAGE_KEYS:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXH%2F%2F2oA%3D","line":82,"in_reply_to":"AAAAW3%2F%2F5wU%3D","updated":"2014-04-18 17:17:12.000000000","message":"Yes.","commit_id":"a9ac8b5ada828681c98111d37a3188a8250b0f06"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"9dc4290f489c5a6c2315400c78619e29872c9172","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            msg \u003d self._q.get()"},{"line_number":159,"context_line":"            pickle.dump(msg, f)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"            for i in xrange(self._QUEUE_MAXSIZE):"},{"line_number":162,"context_line":"                try:"},{"line_number":163,"context_line":"                    msg \u003d self._q.get_nowait()"},{"line_number":164,"context_line":"                except moves.queue.Empty:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAW3%2F%2F5uU%3D","line":161,"updated":"2014-04-09 15:59:13.000000000","message":"I think range is enough here , Python 3 doesn\u0027t have built-in method xrange.","commit_id":"a9ac8b5ada828681c98111d37a3188a8250b0f06"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"ec25472c962537454f217f0adc7e91180aa80428","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            msg \u003d self._q.get()"},{"line_number":159,"context_line":"            pickle.dump(msg, f)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"            for i in xrange(self._QUEUE_MAXSIZE):"},{"line_number":162,"context_line":"                try:"},{"line_number":163,"context_line":"                    msg \u003d self._q.get_nowait()"},{"line_number":164,"context_line":"                except moves.queue.Empty:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXH%2F%2F2n4%3D","line":161,"in_reply_to":"AAAAW3%2F%2F5uU%3D","updated":"2014-04-18 17:17:12.000000000","message":"Done","commit_id":"a9ac8b5ada828681c98111d37a3188a8250b0f06"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"fcd56901a2b6ffde9ba0855524d1d43d0088bb95","unresolved":false,"context_lines":[{"line_number":27,"context_line":"import time"},{"line_number":28,"context_line":"import uuid"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"import eventlet"},{"line_number":31,"context_line":"import eventlet.event"},{"line_number":32,"context_line":"import greenlet"},{"line_number":33,"context_line":"from oslo.config import cfg"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAXX%2F%2Fv7o%3D","line":30,"updated":"2014-04-28 09:42:44.000000000","message":"eventlet should avoid in driver, otherwise library user is not free to choice an executor. You force it to use the eventlet executor.","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"abcb324ac2aa92f7222dc3411abe2aeb61e458f9","unresolved":false,"context_lines":[{"line_number":27,"context_line":"import time"},{"line_number":28,"context_line":"import uuid"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"import eventlet"},{"line_number":31,"context_line":"import eventlet.event"},{"line_number":32,"context_line":"import greenlet"},{"line_number":33,"context_line":"from oslo.config import cfg"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad9bd40_528f9523","line":30,"in_reply_to":"AAAAXX%2F%2Fv7o%3D","updated":"2014-04-30 10:38:39.000000000","message":"It\u0027s intentional in order to use eventlet feature which thread/threading don\u0027t provide.\nI don\u0027t think it\u0027s too restrict because other drivers also do.","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"fcd56901a2b6ffde9ba0855524d1d43d0088bb95","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                      for attr in self._ADDITIONAL_KEYS)"},{"line_number":67,"context_line":"        return str(values)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def deepcopy(self):"},{"line_number":70,"context_line":"        values \u003d self.to_dict()"},{"line_number":71,"context_line":"        values.update((key, getattr(self, key))"},{"line_number":72,"context_line":"                      for key in self._ADDITIONAL_KEYS)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAXX%2F%2Fvzk%3D","line":69,"updated":"2014-04-28 09:42:44.000000000","message":"to_dict() use copy.deepcopy, you don\u0027t have to set again ADDITIONAL_KEYS,\nI think the whole deepcopy method can removed.","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"a2be86b67bde23ea434c1c858e88c0fec5b4905e","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                      for attr in self._ADDITIONAL_KEYS)"},{"line_number":67,"context_line":"        return str(values)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def deepcopy(self):"},{"line_number":70,"context_line":"        values \u003d self.to_dict()"},{"line_number":71,"context_line":"        values.update((key, getattr(self, key))"},{"line_number":72,"context_line":"                      for key in self._ADDITIONAL_KEYS)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad9bd40_4ae7c712","line":69,"in_reply_to":"9ad9bd40_b7aa93d2","updated":"2014-05-01 02:44:30.000000000","message":"After self review, no.\ndeepcopy method is necessary.\nCommonRpcContext only takes care of self.values.\nSubclass needs to take care of other attributes.","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"abcb324ac2aa92f7222dc3411abe2aeb61e458f9","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                      for attr in self._ADDITIONAL_KEYS)"},{"line_number":67,"context_line":"        return str(values)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def deepcopy(self):"},{"line_number":70,"context_line":"        values \u003d self.to_dict()"},{"line_number":71,"context_line":"        values.update((key, getattr(self, key))"},{"line_number":72,"context_line":"                      for key in self._ADDITIONAL_KEYS)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad9bd40_b7aa93d2","line":69,"in_reply_to":"AAAAXX%2F%2Fvzk%3D","updated":"2014-04-30 10:38:39.000000000","message":"Done","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"fcd56901a2b6ffde9ba0855524d1d43d0088bb95","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        for key in cls._MESSAGE_KEYS:"},{"line_number":88,"context_line":"            ctxt_dict[key] \u003d msg.pop(\u0027_%s\u0027 % key, None)"},{"line_number":89,"context_line":"        ctxt_dict[\u0027conf\u0027] \u003d conf"},{"line_number":90,"context_line":"        ctxt \u003d cls.from_dict(ctxt_dict)"},{"line_number":91,"context_line":"        common._safe_log(LOG.debug, _(\u0027unpacked context: %s\u0027), ctxt.to_dict())"},{"line_number":92,"context_line":"        return ctxt"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAXX%2F%2Fvx0%3D","line":89,"updated":"2014-04-28 09:42:44.000000000","message":"Why is conf packed into the message ?","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"abcb324ac2aa92f7222dc3411abe2aeb61e458f9","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        for key in cls._MESSAGE_KEYS:"},{"line_number":88,"context_line":"            ctxt_dict[key] \u003d msg.pop(\u0027_%s\u0027 % key, None)"},{"line_number":89,"context_line":"        ctxt_dict[\u0027conf\u0027] \u003d conf"},{"line_number":90,"context_line":"        ctxt \u003d cls.from_dict(ctxt_dict)"},{"line_number":91,"context_line":"        common._safe_log(LOG.debug, _(\u0027unpacked context: %s\u0027), ctxt.to_dict())"},{"line_number":92,"context_line":"        return ctxt"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad9bd40_7731eba1","line":89,"in_reply_to":"AAAAXX%2F%2Fvx0%3D","updated":"2014-04-30 10:38:39.000000000","message":"Done\nremoved","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"fcd56901a2b6ffde9ba0855524d1d43d0088bb95","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        return self._server_queues.setdefault((topic, server), [])"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    def subscribe_topic(self, topic, callback):"},{"line_number":204,"context_line":"        assert callable(callback)"},{"line_number":205,"context_line":"        self._get_topic_queue(topic).append(callback)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def subscribe_server(self, topic, server, callback):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAXX%2F%2Fv9M%3D","line":204,"updated":"2014-04-28 09:42:44.000000000","message":"No assert","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"abcb324ac2aa92f7222dc3411abe2aeb61e458f9","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        return self._server_queues.setdefault((topic, server), [])"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    def subscribe_topic(self, topic, callback):"},{"line_number":204,"context_line":"        assert callable(callback)"},{"line_number":205,"context_line":"        self._get_topic_queue(topic).append(callback)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def subscribe_server(self, topic, server, callback):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad9bd40_d7e63716","line":204,"in_reply_to":"AAAAXX%2F%2Fv9M%3D","updated":"2014-04-30 10:38:39.000000000","message":"Can you elaborate why?\nI couldn\u0027t find anywhere that assert is discouraged in developer guideline.","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"fcd56901a2b6ffde9ba0855524d1d43d0088bb95","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        self._get_topic_queue(topic).append(callback)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def subscribe_server(self, topic, server, callback):"},{"line_number":208,"context_line":"        assert callable(callback)"},{"line_number":209,"context_line":"        self._get_server_queue(topic, server).append(callback)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def deliver_message(self, ctxt, msg):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAXX%2F%2Fv9I%3D","line":208,"updated":"2014-04-28 09:42:44.000000000","message":"Same","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"fcd56901a2b6ffde9ba0855524d1d43d0088bb95","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        self._exchanges \u003d {}"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        self._thread \u003d eventlet.spawn(self._loop, get_socket)"},{"line_number":234,"context_line":"        time.sleep(0)   # give thread a chance to run"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def _loop(self, get_socket):"},{"line_number":237,"context_line":"        LOG.debug(_(\u0027UnixReceiver._loop enter\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAXX%2F%2Fv84%3D","line":234,"updated":"2014-04-28 09:42:44.000000000","message":"Why ?","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"abcb324ac2aa92f7222dc3411abe2aeb61e458f9","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        self._exchanges \u003d {}"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        self._thread \u003d eventlet.spawn(self._loop, get_socket)"},{"line_number":234,"context_line":"        time.sleep(0)   # give thread a chance to run"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def _loop(self, get_socket):"},{"line_number":237,"context_line":"        LOG.debug(_(\u0027UnixReceiver._loop enter\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad9bd40_5704e77d","line":234,"in_reply_to":"AAAAXX%2F%2Fv84%3D","updated":"2014-04-30 10:38:39.000000000","message":"As commented, allow created thread to run.\nIn theory, it\u0027s not necessary. But by doing so, it will hash out issues related to thread scheduling.","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"fcd56901a2b6ffde9ba0855524d1d43d0088bb95","unresolved":false,"context_lines":[{"line_number":241,"context_line":"            msg \u003d pickle.load(f)"},{"line_number":242,"context_line":"            ctxt \u003d RpcContext.unpack(self.conf, msg)"},{"line_number":243,"context_line":"            exchange \u003d self._get_exchange(ctxt.exchange)"},{"line_number":244,"context_line":"            exchange.deliver_message(ctxt, msg)"},{"line_number":245,"context_line":"            time.sleep(0)"},{"line_number":246,"context_line":"        LOG.debug(_(\u0027UnixReceiver._loop exit\u0027))"},{"line_number":247,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAXX%2F%2Fvys%3D","line":244,"updated":"2014-04-28 09:42:44.000000000","message":"The context is not removed from the message ?","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"abcb324ac2aa92f7222dc3411abe2aeb61e458f9","unresolved":false,"context_lines":[{"line_number":241,"context_line":"            msg \u003d pickle.load(f)"},{"line_number":242,"context_line":"            ctxt \u003d RpcContext.unpack(self.conf, msg)"},{"line_number":243,"context_line":"            exchange \u003d self._get_exchange(ctxt.exchange)"},{"line_number":244,"context_line":"            exchange.deliver_message(ctxt, msg)"},{"line_number":245,"context_line":"            time.sleep(0)"},{"line_number":246,"context_line":"        LOG.debug(_(\u0027UnixReceiver._loop exit\u0027))"},{"line_number":247,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad9bd40_97e74fe4","line":244,"in_reply_to":"AAAAXX%2F%2Fvys%3D","updated":"2014-04-30 10:38:39.000000000","message":"No, it\u0027s not removed.\nTo deliver message, target is necessary.","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"fcd56901a2b6ffde9ba0855524d1d43d0088bb95","unresolved":false,"context_lines":[{"line_number":242,"context_line":"            ctxt \u003d RpcContext.unpack(self.conf, msg)"},{"line_number":243,"context_line":"            exchange \u003d self._get_exchange(ctxt.exchange)"},{"line_number":244,"context_line":"            exchange.deliver_message(ctxt, msg)"},{"line_number":245,"context_line":"            time.sleep(0)"},{"line_number":246,"context_line":"        LOG.debug(_(\u0027UnixReceiver._loop exit\u0027))"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def kill(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAXX%2F%2Fv28%3D","line":245,"updated":"2014-04-28 09:42:44.000000000","message":"This loop use 100% CPU ? or pickle.load block when it read f ?","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"abcb324ac2aa92f7222dc3411abe2aeb61e458f9","unresolved":false,"context_lines":[{"line_number":242,"context_line":"            ctxt \u003d RpcContext.unpack(self.conf, msg)"},{"line_number":243,"context_line":"            exchange \u003d self._get_exchange(ctxt.exchange)"},{"line_number":244,"context_line":"            exchange.deliver_message(ctxt, msg)"},{"line_number":245,"context_line":"            time.sleep(0)"},{"line_number":246,"context_line":"        LOG.debug(_(\u0027UnixReceiver._loop exit\u0027))"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def kill(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad9bd40_9782effe","line":245,"in_reply_to":"AAAAXX%2F%2Fv28%3D","updated":"2014-04-30 10:38:39.000000000","message":"Possibly it can use up cpu because there is no gurantee that picle.load blocks.\nSo I bet safer way.","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"fcd56901a2b6ffde9ba0855524d1d43d0088bb95","unresolved":false,"context_lines":[{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    def listen(self, msg_id):"},{"line_number":301,"context_line":"        with self._waiters_lock:"},{"line_number":302,"context_line":"            assert msg_id not in self._waiters"},{"line_number":303,"context_line":"            self._waiters[msg_id] \u003d moves.queue.Queue()"},{"line_number":304,"context_line":"            if len(self._waiters) \u003e self._warn_threshold:"},{"line_number":305,"context_line":"                LOG.warn(_(\u0027Number of call queues is greater than %d. \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAXX%2F%2Fv20%3D","line":302,"updated":"2014-04-28 09:42:44.000000000","message":"no assert","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"fcd56901a2b6ffde9ba0855524d1d43d0088bb95","unresolved":false,"context_lines":[{"line_number":331,"context_line":"        return os.path.join(unix_ipc_dir, path)"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"    def _punix_listen(self, conf, path):"},{"line_number":334,"context_line":"        path \u003d UnixDriver._unix_ensure_dir(conf, path)"},{"line_number":335,"context_line":"        LOG.debug(_(\u0027_punix_listen %s\u0027), path)"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAXX%2F%2Fv68%3D","line":334,"updated":"2014-04-28 09:42:44.000000000","message":"Use self not UnixDriver","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"abcb324ac2aa92f7222dc3411abe2aeb61e458f9","unresolved":false,"context_lines":[{"line_number":331,"context_line":"        return os.path.join(unix_ipc_dir, path)"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"    def _punix_listen(self, conf, path):"},{"line_number":334,"context_line":"        path \u003d UnixDriver._unix_ensure_dir(conf, path)"},{"line_number":335,"context_line":"        LOG.debug(_(\u0027_punix_listen %s\u0027), path)"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad9bd40_b7037372","line":334,"in_reply_to":"AAAAXX%2F%2Fv68%3D","updated":"2014-04-30 10:38:39.000000000","message":"Done","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"fcd56901a2b6ffde9ba0855524d1d43d0088bb95","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        LOG.debug(_(\u0027_punix_listen %s\u0027), path)"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"        try:"},{"line_number":338,"context_line":"            os.unlink(path)"},{"line_number":339,"context_line":"        except OSError:"},{"line_number":340,"context_line":"            pass"},{"line_number":341,"context_line":"        sock \u003d socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAXX%2F%2Fv5M%3D","line":338,"updated":"2014-04-28 09:42:44.000000000","message":"Why create it to directly delete it ?","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"abcb324ac2aa92f7222dc3411abe2aeb61e458f9","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        LOG.debug(_(\u0027_punix_listen %s\u0027), path)"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"        try:"},{"line_number":338,"context_line":"            os.unlink(path)"},{"line_number":339,"context_line":"        except OSError:"},{"line_number":340,"context_line":"            pass"},{"line_number":341,"context_line":"        sock \u003d socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad9bd40_17f25f9a","line":338,"in_reply_to":"AAAAXX%2F%2Fv5M%3D","updated":"2014-04-30 10:38:39.000000000","message":"It can\u0027t because it results in eexist.","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"fcd56901a2b6ffde9ba0855524d1d43d0088bb95","unresolved":false,"context_lines":[{"line_number":340,"context_line":"            pass"},{"line_number":341,"context_line":"        sock \u003d socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)"},{"line_number":342,"context_line":"        sock.bind(path)"},{"line_number":343,"context_line":"        sock.listen(5)"},{"line_number":344,"context_line":"        self.punix_listening.set()"},{"line_number":345,"context_line":"        return sock"},{"line_number":346,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAXX%2F%2Fv6M%3D","line":343,"updated":"2014-04-28 09:42:44.000000000","message":"5 ?","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"abcb324ac2aa92f7222dc3411abe2aeb61e458f9","unresolved":false,"context_lines":[{"line_number":340,"context_line":"            pass"},{"line_number":341,"context_line":"        sock \u003d socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)"},{"line_number":342,"context_line":"        sock.bind(path)"},{"line_number":343,"context_line":"        sock.listen(5)"},{"line_number":344,"context_line":"        self.punix_listening.set()"},{"line_number":345,"context_line":"        return sock"},{"line_number":346,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad9bd40_1777bf03","line":343,"in_reply_to":"AAAAXX%2F%2Fv6M%3D","updated":"2014-04-30 10:38:39.000000000","message":"Usual number for backlog parameter.\nDo you have any opinion?","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"fcd56901a2b6ffde9ba0855524d1d43d0088bb95","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        sock, _addr \u003d listen_socket.accept()"},{"line_number":351,"context_line":"        return sock"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"    @staticmethod"},{"line_number":354,"context_line":"    def _punix_cleanup(conf, path):"},{"line_number":355,"context_line":"        LOG.debug(_(\u0027_punix_cleanup %s\u0027), path)"},{"line_number":356,"context_line":"        path \u003d UnixDriver._unix_ensure_dir(conf, path)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAXX%2F%2Fv5o%3D","line":353,"updated":"2014-04-28 09:42:44.000000000","message":"Shoud be @classmethod","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"abcb324ac2aa92f7222dc3411abe2aeb61e458f9","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        sock, _addr \u003d listen_socket.accept()"},{"line_number":351,"context_line":"        return sock"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"    @staticmethod"},{"line_number":354,"context_line":"    def _punix_cleanup(conf, path):"},{"line_number":355,"context_line":"        LOG.debug(_(\u0027_punix_cleanup %s\u0027), path)"},{"line_number":356,"context_line":"        path \u003d UnixDriver._unix_ensure_dir(conf, path)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad9bd40_975aef81","line":353,"in_reply_to":"AAAAXX%2F%2Fv5o%3D","updated":"2014-04-30 10:38:39.000000000","message":"Done","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"fcd56901a2b6ffde9ba0855524d1d43d0088bb95","unresolved":false,"context_lines":[{"line_number":353,"context_line":"    @staticmethod"},{"line_number":354,"context_line":"    def _punix_cleanup(conf, path):"},{"line_number":355,"context_line":"        LOG.debug(_(\u0027_punix_cleanup %s\u0027), path)"},{"line_number":356,"context_line":"        path \u003d UnixDriver._unix_ensure_dir(conf, path)"},{"line_number":357,"context_line":"        try:"},{"line_number":358,"context_line":"            os.unlink(path)"},{"line_number":359,"context_line":"        except OSError:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAXX%2F%2Fv4A%3D","line":356,"updated":"2014-04-28 09:42:44.000000000","message":"Why creating it on cleanup ?","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"fcd56901a2b6ffde9ba0855524d1d43d0088bb95","unresolved":false,"context_lines":[{"line_number":355,"context_line":"        LOG.debug(_(\u0027_punix_cleanup %s\u0027), path)"},{"line_number":356,"context_line":"        path \u003d UnixDriver._unix_ensure_dir(conf, path)"},{"line_number":357,"context_line":"        try:"},{"line_number":358,"context_line":"            os.unlink(path)"},{"line_number":359,"context_line":"        except OSError:"},{"line_number":360,"context_line":"            pass"},{"line_number":361,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAXX%2F%2Fv4E%3D","line":358,"updated":"2014-04-28 09:42:44.000000000","message":"Why create it to directly delete it ?","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"fcd56901a2b6ffde9ba0855524d1d43d0088bb95","unresolved":false,"context_lines":[{"line_number":359,"context_line":"        except OSError:"},{"line_number":360,"context_line":"            pass"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"    @staticmethod"},{"line_number":363,"context_line":"    def _unix_connect(conf, path):"},{"line_number":364,"context_line":"        LOG.debug(_(\u0027_unix_connect\u0027))"},{"line_number":365,"context_line":"        path \u003d UnixDriver._unix_ensure_dir(conf, path)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAXX%2F%2Fv50%3D","line":362,"updated":"2014-04-28 09:42:44.000000000","message":"Shoud be @classmethod","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"abcb324ac2aa92f7222dc3411abe2aeb61e458f9","unresolved":false,"context_lines":[{"line_number":359,"context_line":"        except OSError:"},{"line_number":360,"context_line":"            pass"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"    @staticmethod"},{"line_number":363,"context_line":"    def _unix_connect(conf, path):"},{"line_number":364,"context_line":"        LOG.debug(_(\u0027_unix_connect\u0027))"},{"line_number":365,"context_line":"        path \u003d UnixDriver._unix_ensure_dir(conf, path)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad9bd40_f7d7bbbd","line":362,"in_reply_to":"AAAAXX%2F%2Fv50%3D","updated":"2014-04-30 10:38:39.000000000","message":"Done","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"fcd56901a2b6ffde9ba0855524d1d43d0088bb95","unresolved":false,"context_lines":[{"line_number":367,"context_line":"        sock.connect(path)"},{"line_number":368,"context_line":"        return sock"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"    def __init__(self, conf, url,"},{"line_number":371,"context_line":"                 default_exchange\u003dNone, allowed_remote_exmods\u003dNone):"},{"line_number":372,"context_line":"        conf.register_opts(unix_opts)"},{"line_number":373,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAXX%2F%2Fv4w%3D","line":370,"updated":"2014-04-28 09:42:44.000000000","message":"Can you make __init__ the first method of the class.","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"abcb324ac2aa92f7222dc3411abe2aeb61e458f9","unresolved":false,"context_lines":[{"line_number":367,"context_line":"        sock.connect(path)"},{"line_number":368,"context_line":"        return sock"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"    def __init__(self, conf, url,"},{"line_number":371,"context_line":"                 default_exchange\u003dNone, allowed_remote_exmods\u003dNone):"},{"line_number":372,"context_line":"        conf.register_opts(unix_opts)"},{"line_number":373,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad9bd40_973bcfea","line":370,"in_reply_to":"AAAAXX%2F%2Fv4w%3D","updated":"2014-04-30 10:38:39.000000000","message":"Done","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"fcd56901a2b6ffde9ba0855524d1d43d0088bb95","unresolved":false,"context_lines":[{"line_number":378,"context_line":"        self._is_passive \u003d url.transport.startswith(\u0027p\u0027)"},{"line_number":379,"context_line":"        self._reply_q \u003d \u0027reply_\u0027 + uuid.uuid4().hex"},{"line_number":380,"context_line":"        if url.virtual_host is None:"},{"line_number":381,"context_line":"            url.virtual_host \u003d uuid.uuid4().hex"},{"line_number":382,"context_line":"        self._path \u003d url.virtual_host"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"        self.punix_listening \u003d threading.Event()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAXX%2F%2Fv4M%3D","line":381,"updated":"2014-04-28 09:42:44.000000000","message":"Why forcing a virtualhost, if I create two transports without virtualhost, It must be allowed to talk together.","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"abcb324ac2aa92f7222dc3411abe2aeb61e458f9","unresolved":false,"context_lines":[{"line_number":378,"context_line":"        self._is_passive \u003d url.transport.startswith(\u0027p\u0027)"},{"line_number":379,"context_line":"        self._reply_q \u003d \u0027reply_\u0027 + uuid.uuid4().hex"},{"line_number":380,"context_line":"        if url.virtual_host is None:"},{"line_number":381,"context_line":"            url.virtual_host \u003d uuid.uuid4().hex"},{"line_number":382,"context_line":"        self._path \u003d url.virtual_host"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"        self.punix_listening \u003d threading.Event()"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad9bd40_323131ed","line":381,"in_reply_to":"AAAAXX%2F%2Fv4M%3D","updated":"2014-04-30 10:38:39.000000000","message":"Because virtual_host is mapped to file system path and None doesn\u0027t make sense.","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"fcd56901a2b6ffde9ba0855524d1d43d0088bb95","unresolved":false,"context_lines":[{"line_number":418,"context_line":"                self.punix_listening.set()"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"    def reply(self, msg):"},{"line_number":421,"context_line":"        assert self._socket is not None"},{"line_number":422,"context_line":"        self._sender.send(msg)"},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"    def _send(self, target, ctxt, message, wait_for_reply\u003dNone, timeout\u003dNone,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAXX%2F%2Fv48%3D","line":421,"updated":"2014-04-28 09:42:44.000000000","message":"No assert","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"fcd56901a2b6ffde9ba0855524d1d43d0088bb95","unresolved":false,"context_lines":[{"line_number":423,"context_line":""},{"line_number":424,"context_line":"    def _send(self, target, ctxt, message, wait_for_reply\u003dNone, timeout\u003dNone,"},{"line_number":425,"context_line":"              envelope\u003dFalse):"},{"line_number":426,"context_line":"        assert not envelope"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"        msg \u003d message"},{"line_number":429,"context_line":"        RpcContext.pack(msg, target, ctxt)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAXX%2F%2Fv4I%3D","line":426,"updated":"2014-04-28 09:42:44.000000000","message":"no assert","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"}],"setup.cfg":[{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"9dc4290f489c5a6c2315400c78619e29872c9172","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    qpid \u003d oslo.messaging._drivers.impl_qpid:QpidDriver"},{"line_number":33,"context_line":"    zmq \u003d oslo.messaging._drivers.impl_zmq:ZmqDriver"},{"line_number":34,"context_line":"    unix \u003d oslo.messaging._drivers.impl_unix:UnixDriver"},{"line_number":35,"context_line":"    punix \u003d oslo.messaging._drivers.impl_unix:UnixDriver"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    # To avoid confusion"},{"line_number":38,"context_line":"    kombu \u003d oslo.messaging._drivers.impl_rabbit:RabbitDriver"}],"source_content_type":"text/x-ttcn-cfg","patch_set":3,"id":"AAAAW3%2F%2F5sU%3D","line":35,"updated":"2014-04-09 15:59:13.000000000","message":"duplicated ?","commit_id":"a9ac8b5ada828681c98111d37a3188a8250b0f06"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"ec25472c962537454f217f0adc7e91180aa80428","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    qpid \u003d oslo.messaging._drivers.impl_qpid:QpidDriver"},{"line_number":33,"context_line":"    zmq \u003d oslo.messaging._drivers.impl_zmq:ZmqDriver"},{"line_number":34,"context_line":"    unix \u003d oslo.messaging._drivers.impl_unix:UnixDriver"},{"line_number":35,"context_line":"    punix \u003d oslo.messaging._drivers.impl_unix:UnixDriver"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    # To avoid confusion"},{"line_number":38,"context_line":"    kombu \u003d oslo.messaging._drivers.impl_rabbit:RabbitDriver"}],"source_content_type":"text/x-ttcn-cfg","patch_set":3,"id":"AAAAXH%2F%2F2nU%3D","line":35,"in_reply_to":"AAAAW3%2F%2F5sU%3D","updated":"2014-04-18 17:17:12.000000000","message":"No. It\u0027s intentional. unix and punix.","commit_id":"a9ac8b5ada828681c98111d37a3188a8250b0f06"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"fcd56901a2b6ffde9ba0855524d1d43d0088bb95","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    qpid \u003d oslo.messaging._drivers.impl_qpid:QpidDriver"},{"line_number":33,"context_line":"    zmq \u003d oslo.messaging._drivers.impl_zmq:ZmqDriver"},{"line_number":34,"context_line":"    unix \u003d oslo.messaging._drivers.impl_unix:UnixDriver"},{"line_number":35,"context_line":"    punix \u003d oslo.messaging._drivers.impl_unix:UnixDriver"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    # To avoid confusion"},{"line_number":38,"context_line":"    kombu \u003d oslo.messaging._drivers.impl_rabbit:RabbitDriver"}],"source_content_type":"text/x-ttcn-cfg","patch_set":5,"id":"AAAAXX%2F%2Fvsc%3D","line":35,"updated":"2014-04-28 09:42:44.000000000","message":"Why did you add two names for this new driver ?","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"abcb324ac2aa92f7222dc3411abe2aeb61e458f9","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    qpid \u003d oslo.messaging._drivers.impl_qpid:QpidDriver"},{"line_number":33,"context_line":"    zmq \u003d oslo.messaging._drivers.impl_zmq:ZmqDriver"},{"line_number":34,"context_line":"    unix \u003d oslo.messaging._drivers.impl_unix:UnixDriver"},{"line_number":35,"context_line":"    punix \u003d oslo.messaging._drivers.impl_unix:UnixDriver"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    # To avoid confusion"},{"line_number":38,"context_line":"    kombu \u003d oslo.messaging._drivers.impl_rabbit:RabbitDriver"}],"source_content_type":"text/x-ttcn-cfg","patch_set":5,"id":"9ad9bd40_32aa1171","line":35,"in_reply_to":"AAAAXX%2F%2Fvsc%3D","updated":"2014-04-30 10:38:39.000000000","message":"In order to support active/passive connection.","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"}],"tests/test_notifier_logger.py":[{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"9dc4290f489c5a6c2315400c78619e29872c9172","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import os"},{"line_number":19,"context_line":"import sys"},{"line_number":20,"context_line":"try:"},{"line_number":21,"context_line":"    import thread"},{"line_number":22,"context_line":"except ImportError:"},{"line_number":23,"context_line":"    thread \u003d None"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAW3%2F%2F5rA%3D","line":21,"updated":"2014-04-09 15:59:13.000000000","message":"why you change this back to use thread ?  Module thread is rename with _thread in python  3","commit_id":"a9ac8b5ada828681c98111d37a3188a8250b0f06"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"ec25472c962537454f217f0adc7e91180aa80428","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import os"},{"line_number":19,"context_line":"import sys"},{"line_number":20,"context_line":"try:"},{"line_number":21,"context_line":"    import thread"},{"line_number":22,"context_line":"except ImportError:"},{"line_number":23,"context_line":"    thread \u003d None"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXH%2F%2F2mY%3D","line":21,"in_reply_to":"AAAAW3%2F%2F5rA%3D","updated":"2014-04-18 17:17:12.000000000","message":"With eventlet.patcher.monkey_patch(\"thread\"), the those tests fails.\nAlthough this file doesn\u0027t monkey patch, but the tests I added does monkey_patch().\nHmm Is there python 2/3 compatible way to do that?\nMaybey if eventlet.patcher.is_monkey_patcher(\"thread\")  in get_thread_indent?","commit_id":"a9ac8b5ada828681c98111d37a3188a8250b0f06"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"28f417a4d503797c0a8962e3ca1d7fd0c9879a33","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import os"},{"line_number":19,"context_line":"import sys"},{"line_number":20,"context_line":"try:"},{"line_number":21,"context_line":"    import thread"},{"line_number":22,"context_line":"except ImportError:"},{"line_number":23,"context_line":"    thread \u003d None"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXH%2F%2FLaA%3D","line":21,"in_reply_to":"AAAAXH%2F%2F2mY%3D","updated":"2014-04-23 14:29:11.000000000","message":"six.moves._thread ?  see  https://pythonhosted.org/six/#module-six.moves","commit_id":"a9ac8b5ada828681c98111d37a3188a8250b0f06"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"1d6f4b62206a15b73273a602bf4a04735ecbaf31","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import os"},{"line_number":19,"context_line":"import sys"},{"line_number":20,"context_line":"try:"},{"line_number":21,"context_line":"    import thread"},{"line_number":22,"context_line":"except ImportError:"},{"line_number":23,"context_line":"    thread \u003d None"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXX%2F%2FwSk%3D","line":21,"in_reply_to":"AAAAXH%2F%2FLaA%3D","updated":"2014-04-28 08:32:23.000000000","message":"Done","commit_id":"a9ac8b5ada828681c98111d37a3188a8250b0f06"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"fcd56901a2b6ffde9ba0855524d1d43d0088bb95","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from oslo import messaging"},{"line_number":26,"context_line":"from oslo.messaging.openstack.common import timeutils"},{"line_number":27,"context_line":"from six.moves import _thread"},{"line_number":28,"context_line":"from tests import test_notifier"},{"line_number":29,"context_line":"from tests import utils as test_utils"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAXX%2F%2FvuE%3D","line":27,"updated":"2014-04-28 09:42:44.000000000","message":"unrelated changes","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"}],"tests/test_unix.py":[{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"9dc4290f489c5a6c2315400c78619e29872c9172","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            received \u003d server_listener.poll()"},{"line_number":170,"context_line":"            self.assertIsNotNone(received)"},{"line_number":171,"context_line":"            self.assertEqual(received.ctxt, self.ctxt)"},{"line_number":172,"context_line":"            self.assertEqual(received.message, {\u0027tx_id\u0027: i})"},{"line_number":173,"context_line":"            msgs.append(received)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        # reply in reverse, except reply to the first guy second from last"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAW3%2F%2F5n0%3D","line":172,"updated":"2014-04-09 15:59:13.000000000","message":"the order of  parameters self.assertEqual  is (expected, actual)","commit_id":"a9ac8b5ada828681c98111d37a3188a8250b0f06"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"ec25472c962537454f217f0adc7e91180aa80428","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            received \u003d server_listener.poll()"},{"line_number":170,"context_line":"            self.assertIsNotNone(received)"},{"line_number":171,"context_line":"            self.assertEqual(received.ctxt, self.ctxt)"},{"line_number":172,"context_line":"            self.assertEqual(received.message, {\u0027tx_id\u0027: i})"},{"line_number":173,"context_line":"            msgs.append(received)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        # reply in reverse, except reply to the first guy second from last"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXH%2F%2FolA%3D","line":172,"in_reply_to":"AAAAW3%2F%2F5n0%3D","updated":"2014-04-18 17:17:12.000000000","message":"Done","commit_id":"a9ac8b5ada828681c98111d37a3188a8250b0f06"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"fcd56901a2b6ffde9ba0855524d1d43d0088bb95","unresolved":false,"context_lines":[{"line_number":31,"context_line":"from tests import utils as test_utils"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"eventlet.monkey_patch()"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"load_tests \u003d testscenarios.load_tests_apply_scenarios"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAXX%2F%2Fvs4%3D","line":34,"updated":"2014-04-28 09:42:44.000000000","message":"All tests have been written without eventlet, this perhaps break many assumption, because some IO that currently block, will now unblocked.\n\nwe must avoid the global monkey patching","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"abcb324ac2aa92f7222dc3411abe2aeb61e458f9","unresolved":false,"context_lines":[{"line_number":31,"context_line":"from tests import utils as test_utils"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"eventlet.monkey_patch()"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"load_tests \u003d testscenarios.load_tests_apply_scenarios"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad9bd40_b23aa134","line":34,"in_reply_to":"AAAAXX%2F%2Fvs4%3D","updated":"2014-04-30 10:38:39.000000000","message":"I would say that such code is broken in thread synchronization from the beginning.","commit_id":"ca7e8bd95b6bdad4dde0abccff961ef5266283bf"}]}
