)]}'
{"keystoneclient/access.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"3b186842d711cbbb51a3ba36443971c21e5fc6c5","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import datetime"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from keystoneclient import service_catalog"},{"line_number":21,"context_line":"from keystoneclient.openstack.common import timeutils"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# gap, in seconds, to determine whether the given token is about to expire"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2FPI8%3D","line":21,"updated":"2013-01-31 22:04:04.000000000","message":"nit: \u0027openstack\u0027 comes before \u0027service_catalog\u0027 (swap 20 and 21)","commit_id":"e10e234251da5173d5b804c1533468d8d23bbafb"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"c2a206a5ba48e350c3797ace435c25c4dfc2d0f9","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import datetime"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from keystoneclient import service_catalog"},{"line_number":21,"context_line":"from keystoneclient.openstack.common import timeutils"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# gap, in seconds, to determine whether the given token is about to expire"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2FOeo%3D","line":21,"in_reply_to":"AAAAM3%2F%2FPI8%3D","updated":"2013-02-01 09:30:12.000000000","message":"Done","commit_id":"e10e234251da5173d5b804c1533468d8d23bbafb"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"3b186842d711cbbb51a3ba36443971c21e5fc6c5","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        self.region_name \u003d kwargs.get(\u0027region_name\u0027)"},{"line_number":35,"context_line":"        if self.get(\u0027serviceCatalog\u0027):"},{"line_number":36,"context_line":"            self.service_catalog \u003d service_catalog.ServiceCatalog("},{"line_number":37,"context_line":"                self, region_name\u003dself.region_name)"},{"line_number":38,"context_line":"        else:"},{"line_number":39,"context_line":"            self.service_catalog \u003d None"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2FPIU%3D","line":37,"updated":"2013-01-31 22:04:04.000000000","message":"passing `self` here looks super suspicious by itself, but I assume you mean:\n\n  ServiceCatalog(resource_dict\u003dself, region_name\u003dself.region_name)\n\nCan you make it an explicit kwarg just for clarity ^","commit_id":"e10e234251da5173d5b804c1533468d8d23bbafb"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"c2a206a5ba48e350c3797ace435c25c4dfc2d0f9","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        self.region_name \u003d kwargs.get(\u0027region_name\u0027)"},{"line_number":35,"context_line":"        if self.get(\u0027serviceCatalog\u0027):"},{"line_number":36,"context_line":"            self.service_catalog \u003d service_catalog.ServiceCatalog("},{"line_number":37,"context_line":"                self, region_name\u003dself.region_name)"},{"line_number":38,"context_line":"        else:"},{"line_number":39,"context_line":"            self.service_catalog \u003d None"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2FOeg%3D","line":37,"in_reply_to":"AAAAM3%2F%2FPIU%3D","updated":"2013-02-01 09:30:12.000000000","message":"Done","commit_id":"e10e234251da5173d5b804c1533468d8d23bbafb"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0c61418f232786227f7459577133a042a473f5ca","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":32,"context_line":"        super(AccessInfo, self).__init__(*args, **kwargs)"},{"line_number":33,"context_line":"        self.region_name \u003d kwargs.get(\u0027region_name\u0027)"},{"line_number":34,"context_line":"        if self.get(\u0027serviceCatalog\u0027):"},{"line_number":35,"context_line":"            self.service_catalog \u003d service_catalog.ServiceCatalog("},{"line_number":36,"context_line":"                resource_dict\u003dself, region_name\u003dself.region_name)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B8lc%3D","line":33,"updated":"2013-02-13 19:43:03.000000000","message":"isn\u0027t this already available as self.get(\u0027region_name\u0027) since it would have been set by dict init? suggest remove this variable and use self.get(\u0027region_name\u0027).","commit_id":"d67c04a07e74abc2ffe77ba244271b432878b84c"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"599995ad5acbd87b27491c8a45ff284e10d05191","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":32,"context_line":"        super(AccessInfo, self).__init__(*args, **kwargs)"},{"line_number":33,"context_line":"        self.region_name \u003d kwargs.get(\u0027region_name\u0027)"},{"line_number":34,"context_line":"        if self.get(\u0027serviceCatalog\u0027):"},{"line_number":35,"context_line":"            self.service_catalog \u003d service_catalog.ServiceCatalog("},{"line_number":36,"context_line":"                resource_dict\u003dself, region_name\u003dself.region_name)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B7Dg%3D","line":33,"in_reply_to":"AAAAM3%2F%2B8lc%3D","updated":"2013-02-14 10:57:50.000000000","message":"Done","commit_id":"d67c04a07e74abc2ffe77ba244271b432878b84c"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"921ad42334e6e5c0f8a62ec4ab3e8f796fdda0df","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            self.service_catalog \u003d service_catalog.ServiceCatalog("},{"line_number":35,"context_line":"                resource_dict\u003dself, region_name\u003dself.get(\u0027region_name\u0027))"},{"line_number":36,"context_line":"        else:"},{"line_number":37,"context_line":"            self.service_catalog \u003d None"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def will_expire_soon(self, stale_duration\u003dNone):"},{"line_number":40,"context_line":"        \"\"\" Determines if expiration is about to occur."}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPH%2F%2Ffmg%3D","line":37,"updated":"2013-05-31 22:01:01.000000000","message":"Tested the patch with horizon and saw regression with this change.\n\nOn login, horizon gets an unscoped token first, then get the list of tenant and lastly get the scoped token using the tenants id.\n\nHorizon uses the method service_catalog.get_token() from the unscoped token to perform further processing after the first step.\n\nUnscoped token currently does not have \u0027serviceCatalog\u0027 in it, so in this case the service_catalog will be set to None and causes the regression to Horizon.\n\nIt will probably cause the same problem for shell command here: https://github.com/openstack/python-keystoneclient/blob/master/keystoneclient/v2_0/shell.py#L511\n\nPerhaps we need to remove the if condition here and always create the service_catalog.","commit_id":"9f925f9f0c0ee0d82a1e052e4d3e6b116bb53331"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"05b43ba9f5d41f3cb1b001917821bc9fbc0b66b9","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            self.service_catalog \u003d service_catalog.ServiceCatalog("},{"line_number":35,"context_line":"                resource_dict\u003dself, region_name\u003dself.get(\u0027region_name\u0027))"},{"line_number":36,"context_line":"        else:"},{"line_number":37,"context_line":"            self.service_catalog \u003d None"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def will_expire_soon(self, stale_duration\u003dNone):"},{"line_number":40,"context_line":"        \"\"\" Determines if expiration is about to occur."}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPH%2F%2Fd7o%3D","line":37,"in_reply_to":"AAAAPH%2F%2Ffmg%3D","updated":"2013-06-03 08:38:24.000000000","message":"Done","commit_id":"9f925f9f0c0ee0d82a1e052e4d3e6b116bb53331"}],"keystoneclient/v2_0/client.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0c61418f232786227f7459577133a042a473f5ca","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        self.auth_tenant_id \u003d self.auth_ref.tenant_id"},{"line_number":157,"context_line":"        self.auth_user_id \u003d self.auth_ref.user_id"},{"line_number":158,"context_line":"        if not self.auth_tenant_id or not self.auth_user_id:"},{"line_number":159,"context_line":"            raise exceptions.AuthorizationFailure()"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def get_raw_token_from_identity_service(self, auth_url, username\u003dNone,"},{"line_number":162,"context_line":"                                            password\u003dNone, tenant_name\u003dNone,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B8RY%3D","line":159,"updated":"2013-02-13 19:43:03.000000000","message":"reviewer note: calling this function used to set self.service_catalog... is this a problem? No, because service_catalog is a property now.","commit_id":"d67c04a07e74abc2ffe77ba244271b432878b84c"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e9a315f14eff1a80dd369afc88d552b9e02f88e8","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            self.user_id \u003d self.auth_ref.user_id"},{"line_number":155,"context_line":"        # Save these since we have them and they\u0027ll be useful later"},{"line_number":156,"context_line":"        self.auth_tenant_id \u003d self.auth_ref.tenant_id"},{"line_number":157,"context_line":"        self.auth_user_id \u003d self.auth_ref.user_id"},{"line_number":158,"context_line":"        if not self.auth_tenant_id or not self.auth_user_id:"},{"line_number":159,"context_line":"            raise exceptions.AuthorizationFailure()"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2B6Zg%3D","line":157,"updated":"2013-02-14 17:42:19.000000000","message":"-1; i don\u0027t see why you need to make a copy of the values -- you already have a reference to them on self....","commit_id":"bdeb91f6fb2c0220e21d953bf316293df4dc3635"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"357c3f2b701794c6ec10eadf9f602a3db8c76e19","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            self.user_id \u003d self.auth_ref.user_id"},{"line_number":155,"context_line":"        # Save these since we have them and they\u0027ll be useful later"},{"line_number":156,"context_line":"        self.auth_tenant_id \u003d self.auth_ref.tenant_id"},{"line_number":157,"context_line":"        self.auth_user_id \u003d self.auth_ref.user_id"},{"line_number":158,"context_line":"        if not self.auth_tenant_id or not self.auth_user_id:"},{"line_number":159,"context_line":"            raise exceptions.AuthorizationFailure()"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Bzhs%3D","line":157,"in_reply_to":"AAAAM3%2F%2B1FM%3D","updated":"2013-02-18 21:54:40.000000000","message":"as far as i can tell, you\u0027re adding self.auth_tenant_id in this patch -- which is redundant with self.auth_ref.tenant_id\n\nside note -- i have a WIP up to deprecate self.auth_ref.tenant_id in favor of self.auth_ref.project_id","commit_id":"bdeb91f6fb2c0220e21d953bf316293df4dc3635"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"9d4ecf85dc13195bc3d260d36031653bb6a34f1a","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            self.user_id \u003d self.auth_ref.user_id"},{"line_number":155,"context_line":"        # Save these since we have them and they\u0027ll be useful later"},{"line_number":156,"context_line":"        self.auth_tenant_id \u003d self.auth_ref.tenant_id"},{"line_number":157,"context_line":"        self.auth_user_id \u003d self.auth_ref.user_id"},{"line_number":158,"context_line":"        if not self.auth_tenant_id or not self.auth_user_id:"},{"line_number":159,"context_line":"            raise exceptions.AuthorizationFailure()"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2B1FM%3D","line":157,"in_reply_to":"AAAAM3%2F%2B6Zg%3D","updated":"2013-02-18 10:16:25.000000000","message":"Not sure I follow you; do you prefer to remove these attributes or to use @property?\nRemoving these attributes will probably break compatibility.","commit_id":"bdeb91f6fb2c0220e21d953bf316293df4dc3635"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"83bb319ca0a43a067319b7110ba5c1ded1cb0e93","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            self.user_id \u003d self.auth_ref.user_id"},{"line_number":155,"context_line":"        # Save these since we have them and they\u0027ll be useful later"},{"line_number":156,"context_line":"        self.auth_tenant_id \u003d self.auth_ref.tenant_id"},{"line_number":157,"context_line":"        self.auth_user_id \u003d self.auth_ref.user_id"},{"line_number":158,"context_line":"        if not self.auth_tenant_id or not self.auth_user_id:"},{"line_number":159,"context_line":"            raise exceptions.AuthorizationFailure()"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAN3%2F%2F%2Bdo%3D","line":157,"in_reply_to":"AAAAM3%2F%2ByPw%3D","updated":"2013-03-04 20:48:11.000000000","message":"why keep them -- it\u0027s just a layer of indirection? why not just:\n\n  if not self.auth_ref.tenant_id or not self.auth_ref.user_id:\n    raise exceptions.AuthorizationFailure()","commit_id":"bdeb91f6fb2c0220e21d953bf316293df4dc3635"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"63af068f7c01e91c395ededa482eef04466a0fb8","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            self.user_id \u003d self.auth_ref.user_id"},{"line_number":155,"context_line":"        # Save these since we have them and they\u0027ll be useful later"},{"line_number":156,"context_line":"        self.auth_tenant_id \u003d self.auth_ref.tenant_id"},{"line_number":157,"context_line":"        self.auth_user_id \u003d self.auth_ref.user_id"},{"line_number":158,"context_line":"        if not self.auth_tenant_id or not self.auth_user_id:"},{"line_number":159,"context_line":"            raise exceptions.AuthorizationFailure()"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2ByPw%3D","line":157,"in_reply_to":"AAAAM3%2F%2Bzhs%3D","updated":"2013-02-19 09:47:54.000000000","message":"No i\u0027m not adding these variables, they\u0027re coming from the _extract_service_catalog function that I removed see:\n\n?","commit_id":"bdeb91f6fb2c0220e21d953bf316293df4dc3635"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"451623243a249407c18d461d7235867bbb8e6b4a","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            self.user_id \u003d self.auth_ref.user_id"},{"line_number":155,"context_line":"        # Save these since we have them and they\u0027ll be useful later"},{"line_number":156,"context_line":"        self.auth_tenant_id \u003d self.auth_ref.tenant_id"},{"line_number":157,"context_line":"        self.auth_user_id \u003d self.auth_ref.user_id"},{"line_number":158,"context_line":"        if not self.auth_tenant_id or not self.auth_user_id:"},{"line_number":159,"context_line":"            raise exceptions.AuthorizationFailure()"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAN3%2F%2F9W0%3D","line":157,"in_reply_to":"AAAAN3%2F%2F%2Bdo%3D","updated":"2013-03-05 08:24:03.000000000","message":"Because there\u0027s code out there relying on self.auth_tenant_id and self.auth_user_id. :-(","commit_id":"bdeb91f6fb2c0220e21d953bf316293df4dc3635"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"739f4728faf98d2245c46e8e7b0d4bcaf9cd0b7b","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            self.authenticate()"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    #TODO(heckj): move to a method on auth_ref"},{"line_number":137,"context_line":"    def has_service_catalog(self):"},{"line_number":138,"context_line":"        \"\"\"Returns True if this client provides a service catalog.\"\"\""},{"line_number":139,"context_line":"        return hasattr(self, \u0027service_catalog\u0027)"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAOn%2F%2Fx8o%3D","side":"PARENT","line":137,"updated":"2013-04-23 16:26:38.000000000","message":"This is a public interface. Removing it may break 3rd party clients which extends v2 client.\n\nMay want to keep it for backward compatibility and mark it as deprecated for a release cycle.","commit_id":"fc54b30e58e95fccba27f975fa3da3016630b414"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"eb2cc3279637dc9ee0af4f23a8d14412186f3f21","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            self.authenticate()"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    #TODO(heckj): move to a method on auth_ref"},{"line_number":137,"context_line":"    def has_service_catalog(self):"},{"line_number":138,"context_line":"        \"\"\"Returns True if this client provides a service catalog.\"\"\""},{"line_number":139,"context_line":"        return hasattr(self, \u0027service_catalog\u0027)"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAOn%2F%2FwxI%3D","side":"PARENT","line":137,"in_reply_to":"AAAAOn%2F%2Fx8o%3D","updated":"2013-04-24 11:33:53.000000000","message":"Done","commit_id":"fc54b30e58e95fccba27f975fa3da3016630b414"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c153a00c3bf27d215c2b72dd9ba51cdebf328815","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        self.auth_tenant_id \u003d self.auth_ref.tenant_id"},{"line_number":156,"context_line":"        self.auth_user_id \u003d self.auth_ref.user_id"},{"line_number":157,"context_line":"        if not self.auth_tenant_id or not self.auth_user_id:"},{"line_number":158,"context_line":"            raise exceptions.AuthorizationFailure()"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def get_raw_token_from_identity_service(self, auth_url, username\u003dNone,"},{"line_number":161,"context_line":"                                            password\u003dNone, tenant_name\u003dNone,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAOn%2F%2F1Jw%3D","line":158,"updated":"2013-04-19 20:59:55.000000000","message":"would be useful to have a debug message saying why authorization failed.","commit_id":"8474862d45f29c0ec5d1c17dc21ea45630409ab1"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"eb2cc3279637dc9ee0af4f23a8d14412186f3f21","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        self.auth_tenant_id \u003d self.auth_ref.tenant_id"},{"line_number":156,"context_line":"        self.auth_user_id \u003d self.auth_ref.user_id"},{"line_number":157,"context_line":"        if not self.auth_tenant_id or not self.auth_user_id:"},{"line_number":158,"context_line":"            raise exceptions.AuthorizationFailure()"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def get_raw_token_from_identity_service(self, auth_url, username\u003dNone,"},{"line_number":161,"context_line":"                                            password\u003dNone, tenant_name\u003dNone,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAOn%2F%2FwxA%3D","line":158,"in_reply_to":"AAAAOn%2F%2F1Jw%3D","updated":"2013-04-24 11:33:53.000000000","message":"Done","commit_id":"8474862d45f29c0ec5d1c17dc21ea45630409ab1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"f608c5160d76827537fc83ae2eec00bd97df9359","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def has_service_catalog(self):"},{"line_number":136,"context_line":"        \"\"\"Deprecated, use service_catalog.\"\"\""},{"line_number":137,"context_line":"        return hasattr(self.auth_ref, \"service_catalog\")"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    @property"},{"line_number":140,"context_line":"    def service_catalog(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPH%2F%2Fj9E%3D","line":137,"updated":"2013-05-30 14:32:48.000000000","message":"isn\u0027t it guaranteed to have the attribute? should it not be returning `self.auth_ref.service_catalog is not None`?","commit_id":"a970a844f2dd8d5763250f0ad5bf445ef2a2e6c2"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"e414a6e45afa35a99467164dab05ebdef92e6d4a","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def has_service_catalog(self):"},{"line_number":136,"context_line":"        \"\"\"Deprecated, use service_catalog.\"\"\""},{"line_number":137,"context_line":"        return hasattr(self.auth_ref, \"service_catalog\")"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    @property"},{"line_number":140,"context_line":"    def service_catalog(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPH%2F%2FjjU%3D","line":137,"in_reply_to":"AAAAPH%2F%2Fj9E%3D","updated":"2013-05-30 16:40:55.000000000","message":"Yes, this is now hardcoded to True.  Please make this change","commit_id":"a970a844f2dd8d5763250f0ad5bf445ef2a2e6c2"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"4122fc6169adf96bb0966ea8c6a1246cd7e5fb45","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def has_service_catalog(self):"},{"line_number":136,"context_line":"        \"\"\"Deprecated, use service_catalog.\"\"\""},{"line_number":137,"context_line":"        return hasattr(self.auth_ref, \"service_catalog\")"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    @property"},{"line_number":140,"context_line":"    def service_catalog(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPH%2F%2Fhp8%3D","line":137,"in_reply_to":"AAAAPH%2F%2FjjU%3D","updated":"2013-05-31 08:43:33.000000000","message":"Done","commit_id":"a970a844f2dd8d5763250f0ad5bf445ef2a2e6c2"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"57a7071be69e52f8e7f4b1fc05360c83aaf69835","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        return hasattr(self.auth_ref, \"service_catalog\")"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    @property"},{"line_number":140,"context_line":"    def service_catalog(self):"},{"line_number":141,"context_line":"        \"\"\"Returns this client\u0027s service catalog.\"\"\""},{"line_number":142,"context_line":"        return self.auth_ref.service_catalog"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPH%2F%2Fie8%3D","line":140,"updated":"2013-05-31 00:09:07.000000000","message":"Should this move up to keystoneclient/client.py?","commit_id":"a970a844f2dd8d5763250f0ad5bf445ef2a2e6c2"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"e414a6e45afa35a99467164dab05ebdef92e6d4a","unresolved":false,"context_lines":[{"line_number":156,"context_line":"            self.tenant_id \u003d self.auth_ref.tenant_id"},{"line_number":157,"context_line":"            self.user_id \u003d self.auth_ref.user_id"},{"line_number":158,"context_line":"        # Save these since we have them and they\u0027ll be useful later"},{"line_number":159,"context_line":"        self.auth_tenant_id \u003d self.auth_ref.tenant_id"},{"line_number":160,"context_line":"        self.auth_user_id \u003d self.auth_ref.user_id"},{"line_number":161,"context_line":"        if not self.auth_user_id:"},{"line_number":162,"context_line":"            raise exceptions.AuthorizationFailure("}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPH%2F%2FjjI%3D","line":159,"updated":"2013-05-30 16:40:55.000000000","message":"These lines are duplicated with the if block above.  There is a clearer way to write this code to avoid the duplication and show the case of not setting these values to be the exception.","commit_id":"a970a844f2dd8d5763250f0ad5bf445ef2a2e6c2"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"4122fc6169adf96bb0966ea8c6a1246cd7e5fb45","unresolved":false,"context_lines":[{"line_number":156,"context_line":"            self.tenant_id \u003d self.auth_ref.tenant_id"},{"line_number":157,"context_line":"            self.user_id \u003d self.auth_ref.user_id"},{"line_number":158,"context_line":"        # Save these since we have them and they\u0027ll be useful later"},{"line_number":159,"context_line":"        self.auth_tenant_id \u003d self.auth_ref.tenant_id"},{"line_number":160,"context_line":"        self.auth_user_id \u003d self.auth_ref.user_id"},{"line_number":161,"context_line":"        if not self.auth_user_id:"},{"line_number":162,"context_line":"            raise exceptions.AuthorizationFailure("}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPH%2F%2Fhpo%3D","line":159,"in_reply_to":"AAAAPH%2F%2FjjI%3D","updated":"2013-05-31 08:43:33.000000000","message":"Done","commit_id":"a970a844f2dd8d5763250f0ad5bf445ef2a2e6c2"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"f608c5160d76827537fc83ae2eec00bd97df9359","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        self.auth_user_id \u003d self.auth_ref.user_id"},{"line_number":161,"context_line":"        if not self.auth_user_id:"},{"line_number":162,"context_line":"            raise exceptions.AuthorizationFailure("},{"line_number":163,"context_line":"                \"Token didn\u0027t provide auth_user_id\")"},{"line_number":164,"context_line":"        if not self.auth_tenant_id:"},{"line_number":165,"context_line":"            raise exceptions.AuthorizationFailure("},{"line_number":166,"context_line":"                \"Token didn\u0027t provide auth_tenant_id\")"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPH%2F%2Fj8g%3D","line":163,"updated":"2013-05-30 14:32:48.000000000","message":"this shouldn\u0027t be possible?","commit_id":"a970a844f2dd8d5763250f0ad5bf445ef2a2e6c2"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"4122fc6169adf96bb0966ea8c6a1246cd7e5fb45","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        self.auth_user_id \u003d self.auth_ref.user_id"},{"line_number":161,"context_line":"        if not self.auth_user_id:"},{"line_number":162,"context_line":"            raise exceptions.AuthorizationFailure("},{"line_number":163,"context_line":"                \"Token didn\u0027t provide auth_user_id\")"},{"line_number":164,"context_line":"        if not self.auth_tenant_id:"},{"line_number":165,"context_line":"            raise exceptions.AuthorizationFailure("},{"line_number":166,"context_line":"                \"Token didn\u0027t provide auth_tenant_id\")"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPH%2F%2Fhpk%3D","line":163,"in_reply_to":"AAAAPH%2F%2Fj8g%3D","updated":"2013-05-31 08:43:33.000000000","message":"Meaning? I\u0027ll remove then?","commit_id":"a970a844f2dd8d5763250f0ad5bf445ef2a2e6c2"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"57a7071be69e52f8e7f4b1fc05360c83aaf69835","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        if not self.auth_user_id:"},{"line_number":162,"context_line":"            raise exceptions.AuthorizationFailure("},{"line_number":163,"context_line":"                \"Token didn\u0027t provide auth_user_id\")"},{"line_number":164,"context_line":"        if not self.auth_tenant_id:"},{"line_number":165,"context_line":"            raise exceptions.AuthorizationFailure("},{"line_number":166,"context_line":"                \"Token didn\u0027t provide auth_tenant_id\")"},{"line_number":167,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPH%2F%2FiXI%3D","line":164,"updated":"2013-05-31 00:09:07.000000000","message":"What if unscoped_token is created?  This should move up under line: 156","commit_id":"a970a844f2dd8d5763250f0ad5bf445ef2a2e6c2"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"dee7212cafd53085ff765984ed28b84845306294","unresolved":false,"context_lines":[{"line_number":133,"context_line":"            self.authenticate()"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    @property"},{"line_number":136,"context_line":"    def service_catalog(self):"},{"line_number":137,"context_line":"        \"\"\"Returns this client\u0027s service catalog.\"\"\""},{"line_number":138,"context_line":"        return self.auth_ref.service_catalog"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPH%2F%2Fga8%3D","line":136,"updated":"2013-05-31 16:42:35.000000000","message":"This method is usable for both v2 and v3, please move it to keystoneclient/client.py","commit_id":"9f925f9f0c0ee0d82a1e052e4d3e6b116bb53331"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"05b43ba9f5d41f3cb1b001917821bc9fbc0b66b9","unresolved":false,"context_lines":[{"line_number":133,"context_line":"            self.authenticate()"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    @property"},{"line_number":136,"context_line":"    def service_catalog(self):"},{"line_number":137,"context_line":"        \"\"\"Returns this client\u0027s service catalog.\"\"\""},{"line_number":138,"context_line":"        return self.auth_ref.service_catalog"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPH%2F%2Fd7k%3D","line":136,"in_reply_to":"AAAAPH%2F%2Fga8%3D","updated":"2013-06-03 08:38:24.000000000","message":"Done","commit_id":"9f925f9f0c0ee0d82a1e052e4d3e6b116bb53331"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"dee7212cafd53085ff765984ed28b84845306294","unresolved":false,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        if self.auth_ref.tenant_id:"},{"line_number":152,"context_line":"            self.auth_tenant_id \u003d self.auth_ref.tenant_id"},{"line_number":153,"context_line":"        else:"},{"line_number":154,"context_line":"            raise exceptions.AuthorizationFailure("},{"line_number":155,"context_line":"                \"Token didn\u0027t provide auth_tenant_id\")"},{"line_number":156,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPH%2F%2Fgag%3D","line":153,"updated":"2013-05-31 16:42:35.000000000","message":"What if the client is getting an unscoped token?  It will always throw an error.\n\nMaybe change the condition to \"elif self.auth_ref.scoped\".","commit_id":"9f925f9f0c0ee0d82a1e052e4d3e6b116bb53331"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"05b43ba9f5d41f3cb1b001917821bc9fbc0b66b9","unresolved":false,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        if self.auth_ref.tenant_id:"},{"line_number":152,"context_line":"            self.auth_tenant_id \u003d self.auth_ref.tenant_id"},{"line_number":153,"context_line":"        else:"},{"line_number":154,"context_line":"            raise exceptions.AuthorizationFailure("},{"line_number":155,"context_line":"                \"Token didn\u0027t provide auth_tenant_id\")"},{"line_number":156,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPH%2F%2Fd7g%3D","line":153,"in_reply_to":"AAAAPH%2F%2Fgag%3D","updated":"2013-06-03 08:38:24.000000000","message":"Done","commit_id":"9f925f9f0c0ee0d82a1e052e4d3e6b116bb53331"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"bfe8337f1669cb8e8d63ed81961ed8a818ccfef7","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            self.authenticate()"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    #TODO(heckj): move to a method on auth_ref"},{"line_number":137,"context_line":"    def has_service_catalog(self):"},{"line_number":138,"context_line":"        \"\"\"Returns True if this client provides a service catalog.\"\"\""},{"line_number":139,"context_line":"        return hasattr(self, \u0027service_catalog\u0027)"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAPX%2F%2F64E%3D","side":"PARENT","line":137,"updated":"2013-06-06 00:12:34.000000000","message":"this change looks like it\u0027s adding a change that\u0027s not backwards-compatible. Any application that was using has_service_catalog will be broken by this change.\n\n(this was already mentioned in patch set 12)","commit_id":"6753889314c3b7aed9ff9f032cc7483005b68dcf"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"3bd5a0906bd976d4402e6475108d5621b2c1f35a","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            self.authenticate()"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    #TODO(heckj): move to a method on auth_ref"},{"line_number":137,"context_line":"    def has_service_catalog(self):"},{"line_number":138,"context_line":"        \"\"\"Returns True if this client provides a service catalog.\"\"\""},{"line_number":139,"context_line":"        return hasattr(self, \u0027service_catalog\u0027)"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAPX%2F%2FzuY%3D","side":"PARENT","line":137,"in_reply_to":"AAAAPX%2F%2F64E%3D","updated":"2013-06-10 05:41:27.000000000","message":"Good catch!","commit_id":"6753889314c3b7aed9ff9f032cc7483005b68dcf"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"f2a3a9b3de2a692658a897584bf6e62936ab2a00","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            self.authenticate()"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    #TODO(heckj): move to a method on auth_ref"},{"line_number":137,"context_line":"    def has_service_catalog(self):"},{"line_number":138,"context_line":"        \"\"\"Returns True if this client provides a service catalog.\"\"\""},{"line_number":139,"context_line":"        return hasattr(self, \u0027service_catalog\u0027)"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAPX%2F%2Fzk8%3D","side":"PARENT","line":137,"in_reply_to":"AAAAPX%2F%2FzuY%3D","updated":"2013-06-10 08:08:01.000000000","message":"Done","commit_id":"6753889314c3b7aed9ff9f032cc7483005b68dcf"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"0e4d67663d11a384bfa6bb7ae0dcd85918e98711","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        if self.management_url is None:"},{"line_number":133,"context_line":"            self.authenticate()"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def has_service_catalog(self):"},{"line_number":136,"context_line":"        \"\"\"Returns True if this client provides a service catalog.\"\"\""},{"line_number":137,"context_line":"        return self.auth_ref.has_service_catalog()"},{"line_number":138,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAPX%2F%2Fyhg%3D","line":135,"updated":"2013-06-10 16:55:15.000000000","message":"auth_ref now encapsulate the logic. The implementation of has_service_catalog(self) will be the same now for v2/v3.  Perhaps this method should move up to the parent class keystoneclient/client.py.","commit_id":"899d038692973d88ed5d17b8d013c205a2cfef47"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"850e5715e03d246d2fcbe3a0b7b92e3d729fdf27","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        if self.management_url is None:"},{"line_number":133,"context_line":"            self.authenticate()"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def has_service_catalog(self):"},{"line_number":136,"context_line":"        \"\"\"Returns True if this client provides a service catalog.\"\"\""},{"line_number":137,"context_line":"        return self.auth_ref.has_service_catalog()"},{"line_number":138,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAPX%2F%2Fwk0%3D","line":135,"in_reply_to":"AAAAPX%2F%2Fyhg%3D","updated":"2013-06-11 08:00:18.000000000","message":"Done","commit_id":"899d038692973d88ed5d17b8d013c205a2cfef47"}],"keystoneclient/v2_0/shell.py":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"e414a6e45afa35a99467164dab05ebdef92e6d4a","unresolved":false,"context_lines":[{"line_number":32,"context_line":"           \u0027instead of --os-endpoint or OS_SERVICE_ENDPOINT, for example.\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def wrapped(kc, args):"},{"line_number":35,"context_line":"        if not kc.service_catalog:"},{"line_number":36,"context_line":"            raise Exception(msg)"},{"line_number":37,"context_line":"        return f(kc, args)"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPH%2F%2Fji8%3D","line":35,"updated":"2013-05-30 16:40:55.000000000","message":"Does this mean we can drop has_service_catalog()?  If so, please remove it.  Or is it still in use outside of the CLI?","commit_id":"a970a844f2dd8d5763250f0ad5bf445ef2a2e6c2"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"4122fc6169adf96bb0966ea8c6a1246cd7e5fb45","unresolved":false,"context_lines":[{"line_number":32,"context_line":"           \u0027instead of --os-endpoint or OS_SERVICE_ENDPOINT, for example.\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def wrapped(kc, args):"},{"line_number":35,"context_line":"        if not kc.service_catalog:"},{"line_number":36,"context_line":"            raise Exception(msg)"},{"line_number":37,"context_line":"        return f(kc, args)"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPH%2F%2Fhpc%3D","line":35,"in_reply_to":"AAAAPH%2F%2Fji8%3D","updated":"2013-05-31 08:43:33.000000000","message":"Yes, I let it for backward compat. Will remove.","commit_id":"a970a844f2dd8d5763250f0ad5bf445ef2a2e6c2"}],"tests/v2_0/test_auth.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c153a00c3bf27d215c2b72dd9ba51cdebf328815","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                           auth_url\u003dself.TEST_URL)"},{"line_number":209,"context_line":"        self.assertEqual(cs.auth_token,"},{"line_number":210,"context_line":"                         self.TEST_RESPONSE_DICT[\"access\"][\"token\"][\"id\"])"},{"line_number":211,"context_line":"        self.assertFalse(\u0027serviceCatalog\u0027 in cs.service_catalog.catalog)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    def test_authenticate_success_token_scoped(self):"},{"line_number":214,"context_line":"        del self.TEST_REQUEST_BODY[\u0027auth\u0027][\u0027passwordCredentials\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAOn%2F%2F1J4%3D","side":"PARENT","line":211,"updated":"2013-04-19 20:59:55.000000000","message":"suggest use assertNotIn","commit_id":"fc54b30e58e95fccba27f975fa3da3016630b414"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"eb2cc3279637dc9ee0af4f23a8d14412186f3f21","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                           auth_url\u003dself.TEST_URL)"},{"line_number":209,"context_line":"        self.assertEqual(cs.auth_token,"},{"line_number":210,"context_line":"                         self.TEST_RESPONSE_DICT[\"access\"][\"token\"][\"id\"])"},{"line_number":211,"context_line":"        self.assertFalse(\u0027serviceCatalog\u0027 in cs.service_catalog.catalog)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    def test_authenticate_success_token_scoped(self):"},{"line_number":214,"context_line":"        del self.TEST_REQUEST_BODY[\u0027auth\u0027][\u0027passwordCredentials\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAOn%2F%2Fww8%3D","side":"PARENT","line":211,"in_reply_to":"AAAAOn%2F%2F1J4%3D","updated":"2013-04-24 11:33:53.000000000","message":"This is code removal.","commit_id":"fc54b30e58e95fccba27f975fa3da3016630b414"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c153a00c3bf27d215c2b72dd9ba51cdebf328815","unresolved":false,"context_lines":[{"line_number":259,"context_line":"                           auth_url\u003dself.TEST_URL)"},{"line_number":260,"context_line":"        self.assertEqual(cs.auth_token,"},{"line_number":261,"context_line":"                         self.TEST_RESPONSE_DICT[\"access\"][\"token\"][\"id\"])"},{"line_number":262,"context_line":"        self.assertFalse(\u0027serviceCatalog\u0027 in cs.service_catalog.catalog)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAOn%2F%2F1J8%3D","side":"PARENT","line":262,"updated":"2013-04-19 20:59:55.000000000","message":"suggest use assertNotIn","commit_id":"fc54b30e58e95fccba27f975fa3da3016630b414"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"eb2cc3279637dc9ee0af4f23a8d14412186f3f21","unresolved":false,"context_lines":[{"line_number":259,"context_line":"                           auth_url\u003dself.TEST_URL)"},{"line_number":260,"context_line":"        self.assertEqual(cs.auth_token,"},{"line_number":261,"context_line":"                         self.TEST_RESPONSE_DICT[\"access\"][\"token\"][\"id\"])"},{"line_number":262,"context_line":"        self.assertFalse(\u0027serviceCatalog\u0027 in cs.service_catalog.catalog)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAOn%2F%2Fww4%3D","side":"PARENT","line":262,"in_reply_to":"AAAAOn%2F%2F1J8%3D","updated":"2013-04-24 11:33:53.000000000","message":"This is code removal.","commit_id":"fc54b30e58e95fccba27f975fa3da3016630b414"}]}
