)]}'
{"neutron/objects/base.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4674770ab9e632f6c29f3bfd2a918409afd65da2","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    @classmethod"},{"line_number":145,"context_line":"    def modify_fields_to_db(cls, fields):"},{"line_number":146,"context_line":"        \"\"\""},{"line_number":147,"context_line":"        Enables to modify the fields and its content before data is inserted"},{"line_number":148,"context_line":"        into DB."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"         It uses the fields_need_translation dict with structure:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_9aecef2a","line":147,"range":{"start_line":147,"start_character":14,"end_line":147,"end_character":15},"updated":"2016-03-16 16:50:02.000000000","message":"doh","commit_id":"881397baee21153ee474cdb92bc98a81bbc10df6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a66f9e79aa88acdf1bc10ccd546448e9f2dc5f48","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        }"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        :param fields: dict of fields from NeutronDbObject"},{"line_number":156,"context_line":"        :return: modified dict of fields"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        result \u003d copy.deepcopy(dict(fields))"},{"line_number":159,"context_line":"        for field, field_db in cls.fields_need_translation.items():"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_3ff94d81","line":156,"updated":"2016-03-16 16:50:19.000000000","message":"Should we then also return models here, so that modify_fields_to_db(modify_fields_from_db(model)) \u003d\u003d model?","commit_id":"881397baee21153ee474cdb92bc98a81bbc10df6"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"8d994c6a42b5af3440df1fc091ba1b550e4e8937","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        }"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        :param fields: dict of fields from NeutronDbObject"},{"line_number":156,"context_line":"        :return: modified dict of fields"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        result \u003d copy.deepcopy(dict(fields))"},{"line_number":159,"context_line":"        for field, field_db in cls.fields_need_translation.items():"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_a1febf35","line":156,"in_reply_to":"1af94dfe_3a7ddb1c","updated":"2016-03-17 10:47:27.000000000","message":"I left this unchanged, we can discuss further in next PS.","commit_id":"881397baee21153ee474cdb92bc98a81bbc10df6"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a94b50e58bebfea9e4cb34acea526ff5f4ee65ce","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        }"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        :param fields: dict of fields from NeutronDbObject"},{"line_number":156,"context_line":"        :return: modified dict of fields"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        result \u003d copy.deepcopy(dict(fields))"},{"line_number":159,"context_line":"        for field, field_db in cls.fields_need_translation.items():"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_3a7ddb1c","line":156,"in_reply_to":"1af94dfe_3ff94d81","updated":"2016-03-16 16:59:00.000000000","message":"I think when we pass the values to object constructor, it must be dict-like. Or we can define another method that translates db model to dict and then pass it to this method.","commit_id":"881397baee21153ee474cdb92bc98a81bbc10df6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a66f9e79aa88acdf1bc10ccd546448e9f2dc5f48","unresolved":false,"context_lines":[{"line_number":164,"context_line":"    @classmethod"},{"line_number":165,"context_line":"    def modify_fields_from_db(cls, db_obj):"},{"line_number":166,"context_line":"        \"\"\""},{"line_number":167,"context_line":"        Enable to modify the fields and its content after data were fetched"},{"line_number":168,"context_line":"        from DB."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        It uses the fields_need_translation dict with structure:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_7fc91578","line":167,"range":{"start_line":167,"start_character":8,"end_line":167,"end_character":14},"updated":"2016-03-16 16:50:19.000000000","message":"Enables? Or maybe better \u0027Allows\u0027?","commit_id":"881397baee21153ee474cdb92bc98a81bbc10df6"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a94b50e58bebfea9e4cb34acea526ff5f4ee65ce","unresolved":false,"context_lines":[{"line_number":164,"context_line":"    @classmethod"},{"line_number":165,"context_line":"    def modify_fields_from_db(cls, db_obj):"},{"line_number":166,"context_line":"        \"\"\""},{"line_number":167,"context_line":"        Enable to modify the fields and its content after data were fetched"},{"line_number":168,"context_line":"        from DB."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        It uses the fields_need_translation dict with structure:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_bab60bda","line":167,"range":{"start_line":167,"start_character":8,"end_line":167,"end_character":14},"in_reply_to":"1af94dfe_7fc91578","updated":"2016-03-16 16:59:00.000000000","message":"As per pep257 doc string should be imperative.","commit_id":"881397baee21153ee474cdb92bc98a81bbc10df6"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a94b50e58bebfea9e4cb34acea526ff5f4ee65ce","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        :param db_obj: object model fetched from database"},{"line_number":176,"context_line":"        :return: modified dict of DB values"},{"line_number":177,"context_line":"        \"\"\""},{"line_number":178,"context_line":"        result \u003d {field: getattr(db_obj, field, None) for field in cls.fields"},{"line_number":179,"context_line":"                  if field not in cls.synthetic_fields}"},{"line_number":180,"context_line":"        for field, field_db in cls.fields_need_translation.items():"},{"line_number":181,"context_line":"            if field_db in result:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_ba372baf","line":178,"range":{"start_line":178,"start_character":46,"end_line":178,"end_character":52},"updated":"2016-03-16 16:59:00.000000000","message":"Can it happen that db model won\u0027t have attribute that is defined in fields?","commit_id":"881397baee21153ee474cdb92bc98a81bbc10df6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"f71c63f1e73f35d5bcb95c674cd711f4a60748d0","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        for field, field_db in cls.fields_need_translation.items():"},{"line_number":218,"context_line":"            if field_db in result:"},{"line_number":219,"context_line":"                result[field] \u003d result.pop(field_db)"},{"line_number":220,"context_line":"        return {field: value for field, value in result.items()"},{"line_number":221,"context_line":"                if value is not None}"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa0719c6_1b9274f6","line":220,"updated":"2016-03-23 10:50:38.000000000","message":"Should we first run that filter, before translation in line 217?","commit_id":"6145c02f474c79168194b6c13309a363f7521966"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b3d946f5dda3ca9da11556177ad7985fa563381b","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        for field, field_db in cls.fields_need_translation.items():"},{"line_number":218,"context_line":"            if field_db in result:"},{"line_number":219,"context_line":"                result[field] \u003d result.pop(field_db)"},{"line_number":220,"context_line":"        return {field: value for field, value in result.items()"},{"line_number":221,"context_line":"                if value is not None}"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa0719c6_3b5495c8","line":220,"in_reply_to":"fa0719c6_1b9274f6","updated":"2016-03-23 11:29:10.000000000","message":"I don\u0027t think it will make any difference. I can change it. I\u0027m also thinking that we don\u0027t have this covered by UT.","commit_id":"6145c02f474c79168194b6c13309a363f7521966"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"b05b821d4023b38e44cfc50f7472a954252ac657","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        for field, field_db in cls.fields_need_translation.items():"},{"line_number":218,"context_line":"            if field_db in result:"},{"line_number":219,"context_line":"                result[field] \u003d result.pop(field_db)"},{"line_number":220,"context_line":"        return {field: value for field, value in result.items()"},{"line_number":221,"context_line":"                if value is not None}"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa0719c6_5f1cce69","line":220,"in_reply_to":"fa0719c6_3b5495c8","updated":"2016-03-23 13:09:51.000000000","message":"It does not make visible difference, it just postpones translation to when we are sure we retain the value.","commit_id":"6145c02f474c79168194b6c13309a363f7521966"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"38e88ae714b46ca16d404e06ca06f4fc1d8dd41b","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        for field, field_db in cls.fields_need_translation.items():"},{"line_number":218,"context_line":"            if field_db in result:"},{"line_number":219,"context_line":"                result[field] \u003d result.pop(field_db)"},{"line_number":220,"context_line":"        return {field: value for field, value in result.items()"},{"line_number":221,"context_line":"                if value is not None}"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa0719c6_df429e67","line":220,"in_reply_to":"fa0719c6_5f1cce69","updated":"2016-03-23 13:23:40.000000000","message":"Done","commit_id":"6145c02f474c79168194b6c13309a363f7521966"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"80723a969675eb7c3b747652949705b8f7846e57","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        :param db_obj: dict of object fetched from database"},{"line_number":214,"context_line":"        :return: modified dict of DB values"},{"line_number":215,"context_line":"        \"\"\""},{"line_number":216,"context_line":"        result \u003d {field: value for field, value in dict(db_obj).items()"},{"line_number":217,"context_line":"                  if value is not None}"},{"line_number":218,"context_line":"        for field, field_db in cls.fields_need_translation.items():"},{"line_number":219,"context_line":"            if field_db in result:"},{"line_number":220,"context_line":"                result[field] \u003d result.pop(field_db)"},{"line_number":221,"context_line":"        return result"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a061dce_f10f1e86","line":220,"range":{"start_line":216,"start_character":8,"end_line":220,"end_character":52},"updated":"2016-04-05 13:50:29.000000000","message":"nit: Is it possible to merge these two in a single iteration?","commit_id":"f28679c7b06dcbf54dfcd2c94e6f3a3c96f5d20b"}],"neutron/objects/qos/policy.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a66f9e79aa88acdf1bc10ccd546448e9f2dc5f48","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    network_binding_model \u003d qos_db_model.QosNetworkPolicyBinding"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    fields \u003d {"},{"line_number":49,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":50,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":51,"context_line":"        \u0027name\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":52,"context_line":"        \u0027description\u0027: obj_fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_5fe1b999","line":49,"updated":"2016-03-16 16:50:19.000000000","message":"nullable id? I don\u0027t think qos policy should have it.","commit_id":"881397baee21153ee474cdb92bc98a81bbc10df6"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"8d994c6a42b5af3440df1fc091ba1b550e4e8937","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    network_binding_model \u003d qos_db_model.QosNetworkPolicyBinding"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    fields \u003d {"},{"line_number":49,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":50,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":51,"context_line":"        \u0027name\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":52,"context_line":"        \u0027description\u0027: obj_fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_64fa29bf","line":49,"in_reply_to":"1af94dfe_5a16e7f1","updated":"2016-03-17 10:47:27.000000000","message":"Done","commit_id":"881397baee21153ee474cdb92bc98a81bbc10df6"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a94b50e58bebfea9e4cb34acea526ff5f4ee65ce","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    network_binding_model \u003d qos_db_model.QosNetworkPolicyBinding"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    fields \u003d {"},{"line_number":49,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":50,"context_line":"        \u0027tenant_id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":51,"context_line":"        \u0027name\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":52,"context_line":"        \u0027description\u0027: obj_fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_5a16e7f1","line":49,"in_reply_to":"1af94dfe_5fe1b999","updated":"2016-03-16 16:59:00.000000000","message":"Yeah, I think that too, but model has it defined as nullable.","commit_id":"881397baee21153ee474cdb92bc98a81bbc10df6"}],"neutron/tests/unit/objects/test_base.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a66f9e79aa88acdf1bc10ccd546448e9f2dc5f48","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                                   \u0027VersionedObject.obj_from_primitive\u0027)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class FakeModel(dict):"},{"line_number":37,"context_line":"    pass"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_3f266dce","line":36,"updated":"2016-03-16 16:50:19.000000000","message":"Should it instead be some base sqla class?","commit_id":"881397baee21153ee474cdb92bc98a81bbc10df6"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a94b50e58bebfea9e4cb34acea526ff5f4ee65ce","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                                   \u0027VersionedObject.obj_from_primitive\u0027)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class FakeModel(dict):"},{"line_number":37,"context_line":"    pass"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_7a4ac3c6","line":36,"in_reply_to":"1af94dfe_3f266dce","updated":"2016-03-16 16:59:00.000000000","message":"Yes, good idea. Maybe when this is dict we still can have some code in unittests that treats models dict-like and we don\u0027t want that.","commit_id":"881397baee21153ee474cdb92bc98a81bbc10df6"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"8d994c6a42b5af3440df1fc091ba1b550e4e8937","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                                   \u0027VersionedObject.obj_from_primitive\u0027)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class FakeModel(dict):"},{"line_number":37,"context_line":"    pass"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_e14a87ab","line":36,"in_reply_to":"1af94dfe_7a4ac3c6","updated":"2016-03-17 10:47:27.000000000","message":"I made this back to subclass of object and set attributes dynamically.","commit_id":"881397baee21153ee474cdb92bc98a81bbc10df6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a66f9e79aa88acdf1bc10ccd546448e9f2dc5f48","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    db_model \u003d FakeModel"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    fields \u003d {"},{"line_number":48,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":49,"context_line":"        \u0027field1\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":50,"context_line":"        \u0027field2\u0027: obj_fields.StringField(nullable\u003dTrue)"},{"line_number":51,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_9a298f8c","line":48,"updated":"2016-03-16 16:50:19.000000000","message":"why do we need to switch them all to nullable? How about keeping the object intact, and if you need to check for all-nullable case specifically, you add a new object and define tests for it?","commit_id":"881397baee21153ee474cdb92bc98a81bbc10df6"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a94b50e58bebfea9e4cb34acea526ff5f4ee65ce","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    db_model \u003d FakeModel"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    fields \u003d {"},{"line_number":48,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":49,"context_line":"        \u0027field1\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":50,"context_line":"        \u0027field2\u0027: obj_fields.StringField(nullable\u003dTrue)"},{"line_number":51,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_dad4b7be","line":48,"in_reply_to":"1af94dfe_9a298f8c","updated":"2016-03-16 16:59:00.000000000","message":"There are checks in oslo that raises exception when not nullable field returns null from db: https://github.com/openstack/oslo.versionedobjects/blob/master/oslo_versionedobjects/fields.py#L168","commit_id":"881397baee21153ee474cdb92bc98a81bbc10df6"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"8d994c6a42b5af3440df1fc091ba1b550e4e8937","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    db_model \u003d FakeModel"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    fields \u003d {"},{"line_number":48,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":49,"context_line":"        \u0027field1\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":50,"context_line":"        \u0027field2\u0027: obj_fields.StringField(nullable\u003dTrue)"},{"line_number":51,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_e42c794c","line":48,"in_reply_to":"1af94dfe_dad4b7be","updated":"2016-03-17 10:47:27.000000000","message":"Done","commit_id":"881397baee21153ee474cdb92bc98a81bbc10df6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a66f9e79aa88acdf1bc10ccd546448e9f2dc5f48","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        self.db_objs \u003d list(self.get_random_fields() for _ in range(3))"},{"line_number":162,"context_line":"        self.db_obj \u003d self.db_objs[0]"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        self.obj_fields \u003d [self._test_class.modify_fields_from_db(db_obj)"},{"line_number":165,"context_line":"                           for db_obj in self.db_objs]"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        valid_field \u003d [f for f in self._test_class.fields"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_5a47074b","line":164,"updated":"2016-03-16 16:50:19.000000000","message":"I see you love to touch random code.","commit_id":"881397baee21153ee474cdb92bc98a81bbc10df6"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a94b50e58bebfea9e4cb34acea526ff5f4ee65ce","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        self.db_objs \u003d list(self.get_random_fields() for _ in range(3))"},{"line_number":162,"context_line":"        self.db_obj \u003d self.db_objs[0]"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        self.obj_fields \u003d [self._test_class.modify_fields_from_db(db_obj)"},{"line_number":165,"context_line":"                           for db_obj in self.db_objs]"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        valid_field \u003d [f for f in self._test_class.fields"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_9a986f1d","line":164,"in_reply_to":"1af94dfe_5a47074b","updated":"2016-03-16 16:59:00.000000000","message":"Oops, I think I was modifying this code and at the end it ended the same. I\u0027ll revert.","commit_id":"881397baee21153ee474cdb92bc98a81bbc10df6"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"8d994c6a42b5af3440df1fc091ba1b550e4e8937","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        self.db_objs \u003d list(self.get_random_fields() for _ in range(3))"},{"line_number":162,"context_line":"        self.db_obj \u003d self.db_objs[0]"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        self.obj_fields \u003d [self._test_class.modify_fields_from_db(db_obj)"},{"line_number":165,"context_line":"                           for db_obj in self.db_objs]"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        valid_field \u003d [f for f in self._test_class.fields"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_c407bd7f","line":164,"in_reply_to":"1af94dfe_9a986f1d","updated":"2016-03-17 10:47:27.000000000","message":"Done","commit_id":"881397baee21153ee474cdb92bc98a81bbc10df6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a66f9e79aa88acdf1bc10ccd546448e9f2dc5f48","unresolved":false,"context_lines":[{"line_number":170,"context_line":"                                   self.obj_fields[0][valid_field]}"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    @classmethod"},{"line_number":173,"context_line":"    def get_random_fields(cls, obj_cls\u003dNone):"},{"line_number":174,"context_line":"        obj_cls \u003d obj_cls or cls._test_class"},{"line_number":175,"context_line":"        fields \u003d {}"},{"line_number":176,"context_line":"        for field, field_obj in obj_cls.fields.items():"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_ba9babc8","line":173,"updated":"2016-03-16 16:50:19.000000000","message":"if it now returns a model, should we rename the method?","commit_id":"881397baee21153ee474cdb92bc98a81bbc10df6"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"8d994c6a42b5af3440df1fc091ba1b550e4e8937","unresolved":false,"context_lines":[{"line_number":170,"context_line":"                                   self.obj_fields[0][valid_field]}"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    @classmethod"},{"line_number":173,"context_line":"    def get_random_fields(cls, obj_cls\u003dNone):"},{"line_number":174,"context_line":"        obj_cls \u003d obj_cls or cls._test_class"},{"line_number":175,"context_line":"        fields \u003d {}"},{"line_number":176,"context_line":"        for field, field_obj in obj_cls.fields.items():"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_61d5d7b7","line":173,"in_reply_to":"1af94dfe_7a82c395","updated":"2016-03-17 10:47:27.000000000","message":"Done","commit_id":"881397baee21153ee474cdb92bc98a81bbc10df6"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a94b50e58bebfea9e4cb34acea526ff5f4ee65ce","unresolved":false,"context_lines":[{"line_number":170,"context_line":"                                   self.obj_fields[0][valid_field]}"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    @classmethod"},{"line_number":173,"context_line":"    def get_random_fields(cls, obj_cls\u003dNone):"},{"line_number":174,"context_line":"        obj_cls \u003d obj_cls or cls._test_class"},{"line_number":175,"context_line":"        fields \u003d {}"},{"line_number":176,"context_line":"        for field, field_obj in obj_cls.fields.items():"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_7a82c395","line":173,"in_reply_to":"1af94dfe_ba9babc8","updated":"2016-03-16 16:59:00.000000000","message":"Yep","commit_id":"881397baee21153ee474cdb92bc98a81bbc10df6"}],"neutron/tests/unit/objects/test_objects.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a66f9e79aa88acdf1bc10ccd546448e9f2dc5f48","unresolved":false,"context_lines":[{"line_number":28,"context_line":"object_data \u003d {"},{"line_number":29,"context_line":"    \u0027QosBandwidthLimitRule\u0027: \u00271.0-4e44a8f5c2895ab1278399f87b40a13d\u0027,"},{"line_number":30,"context_line":"    \u0027QosRuleType\u0027: \u00271.0-d0df298d49eeffab91af18d1a4cf7eaf\u0027,"},{"line_number":31,"context_line":"    \u0027QosPolicy\u0027: \u00271.0-167b06282d5ced2785ca24552d5b50b2\u0027,"},{"line_number":32,"context_line":"}"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_ba828b50","line":31,"updated":"2016-03-16 16:50:19.000000000","message":"Does it suggest we need to provide backporting rules maybe?","commit_id":"881397baee21153ee474cdb92bc98a81bbc10df6"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a94b50e58bebfea9e4cb34acea526ff5f4ee65ce","unresolved":false,"context_lines":[{"line_number":28,"context_line":"object_data \u003d {"},{"line_number":29,"context_line":"    \u0027QosBandwidthLimitRule\u0027: \u00271.0-4e44a8f5c2895ab1278399f87b40a13d\u0027,"},{"line_number":30,"context_line":"    \u0027QosRuleType\u0027: \u00271.0-d0df298d49eeffab91af18d1a4cf7eaf\u0027,"},{"line_number":31,"context_line":"    \u0027QosPolicy\u0027: \u00271.0-167b06282d5ced2785ca24552d5b50b2\u0027,"},{"line_number":32,"context_line":"}"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_7a59235a","line":31,"in_reply_to":"1af94dfe_ba828b50","updated":"2016-03-16 16:59:00.000000000","message":"What is that?","commit_id":"881397baee21153ee474cdb92bc98a81bbc10df6"}],"neutron/tests/unit/objects/test_rbac_db.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a66f9e79aa88acdf1bc10ccd546448e9f2dc5f48","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    db_model \u003d FakeDbModel"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    fields \u003d {"},{"line_number":54,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":55,"context_line":"        \u0027field1\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":56,"context_line":"        \u0027field2\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":57,"context_line":"        \u0027shared\u0027: obj_fields.BooleanField(default\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_7ae80311","line":54,"updated":"2016-03-16 16:50:19.000000000","message":"why all nullable here? you should not need to touch the test and it should still pass. if that\u0027s not the case, there is some bug in your code.","commit_id":"881397baee21153ee474cdb92bc98a81bbc10df6"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a94b50e58bebfea9e4cb34acea526ff5f4ee65ce","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    db_model \u003d FakeDbModel"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    fields \u003d {"},{"line_number":54,"context_line":"        \u0027id\u0027: obj_fields.UUIDField(nullable\u003dTrue),"},{"line_number":55,"context_line":"        \u0027field1\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":56,"context_line":"        \u0027field2\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":57,"context_line":"        \u0027shared\u0027: obj_fields.BooleanField(default\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_fa3b73e9","line":54,"in_reply_to":"1af94dfe_7ae80311","updated":"2016-03-16 16:59:00.000000000","message":"Answered in previous comments :)","commit_id":"881397baee21153ee474cdb92bc98a81bbc10df6"}]}
