)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"af8a8e7779d216d4e4fae687424806b838e21165","unresolved":false,"context_lines":[{"line_number":10,"context_line":"can be overwritten in child classes for fields manipulation."},{"line_number":11,"context_line":"It will prepare dicts before writing to DB and also modify the DB output"},{"line_number":12,"context_line":"to match the OVO layout."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I923b58870584c5e5756b307760f9d502c53c18b1"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"bae84128_9ed451ec","line":13,"updated":"2016-02-24 11:50:13.000000000","message":"Remember to add the bug that it\u0027s tracking the ovo work :)","commit_id":"8574d20ec3f23a2c5190d70bdd0b1220d088ade3"}],"neutron/objects/base.py":[{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"af8a8e7779d216d4e4fae687424806b838e21165","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        self.obj_reset_changes()"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    @staticmethod"},{"line_number":132,"context_line":"    def modify_fields_to_db(fields):"},{"line_number":133,"context_line":"        \"\"\""},{"line_number":134,"context_line":"        This method enables the child class to modify the fields and its"},{"line_number":135,"context_line":"        content before data is inserted into DB."}],"source_content_type":"text/x-python","patch_set":3,"id":"bae84128_be52f532","line":132,"updated":"2016-02-24 11:50:13.000000000","message":"I wonder, instead of creating 2 methods that the sublasses need to override, which would lead to duplication, can we introduce a new class member that holds the fields that needs to be modified before writing?\n\nfields_need_traslation \u003d {\u0027field\u0027: \u0027field_in_db\u0027}\n\nif this fields is set then we can implement modify_fields_to_db and modify_fields_from_db directly here","commit_id":"8574d20ec3f23a2c5190d70bdd0b1220d088ade3"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"45e7829352040abe27749d44c5564452f24d7887","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        updates \u003d self._validate_changed_fields(updates)"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        if updates:"},{"line_number":248,"context_line":"            db_obj \u003d obj_db_api.update_object(self._context, self.db_model,"},{"line_number":249,"context_line":"                self.modify_fields_to_db(updates),"},{"line_number":250,"context_line":"                **self._get_composite_keys())"},{"line_number":251,"context_line":"            self.from_db_object(self, db_obj)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bae84128_9a71a4e3","line":248,"updated":"2016-02-25 15:26:27.000000000","message":"the indentation here is dodgy. please fix this","commit_id":"33de4ec1d359333eeb06892908cce1400bc4168e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5ad67be45b2cbf13acc5bea03a690ff9c8a2a017","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        :param fields: dict of fields from NeutronDbObject"},{"line_number":146,"context_line":"        :return: modified dict of fields"},{"line_number":147,"context_line":"        \"\"\""},{"line_number":148,"context_line":"        result \u003d dict(fields)"},{"line_number":149,"context_line":"        for field, field_db in cls.fields_need_translation.items():"},{"line_number":150,"context_line":"            if field in result:"},{"line_number":151,"context_line":"                result[field_db] \u003d result[field]"}],"source_content_type":"text/x-python","patch_set":5,"id":"9aed3d3a_47747034","line":148,"range":{"start_line":148,"start_character":17,"end_line":148,"end_character":29},"updated":"2016-02-26 12:23:11.000000000","message":"should we maybe deepcopy here?","commit_id":"df003850582f48b59a0c20f8e9a7f33b013eada9"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"551757ac88fc27e96833437870d7829e6c751689","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        :param fields: dict of fields from NeutronDbObject"},{"line_number":146,"context_line":"        :return: modified dict of fields"},{"line_number":147,"context_line":"        \"\"\""},{"line_number":148,"context_line":"        result \u003d dict(fields)"},{"line_number":149,"context_line":"        for field, field_db in cls.fields_need_translation.items():"},{"line_number":150,"context_line":"            if field in result:"},{"line_number":151,"context_line":"                result[field_db] \u003d result[field]"}],"source_content_type":"text/x-python","patch_set":5,"id":"7af24918_4d338cf6","line":148,"range":{"start_line":148,"start_character":17,"end_line":148,"end_character":29},"in_reply_to":"9aed3d3a_47747034","updated":"2016-03-03 09:51:03.000000000","message":"Done","commit_id":"df003850582f48b59a0c20f8e9a7f33b013eada9"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5ad67be45b2cbf13acc5bea03a690ff9c8a2a017","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        result \u003d dict(fields)"},{"line_number":149,"context_line":"        for field, field_db in cls.fields_need_translation.items():"},{"line_number":150,"context_line":"            if field in result:"},{"line_number":151,"context_line":"                result[field_db] \u003d result[field]"},{"line_number":152,"context_line":"                del result[field]"},{"line_number":153,"context_line":"        return result"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":5,"id":"9aed3d3a_479d9064","line":152,"range":{"start_line":151,"start_character":16,"end_line":152,"end_character":33},"updated":"2016-02-26 12:23:11.000000000","message":"result[field_db] \u003d result.pop(field)","commit_id":"df003850582f48b59a0c20f8e9a7f33b013eada9"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"551757ac88fc27e96833437870d7829e6c751689","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        result \u003d dict(fields)"},{"line_number":149,"context_line":"        for field, field_db in cls.fields_need_translation.items():"},{"line_number":150,"context_line":"            if field in result:"},{"line_number":151,"context_line":"                result[field_db] \u003d result[field]"},{"line_number":152,"context_line":"                del result[field]"},{"line_number":153,"context_line":"        return result"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":5,"id":"7af24918_2d30c0e7","line":152,"range":{"start_line":151,"start_character":16,"end_line":152,"end_character":33},"in_reply_to":"9aed3d3a_479d9064","updated":"2016-03-03 09:51:03.000000000","message":"Done","commit_id":"df003850582f48b59a0c20f8e9a7f33b013eada9"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5ad67be45b2cbf13acc5bea03a690ff9c8a2a017","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        result \u003d dict(db_obj)"},{"line_number":170,"context_line":"        for field, field_db in cls.fields_need_translation.items():"},{"line_number":171,"context_line":"            if field_db in result:"},{"line_number":172,"context_line":"                result[field] \u003d result[field_db]"},{"line_number":173,"context_line":"                del result[field_db]"},{"line_number":174,"context_line":"        return result"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":5,"id":"9aed3d3a_27cb2c55","line":173,"range":{"start_line":172,"start_character":16,"end_line":173,"end_character":36},"updated":"2016-02-26 12:23:11.000000000","message":"result[field] \u003d result.pop(field_db)","commit_id":"df003850582f48b59a0c20f8e9a7f33b013eada9"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"551757ac88fc27e96833437870d7829e6c751689","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        result \u003d dict(db_obj)"},{"line_number":170,"context_line":"        for field, field_db in cls.fields_need_translation.items():"},{"line_number":171,"context_line":"            if field_db in result:"},{"line_number":172,"context_line":"                result[field] \u003d result[field_db]"},{"line_number":173,"context_line":"                del result[field_db]"},{"line_number":174,"context_line":"        return result"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":5,"id":"7af24918_8d4f546a","line":173,"range":{"start_line":172,"start_character":16,"end_line":173,"end_character":36},"in_reply_to":"9aed3d3a_27cb2c55","updated":"2016-03-03 09:51:03.000000000","message":"Done","commit_id":"df003850582f48b59a0c20f8e9a7f33b013eada9"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5ad67be45b2cbf13acc5bea03a690ff9c8a2a017","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        if updates:"},{"line_number":248,"context_line":"            db_obj \u003d obj_db_api.update_object(self._context, self.db_model,"},{"line_number":249,"context_line":"                                            self.modify_fields_to_db(updates),"},{"line_number":250,"context_line":"                                            **self._get_composite_keys())"},{"line_number":251,"context_line":"            self.from_db_object(self, db_obj)"},{"line_number":252,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9aed3d3a_e735c446","line":249,"updated":"2016-02-26 12:23:11.000000000","message":"there is some small issue with indentation here","commit_id":"df003850582f48b59a0c20f8e9a7f33b013eada9"},{"author":{"_account_id":9551,"name":"Martin Hickey","email":"martin.hickey@ie.ibm.com","username":"mhickey"},"change_message_id":"968ddeaf9f2ed6745204d05465c750a9b56f1905","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        if updates:"},{"line_number":248,"context_line":"            db_obj \u003d obj_db_api.update_object(self._context, self.db_model,"},{"line_number":249,"context_line":"                                            self.modify_fields_to_db(updates),"},{"line_number":250,"context_line":"                                            **self._get_composite_keys())"},{"line_number":251,"context_line":"            self.from_db_object(self, db_obj)"},{"line_number":252,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5aef4532_8946bcbd","line":249,"in_reply_to":"7af24918_0db2244c","updated":"2016-03-07 10:34:33.000000000","message":"I can see your dilemma Artur.  I see that it passes pep8 but does look a little unsightly. I am however OK with it.\n\nA suggested solution is: s/updates/update, then you would be 79 characters when you align the parameters.","commit_id":"df003850582f48b59a0c20f8e9a7f33b013eada9"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"551757ac88fc27e96833437870d7829e6c751689","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        if updates:"},{"line_number":248,"context_line":"            db_obj \u003d obj_db_api.update_object(self._context, self.db_model,"},{"line_number":249,"context_line":"                                            self.modify_fields_to_db(updates),"},{"line_number":250,"context_line":"                                            **self._get_composite_keys())"},{"line_number":251,"context_line":"            self.from_db_object(self, db_obj)"},{"line_number":252,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7af24918_0db2244c","line":249,"in_reply_to":"9aed3d3a_e735c446","updated":"2016-03-03 09:51:03.000000000","message":"I cannot do it in different way - since the line will exceed the 80 character limit. Current way is pep8 compatible.","commit_id":"df003850582f48b59a0c20f8e9a7f33b013eada9"}],"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":"5ad67be45b2cbf13acc5bea03a690ff9c8a2a017","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    def get_updatable_fields(self, fields):"},{"line_number":197,"context_line":"        result \u003d base.get_updatable_fields(self._test_class, fields)"},{"line_number":198,"context_line":"        result.pop(\u0027id\u0027, None)"},{"line_number":199,"context_line":"        return result"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":5,"id":"9aed3d3a_67825496","line":198,"updated":"2016-02-26 12:23:11.000000000","message":"Should we instead pop fields_no_update here? \u0027id\u0027 field in theory can be updatable too, right?","commit_id":"df003850582f48b59a0c20f8e9a7f33b013eada9"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"551757ac88fc27e96833437870d7829e6c751689","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    def get_updatable_fields(self, fields):"},{"line_number":197,"context_line":"        result \u003d base.get_updatable_fields(self._test_class, fields)"},{"line_number":198,"context_line":"        result.pop(\u0027id\u0027, None)"},{"line_number":199,"context_line":"        return result"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":5,"id":"7af24918_4d1c2c6a","line":198,"in_reply_to":"9aed3d3a_67825496","updated":"2016-03-03 09:51:03.000000000","message":"I\u0027m removing this pop, it was added because of failing unit test, now it is working and pop(\u0027id\u0027) make no sense here. Popping the fields_no_update is done in object base, so no need to do this here. \nRegarding the \u0027id\u0027 being updatable - no it does not, due to implementation in base class: https://github.com/openstack/neutron/blob/master/neutron/objects/base.py#L148","commit_id":"df003850582f48b59a0c20f8e9a7f33b013eada9"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"aa066891a20db449a3e0a776a1d505923a31fb18","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        self.db_objs \u003d list(self.get_random_fields() for _ in range(3))"},{"line_number":165,"context_line":"        self.db_obj \u003d self.db_objs[0]"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        self.obj_fields \u003d []"},{"line_number":168,"context_line":"        for db_obj in self.db_objs:"},{"line_number":169,"context_line":"            self.obj_fields.append("},{"line_number":170,"context_line":"                self._test_class.modify_fields_from_db(db_obj))"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        valid_field \u003d [f for f in self._test_class.fields"},{"line_number":173,"context_line":"                       if f not in self._test_class.synthetic_fields][0]"}],"source_content_type":"text/x-python","patch_set":8,"id":"3afc51ec_66c4f85e","line":170,"range":{"start_line":167,"start_character":0,"end_line":170,"end_character":63},"updated":"2016-03-14 12:04:19.000000000","message":"This calls for list comprehension :)","commit_id":"bf9f04f0a75229ce7d60aefdb67e9a3c539713c4"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"c859a7a023afdfc3b023ee8a9555f45053b691d0","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        self.db_objs \u003d list(self.get_random_fields() for _ in range(3))"},{"line_number":165,"context_line":"        self.db_obj \u003d self.db_objs[0]"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        self.obj_fields \u003d []"},{"line_number":168,"context_line":"        for db_obj in self.db_objs:"},{"line_number":169,"context_line":"            self.obj_fields.append("},{"line_number":170,"context_line":"                self._test_class.modify_fields_from_db(db_obj))"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        valid_field \u003d [f for f in self._test_class.fields"},{"line_number":173,"context_line":"                       if f not in self._test_class.synthetic_fields][0]"}],"source_content_type":"text/x-python","patch_set":8,"id":"3afc51ec_2d0ac821","line":170,"range":{"start_line":167,"start_character":0,"end_line":170,"end_character":63},"in_reply_to":"3afc51ec_66c4f85e","updated":"2016-03-14 13:18:39.000000000","message":"Yes, I\u0027ve made it so with follow-up patch and forgot to change it here. I was also surprised that I did not use list comprehension here :)","commit_id":"bf9f04f0a75229ce7d60aefdb67e9a3c539713c4"}]}
