)]}'
{"ceilometerclient/client.py":[{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"44b48246fbc88eda35ff19e6bc7b370bc300a750","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        token \u003d self.opts.get(\u0027token\u0027) or self.opts.get(\u0027auth_token\u0027)"},{"line_number":156,"context_line":"        endpoint \u003d self.opts.get(\u0027endpoint\u0027)"},{"line_number":157,"context_line":"        if not (token and endpoint):"},{"line_number":158,"context_line":"            project_id \u003d self.opts.get(\u0027project_id\u0027) \\"},{"line_number":159,"context_line":"                or self.opts.get(\u0027tenant_id\u0027)"},{"line_number":160,"context_line":"            project_name \u003d (self.opts.get(\u0027project_name\u0027) or"},{"line_number":161,"context_line":"                            self.opts.get(\u0027tenant_name\u0027))"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_3d1e64bc","line":158,"updated":"2014-11-27 11:17:31.000000000","message":"I would be great if you remove backslash and use parentheses here.","commit_id":"9c5294b4e5e06a875306aaeffbf803fd186a3de3"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"75f5dd51adc29c859cda9d0e7fa992cc8c58cd1e","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        token \u003d self.opts.get(\u0027token\u0027) or self.opts.get(\u0027auth_token\u0027)"},{"line_number":156,"context_line":"        endpoint \u003d self.opts.get(\u0027endpoint\u0027)"},{"line_number":157,"context_line":"        if not (token and endpoint):"},{"line_number":158,"context_line":"            project_id \u003d self.opts.get(\u0027project_id\u0027) \\"},{"line_number":159,"context_line":"                or self.opts.get(\u0027tenant_id\u0027)"},{"line_number":160,"context_line":"            project_name \u003d (self.opts.get(\u0027project_name\u0027) or"},{"line_number":161,"context_line":"                            self.opts.get(\u0027tenant_name\u0027))"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_4e18d475","line":158,"in_reply_to":"5a890539_3d1e64bc","updated":"2014-11-27 12:24:32.000000000","message":"will be done,","commit_id":"9c5294b4e5e06a875306aaeffbf803fd186a3de3"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"836bda2d4c46f7af7923b6ccba239c3dd24faf36","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        super(AuthPlugin, self).__init__(auth_system, **kwargs)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def _do_authenticate(self, http_client):"},{"line_number":155,"context_line":"        token \u003d self.opts.get(\u0027token\u0027) or self.opts.get(\u0027auth_token\u0027)"},{"line_number":156,"context_line":"        endpoint \u003d self.opts.get(\u0027endpoint\u0027)"},{"line_number":157,"context_line":"        if not (token and endpoint):"},{"line_number":158,"context_line":"            project_id \u003d (self.opts.get(\u0027project_id\u0027) or"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_e1b79338","line":155,"updated":"2014-12-01 16:56:39.000000000","message":"Why are you authenticate using the auth_token? Token is passed by the actor making the request instead of the other credentials (e.g. username and password). The auth_token is what Keystone returns if the credential or token is valid. I think here you are wrongly mixing things up,,,","commit_id":"1387492fd0ced2288c4c852e06e192bf7d3ffa95"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"566c8c6d1590973fee236a55dbc0d559c9d32cb5","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        super(AuthPlugin, self).__init__(auth_system, **kwargs)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def _do_authenticate(self, http_client):"},{"line_number":155,"context_line":"        token \u003d self.opts.get(\u0027token\u0027) or self.opts.get(\u0027auth_token\u0027)"},{"line_number":156,"context_line":"        endpoint \u003d self.opts.get(\u0027endpoint\u0027)"},{"line_number":157,"context_line":"        if not (token and endpoint):"},{"line_number":158,"context_line":"            project_id \u003d (self.opts.get(\u0027project_id\u0027) or"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_e99a19c4","line":155,"in_reply_to":"5a890539_e1b79338","updated":"2014-12-01 17:30:55.000000000","message":"I think you\u0027re missing the point\n\nauth_token is different with token in Keystoneclient, but they are same in Ceilometerclient. Note that it is just an attribute of AuthPlugin which inherits from apiclient.auth.AuthPlugin, it is a value we assign, not returned by Keystone. Ceilometerclient v1.0.10 uses this option as token, after implemented apiclient in v1.0.11, this is remained for backward compatibility, you can see opt_names in AuthPlugin in L143\n\nThe problem is that, AuthPlugin enables user to assign a CLI option --os-auth-token and want to use it as --os-token, but failed to handle it\n\nThis patch will fix this issue\n\nIf we don\u0027t want backward compatibility (?), then we should remove auth_token option defined in AuthPlugin. I don\u0027t want this, so I have to get token by `get(\u0027token\u0027) or get(\u0027auth_token\u0027)` to handle both scenarios.\n\nThanks","commit_id":"1387492fd0ced2288c4c852e06e192bf7d3ffa95"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"42a07261876302a323686ca8d2d848d039832b84","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        :raises: AuthPluginOptionsMissing"},{"line_number":197,"context_line":"        \"\"\""},{"line_number":198,"context_line":"        missing \u003d not ((self.opts.get(\u0027auth_token\u0027) and"},{"line_number":199,"context_line":"                        self.opts.get(\u0027endpoint\u0027)) or"},{"line_number":200,"context_line":"                       (self.opts.get(\u0027username\u0027)"},{"line_number":201,"context_line":"                        and self.opts.get(\u0027password\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_9c5abef0","line":198,"updated":"2014-12-01 14:15:36.000000000","message":"this is logically different. i assume it could still be \u0027token\u0027 at any given point no? considering we\u0027re looking  at \u0027token\u0027 in a lot of different places.","commit_id":"1387492fd0ced2288c4c852e06e192bf7d3ffa95"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"a88ae202ebc1151e341b396986db278daa769d60","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        :raises: AuthPluginOptionsMissing"},{"line_number":197,"context_line":"        \"\"\""},{"line_number":198,"context_line":"        missing \u003d not ((self.opts.get(\u0027auth_token\u0027) and"},{"line_number":199,"context_line":"                        self.opts.get(\u0027endpoint\u0027)) or"},{"line_number":200,"context_line":"                       (self.opts.get(\u0027username\u0027)"},{"line_number":201,"context_line":"                        and self.opts.get(\u0027password\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_8684250c","line":198,"in_reply_to":"5a890539_9c5abef0","updated":"2014-12-01 16:45:39.000000000","message":"Since AuthPlugin has registered auth_token as well, I think maybe \n\n    self.opts.get(\u0027token\u0027) or self.opts.get(\u0027auth_token\u0027)\n\nis the final result, with a bit backward compatibility...","commit_id":"1387492fd0ced2288c4c852e06e192bf7d3ffa95"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"a88ae202ebc1151e341b396986db278daa769d60","unresolved":false,"context_lines":[{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        if missing:"},{"line_number":207,"context_line":"            missing_opts \u003d []"},{"line_number":208,"context_line":"            opts \u003d [\u0027token\u0027, \u0027endpoint\u0027, \u0027username\u0027, \u0027password\u0027, \u0027auth_url\u0027,"},{"line_number":209,"context_line":"                    \u0027tenant_id\u0027, \u0027tenant_name\u0027]"},{"line_number":210,"context_line":"            for opt in opts:"},{"line_number":211,"context_line":"                if not self.opts.get(opt):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_06ecb5ba","line":208,"updated":"2014-12-01 16:45:39.000000000","message":"here we will not print auth_token, since we\u0027ll migrate to token option.","commit_id":"1387492fd0ced2288c4c852e06e192bf7d3ffa95"}],"ceilometerclient/shell.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"42a07261876302a323686ca8d2d848d039832b84","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def parse_args(self, argv):"},{"line_number":156,"context_line":"        # Parse args once to find version"},{"line_number":157,"context_line":"        self.auth_plugin \u003d ceiloclient.AuthPlugin(argv)"},{"line_number":158,"context_line":"        parser \u003d self.get_base_parser()"},{"line_number":159,"context_line":"        (options, args) \u003d parser.parse_known_args(argv)"},{"line_number":160,"context_line":"        self.auth_plugin.parse_opts(options)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_bcdbfa7b","side":"PARENT","line":157,"updated":"2014-12-01 14:15:36.000000000","message":"why is this changing?","commit_id":"d8c15a967b638f6c1099172724ebb8018f9ff460"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"a88ae202ebc1151e341b396986db278daa769d60","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def parse_args(self, argv):"},{"line_number":156,"context_line":"        # Parse args once to find version"},{"line_number":157,"context_line":"        self.auth_plugin \u003d ceiloclient.AuthPlugin(argv)"},{"line_number":158,"context_line":"        parser \u003d self.get_base_parser()"},{"line_number":159,"context_line":"        (options, args) \u003d parser.parse_known_args(argv)"},{"line_number":160,"context_line":"        self.auth_plugin.parse_opts(options)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_064835b2","side":"PARENT","line":157,"in_reply_to":"5a890539_bcdbfa7b","updated":"2014-12-01 16:45:39.000000000","message":"Because AuthPlugin.__init__(auth_system\u003dNone, **kwargs), so we will parse sys.argv[1:] to auth_system, which is wrong, I cannot image auth_system is just a tuple of string, if it does have some usage. However, I don\u0027t get the point why apiclient.auth.AuthPlugin.__init__ has that argument, it doesn\u0027t use it either....","commit_id":"d8c15a967b638f6c1099172724ebb8018f9ff460"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"f0ae2fe42a7af46b44a901963b98b0020a1d5e2c","unresolved":false,"context_lines":[{"line_number":200,"context_line":"            return 0"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        if not ((self.auth_plugin.opts.get(\u0027token\u0027)"},{"line_number":203,"context_line":"                 or self.auth_plugin.opts.get(\u0027auth_token\u0027))"},{"line_number":204,"context_line":"                and self.auth_plugin.opts[\u0027endpoint\u0027]):"},{"line_number":205,"context_line":"            if not self.auth_plugin.opts[\u0027username\u0027]:"},{"line_number":206,"context_line":"                raise exc.CommandError(\"You must provide a username via \""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_cd568206","line":203,"range":{"start_line":203,"start_character":47,"end_line":203,"end_character":57},"updated":"2014-12-16 18:21:58.000000000","message":"seems inconsistent, why do we need to check both token opts here but not both endpoint. seems like we should be both opt for token and endpoint or only token and endpoint","commit_id":"1b002afeee017288f102bbd523bcdd136d22c7f2"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"de4c7a69315ab05371a3df1fa26c40a3d8207a9d","unresolved":false,"context_lines":[{"line_number":200,"context_line":"            return 0"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        if not ((self.auth_plugin.opts.get(\u0027token\u0027)"},{"line_number":203,"context_line":"                 or self.auth_plugin.opts.get(\u0027auth_token\u0027))"},{"line_number":204,"context_line":"                and self.auth_plugin.opts[\u0027endpoint\u0027]):"},{"line_number":205,"context_line":"            if not self.auth_plugin.opts[\u0027username\u0027]:"},{"line_number":206,"context_line":"                raise exc.CommandError(\"You must provide a username via \""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_8c2107b8","line":203,"in_reply_to":"3a961159_04595c5b","updated":"2015-01-09 14:00:19.000000000","message":"got it","commit_id":"1b002afeee017288f102bbd523bcdd136d22c7f2"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"f9d25f4d835f9d947c961ea169e2bb45e9a95257","unresolved":false,"context_lines":[{"line_number":200,"context_line":"            return 0"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        if not ((self.auth_plugin.opts.get(\u0027token\u0027)"},{"line_number":203,"context_line":"                 or self.auth_plugin.opts.get(\u0027auth_token\u0027))"},{"line_number":204,"context_line":"                and self.auth_plugin.opts[\u0027endpoint\u0027]):"},{"line_number":205,"context_line":"            if not self.auth_plugin.opts[\u0027username\u0027]:"},{"line_number":206,"context_line":"                raise exc.CommandError(\"You must provide a username via \""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_04595c5b","line":203,"in_reply_to":"3a961159_cd568206","updated":"2014-12-26 10:14:12.000000000","message":"@gordon\n\nbecause token and auth_token are both accepted by auth_plugin, so we need to check both\n\n--ceilometer-url will be stored into args.os_endpoint, which will be stored into auth_plugin.opts[\u0027endpoint\u0027], --os-endpoint will be stored into auth_plugin.opts[\u0027endpoint\u0027] as well, so we only need to check one","commit_id":"1b002afeee017288f102bbd523bcdd136d22c7f2"}],"ceilometerclient/tests/test_shell.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"f27f0337bd504e6fe0c663dfcafada339be01d2e","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        args, kwargs \u003d mocked.call_args"},{"line_number":182,"context_line":"        self.assertEqual(\u0027http://fake-url\u0027, kwargs.get(\u0027endpoint\u0027))"},{"line_number":183,"context_line":"        self.assertEqual(\u0027fake-token\u0027, (kwargs.get(\u0027token\u0027) or"},{"line_number":184,"context_line":"                                        kwargs.get(\u0027auth_token\u0027)))"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def test_endpoint_and_token(self):"},{"line_number":187,"context_line":"        self._test_endpoint_and_token(\u0027--os-auth-token\u0027, \u0027--ceilometer-url\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_89abba86","line":184,"updated":"2014-12-04 23:37:01.000000000","message":"You may want to check the exact arg the data is expected.\n\n self.assertEqual(\u0027fake-token\u0027, kwargs.get(token_name[5:]))","commit_id":"1b328a25f42636a92d82998f35aaedd2bf7dbcc8"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"e404028a505d2483ec3d0a35660b50756ebc24b4","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        args, kwargs \u003d mocked.call_args"},{"line_number":182,"context_line":"        self.assertEqual(\u0027http://fake-url\u0027, kwargs.get(\u0027endpoint\u0027))"},{"line_number":183,"context_line":"        self.assertEqual(\u0027fake-token\u0027, (kwargs.get(\u0027token\u0027) or"},{"line_number":184,"context_line":"                                        kwargs.get(\u0027auth_token\u0027)))"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def test_endpoint_and_token(self):"},{"line_number":187,"context_line":"        self._test_endpoint_and_token(\u0027--os-auth-token\u0027, \u0027--ceilometer-url\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_301afd18","line":184,"in_reply_to":"5a890539_89abba86","updated":"2014-12-06 03:08:09.000000000","message":"@guang-yee\n\nyes, that is more clean, thanks, but may would not needed any more after address Lena Novokshonova\u0027s comment","commit_id":"1b328a25f42636a92d82998f35aaedd2bf7dbcc8"}],"ceilometerclient/v2/client.py":[{"author":{"_account_id":13273,"name":"Lena Novokshonova","email":"enovokshonova@mirantis.com","username":"enovokshonova"},"change_message_id":"18adea590bb7527316f00ce297ee07aae5619e83","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        \"\"\"Initialize a new client for the Ceilometer v2 API.\"\"\""},{"line_number":48,"context_line":"        kwargs[\u0027token\u0027] \u003d kwargs.get(\u0027token\u0027) or kwargs.get(\u0027auth_token\u0027)"},{"line_number":49,"context_line":"        self.auth_plugin \u003d kwargs.get(\u0027auth_plugin\u0027) \\"},{"line_number":50,"context_line":"            or ceiloclient.get_auth_plugin(*args, **kwargs)"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_4cdf120d","line":48,"updated":"2014-12-05 09:39:34.000000000","message":"May you explain, please, why this line is needed?","commit_id":"1b328a25f42636a92d82998f35aaedd2bf7dbcc8"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"e404028a505d2483ec3d0a35660b50756ebc24b4","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        \"\"\"Initialize a new client for the Ceilometer v2 API.\"\"\""},{"line_number":48,"context_line":"        kwargs[\u0027token\u0027] \u003d kwargs.get(\u0027token\u0027) or kwargs.get(\u0027auth_token\u0027)"},{"line_number":49,"context_line":"        self.auth_plugin \u003d kwargs.get(\u0027auth_plugin\u0027) \\"},{"line_number":50,"context_line":"            or ceiloclient.get_auth_plugin(*args, **kwargs)"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_10798130","line":48,"in_reply_to":"5a890539_4cdf120d","updated":"2014-12-06 03:08:09.000000000","message":"I add this because auth_token will passed to this __init__ by client.Client, which is assigned by https://github.com/openstack/python-ceilometerclient/blob/master/ceilometerclient/shell.py#L236, \n\nI put it here because I think here is more down level comparing to client.Client, which can avoid users use this __init__ directly but pass auth_token, \n\nAfter check the old code, I think you are right, I checked the v1.0.10, we accept \u0027token\u0027 but not auth_token, so I will move this line to client.Client\n\nBut I\u0027m still a bit worry about user may pass auth_token to this, since they notice auth_token can be used in CLI, but it seems too much thoughts :)\n\nthanks!","commit_id":"1b328a25f42636a92d82998f35aaedd2bf7dbcc8"},{"author":{"_account_id":13273,"name":"Lena Novokshonova","email":"enovokshonova@mirantis.com","username":"enovokshonova"},"change_message_id":"ee793ed8892467ddbd90d31697dc5d169ed35015","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    \"\"\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        \"\"\"Initialize a new client for the Ceilometer v2 API.\"\"\""},{"line_number":48,"context_line":"        self.auth_plugin \u003d kwargs.get(\u0027auth_plugin\u0027) \\"},{"line_number":49,"context_line":"            or ceiloclient.get_auth_plugin(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_72d57e42","side":"PARENT","line":46,"updated":"2014-12-08 09:27:31.000000000","message":"nit: I think it will be better if you don\u0027t make changes in this file.","commit_id":"27a810146b2e5503a7b40e1ef2342005bdfd9bd2"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"c435433ea6a789343a1458f10a611f894678f492","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    \"\"\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        \"\"\"Initialize a new client for the Ceilometer v2 API.\"\"\""},{"line_number":48,"context_line":"        self.auth_plugin \u003d kwargs.get(\u0027auth_plugin\u0027) \\"},{"line_number":49,"context_line":"            or ceiloclient.get_auth_plugin(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_2fc4683f","side":"PARENT","line":46,"in_reply_to":"3a961159_72d57e42","updated":"2014-12-08 15:01:36.000000000","message":"because I modify this file in previous patch set, and the doc string should not have a blank line with method def statement IIUC, so I keep this change, even though it is not related to the bug, but it increases the code style quality and does no harm to other code (only a blank line is removed and seems good to me)\n\nBut if you insist, I will remove it\n\nThanks for your careful review!","commit_id":"27a810146b2e5503a7b40e1ef2342005bdfd9bd2"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"a56f89f419c1e1a917db29427a6d27f913998041","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":48,"context_line":"        \"\"\"Initialize a new client for the Ceilometer v2 API.\"\"\""},{"line_number":49,"context_line":"        self.auth_plugin \u003d kwargs.get(\u0027auth_plugin\u0027) \\"},{"line_number":50,"context_line":"            or ceiloclient.get_auth_plugin(*args, **kwargs)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        timeout \u003d kwargs.get(\u0027timeout\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_bbfd1a3d","line":49,"updated":"2015-01-09 12:01:07.000000000","message":"Not belong to your patch, but it seems that line break could be improved with parentheses instead of backslash.","commit_id":"2dd894c7117d2d8ebf0f7ae365de49b3b3b1a078"}]}
