)]}'
{"oslo/messaging/transport.py":[{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"f6e0d2b96eb31361e0e9db5fe4d4d57328ceee36","unresolved":false,"context_lines":[{"line_number":231,"context_line":"    \"\"\""},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    def __init__(self, conf, transport\u003dNone, virtual_host\u003dNone, hosts\u003dNone,"},{"line_number":234,"context_line":"                 control_exchange\u003dNone):"},{"line_number":235,"context_line":"        self.conf \u003d conf"},{"line_number":236,"context_line":"        self.conf.register_opts(_transport_opts)"},{"line_number":237,"context_line":"        self._transport \u003d transport"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2BTe8%3D","line":234,"updated":"2013-11-27 16:18:31.000000000","message":"Since `control_exchange` is optional and part of the URL options, I\u0027d prefer to have an `options` kwargs that gets a dict. Most of the options are backend specific and even though there are some that aren\u0027t, we should treat them all as optional. \n\nThoughts?","commit_id":"0a7a51e4b0c81e73b8d02e7538c26c5ab89e5f62"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"05dd739a3bf83ccf33081255a305dbd711e7954c","unresolved":false,"context_lines":[{"line_number":231,"context_line":"    \"\"\""},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    def __init__(self, conf, transport\u003dNone, virtual_host\u003dNone, hosts\u003dNone,"},{"line_number":234,"context_line":"                 control_exchange\u003dNone):"},{"line_number":235,"context_line":"        self.conf \u003d conf"},{"line_number":236,"context_line":"        self.conf.register_opts(_transport_opts)"},{"line_number":237,"context_line":"        self._transport \u003d transport"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2BS7Q%3D","line":234,"in_reply_to":"AAAATn%2F%2BTCU%3D","updated":"2013-11-27 18:37:04.000000000","message":"Yes but it is also part of the transport URL options - which are optional - and we won\u0027t have a kwarg for each option passed as query parameter in the transport URL.\n\nMy suggestion, again, is to have an `options` kwarg that accepts a dict, which will expose those options.","commit_id":"0a7a51e4b0c81e73b8d02e7538c26c5ab89e5f62"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"c9785b092109e2d5d534af8d67724e67a0edade8","unresolved":false,"context_lines":[{"line_number":231,"context_line":"    \"\"\""},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    def __init__(self, conf, transport\u003dNone, virtual_host\u003dNone, hosts\u003dNone,"},{"line_number":234,"context_line":"                 control_exchange\u003dNone):"},{"line_number":235,"context_line":"        self.conf \u003d conf"},{"line_number":236,"context_line":"        self.conf.register_opts(_transport_opts)"},{"line_number":237,"context_line":"        self._transport \u003d transport"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2BTCU%3D","line":234,"in_reply_to":"AAAATn%2F%2BTR0%3D","updated":"2013-11-27 18:05:34.000000000","message":"Well it is optional, its default value is None. No?","commit_id":"0a7a51e4b0c81e73b8d02e7538c26c5ab89e5f62"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"f23885a132cde8bece2b3b6a7c819ec4504871d7","unresolved":false,"context_lines":[{"line_number":231,"context_line":"    \"\"\""},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    def __init__(self, conf, transport\u003dNone, virtual_host\u003dNone, hosts\u003dNone,"},{"line_number":234,"context_line":"                 control_exchange\u003dNone):"},{"line_number":235,"context_line":"        self.conf \u003d conf"},{"line_number":236,"context_line":"        self.conf.register_opts(_transport_opts)"},{"line_number":237,"context_line":"        self._transport \u003d transport"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2BTR0%3D","line":234,"in_reply_to":"AAAATn%2F%2BTcw%3D","updated":"2013-11-27 17:00:37.000000000","message":"I said \u0027most of the options\u0027. I agree that control_exchange is not backend specific but it should be treated as optional, IMHO.","commit_id":"0a7a51e4b0c81e73b8d02e7538c26c5ab89e5f62"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"55f1e270c3f703c3acb7656a13e21799885baf90","unresolved":false,"context_lines":[{"line_number":231,"context_line":"    \"\"\""},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    def __init__(self, conf, transport\u003dNone, virtual_host\u003dNone, hosts\u003dNone,"},{"line_number":234,"context_line":"                 control_exchange\u003dNone):"},{"line_number":235,"context_line":"        self.conf \u003d conf"},{"line_number":236,"context_line":"        self.conf.register_opts(_transport_opts)"},{"line_number":237,"context_line":"        self._transport \u003d transport"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2BTcw%3D","line":234,"in_reply_to":"AAAATn%2F%2BTe8%3D","updated":"2013-11-27 16:24:35.000000000","message":"control_exchange option is declared as part of this file, so to me it\u0027s not backend specific at all.","commit_id":"0a7a51e4b0c81e73b8d02e7538c26c5ab89e5f62"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"05a0f63e4d37de909db5c52506be30a59b8d442f","unresolved":false,"context_lines":[{"line_number":354,"context_line":"        if \u0027?\u0027 in url.path or url.query:"},{"line_number":355,"context_line":"            raise InvalidTransportURL(url.geturl(),"},{"line_number":356,"context_line":"                                      \"Cannot comply with query string in \""},{"line_number":357,"context_line":"                                      \"transport URL\")"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"        virtual_host \u003d None"},{"line_number":360,"context_line":"        if url.path.startswith(\u0027/\u0027):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BMeE%3D","side":"PARENT","line":357,"updated":"2013-11-29 11:07:34.000000000","message":"This came from Nova - see I6b18f7643ab694f5ff34206b80865c40b1ec2680\n\nIt\u0027s a bit weird that we\u0027re just dropping it ... but if we want to explicitly reject specific query parameters we don\u0027t support, I think we\u0027d need to it differently ... probably at the driver level","commit_id":"5912b58233a795d5c6e6a377441c609f15634cb0"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"2f3396bd0344fbb3388690118ce7cb610996605b","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    and can either be passed as a string or a TransportURL object."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    :param conf: the user configuration, or None"},{"line_number":147,"context_line":"    :type conf: cfg.ConfigOpts"},{"line_number":148,"context_line":"    :param url: a transport URL"},{"line_number":149,"context_line":"    :type url: str or TransportURL"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BMdw%3D","line":146,"updated":"2013-11-29 11:15:05.000000000","message":"\"or None\" is a lie, clearly - none of the drivers support it","commit_id":"7e12ee3c7fb174826a98f7c39b5b96c2a71c73a1"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"5a5f4df65a8b9b65caa4e277ae0cf42d73500cbb","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        url \u003d parsed"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    if url.options and \u0027control_exchange\u0027 in url.options:"},{"line_number":166,"context_line":"        control_exchange \u003d url.options[\u0027control_exchange\u0027][-1]"},{"line_number":167,"context_line":"    elif conf:"},{"line_number":168,"context_line":"        control_exchange \u003d conf.control_exchange"},{"line_number":169,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BMmI%3D","line":166,"updated":"2013-11-29 10:35:03.000000000","message":"Why is [-1] needed here? Could you add a note explaining that?","commit_id":"7e12ee3c7fb174826a98f7c39b5b96c2a71c73a1"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"2f3396bd0344fbb3388690118ce7cb610996605b","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        url \u003d parsed"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    if url.options and \u0027control_exchange\u0027 in url.options:"},{"line_number":166,"context_line":"        control_exchange \u003d url.options[\u0027control_exchange\u0027][-1]"},{"line_number":167,"context_line":"    elif conf:"},{"line_number":168,"context_line":"        control_exchange \u003d conf.control_exchange"},{"line_number":169,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BMdo%3D","line":166,"in_reply_to":"AAAATn%2F%2BMjc%3D","updated":"2013-11-29 11:15:05.000000000","message":"Hmm, that is a bit annoying - we can have multiple values per query parameter ? That will be quite surprising to API users\n\n(Just grumbling ... I don\u0027t see an obvious way to avoid it :)","commit_id":"7e12ee3c7fb174826a98f7c39b5b96c2a71c73a1"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"7b2c8d86d3c69838d111a50691c774f3648657a1","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        url \u003d parsed"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    if url.options and \u0027control_exchange\u0027 in url.options:"},{"line_number":166,"context_line":"        control_exchange \u003d url.options[\u0027control_exchange\u0027][-1]"},{"line_number":167,"context_line":"    elif conf:"},{"line_number":168,"context_line":"        control_exchange \u003d conf.control_exchange"},{"line_number":169,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BMjc%3D","line":166,"in_reply_to":"AAAATn%2F%2BMmI%3D","updated":"2013-11-29 10:48:31.000000000","message":"Sure.","commit_id":"7e12ee3c7fb174826a98f7c39b5b96c2a71c73a1"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"05a0f63e4d37de909db5c52506be30a59b8d442f","unresolved":false,"context_lines":[{"line_number":231,"context_line":"    \"\"\""},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    def __init__(self, conf, transport\u003dNone, virtual_host\u003dNone, hosts\u003dNone,"},{"line_number":234,"context_line":"                 options\u003dNone):"},{"line_number":235,"context_line":"        self.conf \u003d conf"},{"line_number":236,"context_line":"        self.conf.register_opts(_transport_opts)"},{"line_number":237,"context_line":"        self._transport \u003d transport"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BMfU%3D","line":234,"updated":"2013-11-29 11:07:34.000000000","message":"Adding query parameter support to TransportURL is needed ... I\u0027d make it a standalone change, though\n\nI think I\u0027d be inclined to call the attribute params or query_params though","commit_id":"7e12ee3c7fb174826a98f7c39b5b96c2a71c73a1"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"6263d22474bbd7edd38a83fc858f2fd81f7e6381","unresolved":false,"context_lines":[{"line_number":231,"context_line":"    \"\"\""},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    def __init__(self, conf, transport\u003dNone, virtual_host\u003dNone, hosts\u003dNone,"},{"line_number":234,"context_line":"                 options\u003dNone):"},{"line_number":235,"context_line":"        self.conf \u003d conf"},{"line_number":236,"context_line":"        self.conf.register_opts(_transport_opts)"},{"line_number":237,"context_line":"        self._transport \u003d transport"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BMYY%3D","line":234,"in_reply_to":"AAAATn%2F%2BMbU%3D","updated":"2013-11-29 11:43:48.000000000","message":"Right, it\u0027s a URL - so are we talking about \"transport options\" or \"transport URL parameters\"\n\nI\u0027m thinking the latter, but I see your point too","commit_id":"7e12ee3c7fb174826a98f7c39b5b96c2a71c73a1"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"8a56140f8948445b2010913bdc28905caef4d1a2","unresolved":false,"context_lines":[{"line_number":231,"context_line":"    \"\"\""},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    def __init__(self, conf, transport\u003dNone, virtual_host\u003dNone, hosts\u003dNone,"},{"line_number":234,"context_line":"                 options\u003dNone):"},{"line_number":235,"context_line":"        self.conf \u003d conf"},{"line_number":236,"context_line":"        self.conf.register_opts(_transport_opts)"},{"line_number":237,"context_line":"        self._transport \u003d transport"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BMbU%3D","line":234,"in_reply_to":"AAAATn%2F%2BMfU%3D","updated":"2013-11-29 11:22:51.000000000","message":"I didn\u0027t suggest params / query_params because I didn\u0027t want to bring those concepts into oslo.messaging considering the fact that these are indeed options that will be consumed by the transport, although this is the TransportURL class that we\u0027re talking about here.\n\nthoughts?","commit_id":"7e12ee3c7fb174826a98f7c39b5b96c2a71c73a1"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"5a5f4df65a8b9b65caa4e277ae0cf42d73500cbb","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        self.conf.register_opts(_transport_opts)"},{"line_number":237,"context_line":"        self._transport \u003d transport"},{"line_number":238,"context_line":"        self.virtual_host \u003d virtual_host"},{"line_number":239,"context_line":"        self.options \u003d options"},{"line_number":240,"context_line":"        if hosts is None:"},{"line_number":241,"context_line":"            self.hosts \u003d []"},{"line_number":242,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BMmU%3D","line":239,"updated":"2013-11-29 10:35:03.000000000","message":"What about setting it to an empty dict if options is None? We do this already for hosts.\n\nThis will make line 165 easier to implement:\n\n    control_exchange \u003d url.options.get(\u0027control_exchange\u0027, conf.control_exchange)","commit_id":"7e12ee3c7fb174826a98f7c39b5b96c2a71c73a1"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"7b2c8d86d3c69838d111a50691c774f3648657a1","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        self.conf.register_opts(_transport_opts)"},{"line_number":237,"context_line":"        self._transport \u003d transport"},{"line_number":238,"context_line":"        self.virtual_host \u003d virtual_host"},{"line_number":239,"context_line":"        self.options \u003d options"},{"line_number":240,"context_line":"        if hosts is None:"},{"line_number":241,"context_line":"            self.hosts \u003d []"},{"line_number":242,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BMjY%3D","line":239,"in_reply_to":"AAAATn%2F%2BMmU%3D","updated":"2013-11-29 10:48:31.000000000","message":"Done","commit_id":"7e12ee3c7fb174826a98f7c39b5b96c2a71c73a1"}]}
