)]}'
{"keystone/catalog/controllers.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"e0733ec856d51506c325ffd3459a5ac575312155","unresolved":false,"context_lines":[{"line_number":148,"context_line":"    def get_catalog(self, context):"},{"line_number":149,"context_line":"        catalog \u003d self.catalog_api.get_v3_catalog("},{"line_number":150,"context_line":"            context[\u0027environment\u0027][authorization.AUTH_CONTEXT_ENV][\u0027user_id\u0027],"},{"line_number":151,"context_line":"            context[\u0027environment\u0027][authorization.AUTH_CONTEXT_ENV]"},{"line_number":152,"context_line":"                   [\u0027project_id\u0027])"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        # The V3Controller base methods mostly assume that you\u0027re returning"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_583187a0","line":151,"updated":"2014-07-15 12:57:08.000000000","message":"would this blow up if someone called it with an unscoped token?","commit_id":"0d1c97fbd11ac38ad6086b5006d1824f04bf56a1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9165569cca954d913c3dca98177a5cf0b3b613fb","unresolved":false,"context_lines":[{"line_number":148,"context_line":"    def get_catalog(self, context):"},{"line_number":149,"context_line":"        catalog \u003d self.catalog_api.get_v3_catalog("},{"line_number":150,"context_line":"            context[\u0027environment\u0027][authorization.AUTH_CONTEXT_ENV][\u0027user_id\u0027],"},{"line_number":151,"context_line":"            context[\u0027environment\u0027][authorization.AUTH_CONTEXT_ENV]"},{"line_number":152,"context_line":"                   [\u0027project_id\u0027])"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        # The V3Controller base methods mostly assume that you\u0027re returning"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_fe15e03c","line":151,"in_reply_to":"baada198_583187a0","updated":"2014-07-15 14:49:29.000000000","message":"yes - i need to require a scoped token (otherwise you don\u0027t have a catalog)","commit_id":"0d1c97fbd11ac38ad6086b5006d1824f04bf56a1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"e0733ec856d51506c325ffd3459a5ac575312155","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        # either a collection or a single element from a collection, neither of"},{"line_number":156,"context_line":"        # which apply to the catalog. Because this is a special case, this"},{"line_number":157,"context_line":"        # re-implements a tiny bit of work done by the base controller (such as"},{"line_number":158,"context_line":"        # self-referential link building) to avoid overriding or refactoring a"},{"line_number":159,"context_line":"        # several private methods."},{"line_number":160,"context_line":"        return {"},{"line_number":161,"context_line":"            \u0027catalog\u0027: catalog,"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_78f1ebff","line":158,"updated":"2014-07-15 12:57:08.000000000","message":"nit: remove \"a\"","commit_id":"0d1c97fbd11ac38ad6086b5006d1824f04bf56a1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9165569cca954d913c3dca98177a5cf0b3b613fb","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        # either a collection or a single element from a collection, neither of"},{"line_number":156,"context_line":"        # which apply to the catalog. Because this is a special case, this"},{"line_number":157,"context_line":"        # re-implements a tiny bit of work done by the base controller (such as"},{"line_number":158,"context_line":"        # self-referential link building) to avoid overriding or refactoring a"},{"line_number":159,"context_line":"        # several private methods."},{"line_number":160,"context_line":"        return {"},{"line_number":161,"context_line":"            \u0027catalog\u0027: catalog,"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_5e1ecc5f","line":158,"in_reply_to":"baada198_78f1ebff","updated":"2014-07-15 14:49:29.000000000","message":"Done","commit_id":"0d1c97fbd11ac38ad6086b5006d1824f04bf56a1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"e0733ec856d51506c325ffd3459a5ac575312155","unresolved":false,"context_lines":[{"line_number":161,"context_line":"            \u0027catalog\u0027: catalog,"},{"line_number":162,"context_line":"            \u0027links\u0027: {"},{"line_number":163,"context_line":"                \u0027self\u0027: CatalogV3.base_url(context),"},{"line_number":164,"context_line":"                \u0027next\u0027: None,"},{"line_number":165,"context_line":"                \u0027previous\u0027: None}}"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_58d50741","line":164,"updated":"2014-07-15 12:57:08.000000000","message":"Would there be \u0027next\u0027 and \u0027previous\u0027?  Or maybe this is more like return a single entity, when you just have \u0027self\u0027.\n\nAs an aside, I had exactly the same issue with OS-CONFIG extension WIP code....whether to override the internal methods or do the work myself....","commit_id":"0d1c97fbd11ac38ad6086b5006d1824f04bf56a1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9165569cca954d913c3dca98177a5cf0b3b613fb","unresolved":false,"context_lines":[{"line_number":161,"context_line":"            \u0027catalog\u0027: catalog,"},{"line_number":162,"context_line":"            \u0027links\u0027: {"},{"line_number":163,"context_line":"                \u0027self\u0027: CatalogV3.base_url(context),"},{"line_number":164,"context_line":"                \u0027next\u0027: None,"},{"line_number":165,"context_line":"                \u0027previous\u0027: None}}"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_3b1daa73","line":164,"in_reply_to":"baada198_58d50741","updated":"2014-07-15 14:49:29.000000000","message":"i\u0027m removing these in the next patch - i don\u0027t think pagination should apply to this call","commit_id":"0d1c97fbd11ac38ad6086b5006d1824f04bf56a1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"00f8c95094ae9fad72be8b59957e52c302026118","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"@dependency.requires(\u0027catalog_api\u0027)"},{"line_number":143,"context_line":"class CatalogV3(controller.V3Controller):"},{"line_number":144,"context_line":"    collection_name \u003d \u0027catalog\u0027"},{"line_number":145,"context_line":"    member_name \u003d \u0027catalog\u0027"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    @controller.protected()"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_6da3dd00","line":144,"updated":"2014-07-15 19:11:41.000000000","message":"nit: could argue that we don\u0027t need a collection_name for the methods we are going to use...just having member_name would nicely imply we don\u0027t have any collections.","commit_id":"169fc411790aacb2c1f34f9d235d497cad94e9cf"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"04332403845074be536312988ce3f53ffd26d96e","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"@dependency.requires(\u0027catalog_api\u0027)"},{"line_number":143,"context_line":"class CatalogV3(controller.V3Controller):"},{"line_number":144,"context_line":"    collection_name \u003d \u0027catalog\u0027"},{"line_number":145,"context_line":"    member_name \u003d \u0027catalog\u0027"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    @controller.protected()"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_cfb661f9","line":144,"in_reply_to":"baada198_6da3dd00","updated":"2014-07-17 01:58:17.000000000","message":"I like this suggestion.","commit_id":"169fc411790aacb2c1f34f9d235d497cad94e9cf"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2d97e7f5a9d003f5443e83eb5456568768b73822","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"@dependency.requires(\u0027catalog_api\u0027)"},{"line_number":143,"context_line":"class CatalogV3(controller.V3Controller):"},{"line_number":144,"context_line":"    collection_name \u003d \u0027catalog\u0027"},{"line_number":145,"context_line":"    member_name \u003d \u0027catalog\u0027"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    @controller.protected()"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_4b122563","line":144,"in_reply_to":"baada198_cfb661f9","updated":"2014-07-18 13:45:28.000000000","message":"+1 i felt weird about including them both in the first place","commit_id":"169fc411790aacb2c1f34f9d235d497cad94e9cf"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"04332403845074be536312988ce3f53ffd26d96e","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        if not user_id or not project_id:"},{"line_number":157,"context_line":"            raise exception.Forbidden("},{"line_number":158,"context_line":"                _(\u0027A scoped token is required to produce a service catalog.\u0027))"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        # The V3Controller base methods mostly assume that you\u0027re returning"},{"line_number":161,"context_line":"        # either a collection or a single element from a collection, neither of"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_ef93255a","line":158,"updated":"2014-07-17 01:58:17.000000000","message":"what about a domain scoped token?\n\nmaybe change \"scoped token\" to \"project-scoped token\"\n\nalso, how about return a catalog that\u0027s just the identity server?","commit_id":"169fc411790aacb2c1f34f9d235d497cad94e9cf"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2d97e7f5a9d003f5443e83eb5456568768b73822","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        if not user_id or not project_id:"},{"line_number":157,"context_line":"            raise exception.Forbidden("},{"line_number":158,"context_line":"                _(\u0027A scoped token is required to produce a service catalog.\u0027))"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        # The V3Controller base methods mostly assume that you\u0027re returning"},{"line_number":161,"context_line":"        # either a collection or a single element from a collection, neither of"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_f6175c43","line":158,"in_reply_to":"baada198_ef93255a","updated":"2014-07-18 13:45:28.000000000","message":"+1 for the first suggestion\n\nthe second suggestion would be a whole new behavior and i think is worthy of it\u0027s own spec/discussion :) -- i think i agree but i haven\u0027t thought through the implications","commit_id":"169fc411790aacb2c1f34f9d235d497cad94e9cf"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"488480fdedf1d3bf2b0abceb3338883e3a7fea3c","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"@dependency.requires(\u0027catalog_api\u0027)"},{"line_number":143,"context_line":"class CatalogV3(controller.V3Controller):"},{"line_number":144,"context_line":"    collection_name \u003d \u0027catalog\u0027"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    @controller.protected()"},{"line_number":147,"context_line":"    def get_catalog(self, context):"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_055b4e86","line":144,"updated":"2014-07-21 16:34:15.000000000","message":"did you mean to delete this one and keep member_name?","commit_id":"d39f9f2bfae4443d2d7f19b5e52fdb59153be745"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"1f09376dbfaa9510f867dba982152d46cee253dc","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"@dependency.requires(\u0027catalog_api\u0027)"},{"line_number":143,"context_line":"class CatalogV3(controller.V3Controller):"},{"line_number":144,"context_line":"    collection_name \u003d \u0027catalog\u0027"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    @controller.protected()"},{"line_number":147,"context_line":"    def get_catalog(self, context):"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_5fca6a6e","line":144,"in_reply_to":"baada198_055b4e86","updated":"2014-07-21 19:37:42.000000000","message":"yes, actually. this class is using Catalog.V3.base_url() in L169 which essentially composes the endpoint as \"/v3/%(collection_name)s\" by convention.","commit_id":"d39f9f2bfae4443d2d7f19b5e52fdb59153be745"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"dde001fa686df756521437e4c2e4a751127acb56","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        user_id \u003d auth_context.get(\u0027user_id\u0027)"},{"line_number":153,"context_line":"        project_id \u003d auth_context.get(\u0027project_id\u0027)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        if not user_id or not project_id:"},{"line_number":156,"context_line":"            raise exception.Forbidden("},{"line_number":157,"context_line":"                _(\u0027A project-scoped token is required to produce a service \u0027"},{"line_number":158,"context_line":"                  \u0027catalog.\u0027))"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_3d977e91","line":155,"updated":"2014-07-21 20:17:18.000000000","message":"I am ok with this as is, but...\n\nWe should consider what a catalog for an unscoped token would look like, just a keystone endpoint per region? possibly a different call?\n\nNo need to update this *now*. Just something to consider - in the case we want to update it later, we\u0027d be API incompatible changing the forbidden response","commit_id":"d39f9f2bfae4443d2d7f19b5e52fdb59153be745"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"fea2abe9a1d2f6a31972779a060f19a7c0ffd092","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        user_id \u003d auth_context.get(\u0027user_id\u0027)"},{"line_number":153,"context_line":"        project_id \u003d auth_context.get(\u0027project_id\u0027)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        if not user_id or not project_id:"},{"line_number":156,"context_line":"            raise exception.Forbidden("},{"line_number":157,"context_line":"                _(\u0027A project-scoped token is required to produce a service \u0027"},{"line_number":158,"context_line":"                  \u0027catalog.\u0027))"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_7d7e56b0","line":155,"in_reply_to":"baada198_3d977e91","updated":"2014-07-21 20:35:15.000000000","message":"agree; but i didn\u0027t want to add additional use cases that we\u0027re not currently covering with unscoped tokens on the first pass","commit_id":"d39f9f2bfae4443d2d7f19b5e52fdb59153be745"}],"keystone/tests/test_v3.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"04332403845074be536312988ce3f53ffd26d96e","unresolved":false,"context_lines":[{"line_number":729,"context_line":""},{"line_number":730,"context_line":"    def assertValidCatalogResponse(self, resp, *args, **kwargs):"},{"line_number":731,"context_line":"        self.assertValidCatalog(resp.json[\u0027catalog\u0027])"},{"line_number":732,"context_line":"        # test links"},{"line_number":733,"context_line":""},{"line_number":734,"context_line":"    def assertValidCatalog(self, entity):"},{"line_number":735,"context_line":"        self.assertIsInstance(entity, list)"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_af984d6b","line":732,"updated":"2014-07-17 01:58:17.000000000","message":"is this a todo?","commit_id":"169fc411790aacb2c1f34f9d235d497cad94e9cf"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2d97e7f5a9d003f5443e83eb5456568768b73822","unresolved":false,"context_lines":[{"line_number":729,"context_line":""},{"line_number":730,"context_line":"    def assertValidCatalogResponse(self, resp, *args, **kwargs):"},{"line_number":731,"context_line":"        self.assertValidCatalog(resp.json[\u0027catalog\u0027])"},{"line_number":732,"context_line":"        # test links"},{"line_number":733,"context_line":""},{"line_number":734,"context_line":"    def assertValidCatalog(self, entity):"},{"line_number":735,"context_line":"        self.assertIsInstance(entity, list)"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_16d3f038","line":732,"in_reply_to":"baada198_af984d6b","updated":"2014-07-18 13:45:28.000000000","message":"dammit - yes. will fix.","commit_id":"169fc411790aacb2c1f34f9d235d497cad94e9cf"}],"keystone/tests/test_v3_catalog.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f64d4542734ac3db5115f61ea290f78b4d86bdca","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                user_id\u003dself.default_domain_user[\u0027id\u0027],"},{"line_number":41,"context_line":"                password\u003dself.default_domain_user[\u0027password\u0027]),"},{"line_number":42,"context_line":"            expected_status\u003d403)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def test_get_catalog_no_token(self):"},{"line_number":45,"context_line":"        \"\"\"Call ``GET /catalog`` without a token.\"\"\""},{"line_number":46,"context_line":"        self.v3_request("}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_31c49740","line":43,"updated":"2014-07-17 08:03:55.000000000","message":"maybe try with a domain scoped token to ensure that fails too","commit_id":"169fc411790aacb2c1f34f9d235d497cad94e9cf"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"04332403845074be536312988ce3f53ffd26d96e","unresolved":false,"context_lines":[{"line_number":382,"context_line":"            \u0027/endpoints\u0027,"},{"line_number":383,"context_line":"            body\u003d{\u0027endpoint\u0027: ref},"},{"line_number":384,"context_line":"            expected_status\u003d400)"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"    def test_create_endpoint_400(self):"},{"line_number":387,"context_line":"        \"\"\"Call ``POST /endpoints``.\"\"\""},{"line_number":388,"context_line":"        ref \u003d self.new_endpoint_ref(service_id\u003dself.service_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_cfb2e1e4","line":385,"updated":"2014-07-17 01:58:17.000000000","message":"what happened to assertValidErrorResponse?","commit_id":"169fc411790aacb2c1f34f9d235d497cad94e9cf"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6ca355abf64a8993cdeb66fa946b80407e3f8a5d","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self.put(path\u003d\u0027/domains/%s/users/%s/roles/%s\u0027 % ("},{"line_number":38,"context_line":"            self.domain[\u0027id\u0027], self.user[\u0027id\u0027], self.role[\u0027id\u0027]))"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        self.v3_request("},{"line_number":41,"context_line":"            \u0027/catalog\u0027,"},{"line_number":42,"context_line":"            method\u003d\u0027GET\u0027,"},{"line_number":43,"context_line":"            auth\u003dself.build_authentication_request("}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_7aadc730","line":40,"updated":"2014-07-18 15:23:04.000000000","message":"nit: is there a reason not to just issue self.get() here?","commit_id":"c3ed95dc814c55a196fe941dcd9b1e237e77b624"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"b07312287b43d4fb6e03c7830f9fa63d6f16fc0e","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self.put(path\u003d\u0027/domains/%s/users/%s/roles/%s\u0027 % ("},{"line_number":38,"context_line":"            self.domain[\u0027id\u0027], self.user[\u0027id\u0027], self.role[\u0027id\u0027]))"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        self.v3_request("},{"line_number":41,"context_line":"            \u0027/catalog\u0027,"},{"line_number":42,"context_line":"            method\u003d\u0027GET\u0027,"},{"line_number":43,"context_line":"            auth\u003dself.build_authentication_request("}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_1a9ad213","line":40,"in_reply_to":"baada198_7aadc730","updated":"2014-07-21 20:35:32.000000000","message":"fixed! this was a remnant of me debugging :(","commit_id":"c3ed95dc814c55a196fe941dcd9b1e237e77b624"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6ca355abf64a8993cdeb66fa946b80407e3f8a5d","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        self.v3_request("},{"line_number":41,"context_line":"            \u0027/catalog\u0027,"},{"line_number":42,"context_line":"            method\u003d\u0027GET\u0027,"},{"line_number":43,"context_line":"            auth\u003dself.build_authentication_request("},{"line_number":44,"context_line":"                user_id\u003dself.user[\u0027id\u0027],"},{"line_number":45,"context_line":"                password\u003dself.user[\u0027password\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_3ad34fd6","line":42,"updated":"2014-07-18 15:23:04.000000000","message":"nit: I think method defaults to \u0027GET\u0027 anyway","commit_id":"c3ed95dc814c55a196fe941dcd9b1e237e77b624"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"b07312287b43d4fb6e03c7830f9fa63d6f16fc0e","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        self.v3_request("},{"line_number":41,"context_line":"            \u0027/catalog\u0027,"},{"line_number":42,"context_line":"            method\u003d\u0027GET\u0027,"},{"line_number":43,"context_line":"            auth\u003dself.build_authentication_request("},{"line_number":44,"context_line":"                user_id\u003dself.user[\u0027id\u0027],"},{"line_number":45,"context_line":"                password\u003dself.user[\u0027password\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_3a9dd60a","line":42,"in_reply_to":"baada198_3ad34fd6","updated":"2014-07-21 20:35:32.000000000","message":"++ changed them all to self.get()","commit_id":"c3ed95dc814c55a196fe941dcd9b1e237e77b624"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"dde001fa686df756521437e4c2e4a751127acb56","unresolved":false,"context_lines":[{"line_number":359,"context_line":"            expected_status\u003d400)"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def assertValidErrorResponse(self, response):"},{"line_number":362,"context_line":"        self.assertIn(response.status_code, [400, 409])"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    def test_create_endpoint_400(self):"},{"line_number":365,"context_line":"        \"\"\"Call ``POST /endpoints``.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_dd2a027d","side":"PARENT","line":362,"updated":"2014-07-21 20:17:18.000000000","message":"I assume this is not needed anymore? It is an odd removal since it seems un-related to the rest of the patch.","commit_id":"6ee93ca415e52a3129140ffda8757cb09649963c"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"fea2abe9a1d2f6a31972779a060f19a7c0ffd092","unresolved":false,"context_lines":[{"line_number":359,"context_line":"            expected_status\u003d400)"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def assertValidErrorResponse(self, response):"},{"line_number":362,"context_line":"        self.assertIn(response.status_code, [400, 409])"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    def test_create_endpoint_400(self):"},{"line_number":365,"context_line":"        \"\"\"Call ``POST /endpoints``.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_9d27aac6","side":"PARENT","line":362,"in_reply_to":"baada198_dd2a027d","updated":"2014-07-21 20:35:15.000000000","message":"it was never needed :( it was actually reducing test coverage by overriding the parent\u0027s method and skipping a bunch of assertions. thankfully they all still passed after removing the override.\n\ni discovered it because the 403 I raised was not allowed by this method, but it is allowed by the parent implementation","commit_id":"6ee93ca415e52a3129140ffda8757cb09649963c"}]}
