)]}'
{"keystone/catalog/backends/sql.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"adf08f94cca61dc4c00d466e746daec462664a75","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    #                 is required to have an \"extra\" column because of the"},{"line_number":47,"context_line":"    #                 DictBase in the keystone.common.sql.core module. Forcing"},{"line_number":48,"context_line":"    #                 tables to have pointless columns in the database is just"},{"line_number":49,"context_line":"    #                 bad. Remove all of this extra JSON blob stuff."},{"line_number":50,"context_line":"    extra \u003d sql.Column(sql.JsonBlob())"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F4Bk%3D","line":49,"updated":"2013-12-28 19:46:25.000000000","message":"Please register a blueprint/bug for this (at the very least) in conjunction with this comment.  To be fair, not every model that uses sql.DictBase has an extra field, this may mean that there will be some odd edge cases that need to be addressed.","commit_id":"17dc72edfeec75d2c852e74a532cf0c617f5ed61"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b565dac612c8adb66816a6d378e5b136c920d4ea","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    #                 is required to have an \"extra\" column because of the"},{"line_number":47,"context_line":"    #                 DictBase in the keystone.common.sql.core module. Forcing"},{"line_number":48,"context_line":"    #                 tables to have pointless columns in the database is just"},{"line_number":49,"context_line":"    #                 bad. Remove all of this extra JSON blob stuff."},{"line_number":50,"context_line":"    extra \u003d sql.Column(sql.JsonBlob())"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F0Ls%3D","line":49,"in_reply_to":"AAAAT3%2F%2F4Bk%3D","updated":"2013-12-30 22:50:50.000000000","message":"Done: https://bugs.launchpad.net/keystone/+bug/1265071","commit_id":"17dc72edfeec75d2c852e74a532cf0c617f5ed61"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"adf08f94cca61dc4c00d466e746daec462664a75","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    def list_regions(self):"},{"line_number":83,"context_line":"        session \u003d self.get_session()"},{"line_number":84,"context_line":"        regions \u003d session.query(Region).all()"},{"line_number":85,"context_line":"        return [s.to_dict() for s in list(regions)]"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def _get_region(self, session, region_id):"},{"line_number":88,"context_line":"        ref \u003d session.query(Region).get(region_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F4AQ%3D","line":85,"updated":"2013-12-28 19:46:25.000000000","message":"same as line 117","commit_id":"17dc72edfeec75d2c852e74a532cf0c617f5ed61"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"adf08f94cca61dc4c00d466e746daec462664a75","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            self._get_region(session, parent_region_id)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def get_region(self, region_id):"},{"line_number":117,"context_line":"        session \u003d self.get_session()"},{"line_number":118,"context_line":"        return self._get_region(session, region_id).to_dict()"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def delete_region(self, region_id):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F4Ac%3D","line":117,"updated":"2013-12-28 19:46:25.000000000","message":"There is a comment at: https://review.openstack.org/#/c/56430/ about putting transactions around even single calls, specifically to make it explicit demarcation.  I\u0027d like to see new SQL backends adhere to this (I know we need to go cleanup some that may not adhere to this).\n\nSo, please add the context manager \"with session.begin()\" here (in short)","commit_id":"17dc72edfeec75d2c852e74a532cf0c617f5ed61"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b565dac612c8adb66816a6d378e5b136c920d4ea","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            self._get_region(session, parent_region_id)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def get_region(self, region_id):"},{"line_number":117,"context_line":"        session \u003d self.get_session()"},{"line_number":118,"context_line":"        return self._get_region(session, region_id).to_dict()"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def delete_region(self, region_id):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F0Lk%3D","line":117,"in_reply_to":"AAAAT3%2F%2F4Ac%3D","updated":"2013-12-30 22:50:50.000000000","message":"I don\u0027t see the point in putting session.begin() around SELECT calls if the SELECT is not done with a FOR UPDATE.","commit_id":"17dc72edfeec75d2c852e74a532cf0c617f5ed61"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"adf08f94cca61dc4c00d466e746daec462664a75","unresolved":false,"context_lines":[{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    # Services"},{"line_number":153,"context_line":"    def list_services(self):"},{"line_number":154,"context_line":"        session \u003d self.get_session()"},{"line_number":155,"context_line":"        services \u003d session.query(Service).all()"},{"line_number":156,"context_line":"        return [s.to_dict() for s in list(services)]"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F4AM%3D","line":154,"updated":"2013-12-28 19:46:25.000000000","message":"same as line 117","commit_id":"17dc72edfeec75d2c852e74a532cf0c617f5ed61"}],"keystone/common/sql/migrate_repo/versions/036_add_region_table.py":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"8ef65009ea5b291f590e4d1c82184a117357fa2f","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    region_table \u003d sql.Table("},{"line_number":25,"context_line":"        \u0027region\u0027,"},{"line_number":26,"context_line":"        meta,"},{"line_number":27,"context_line":"        sql.Column(\u0027id\u0027, sql.String(64), primary_key\u003dTrue),"},{"line_number":28,"context_line":"        sql.Column(\u0027description\u0027, sql.String(255), unique\u003dTrue,"},{"line_number":29,"context_line":"                   nullable\u003dFalse),"},{"line_number":30,"context_line":"        sql.Column(\u0027parent_region_id\u0027, sql.String(64), nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2F2i4%3D","line":27,"updated":"2014-01-07 17:10:32.000000000","message":"add sql upgrade test for completeness.","commit_id":"a832deeb9e43e3a2dd5ec82f6191fedbf4e58ec4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a27d33e1768d57807ad004df0185ca05fc6abd1c","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    region_table \u003d sql.Table("},{"line_number":25,"context_line":"        \u0027region\u0027,"},{"line_number":26,"context_line":"        meta,"},{"line_number":27,"context_line":"        sql.Column(\u0027id\u0027, sql.String(64), primary_key\u003dTrue),"},{"line_number":28,"context_line":"        sql.Column(\u0027description\u0027, sql.String(255), unique\u003dTrue,"},{"line_number":29,"context_line":"                   nullable\u003dFalse),"},{"line_number":30,"context_line":"        sql.Column(\u0027parent_region_id\u0027, sql.String(64), nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2Fanw%3D","line":27,"in_reply_to":"AAAAUH%2F%2F2i4%3D","updated":"2014-01-14 00:04:38.000000000","message":"Done","commit_id":"a832deeb9e43e3a2dd5ec82f6191fedbf4e58ec4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"aa8914369956c47551e669830fe89e93b85b5673","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    region_table \u003d sql.Table("},{"line_number":25,"context_line":"        \u0027region\u0027,"},{"line_number":26,"context_line":"        meta,"},{"line_number":27,"context_line":"        sql.Column(\u0027id\u0027, sql.String(64), primary_key\u003dTrue),"},{"line_number":28,"context_line":"        sql.Column(\u0027description\u0027, sql.String(255), unique\u003dTrue,"},{"line_number":29,"context_line":"                   nullable\u003dFalse),"},{"line_number":30,"context_line":"        sql.Column(\u0027parent_region_id\u0027, sql.String(64), nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2FwNc%3D","line":27,"in_reply_to":"AAAAUH%2F%2F2i4%3D","updated":"2014-01-08 21:11:42.000000000","message":"No problem. In your mind, are you thinking about a similar test to these?\n\nhttps://github.com/openstack/keystone/blob/master/keystone/tests/test_sql_upgrade.py#L603\n\nhttps://github.com/openstack/keystone/blob/master/keystone/tests/test_sql_upgrade.py#L609\n\nLet me know... thx!","commit_id":"a832deeb9e43e3a2dd5ec82f6191fedbf4e58ec4"}],"keystone/tests/test_backend.py":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"8ef65009ea5b291f590e4d1c82184a117357fa2f","unresolved":false,"context_lines":[{"line_number":3383,"context_line":"                          self.catalog_api.delete_region,"},{"line_number":3384,"context_line":"                          uuid.uuid4().hex)"},{"line_number":3385,"context_line":""},{"line_number":3386,"context_line":"    def test_create_region_invalid_parent_region_404(self):"},{"line_number":3387,"context_line":"        region_id \u003d uuid.uuid4().hex"},{"line_number":3388,"context_line":"        new_region \u003d {"},{"line_number":3389,"context_line":"            \u0027id\u0027: region_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2F2i0%3D","line":3386,"updated":"2014-01-07 17:10:32.000000000","message":"Tests for region nesting, and how a nested region is accessed?","commit_id":"a832deeb9e43e3a2dd5ec82f6191fedbf4e58ec4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"aa8914369956c47551e669830fe89e93b85b5673","unresolved":false,"context_lines":[{"line_number":3383,"context_line":"                          self.catalog_api.delete_region,"},{"line_number":3384,"context_line":"                          uuid.uuid4().hex)"},{"line_number":3385,"context_line":""},{"line_number":3386,"context_line":"    def test_create_region_invalid_parent_region_404(self):"},{"line_number":3387,"context_line":"        region_id \u003d uuid.uuid4().hex"},{"line_number":3388,"context_line":"        new_region \u003d {"},{"line_number":3389,"context_line":"            \u0027id\u0027: region_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2FwOM%3D","line":3386,"in_reply_to":"AAAAUH%2F%2F2i0%3D","updated":"2014-01-08 21:11:42.000000000","message":"So, in the test_region_crud() method above has a bunch of tests to validate that the nesting of regions works properly -- both in the sense of preventing orphans as well as ensuring that a delete of a parent cascades to the children. Check it out and let me know if there are further tests you\u0027d like to see!","commit_id":"a832deeb9e43e3a2dd5ec82f6191fedbf4e58ec4"}],"keystone/tests/test_v3_catalog.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"4f5ab36a89d59a8cea72cb547c40f1a2489c5ad4","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        r \u003d self.post("},{"line_number":32,"context_line":"            \u0027/regions\u0027,"},{"line_number":33,"context_line":"            body\u003d{\u0027region\u0027: ref})"},{"line_number":34,"context_line":"        return self.assertValidRegionResponse(r, ref)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def test_list_regions(self):"},{"line_number":37,"context_line":"        \"\"\"Call ``GET /regions``.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2FWMI%3D","line":34,"updated":"2014-01-14 19:51:57.000000000","message":"no test for PUT /regions/{user_defined_region_id} ?","commit_id":"30955838fd9d6fddfc0391a606c4fd2ee85560a9"}]}
