)]}'
{"neutron_lib/context.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"dea2b60299a1256697f76efa5e35ff15e6d54178","unresolved":true,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    @classmethod"},{"line_number":108,"context_line":"    def from_dict(cls, values):"},{"line_number":109,"context_line":"        return cls(user_id\u003dvalues.get(\u0027user_id\u0027, values.get(\u0027user\u0027)),"},{"line_number":110,"context_line":"                   tenant_id\u003dvalues.get(\u0027tenant_id\u0027, values.get(\u0027project_id\u0027)),"},{"line_number":111,"context_line":"                   is_admin\u003dvalues.get(\u0027is_admin\u0027),"},{"line_number":112,"context_line":"                   roles\u003dvalues.get(\u0027roles\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"710e8f8a_bfbdb165","side":"PARENT","line":109,"range":{"start_line":109,"start_character":61,"end_line":109,"end_character":65},"updated":"2021-06-30 16:43:00.000000000","message":"We were converting the data stored in \"values\", that is a dictionary, to create a call using kwargs.\n\nWe can expand \"values\" to kwargs but you need to remove \"timestamp\" and convert \"tenant_name\" to \"project_name\"","commit_id":"c2879ec1739d1425bcc762d4b6584ee241f995ca"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"0a037a14db78bdac3ab359a728200b368e3f273d","unresolved":true,"context_lines":[{"line_number":107,"context_line":"    @classmethod"},{"line_number":108,"context_line":"    def from_dict(cls, values):"},{"line_number":109,"context_line":"        return cls(user_id\u003dvalues.get(\u0027user_id\u0027, values.get(\u0027user\u0027)),"},{"line_number":110,"context_line":"                   tenant_id\u003dvalues.get(\u0027tenant_id\u0027, values.get(\u0027project_id\u0027)),"},{"line_number":111,"context_line":"                   is_admin\u003dvalues.get(\u0027is_admin\u0027),"},{"line_number":112,"context_line":"                   roles\u003dvalues.get(\u0027roles\u0027),"},{"line_number":113,"context_line":"                   timestamp\u003dvalues.get(\u0027timestamp\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"b9560421_5c91a1d0","side":"PARENT","line":110,"range":{"start_line":110,"start_character":19,"end_line":110,"end_character":79},"updated":"2021-07-07 07:25:31.000000000","message":"oslo.context Context.from_dict does not handle tenant_id and tenant_name below.\nYou need to take care of these parameters in the proposed code.","commit_id":"c2879ec1739d1425bcc762d4b6584ee241f995ca"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"0a037a14db78bdac3ab359a728200b368e3f273d","unresolved":true,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    @classmethod"},{"line_number":108,"context_line":"    def from_dict(cls, values):"},{"line_number":109,"context_line":"        oslo_cls \u003d super().from_dict(values)"},{"line_number":110,"context_line":"        setattr(oslo_cls, \"timestamp\", values.get(\"timestamp\"))"},{"line_number":111,"context_line":"        return oslo_cls"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7951506e_13e3cdb7","line":109,"range":{"start_line":109,"start_character":8,"end_line":109,"end_character":16},"updated":"2021-07-07 07:25:31.000000000","message":"The return value of from_dict is not a class but an instance, so this variable sounds tricky.","commit_id":"9a8251d62efbf493be41ec9c7babc49a0fc14d14"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"cf60e55dd2126656fe39ce7a762b1af5e07c3cce","unresolved":true,"context_lines":[{"line_number":107,"context_line":"    @classmethod"},{"line_number":108,"context_line":"    def from_dict(cls, values):"},{"line_number":109,"context_line":"        oslo_cls \u003d super().from_dict(values)"},{"line_number":110,"context_line":"        setattr(oslo_cls, \"timestamp\", values.get(\"timestamp\"))"},{"line_number":111,"context_line":"        return oslo_cls"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def elevated(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"b97d1a7d_481a94b6","line":110,"range":{"start_line":110,"start_character":16,"end_line":110,"end_character":24},"updated":"2021-06-30 16:26:46.000000000","message":"oslo_cls is a neutron_lib.context.ContextBase object, you can access to \"timestamp\" member directly\n\n        oslo_cls \u003d super().from_dict(values)\n        oslo_cls.timestamp \u003d values.get(\"timestamp\")\n        return oslo_cls","commit_id":"9a8251d62efbf493be41ec9c7babc49a0fc14d14"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"0a037a14db78bdac3ab359a728200b368e3f273d","unresolved":true,"context_lines":[{"line_number":107,"context_line":"    @classmethod"},{"line_number":108,"context_line":"    def from_dict(cls, values):"},{"line_number":109,"context_line":"        oslo_cls \u003d super().from_dict(values)"},{"line_number":110,"context_line":"        setattr(oslo_cls, \"timestamp\", values.get(\"timestamp\"))"},{"line_number":111,"context_line":"        return oslo_cls"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def elevated(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"74204590_022e9a91","line":110,"range":{"start_line":110,"start_character":16,"end_line":110,"end_character":24},"in_reply_to":"96a38e90_83f2e93a","updated":"2021-07-07 07:25:31.000000000","message":"For reference, see https://opendev.org/openstack/oslo.context/src/branch/master/oslo_context/context.py#L185-L187 and https://opendev.org/openstack/oslo.context/src/branch/master/oslo_context/context.py#L422-L423","commit_id":"9a8251d62efbf493be41ec9c7babc49a0fc14d14"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ff12cd63bb57a3544cfec068d28a2f1a80f5b5e1","unresolved":true,"context_lines":[{"line_number":107,"context_line":"    @classmethod"},{"line_number":108,"context_line":"    def from_dict(cls, values):"},{"line_number":109,"context_line":"        oslo_cls \u003d super().from_dict(values)"},{"line_number":110,"context_line":"        setattr(oslo_cls, \"timestamp\", values.get(\"timestamp\"))"},{"line_number":111,"context_line":"        return oslo_cls"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def elevated(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"96a38e90_83f2e93a","line":110,"range":{"start_line":110,"start_character":16,"end_line":110,"end_character":24},"in_reply_to":"b97d1a7d_481a94b6","updated":"2021-07-07 07:16:10.000000000","message":"I think the recommended way in oslo.context is to use FROM_DICT_EXTRA_KEYS in a subclass. How about setting \u0027timestamp\u0027 in FROM_DICT_EXTRA_KEYS in this class?","commit_id":"9a8251d62efbf493be41ec9c7babc49a0fc14d14"}]}
