)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"eaf2c30f922fa0cd440bdd2630131caecfa924bf","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add revision_number to standard attr for OVO"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This adds the revision number field to the standard attributes"},{"line_number":10,"context_line":"OVO code. All standard attribute OVO version numbers needed to"},{"line_number":11,"context_line":"be bumped but the version numbers were kept the same since the"},{"line_number":12,"context_line":"changed objects haven\u0027t been released yet."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3aaa91ec_d82f3786","line":9,"updated":"2016-06-24 10:26:51.000000000","message":"nit: standard attributes as a timestamp field ?","commit_id":"5e6af629b9ffaf63e6422a6d1d6f90f13adb00bf"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"0c1f8a242c4c49d49ea20d522214277a84c63707","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add revision_number to standard attr for OVO"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This adds the revision number field to the standard attributes"},{"line_number":10,"context_line":"OVO code. All standard attribute OVO version numbers needed to"},{"line_number":11,"context_line":"be bumped but the version numbers were kept the same since the"},{"line_number":12,"context_line":"changed objects haven\u0027t been released yet."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3aaa91ec_5b86a1db","line":9,"in_reply_to":"3aaa91ec_d82f3786","updated":"2016-06-24 11:04:52.000000000","message":"It adds it to the unit test to prevent it from trying to provide a value. Otherwise it doesn\u0027t have anything to do with the timestamps.","commit_id":"5e6af629b9ffaf63e6422a6d1d6f90f13adb00bf"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7e08f8f6ff59408c7bb73f0ee23816019ee2ed59","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This adds the revision number field to the standard attributes"},{"line_number":10,"context_line":"OVO code. All standard attribute OVO version numbers needed to"},{"line_number":11,"context_line":"be bumped but the version numbers were kept the same since the"},{"line_number":12,"context_line":"changed objects haven\u0027t been released yet."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Partially-Implements: blueprint push-notifications"},{"line_number":15,"context_line":"Change-Id: I864fe6964b32c7801465e8ebf45ce48f3e8e0cc9"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3aaa91ec_cfe2c89f","line":12,"updated":"2016-06-30 11:28:40.000000000","message":"depends on what you mean by \u0027released\u0027. if you mean they are not exposed on the wire, yes, that\u0027s correct; but at least SubnetPool is used in db code. But for that case, it\u0027s indeed fine to leave the version.","commit_id":"5e6af629b9ffaf63e6422a6d1d6f90f13adb00bf"}],"neutron/db/model_base.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"631b11750cdbcd8fcdc9bc57762a815180169d22","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    def __init__(self, description\u003d\u0027\u0027, *args, **kwargs):"},{"line_number":146,"context_line":"        # FIXME(kevinbenton): this is a workaround because the versioned"},{"line_number":147,"context_line":"        # objects code keeps trying to populate revision number"},{"line_number":148,"context_line":"        kwargs.pop(\u0027revision_number\u0027, None)"},{"line_number":149,"context_line":"        super(HasStandardAttributes, self).__init__(*args, **kwargs)"},{"line_number":150,"context_line":"        # here we automatically create the related standard attribute object"},{"line_number":151,"context_line":"        self.standard_attr \u003d StandardAttribute("}],"source_content_type":"text/x-python","patch_set":2,"id":"7aa08908_2c9e6f07","line":148,"updated":"2016-06-16 09:37:38.000000000","message":"If it\u0027s not set by user, I don\u0027t think the objects should try to write the attribute in the model. We can also forbid changing the field thru redefining some base methods, like __setattr__.","commit_id":"fc594bfecd7972656deb57b0fac4a81c2bbc756c"}],"neutron/objects/extensions/standardattributes.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"631b11750cdbcd8fcdc9bc57762a815180169d22","unresolved":false,"context_lines":[{"line_number":13,"context_line":"from oslo_versionedobjects import fields as obj_fields"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"STANDARD_ATTRIBUTES \u003d {"},{"line_number":16,"context_line":"    \u0027revision_number\u0027: obj_fields.IntegerField(),"},{"line_number":17,"context_line":"    \u0027description\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":18,"context_line":"    \u0027created_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue, tzinfo_aware\u003dFalse),"},{"line_number":19,"context_line":"    \u0027updated_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue, tzinfo_aware\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":2,"id":"7aa08908_cc19ab89","line":16,"updated":"2016-06-16 09:37:38.000000000","message":"I think we can pass read_only\u003dTrue to the field constructor to forbid object users to set it. Though then we need to solve somehow how we load the attribute when fetching from database.","commit_id":"fc594bfecd7972656deb57b0fac4a81c2bbc756c"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"08a61c2297775d4c27bbdbd21e6485a37bf2fb4c","unresolved":false,"context_lines":[{"line_number":13,"context_line":"from oslo_versionedobjects import fields as obj_fields"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"STANDARD_ATTRIBUTES \u003d {"},{"line_number":16,"context_line":"    \u0027revision_number\u0027: obj_fields.IntegerField(),"},{"line_number":17,"context_line":"    \u0027description\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":18,"context_line":"    \u0027created_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue, tzinfo_aware\u003dFalse),"},{"line_number":19,"context_line":"    \u0027updated_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue, tzinfo_aware\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":2,"id":"7aa08908_0d81ea4d","line":16,"in_reply_to":"7aa08908_ad2ed689","updated":"2016-06-16 11:14:28.000000000","message":"In the following patch I see you add revision_number to fields_no_update - maybe it\u0027s worth to add it here somewhere on L28","commit_id":"fc594bfecd7972656deb57b0fac4a81c2bbc756c"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"ecb19268f7d304f451df637797e3092615e0154d","unresolved":false,"context_lines":[{"line_number":13,"context_line":"from oslo_versionedobjects import fields as obj_fields"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"STANDARD_ATTRIBUTES \u003d {"},{"line_number":16,"context_line":"    \u0027revision_number\u0027: obj_fields.IntegerField(),"},{"line_number":17,"context_line":"    \u0027description\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":18,"context_line":"    \u0027created_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue, tzinfo_aware\u003dFalse),"},{"line_number":19,"context_line":"    \u0027updated_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue, tzinfo_aware\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":2,"id":"7aa08908_ad2ed689","line":16,"in_reply_to":"7aa08908_cc19ab89","updated":"2016-06-16 11:12:19.000000000","message":"I think we can ignore when someone sets revision_number just like we do for created_at and updated_at.","commit_id":"fc594bfecd7972656deb57b0fac4a81c2bbc756c"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"61dfc9392434967db938f8539d251437a8e9fe9d","unresolved":false,"context_lines":[{"line_number":13,"context_line":"from oslo_versionedobjects import fields as obj_fields"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"STANDARD_ATTRIBUTES \u003d {"},{"line_number":16,"context_line":"    \u0027revision_number\u0027: obj_fields.IntegerField(),"},{"line_number":17,"context_line":"    \u0027description\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":18,"context_line":"    \u0027created_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue, tzinfo_aware\u003dFalse),"},{"line_number":19,"context_line":"    \u0027updated_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue, tzinfo_aware\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_630ac48b","line":16,"range":{"start_line":16,"start_character":5,"end_line":16,"end_character":20},"updated":"2016-06-24 16:58:43.000000000","message":"Is there a reason not to use a constant for common names like this? I suspect it\u0027ll be used in numerous places in the code when all is said and done, no?","commit_id":"5e6af629b9ffaf63e6422a6d1d6f90f13adb00bf"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"eaf2c30f922fa0cd440bdd2630131caecfa924bf","unresolved":false,"context_lines":[{"line_number":13,"context_line":"from oslo_versionedobjects import fields as obj_fields"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"STANDARD_ATTRIBUTES \u003d {"},{"line_number":16,"context_line":"    \u0027revision_number\u0027: obj_fields.IntegerField(),"},{"line_number":17,"context_line":"    \u0027description\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":18,"context_line":"    \u0027created_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue, tzinfo_aware\u003dFalse),"},{"line_number":19,"context_line":"    \u0027updated_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue, tzinfo_aware\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_786c43d0","line":16,"updated":"2016-06-24 10:26:51.000000000","message":"Is there any situation/subobject where this could be nullable?","commit_id":"5e6af629b9ffaf63e6422a6d1d6f90f13adb00bf"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7e08f8f6ff59408c7bb73f0ee23816019ee2ed59","unresolved":false,"context_lines":[{"line_number":13,"context_line":"from oslo_versionedobjects import fields as obj_fields"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"STANDARD_ATTRIBUTES \u003d {"},{"line_number":16,"context_line":"    \u0027revision_number\u0027: obj_fields.IntegerField(),"},{"line_number":17,"context_line":"    \u0027description\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":18,"context_line":"    \u0027created_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue, tzinfo_aware\u003dFalse),"},{"line_number":19,"context_line":"    \u0027updated_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue, tzinfo_aware\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_0f1330b9","line":16,"range":{"start_line":16,"start_character":5,"end_line":16,"end_character":20},"in_reply_to":"3aaa91ec_630ac48b","updated":"2016-06-30 11:28:40.000000000","message":"The fields are usually accessed thru __getattr__, not __getitem__, so it would be of little use.","commit_id":"5e6af629b9ffaf63e6422a6d1d6f90f13adb00bf"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"bb09d037f757a3daa3072a6ddc9ceeee4ad399ef","unresolved":false,"context_lines":[{"line_number":13,"context_line":"from oslo_versionedobjects import fields as obj_fields"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"STANDARD_ATTRIBUTES \u003d {"},{"line_number":16,"context_line":"    \u0027revision_number\u0027: obj_fields.IntegerField(),"},{"line_number":17,"context_line":"    \u0027description\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":18,"context_line":"    \u0027created_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue, tzinfo_aware\u003dFalse),"},{"line_number":19,"context_line":"    \u0027updated_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue, tzinfo_aware\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_afec9cbb","line":16,"range":{"start_line":16,"start_character":5,"end_line":16,"end_character":20},"in_reply_to":"3aaa91ec_630ac48b","updated":"2016-06-30 11:25:38.000000000","message":"You can access values by calling obj.revision_number , so you\u0027re not forced to use string constants.","commit_id":"5e6af629b9ffaf63e6422a6d1d6f90f13adb00bf"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"0c1f8a242c4c49d49ea20d522214277a84c63707","unresolved":false,"context_lines":[{"line_number":13,"context_line":"from oslo_versionedobjects import fields as obj_fields"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"STANDARD_ATTRIBUTES \u003d {"},{"line_number":16,"context_line":"    \u0027revision_number\u0027: obj_fields.IntegerField(),"},{"line_number":17,"context_line":"    \u0027description\u0027: obj_fields.StringField(nullable\u003dTrue),"},{"line_number":18,"context_line":"    \u0027created_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue, tzinfo_aware\u003dFalse),"},{"line_number":19,"context_line":"    \u0027updated_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue, tzinfo_aware\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_5b5d0178","line":16,"in_reply_to":"3aaa91ec_786c43d0","updated":"2016-06-24 11:04:52.000000000","message":"no, it\u0027s not nullable in the data model. https://github.com/openstack/neutron/blob/70d2fc8cc19c9b2fcdce108304dd1e76959bed7a/neutron/db/model_base.py#L113-L115","commit_id":"5e6af629b9ffaf63e6422a6d1d6f90f13adb00bf"}],"neutron/tests/unit/objects/test_base.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"bb09d037f757a3daa3072a6ddc9ceeee4ad399ef","unresolved":false,"context_lines":[{"line_number":41,"context_line":"SQLALCHEMY_COMMIT \u003d \u0027sqlalchemy.engine.Connection._commit_impl\u0027"},{"line_number":42,"context_line":"OBJECTS_BASE_OBJ_FROM_PRIMITIVE \u003d (\u0027oslo_versionedobjects.base.\u0027"},{"line_number":43,"context_line":"                                   \u0027VersionedObject.obj_from_primitive\u0027)"},{"line_number":44,"context_line":"TIMESTAMP_FIELDS \u003d [\u0027created_at\u0027, \u0027updated_at\u0027, \u0027revision_number\u0027]"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class FakeModel(object):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_2f0eec8b","line":44,"range":{"start_line":44,"start_character":47,"end_line":44,"end_character":65},"updated":"2016-06-30 11:25:38.000000000","message":"This now becomes a hack, maybe TIMESTAMP_FIELDS should be renamed to something more meaningful now.","commit_id":"5e6af629b9ffaf63e6422a6d1d6f90f13adb00bf"}]}
