)]}'
{"nova/db/sqlalchemy/api_models.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7d9f296bd9c0e481c5ff4c1edbd0a425a9a47049","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    key \u003d Column(String(255), nullable\u003dFalse)"},{"line_number":128,"context_line":"    value \u003d Column(String(255))"},{"line_number":129,"context_line":"    flavor_id \u003d Column(Integer, ForeignKey(\u0027flavors.id\u0027), nullable\u003dFalse)"},{"line_number":130,"context_line":"    flavor \u003d orm.relationship(Flavors, backref\u003d\u0027extra_specs\u0027,"},{"line_number":131,"context_line":"                              foreign_keys\u003dflavor_id,"},{"line_number":132,"context_line":"                              primaryjoin\u003d("},{"line_number":133,"context_line":"                                  \u0027FlavorExtraSpecs.flavor_id \u003d\u003d Flavors.id\u0027))"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_1f3d2cc4","line":130,"updated":"2016-03-17 18:34:25.000000000","message":"Looks good, deleted is omitted since we dropped soft delete in the API DB:\n\nhttps://github.com/openstack/nova/blob/master/nova/db/sqlalchemy/models.py#L1048-LL1052","commit_id":"b545504a2a973e898229ab8cf066d36e385c2c2d"},{"author":{"_account_id":18247,"name":"Mark Doffman","email":"mdoffman@linux.vnet.ibm.com","username":"doffm"},"change_message_id":"8c051d7430f7c336f97f1d308effca502e672844","unresolved":false,"context_lines":[{"line_number":130,"context_line":"    flavor \u003d orm.relationship(Flavors, backref\u003d\u0027extra_specs\u0027,"},{"line_number":131,"context_line":"                              foreign_keys\u003dflavor_id,"},{"line_number":132,"context_line":"                              primaryjoin\u003d("},{"line_number":133,"context_line":"                                  \u0027FlavorExtraSpecs.flavor_id \u003d\u003d Flavors.id\u0027))"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"class FlavorProjects(API_BASE):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_ff7b2026","line":133,"updated":"2016-03-17 18:27:11.000000000","message":"I understand the desire to add these attributes with backrefs. Does it have any relationship to the rest of the commit though? I couldn\u0027t find it used.","commit_id":"b545504a2a973e898229ab8cf066d36e385c2c2d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5182e5cb1f1ff3ed3bb184b2153e3bd2e5cdd6c6","unresolved":false,"context_lines":[{"line_number":130,"context_line":"    flavor \u003d orm.relationship(Flavors, backref\u003d\u0027extra_specs\u0027,"},{"line_number":131,"context_line":"                              foreign_keys\u003dflavor_id,"},{"line_number":132,"context_line":"                              primaryjoin\u003d("},{"line_number":133,"context_line":"                                  \u0027FlavorExtraSpecs.flavor_id \u003d\u003d Flavors.id\u0027))"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"class FlavorProjects(API_BASE):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_bae086fb","line":133,"in_reply_to":"1af94dfe_3abab60a","updated":"2016-03-17 18:40:53.000000000","message":"Right, and personally I prefer the backrefs. They usually confuse me because they are backwards, but I\u0027ve gotten used to it. The with_entities stuff is new and therefore scary to me.","commit_id":"b545504a2a973e898229ab8cf066d36e385c2c2d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"37ce78b87efa48dd77db9c8b61aac7357884cc95","unresolved":false,"context_lines":[{"line_number":130,"context_line":"    flavor \u003d orm.relationship(Flavors, backref\u003d\u0027extra_specs\u0027,"},{"line_number":131,"context_line":"                              foreign_keys\u003dflavor_id,"},{"line_number":132,"context_line":"                              primaryjoin\u003d("},{"line_number":133,"context_line":"                                  \u0027FlavorExtraSpecs.flavor_id \u003d\u003d Flavors.id\u0027))"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"class FlavorProjects(API_BASE):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_55c79563","line":133,"in_reply_to":"1af94dfe_bae086fb","updated":"2016-03-17 19:05:26.000000000","message":"Yeah, required for joinedload. Agree they\u0027re backwards, but, they\u0027re everywhere in our code.","commit_id":"b545504a2a973e898229ab8cf066d36e385c2c2d"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"4bc6de737c7df23cde0f967e9c1a5b34d1554fa2","unresolved":false,"context_lines":[{"line_number":130,"context_line":"    flavor \u003d orm.relationship(Flavors, backref\u003d\u0027extra_specs\u0027,"},{"line_number":131,"context_line":"                              foreign_keys\u003dflavor_id,"},{"line_number":132,"context_line":"                              primaryjoin\u003d("},{"line_number":133,"context_line":"                                  \u0027FlavorExtraSpecs.flavor_id \u003d\u003d Flavors.id\u0027))"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"class FlavorProjects(API_BASE):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_3abab60a","line":133,"in_reply_to":"1af94dfe_ff7b2026","updated":"2016-03-17 18:38:05.000000000","message":"It affects the joinedload in _flavor_get_query_from_db(). Without the backref the query needs to use with_entities and the result is a tuple rather than a single joined model.","commit_id":"b545504a2a973e898229ab8cf066d36e385c2c2d"}],"nova/objects/flavor.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7d9f296bd9c0e481c5ff4c1edbd0a425a9a47049","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        # model, which does not have these deprecated fields. When we"},{"line_number":82,"context_line":"        # remove compatibility with the old InstanceType model, we can"},{"line_number":83,"context_line":"        # remove this as well."},{"line_number":84,"context_line":"        if any(f not in db_flavor for f in DEPRECATED_FIELDS):"},{"line_number":85,"context_line":"            flavor.deleted_at \u003d None"},{"line_number":86,"context_line":"            flavor.deleted \u003d False"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_da1e325e","line":84,"range":{"start_line":84,"start_character":8,"end_line":84,"end_character":62},"updated":"2016-03-17 18:34:25.000000000","message":"Can we add a test where a deleted flavor from the cell db is converted to an API flavor object where we are setting the fields properly?  I don\u0027t think I\u0027ve seen a test case for something like this.","commit_id":"b545504a2a973e898229ab8cf066d36e385c2c2d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"37ce78b87efa48dd77db9c8b61aac7357884cc95","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        # model, which does not have these deprecated fields. When we"},{"line_number":82,"context_line":"        # remove compatibility with the old InstanceType model, we can"},{"line_number":83,"context_line":"        # remove this as well."},{"line_number":84,"context_line":"        if any(f not in db_flavor for f in DEPRECATED_FIELDS):"},{"line_number":85,"context_line":"            flavor.deleted_at \u003d None"},{"line_number":86,"context_line":"            flavor.deleted \u003d False"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_f5a22198","line":84,"range":{"start_line":84,"start_character":8,"end_line":84,"end_character":62},"in_reply_to":"1af94dfe_da1e325e","updated":"2016-03-17 19:05:26.000000000","message":"We\u0027re not converting anything yet, and we wouldn\u0027t bring those flavors over to the api database.\n\nAll the tests that load a flavor from the API database would fail without this, so it\u0027s getting tested that way.","commit_id":"b545504a2a973e898229ab8cf066d36e385c2c2d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0586c1482fc865ef430df5e78e152f824d20f993","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        # model, which does not have these deprecated fields. When we"},{"line_number":82,"context_line":"        # remove compatibility with the old InstanceType model, we can"},{"line_number":83,"context_line":"        # remove this as well."},{"line_number":84,"context_line":"        if any(f not in db_flavor for f in DEPRECATED_FIELDS):"},{"line_number":85,"context_line":"            flavor.deleted_at \u003d None"},{"line_number":86,"context_line":"            flavor.deleted \u003d False"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_108cfbd8","line":84,"range":{"start_line":84,"start_character":8,"end_line":84,"end_character":62},"in_reply_to":"1af94dfe_f5a22198","updated":"2016-03-17 19:35:14.000000000","message":"OK","commit_id":"b545504a2a973e898229ab8cf066d36e385c2c2d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7d9f296bd9c0e481c5ff4c1edbd0a425a9a47049","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        # remove this as well."},{"line_number":84,"context_line":"        if any(f not in db_flavor for f in DEPRECATED_FIELDS):"},{"line_number":85,"context_line":"            flavor.deleted_at \u003d None"},{"line_number":86,"context_line":"            flavor.deleted \u003d False"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        if \u0027extra_specs\u0027 in expected_attrs:"},{"line_number":89,"context_line":"            flavor.extra_specs \u003d db_flavor[\u0027extra_specs\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_5f05f411","line":86,"range":{"start_line":86,"start_character":12,"end_line":86,"end_character":34},"updated":"2016-03-17 18:34:25.000000000","message":"I guess this is a boolean:\n\nhttps://github.com/openstack/nova/blob/master/nova/objects/base.py#L198\n\nI expected this to be set to 0.","commit_id":"b545504a2a973e898229ab8cf066d36e385c2c2d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"37ce78b87efa48dd77db9c8b61aac7357884cc95","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        # remove this as well."},{"line_number":84,"context_line":"        if any(f not in db_flavor for f in DEPRECATED_FIELDS):"},{"line_number":85,"context_line":"            flavor.deleted_at \u003d None"},{"line_number":86,"context_line":"            flavor.deleted \u003d False"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        if \u0027extra_specs\u0027 in expected_attrs:"},{"line_number":89,"context_line":"            flavor.extra_specs \u003d db_flavor[\u0027extra_specs\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_95b8fdc9","line":86,"range":{"start_line":86,"start_character":12,"end_line":86,"end_character":34},"in_reply_to":"1af94dfe_5f05f411","updated":"2016-03-17 19:05:26.000000000","message":"Yeah, boolean on the object.","commit_id":"b545504a2a973e898229ab8cf066d36e385c2c2d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7d9f296bd9c0e481c5ff4c1edbd0a425a9a47049","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    @staticmethod"},{"line_number":98,"context_line":"    @db_api.api_context_manager.reader"},{"line_number":99,"context_line":"    def _flavor_get_query_from_db(context):"},{"line_number":100,"context_line":"        query \u003d context.session.query(api_models.Flavors).\\"},{"line_number":101,"context_line":"                options(joinedload(\u0027extra_specs\u0027))"},{"line_number":102,"context_line":"        if not context.is_admin:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_3fed88ef","line":99,"updated":"2016-03-17 18:34:25.000000000","message":"Matches:\n\nhttps://github.com/openstack/nova/blob/master/nova/db/sqlalchemy/api.py#L4987-L4997\n\nLGTM","commit_id":"b545504a2a973e898229ab8cf066d36e385c2c2d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7d9f296bd9c0e481c5ff4c1edbd0a425a9a47049","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        if not context.is_admin:"},{"line_number":103,"context_line":"            the_filter \u003d [api_models.Flavors.is_public \u003d\u003d true()]"},{"line_number":104,"context_line":"            the_filter.extend(["},{"line_number":105,"context_line":"                api_models.Flavors.projects.any(project_id\u003dcontext.project_id)"},{"line_number":106,"context_line":"            ])"},{"line_number":107,"context_line":"            query \u003d query.filter(or_(*the_filter))"},{"line_number":108,"context_line":"        return query"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_9a4f8a6a","line":105,"range":{"start_line":105,"start_character":16,"end_line":105,"end_character":43},"updated":"2016-03-17 18:34:25.000000000","message":"Mark, the projects backref is used here.","commit_id":"b545504a2a973e898229ab8cf066d36e385c2c2d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7d9f296bd9c0e481c5ff4c1edbd0a425a9a47049","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                        first()"},{"line_number":117,"context_line":"        if not result:"},{"line_number":118,"context_line":"            raise exception.FlavorNotFound(flavor_id\u003did)"},{"line_number":119,"context_line":"        return db_api._dict_with_extra_specs(result)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    @staticmethod"},{"line_number":122,"context_line":"    @require_context"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_da5592fa","line":119,"range":{"start_line":119,"start_character":22,"end_line":119,"end_character":44},"updated":"2016-03-17 18:34:25.000000000","message":"Mark, the flavor.extra_specs backref is used in here.","commit_id":"b545504a2a973e898229ab8cf066d36e385c2c2d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7d9f296bd9c0e481c5ff4c1edbd0a425a9a47049","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        \"\"\"Returns a dict describing specific flavor_id.\"\"\""},{"line_number":136,"context_line":"        result \u003d Flavor._flavor_get_query_from_db(context).\\"},{"line_number":137,"context_line":"                        filter_by(flavorid\u003dflavor_id).\\"},{"line_number":138,"context_line":"                        order_by(asc(\"id\")).\\"},{"line_number":139,"context_line":"                        first()"},{"line_number":140,"context_line":"        if not result:"},{"line_number":141,"context_line":"            raise exception.FlavorNotFound(flavor_id\u003dflavor_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_bf9cf85d","line":138,"range":{"start_line":138,"start_character":37,"end_line":138,"end_character":41},"updated":"2016-03-17 18:34:25.000000000","message":"nit: we could use api_models.Flavors.id but it\u0027s not a huge deal.","commit_id":"b545504a2a973e898229ab8cf066d36e385c2c2d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7d9f296bd9c0e481c5ff4c1edbd0a425a9a47049","unresolved":false,"context_lines":[{"line_number":197,"context_line":"    @base.remotable_classmethod"},{"line_number":198,"context_line":"    def get_by_id(cls, context, id):"},{"line_number":199,"context_line":"        try:"},{"line_number":200,"context_line":"            db_flavor \u003d cls._flavor_get_from_db(context, id)"},{"line_number":201,"context_line":"        except exception.FlavorNotFound:"},{"line_number":202,"context_line":"            db_flavor \u003d db.flavor_get(context, id)"},{"line_number":203,"context_line":"        return cls._from_db_object(context, cls(context), db_flavor,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_3f8c687e","line":200,"range":{"start_line":200,"start_character":28,"end_line":200,"end_character":47},"updated":"2016-03-17 18:34:25.000000000","message":"nit: I might call this _flavor_get_by_id_from_db, but I guess this name follows the DB API method we have in the cell DB, so it\u0027s fine.","commit_id":"b545504a2a973e898229ab8cf066d36e385c2c2d"}],"nova/tests/unit/api/openstack/compute/test_flavor_access.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7d9f296bd9c0e481c5ff4c1edbd0a425a9a47049","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        for d1, d2 in zip(result, expected):"},{"line_number":156,"context_line":"            self.assertEqual(d1[\u0027id\u0027], d2[\u0027id\u0027])"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    @mock.patch(\u0027nova.objects.Flavor._flavor_get_by_flavor_id_from_db\u0027,"},{"line_number":159,"context_line":"                side_effect\u003dexception.FlavorNotFound(flavor_id\u003d\u0027foo\u0027))"},{"line_number":160,"context_line":"    def test_list_flavor_access_public(self, mock_api_get):"},{"line_number":161,"context_line":"        # query os-flavor-access on public flavor should return 404"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_3f1c68c0","line":158,"updated":"2016-03-17 18:34:25.000000000","message":"This is only a temporary shim right? It might be nicer to just do this once in the setUp with a stub_out...","commit_id":"b545504a2a973e898229ab8cf066d36e385c2c2d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0586c1482fc865ef430df5e78e152f824d20f993","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        for d1, d2 in zip(result, expected):"},{"line_number":156,"context_line":"            self.assertEqual(d1[\u0027id\u0027], d2[\u0027id\u0027])"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    @mock.patch(\u0027nova.objects.Flavor._flavor_get_by_flavor_id_from_db\u0027,"},{"line_number":159,"context_line":"                side_effect\u003dexception.FlavorNotFound(flavor_id\u003d\u0027foo\u0027))"},{"line_number":160,"context_line":"    def test_list_flavor_access_public(self, mock_api_get):"},{"line_number":161,"context_line":"        # query os-flavor-access on public flavor should return 404"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_9065ab1f","line":158,"in_reply_to":"1af94dfe_15298de6","updated":"2016-03-17 19:35:14.000000000","message":"Yeah, there are also stubs in setUp that aren\u0027t probably needed for all of the test cases either. I\u0027m fine with leaving it explicit on each test case. I know one Mr Dague would probably want it that way.","commit_id":"b545504a2a973e898229ab8cf066d36e385c2c2d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"37ce78b87efa48dd77db9c8b61aac7357884cc95","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        for d1, d2 in zip(result, expected):"},{"line_number":156,"context_line":"            self.assertEqual(d1[\u0027id\u0027], d2[\u0027id\u0027])"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    @mock.patch(\u0027nova.objects.Flavor._flavor_get_by_flavor_id_from_db\u0027,"},{"line_number":159,"context_line":"                side_effect\u003dexception.FlavorNotFound(flavor_id\u003d\u0027foo\u0027))"},{"line_number":160,"context_line":"    def test_list_flavor_access_public(self, mock_api_get):"},{"line_number":161,"context_line":"        # query os-flavor-access on public flavor should return 404"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_15298de6","line":158,"in_reply_to":"1af94dfe_3f1c68c0","updated":"2016-03-17 19:05:26.000000000","message":"It is, but I didn\u0027t do it in setUp() because I don\u0027t want it to apply to places where I don\u0027t need it, in case it changed some behavior without noticing. There are multiple tests here that don\u0027t need it.","commit_id":"b545504a2a973e898229ab8cf066d36e385c2c2d"}],"nova/tests/unit/objects/test_flavor.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7d9f296bd9c0e481c5ff4c1edbd0a425a9a47049","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    @staticmethod"},{"line_number":72,"context_line":"    def _compare(test, db, obj):"},{"line_number":73,"context_line":"        for field, value in db.items():"},{"line_number":74,"context_line":"            if (isinstance(db, api_models.API_BASE) and"},{"line_number":75,"context_line":"                  isinstance(value, datetime.datetime)):"},{"line_number":76,"context_line":"                continue"},{"line_number":77,"context_line":"            test.assertEqual(db[field], obj[field])"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def test_get_by_id(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_7fcef02e","line":76,"range":{"start_line":74,"start_character":12,"end_line":76,"end_character":24},"updated":"2016-03-17 18:34:25.000000000","message":"Can you add a comment on this conditional for why we skip datetime fields for the API DB?","commit_id":"b545504a2a973e898229ab8cf066d36e385c2c2d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"37ce78b87efa48dd77db9c8b61aac7357884cc95","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    @staticmethod"},{"line_number":72,"context_line":"    def _compare(test, db, obj):"},{"line_number":73,"context_line":"        for field, value in db.items():"},{"line_number":74,"context_line":"            if (isinstance(db, api_models.API_BASE) and"},{"line_number":75,"context_line":"                  isinstance(value, datetime.datetime)):"},{"line_number":76,"context_line":"                continue"},{"line_number":77,"context_line":"            test.assertEqual(db[field], obj[field])"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def test_get_by_id(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_1557cd58","line":76,"range":{"start_line":74,"start_character":12,"end_line":76,"end_character":24},"in_reply_to":"1af94dfe_7fcef02e","updated":"2016-03-17 19:05:26.000000000","message":"It\u0027s really just that we need to skip actual DB models (regardless of where they come from) but sure.","commit_id":"b545504a2a973e898229ab8cf066d36e385c2c2d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7d9f296bd9c0e481c5ff4c1edbd0a425a9a47049","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        flavor.update(fake_db_flavor)"},{"line_number":126,"context_line":"        flavor.save(context.session)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        fake_db_extra_spec \u003d {\u0027flavor_id\u0027: flavor[\u0027id\u0027],"},{"line_number":129,"context_line":"                              \u0027key\u0027: \u0027foo\u0027, \u0027value\u0027: \u0027bar\u0027}"},{"line_number":130,"context_line":"        flavor_es \u003d api_models.FlavorExtraSpecs()"},{"line_number":131,"context_line":"        flavor_es.update(fake_db_extra_spec)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_5fa97423","line":128,"range":{"start_line":128,"start_character":43,"end_line":128,"end_character":55},"updated":"2016-03-17 18:34:25.000000000","message":"flavor.id for dict compat removal!","commit_id":"b545504a2a973e898229ab8cf066d36e385c2c2d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"37ce78b87efa48dd77db9c8b61aac7357884cc95","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        flavor.update(fake_db_flavor)"},{"line_number":126,"context_line":"        flavor.save(context.session)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        fake_db_extra_spec \u003d {\u0027flavor_id\u0027: flavor[\u0027id\u0027],"},{"line_number":129,"context_line":"                              \u0027key\u0027: \u0027foo\u0027, \u0027value\u0027: \u0027bar\u0027}"},{"line_number":130,"context_line":"        flavor_es \u003d api_models.FlavorExtraSpecs()"},{"line_number":131,"context_line":"        flavor_es.update(fake_db_extra_spec)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_75ce112f","line":128,"range":{"start_line":128,"start_character":43,"end_line":128,"end_character":55},"in_reply_to":"1af94dfe_5fa97423","updated":"2016-03-17 19:05:26.000000000","message":"Here flavor is a SQLA model, so it\u0027s fine :)","commit_id":"b545504a2a973e898229ab8cf066d36e385c2c2d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0586c1482fc865ef430df5e78e152f824d20f993","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        flavor.update(fake_db_flavor)"},{"line_number":126,"context_line":"        flavor.save(context.session)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        fake_db_extra_spec \u003d {\u0027flavor_id\u0027: flavor[\u0027id\u0027],"},{"line_number":129,"context_line":"                              \u0027key\u0027: \u0027foo\u0027, \u0027value\u0027: \u0027bar\u0027}"},{"line_number":130,"context_line":"        flavor_es \u003d api_models.FlavorExtraSpecs()"},{"line_number":131,"context_line":"        flavor_es.update(fake_db_extra_spec)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_2b8c2a7e","line":128,"range":{"start_line":128,"start_character":43,"end_line":128,"end_character":55},"in_reply_to":"1af94dfe_75ce112f","updated":"2016-03-17 19:35:14.000000000","message":"oh gdi you\u0027re right\n\nThe sqla models and nova objects look too similar to me.","commit_id":"b545504a2a973e898229ab8cf066d36e385c2c2d"}]}
