)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"0f765d688282e4d5ce66bd577e02a3c1f07b8786","unresolved":false,"context_lines":[{"line_number":11,"context_line":"behaviour will be removed in the future"},{"line_number":12,"context_line":"so it\u0027s necessary to change Ironic\u0027s code"},{"line_number":13,"context_line":"to use object attributes as attributes"},{"line_number":14,"context_line":"but dictionary keys."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I299a2211f7f3d72312e421e477c259e558e8fef1"},{"line_number":17,"context_line":"Partial-Bug: #1256260"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAATn%2F94fU%3D","line":14,"updated":"2013-12-04 22:15:49.000000000","message":"do you mean \u0027instead of dictionary keys\u0027?","commit_id":"d28bb1381d7bab57e1a87ea2f32e2a8a61f8f9d3"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"649f312bc15b0262a95fd41cf34dc24896fd3438","unresolved":false,"context_lines":[{"line_number":11,"context_line":"behaviour will be removed in the future"},{"line_number":12,"context_line":"so it\u0027s necessary to change Ironic\u0027s code"},{"line_number":13,"context_line":"to use object attributes as attributes"},{"line_number":14,"context_line":"but dictionary keys."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I299a2211f7f3d72312e421e477c259e558e8fef1"},{"line_number":17,"context_line":"Partial-Bug: #1256260"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAATn%2F915E%3D","line":14,"in_reply_to":"AAAATn%2F94fU%3D","updated":"2013-12-05 13:02:17.000000000","message":"Yes it is.","commit_id":"d28bb1381d7bab57e1a87ea2f32e2a8a61f8f9d3"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"0f765d688282e4d5ce66bd577e02a3c1f07b8786","unresolved":false,"context_lines":[{"line_number":14,"context_line":"but dictionary keys."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I299a2211f7f3d72312e421e477c259e558e8fef1"},{"line_number":17,"context_line":"Partial-Bug: #1256260"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAATn%2F94eQ%3D","line":17,"updated":"2013-12-04 22:15:49.000000000","message":"It looks like you only modifed test code. Is that why it partially fixes the bug? It would be useful to specify what the scope of the changes are.","commit_id":"d28bb1381d7bab57e1a87ea2f32e2a8a61f8f9d3"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"649f312bc15b0262a95fd41cf34dc24896fd3438","unresolved":false,"context_lines":[{"line_number":14,"context_line":"but dictionary keys."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I299a2211f7f3d72312e421e477c259e558e8fef1"},{"line_number":17,"context_line":"Partial-Bug: #1256260"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAATn%2F911E%3D","line":17,"in_reply_to":"AAAATn%2F94eQ%3D","updated":"2013-12-05 13:02:17.000000000","message":"I will point out it in the commit message.","commit_id":"d28bb1381d7bab57e1a87ea2f32e2a8a61f8f9d3"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"unresolved":false,"context_lines":[{"line_number":16,"context_line":"in unit tests. It is only changing the"},{"line_number":17,"context_line":"way object attributes are accessed in"},{"line_number":18,"context_line":"the api and object unit tests. It\u0027s not"},{"line_number":19,"context_line":"changing them anywhere else in the code."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: I299a2211f7f3d72312e421e477c259e558e8fef1"},{"line_number":22,"context_line":"Partial-Bug: #1256260"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAATn%2F91GQ%3D","line":19,"updated":"2013-12-05 14:07:34.000000000","message":"nit: message looks a bit squashed, you can wrap it at 72 characters if u want, it think it will be more readable.\n\nif you use vim you can just join the lines \u003cnum of lines\u003eJ (e.g put the cursor on the first line of ur body message and type 10J) and then vip!fmt (both in the command mode)","commit_id":"f3b8f154b440e42ac2209f60cae48587963ae6d9"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"649f312bc15b0262a95fd41cf34dc24896fd3438","unresolved":false,"context_lines":[{"line_number":16,"context_line":"in unit tests. It is only changing the"},{"line_number":17,"context_line":"way object attributes are accessed in"},{"line_number":18,"context_line":"the api and object unit tests. It\u0027s not"},{"line_number":19,"context_line":"changing them anywhere else in the code."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: I299a2211f7f3d72312e421e477c259e558e8fef1"},{"line_number":22,"context_line":"Partial-Bug: #1256260"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAATn%2F90%2F0%3D","line":19,"in_reply_to":"AAAATn%2F91GQ%3D","updated":"2013-12-05 14:23:50.000000000","message":"Done","commit_id":"f3b8f154b440e42ac2209f60cae48587963ae6d9"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"266d81393b96a2d1a6e1c4958b6393918f62f50a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Mikhail Durnosvistov \u003cmdurnosvistov@mirantis.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-12-12 03:30:02 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Rid of specific `dict` methods in object model"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently unified object model supports dict-like behaviour of objects."},{"line_number":10,"context_line":"This behaviour will be removed in the future so it\u0027s necessary to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"AAAATn%2F9Nrw%3D","line":7,"updated":"2013-12-13 23:18:03.000000000","message":"Commit message header (the title) is still not very clear. Perhaps something like this would be better?\n\n  Remove dict-like handling of objects from tests.objects.*","commit_id":"56fc0a846853514124041b99617be439756c58de"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"266d81393b96a2d1a6e1c4958b6393918f62f50a","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Rid of specific `dict` methods in object model"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently unified object model supports dict-like behaviour of objects."},{"line_number":10,"context_line":"This behaviour will be removed in the future so it\u0027s necessary to"},{"line_number":11,"context_line":"change Ironic\u0027s code to use object attributes as attributes instead of"},{"line_number":12,"context_line":"dictionary keys."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"AAAATn%2F9NrY%3D","line":9,"updated":"2013-12-13 23:18:03.000000000","message":"This paragraph is very good :)","commit_id":"56fc0a846853514124041b99617be439756c58de"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"266d81393b96a2d1a6e1c4958b6393918f62f50a","unresolved":false,"context_lines":[{"line_number":11,"context_line":"change Ironic\u0027s code to use object attributes as attributes instead of"},{"line_number":12,"context_line":"dictionary keys."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This patch refactors usage of objects in unit tests. It is only"},{"line_number":15,"context_line":"changing the way object attributes are accessed in the api and object"},{"line_number":16,"context_line":"unit tests. It\u0027s not changing them anywhere else in the code."},{"line_number":17,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"AAAATn%2F9NrA%3D","line":14,"updated":"2013-12-13 23:18:03.000000000","message":"This paragraph is not accurate -- this patch is not affecting the api unit tests. The commit message should reflect the patch set.","commit_id":"56fc0a846853514124041b99617be439756c58de"},{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"unresolved":false,"context_lines":[{"line_number":14,"context_line":"This patch refactors usage of objects in ironic/objects and"},{"line_number":15,"context_line":"objects unit tests."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"This pice of code:"},{"line_number":18,"context_line":"\t1)Chassis._from_db_object(cls(), db_chassis)"},{"line_number":19,"context_line":"        2)Conductor._from_db_object(cls(), db_obj)"},{"line_number":20,"context_line":"\t3)Node._from_db_object(cls(), db_node)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"AAAAT3%2F%2F9V8%3D","line":17,"updated":"2013-12-26 10:05:08.000000000","message":"Probably better to say:\n\nThe following pieces of code:\n\n1) Conductor._from_db_object(cls(), db_obj) [ironic/objects/conductor.py L50]\n\n2)..\n\nwere deleted to fix a bug (not previously filled in Ironic) where chassis, node, conductor and port has been converted from db object twice (the first time in @objectify). END","commit_id":"ab9cf7c5bb1e12f711d6c0feb8d81072ea870e6e"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"0188c3019b1ebba78dd047dc86f8b3d05d397412","unresolved":false,"context_lines":[{"line_number":14,"context_line":"This patch refactors usage of objects in ironic/objects and"},{"line_number":15,"context_line":"objects unit tests."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"This pice of code:"},{"line_number":18,"context_line":"\t1)Chassis._from_db_object(cls(), db_chassis)"},{"line_number":19,"context_line":"        2)Conductor._from_db_object(cls(), db_obj)"},{"line_number":20,"context_line":"\t3)Node._from_db_object(cls(), db_node)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"AAAAT3%2F%2F9Po%3D","line":17,"in_reply_to":"AAAAT3%2F%2F9V8%3D","updated":"2013-12-26 10:30:32.000000000","message":"Done. Thank you for review! \u003d)","commit_id":"ab9cf7c5bb1e12f711d6c0feb8d81072ea870e6e"}],"ironic/objects/base.py":[{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"unresolved":false,"context_lines":[{"line_number":313,"context_line":"        \"\"\"Returns a dict of changed fields and their new values.\"\"\""},{"line_number":314,"context_line":"        changes \u003d {}"},{"line_number":315,"context_line":"        for key in self.obj_what_changed():"},{"line_number":316,"context_line":"            changes[key] \u003d getattr(self, key)"},{"line_number":317,"context_line":"        return changes"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"    def obj_what_changed(self):"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUX%2F%2FXj0%3D","line":316,"updated":"2014-02-13 17:27:24.000000000","message":"Please remove this change","commit_id":"f92d4954b2243e196871455b1341501b33154a0c"},{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"unresolved":false,"context_lines":[{"line_number":369,"context_line":""},{"line_number":370,"context_line":"        NOTE(danms): May be removed in the future."},{"line_number":371,"context_line":"        \"\"\""},{"line_number":372,"context_line":"        return getattr(self, key)"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"    def update(self, updates):"},{"line_number":375,"context_line":"        \"\"\"For backwards-compatibility with dict-base objects."}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUX%2F%2FXjw%3D","line":372,"updated":"2014-02-13 17:27:24.000000000","message":"Please remove this change","commit_id":"f92d4954b2243e196871455b1341501b33154a0c"}],"ironic/objects/chassis.py":[{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"unresolved":false,"context_lines":[{"line_number":81,"context_line":"        current \u003d self.__class__.get_by_uuid(context, uuid\u003dself.uuid)"},{"line_number":82,"context_line":"        for field in self.fields:"},{"line_number":83,"context_line":"            if (hasattr(self, base.get_attrname(field)) and"},{"line_number":84,"context_line":"                    getattr(self, field) !\u003d getattr(current, field)):"},{"line_number":85,"context_line":"                setattr(self, field, getattr(current, field))"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9DBw%3D","line":84,"updated":"2013-12-17 10:27:28.000000000","message":"Please set all used `getattr` invocations to variables. Inside of  a `for` statement  this is a piece of evil.","commit_id":"e3d26f040f4a04cd3e2172f1399569d3e8cf0ef7"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"unresolved":false,"context_lines":[{"line_number":81,"context_line":"        current \u003d self.__class__.get_by_uuid(context, uuid\u003dself.uuid)"},{"line_number":82,"context_line":"        for field in self.fields:"},{"line_number":83,"context_line":"            if (hasattr(self, base.get_attrname(field)) and"},{"line_number":84,"context_line":"                    getattr(self, field) !\u003d getattr(current, field)):"},{"line_number":85,"context_line":"                setattr(self, field, getattr(current, field))"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9CQo%3D","line":84,"in_reply_to":"AAAATn%2F9CYc%3D","updated":"2013-12-17 13:20:52.000000000","message":"Ok, I\u0027m gone...","commit_id":"e3d26f040f4a04cd3e2172f1399569d3e8cf0ef7"},{"author":{"_account_id":6623,"name":"Roman Prykhodchenko","email":"me@romcheg.me","username":"prykhodchenko"},"unresolved":false,"context_lines":[{"line_number":81,"context_line":"        current \u003d self.__class__.get_by_uuid(context, uuid\u003dself.uuid)"},{"line_number":82,"context_line":"        for field in self.fields:"},{"line_number":83,"context_line":"            if (hasattr(self, base.get_attrname(field)) and"},{"line_number":84,"context_line":"                    getattr(self, field) !\u003d getattr(current, field)):"},{"line_number":85,"context_line":"                setattr(self, field, getattr(current, field))"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9CYc%3D","line":84,"in_reply_to":"AAAATn%2F9CcU%3D","updated":"2013-12-17 13:19:28.000000000","message":"I don\u0027t think this kind of change will simplify the code.","commit_id":"e3d26f040f4a04cd3e2172f1399569d3e8cf0ef7"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"unresolved":false,"context_lines":[{"line_number":81,"context_line":"        current \u003d self.__class__.get_by_uuid(context, uuid\u003dself.uuid)"},{"line_number":82,"context_line":"        for field in self.fields:"},{"line_number":83,"context_line":"            if (hasattr(self, base.get_attrname(field)) and"},{"line_number":84,"context_line":"                    getattr(self, field) !\u003d getattr(current, field)):"},{"line_number":85,"context_line":"                setattr(self, field, getattr(current, field))"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9CcU%3D","line":84,"in_reply_to":"AAAATn%2F9Ch8%3D","updated":"2013-12-17 12:47:33.000000000","message":"It is just style recommendation. If you read it with ease, it is just mean that you  are accustomed to your code style. Simplifying `if` statements you are making logic more obvious (this is more important than number of lines). Furthermore there is no technical requirements to save variables number in Python.","commit_id":"e3d26f040f4a04cd3e2172f1399569d3e8cf0ef7"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"0188c3019b1ebba78dd047dc86f8b3d05d397412","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        current \u003d self.__class__.get_by_uuid(context, uuid\u003dself.uuid)"},{"line_number":82,"context_line":"        for field in self.fields:"},{"line_number":83,"context_line":"            if (hasattr(self, base.get_attrname(field)) and"},{"line_number":84,"context_line":"                    getattr(self, field) !\u003d getattr(current, field)):"},{"line_number":85,"context_line":"                setattr(self, field, getattr(current, field))"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9Ch8%3D","line":84,"in_reply_to":"AAAATn%2F9DBw%3D","updated":"2013-12-17 12:37:32.000000000","message":"Thanks for the Review, but it will be the same ... and there is not much code that would not understand it.","commit_id":"e3d26f040f4a04cd3e2172f1399569d3e8cf0ef7"},{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"unresolved":false,"context_lines":[{"line_number":51,"context_line":"        :param context: Security context"},{"line_number":52,"context_line":"        :returns: a :class:`Chassis` object."},{"line_number":53,"context_line":"        \"\"\""},{"line_number":54,"context_line":"        return cls.dbapi.get_chassis(uuid)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @base.remotable"},{"line_number":57,"context_line":"    def save(self, context):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAT3%2F%2F%2Bi8%3D","line":54,"updated":"2013-12-25 17:39:03.000000000","message":"Please add explanation to the commit message, that this was a bug (not previously filled in Ironic) where chassis was converted from db object twice (the first time in @objectify). And you fixed this bug in current patch","commit_id":"590461d784bec358ccb7dba3530ad813cfe2ef6c"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"0188c3019b1ebba78dd047dc86f8b3d05d397412","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        :param context: Security context"},{"line_number":52,"context_line":"        :returns: a :class:`Chassis` object."},{"line_number":53,"context_line":"        \"\"\""},{"line_number":54,"context_line":"        return cls.dbapi.get_chassis(uuid)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @base.remotable"},{"line_number":57,"context_line":"    def save(self, context):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAT3%2F%2F%2BSk%3D","line":54,"in_reply_to":"AAAAT3%2F%2F%2Bi8%3D","updated":"2013-12-25 22:12:25.000000000","message":"Done","commit_id":"590461d784bec358ccb7dba3530ad813cfe2ef6c"},{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"unresolved":false,"context_lines":[{"line_number":79,"context_line":"        \"\"\""},{"line_number":80,"context_line":"        current \u003d self.__class__.get_by_uuid(context, uuid\u003dself.uuid)"},{"line_number":81,"context_line":"        for field in self.fields:"},{"line_number":82,"context_line":"            get_field \u003d getattr(current, field)"},{"line_number":83,"context_line":"            if (hasattr(self, base.get_attrname(field)) and"},{"line_number":84,"context_line":"                    getattr(self, field) !\u003d get_field):"},{"line_number":85,"context_line":"                setattr(self, field, get_field)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAT3%2F%2F%2Bi0%3D","line":82,"updated":"2013-12-25 17:39:03.000000000","message":"Please rename get_field to the db_value","commit_id":"590461d784bec358ccb7dba3530ad813cfe2ef6c"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"0188c3019b1ebba78dd047dc86f8b3d05d397412","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        \"\"\""},{"line_number":80,"context_line":"        current \u003d self.__class__.get_by_uuid(context, uuid\u003dself.uuid)"},{"line_number":81,"context_line":"        for field in self.fields:"},{"line_number":82,"context_line":"            get_field \u003d getattr(current, field)"},{"line_number":83,"context_line":"            if (hasattr(self, base.get_attrname(field)) and"},{"line_number":84,"context_line":"                    getattr(self, field) !\u003d get_field):"},{"line_number":85,"context_line":"                setattr(self, field, get_field)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAT3%2F%2F%2BSc%3D","line":82,"in_reply_to":"AAAAT3%2F%2F%2Bi0%3D","updated":"2013-12-25 22:12:25.000000000","message":"Done","commit_id":"590461d784bec358ccb7dba3530ad813cfe2ef6c"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"0188c3019b1ebba78dd047dc86f8b3d05d397412","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        \"\"\""},{"line_number":80,"context_line":"        current \u003d self.__class__.get_by_uuid(context, uuid\u003dself.uuid)"},{"line_number":81,"context_line":"        for field in self.fields:"},{"line_number":82,"context_line":"            get_field \u003d getattr(current, field)"},{"line_number":83,"context_line":"            if (hasattr(self, base.get_attrname(field)) and"},{"line_number":84,"context_line":"                    getattr(self, field) !\u003d get_field):"},{"line_number":85,"context_line":"                setattr(self, field, get_field)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAT3%2F%2F%2BSg%3D","line":82,"in_reply_to":"AAAAT3%2F%2F%2Bi0%3D","updated":"2013-12-25 22:12:25.000000000","message":"Done","commit_id":"590461d784bec358ccb7dba3530ad813cfe2ef6c"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"unresolved":false,"context_lines":[{"line_number":80,"context_line":"        current \u003d self.__class__.get_by_uuid(context, uuid\u003dself.uuid)"},{"line_number":81,"context_line":"        for field in self.fields:"},{"line_number":82,"context_line":"            db_value \u003d getattr(current, field)"},{"line_number":83,"context_line":"            if (hasattr(self, base.get_attrname(field)) and"},{"line_number":84,"context_line":"                    getattr(self, field) !\u003d db_value):"},{"line_number":85,"context_line":"                setattr(self, field, db_value)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2FrpA%3D","line":83,"updated":"2014-01-09 18:32:48.000000000","message":"I was wondering why we don\u0027t do \u0027hasattr(self, field)\u0027 instead of using the mangled attribute name.","commit_id":"a0a128899fee0932a0adc356f98783fbdd6bae66"},{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"unresolved":false,"context_lines":[{"line_number":80,"context_line":"        current \u003d self.__class__.get_by_uuid(context, uuid\u003dself.uuid)"},{"line_number":81,"context_line":"        for field in self.fields:"},{"line_number":82,"context_line":"            db_value \u003d getattr(current, field)"},{"line_number":83,"context_line":"            if (hasattr(self, base.get_attrname(field)) and"},{"line_number":84,"context_line":"                    getattr(self, field) !\u003d db_value):"},{"line_number":85,"context_line":"                setattr(self, field, db_value)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2BX2o%3D","line":83,"in_reply_to":"AAAAUH%2F%2Fm1k%3D","updated":"2014-01-27 17:04:21.000000000","message":"I think we definitely should not change this within current patch. This seems to be an unrelated change. Please revert this. Let\u0027s use \n\n    (hasattr(self, base.get_attrname(field))\n\nRuby, Mikhail, pls take a look at this: \nhttps://github.com/openstack/ironic/blob/master/ironic/objects/base.py#L32-L58\n\nAll our values accessed by object.some_property_name are actually python properties but not the fields. The code by the link dynamically creates a property for each specified field + builds type validation into those property. Each property will have name \"attr_name\" whereas it\u0027s backing field (which actually will store the value of the property in the object) will have name \"_attr_name\".\n\nWhen we do obj.some_field \u003d some_val, the setter will check the some_val for type compliance and write the value to the obj._some_field. So \n\n    (hasattr(self, base.get_attrname(field))\n\nactually means if the property has been set at least once whereas hasattr(self, field) will always return true, because the properties have been created by IronicObjectMetaclass during object\u0027s initialization. I\u0027m pretty sure this was written intentionally. \n\nSo since the behavior is different, I\u0027d not make any changes to this without needs. \n\nSorry, I didn\u0027t spent much time analyzing this code, I\u0027d really appreciate if someone will complement my reasoning.\n\nAny thoughts, comments? :)","commit_id":"a0a128899fee0932a0adc356f98783fbdd6bae66"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"0188c3019b1ebba78dd047dc86f8b3d05d397412","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        current \u003d self.__class__.get_by_uuid(context, uuid\u003dself.uuid)"},{"line_number":81,"context_line":"        for field in self.fields:"},{"line_number":82,"context_line":"            db_value \u003d getattr(current, field)"},{"line_number":83,"context_line":"            if (hasattr(self, base.get_attrname(field)) and"},{"line_number":84,"context_line":"                    getattr(self, field) !\u003d db_value):"},{"line_number":85,"context_line":"                setattr(self, field, db_value)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2Fm1k%3D","line":83,"in_reply_to":"AAAAUH%2F%2FrpA%3D","updated":"2014-01-13 12:01:40.000000000","message":"Done","commit_id":"a0a128899fee0932a0adc356f98783fbdd6bae66"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"unresolved":false,"context_lines":[{"line_number":82,"context_line":"            db_value \u003d getattr(current, field)"},{"line_number":83,"context_line":"            if (hasattr(self, base.get_attrname(field)) and"},{"line_number":84,"context_line":"                    getattr(self, field) !\u003d db_value):"},{"line_number":85,"context_line":"                setattr(self, field, db_value)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2FroI%3D","line":85,"updated":"2014-01-09 18:32:48.000000000","message":"Does anyone know why, if it is trying to do a refresh, it doesn\u0027t set the attr even if it didn\u0027t have it before?\n\nEg, if hasattr(self, field) \u003d\u003d False, why not do setattr(self, field, db_value)?\n\n(This question is outside the scope of these changes, but I was wondering.)","commit_id":"a0a128899fee0932a0adc356f98783fbdd6bae66"},{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"unresolved":false,"context_lines":[{"line_number":82,"context_line":"            db_value \u003d getattr(current, field)"},{"line_number":83,"context_line":"            if (hasattr(self, base.get_attrname(field)) and"},{"line_number":84,"context_line":"                    getattr(self, field) !\u003d db_value):"},{"line_number":85,"context_line":"                setattr(self, field, db_value)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2BXgk%3D","line":85,"in_reply_to":"AAAAUH%2F%2FroI%3D","updated":"2014-01-27 17:04:21.000000000","message":"Interesting question :) Looks like some optimization. I can\u0027t imagine what we gain from this even considering my comment above :) but again, I would not change this until we have some troubles here","commit_id":"a0a128899fee0932a0adc356f98783fbdd6bae66"},{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"unresolved":false,"context_lines":[{"line_number":80,"context_line":"        current \u003d self.__class__.get_by_uuid(context, uuid\u003dself.uuid)"},{"line_number":81,"context_line":"        for field in self.fields:"},{"line_number":82,"context_line":"            db_value \u003d getattr(current, field)"},{"line_number":83,"context_line":"            if hasattr(self, field) and getattr(self, field) !\u003d db_value:"},{"line_number":84,"context_line":"                setattr(self, field, db_value)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAUH%2F%2BXfM%3D","line":83,"updated":"2014-01-27 17:11:14.000000000","message":"Please see my comment to patch set 16","commit_id":"d73a8fc3cb938825be84a432cfe54695df439c7f"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"0188c3019b1ebba78dd047dc86f8b3d05d397412","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        current \u003d self.__class__.get_by_uuid(context, uuid\u003dself.uuid)"},{"line_number":81,"context_line":"        for field in self.fields:"},{"line_number":82,"context_line":"            db_value \u003d getattr(current, field)"},{"line_number":83,"context_line":"            if hasattr(self, field) and getattr(self, field) !\u003d db_value:"},{"line_number":84,"context_line":"                setattr(self, field, db_value)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAUH%2F%2BXAU%3D","line":83,"in_reply_to":"AAAAUH%2F%2BXfM%3D","updated":"2014-01-27 18:30:58.000000000","message":"Thanks for the review and explanation! \u003d)","commit_id":"d73a8fc3cb938825be84a432cfe54695df439c7f"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"unresolved":false,"context_lines":[{"line_number":50,"context_line":"        :param context: Security context"},{"line_number":51,"context_line":"        :returns: a :class:`Chassis` object."},{"line_number":52,"context_line":"        \"\"\""},{"line_number":53,"context_line":"        return cls.dbapi.get_chassis(uuid)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    @base.remotable"},{"line_number":56,"context_line":"    def save(self, context):"}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAAXX%2F%2F0cI%3D","line":53,"updated":"2014-04-26 05:04:59.000000000","message":"As we sorta discussed last night, this will need to remain unchanged, because I am making the DB API not return objects.\n\nBut yeah, right now it\u0027s a little weird because it\u0027s doing a conversion for no reason. :)","commit_id":"a5f535a1149f266100ae05d999a4839dd3a347c8"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"unresolved":false,"context_lines":[{"line_number":78,"context_line":"        \"\"\""},{"line_number":79,"context_line":"        current \u003d self.__class__.get_by_uuid(context, uuid\u003dself.uuid)"},{"line_number":80,"context_line":"        for field in self.fields:"},{"line_number":81,"context_line":"            db_value \u003d getattr(current, field)"},{"line_number":82,"context_line":"            if (hasattr(self, base.get_attrname(field)) and"},{"line_number":83,"context_line":"                    getattr(self, field) !\u003d db_value):"},{"line_number":84,"context_line":"                setattr(self, field, db_value)"}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAAXX%2F%2F0bQ%3D","line":81,"updated":"2014-04-26 05:08:02.000000000","message":"This should only be done if \u0027hasattr\u0027 below is True.... because it can cause a lazy-load from the DB (in the future) when it\u0027s not necessary.  Ie, that\u0027s why \u0027hasattr\u0027 is first below. (This should probably be documented).","commit_id":"a5f535a1149f266100ae05d999a4839dd3a347c8"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"unresolved":false,"context_lines":[{"line_number":80,"context_line":"        current \u003d self.__class__.get_by_uuid(context, uuid\u003dself.uuid)"},{"line_number":81,"context_line":"        for field in self.fields:"},{"line_number":82,"context_line":"            if (hasattr(self, base.get_attrname(field)) and"},{"line_number":83,"context_line":"                    getattr(self, field) !\u003d getattr(current, field)):"},{"line_number":84,"context_line":"                setattr(self, field, getattr(current, field))"}],"source_content_type":"text/x-python","patch_set":29,"id":"bad4c104_c172eee4","line":83,"updated":"2014-04-29 16:49:33.000000000","message":"I think Chris had a good point about documenting how the getattr(current, field) should only be done after the hasattr() succeeds, because of lazy loading. If you have to do another revision, it might be worth adding in.","commit_id":"2a8aa5e67eb6d52b9df40a966f3e8eb9cdf081f2"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"0188c3019b1ebba78dd047dc86f8b3d05d397412","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        current \u003d self.__class__.get_by_uuid(context, uuid\u003dself.uuid)"},{"line_number":81,"context_line":"        for field in self.fields:"},{"line_number":82,"context_line":"            if (hasattr(self, base.get_attrname(field)) and"},{"line_number":83,"context_line":"                    getattr(self, field) !\u003d getattr(current, field)):"},{"line_number":84,"context_line":"                setattr(self, field, getattr(current, field))"}],"source_content_type":"text/x-python","patch_set":29,"id":"bad4c104_ac0c0196","line":83,"in_reply_to":"bad4c104_c172eee4","updated":"2014-04-29 17:05:11.000000000","message":"Here and so is first performed `hasattr`. It makes no sense to add another one ... It made sense when it was `db_value \u003d getattr (current, field)` in this case we could  miss a mistake and it would be an exception `AttributeError`. `hasattr` intercepts it.","commit_id":"2a8aa5e67eb6d52b9df40a966f3e8eb9cdf081f2"}],"ironic/objects/conductor.py":[{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"unresolved":false,"context_lines":[{"line_number":60,"context_line":"                                               hostname\u003dself.hostname)"},{"line_number":61,"context_line":"        for field in self.fields:"},{"line_number":62,"context_line":"            if (hasattr(self, base.get_attrname(field)) and"},{"line_number":63,"context_line":"                    getattr(self, field) !\u003d getattr(current, field)):"},{"line_number":64,"context_line":"                setattr(self, field, getattr(current, field))"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @base.remotable"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9DBc%3D","line":63,"updated":"2013-12-17 10:27:28.000000000","message":"ditto","commit_id":"e3d26f040f4a04cd3e2172f1399569d3e8cf0ef7"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"0188c3019b1ebba78dd047dc86f8b3d05d397412","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                                               hostname\u003dself.hostname)"},{"line_number":61,"context_line":"        for field in self.fields:"},{"line_number":62,"context_line":"            if (hasattr(self, base.get_attrname(field)) and"},{"line_number":63,"context_line":"                    getattr(self, field) !\u003d getattr(current, field)):"},{"line_number":64,"context_line":"                setattr(self, field, getattr(current, field))"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @base.remotable"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9CgU%3D","line":63,"in_reply_to":"AAAATn%2F9DBc%3D","updated":"2013-12-17 12:37:32.000000000","message":"said in the previous inline comments","commit_id":"e3d26f040f4a04cd3e2172f1399569d3e8cf0ef7"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"unresolved":false,"context_lines":[{"line_number":45,"context_line":"        :param hostname: the hostname on which a Conductor is running"},{"line_number":46,"context_line":"        :returns: a :class:`Conductor` object."},{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":"        return cls.dbapi.get_conductor(hostname)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def save(self, context):"},{"line_number":51,"context_line":"        \"\"\"Save is not supported by Conductor objects.\"\"\""}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAAXX%2F%2F0cE%3D","line":48,"updated":"2014-04-26 05:04:59.000000000","message":"Same comment as Chassis.","commit_id":"a5f535a1149f266100ae05d999a4839dd3a347c8"}],"ironic/objects/node.py":[{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"unresolved":false,"context_lines":[{"line_number":93,"context_line":"    def refresh(self, context):"},{"line_number":94,"context_line":"        current \u003d self.__class__.get_by_uuid(context, uuid\u003dself.uuid)"},{"line_number":95,"context_line":"        for field in self.fields:"},{"line_number":96,"context_line":"            if (hasattr(self, base.get_attrname(field)) and"},{"line_number":97,"context_line":"                    getattr(self, field) !\u003d getattr(current, field)):"},{"line_number":98,"context_line":"                setattr(self, field, getattr(current, field))"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9DBU%3D","line":96,"updated":"2013-12-17 10:27:28.000000000","message":"ditto","commit_id":"e3d26f040f4a04cd3e2172f1399569d3e8cf0ef7"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"0188c3019b1ebba78dd047dc86f8b3d05d397412","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    def refresh(self, context):"},{"line_number":94,"context_line":"        current \u003d self.__class__.get_by_uuid(context, uuid\u003dself.uuid)"},{"line_number":95,"context_line":"        for field in self.fields:"},{"line_number":96,"context_line":"            if (hasattr(self, base.get_attrname(field)) and"},{"line_number":97,"context_line":"                    getattr(self, field) !\u003d getattr(current, field)):"},{"line_number":98,"context_line":"                setattr(self, field, getattr(current, field))"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9CgI%3D","line":96,"in_reply_to":"AAAATn%2F9DBU%3D","updated":"2013-12-17 12:37:32.000000000","message":"said in the previous inline comments","commit_id":"e3d26f040f4a04cd3e2172f1399569d3e8cf0ef7"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"unresolved":false,"context_lines":[{"line_number":77,"context_line":"        :param uuid: the uuid of a node."},{"line_number":78,"context_line":"        :returns: a :class:`Node` object."},{"line_number":79,"context_line":"        \"\"\""},{"line_number":80,"context_line":"        return cls.dbapi.get_node(uuid)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @base.remotable"},{"line_number":83,"context_line":"    def save(self, context):"}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAAXX%2F%2F0cA%3D","line":80,"updated":"2014-04-26 05:04:59.000000000","message":"This is old code and needs a rebase. This dbapi method doesn\u0027t exist anymore. It\u0027s now get_node_by_id and get_node_by_uuid... and they don\u0027t return Objects anymore. So this conversion will need to stay when rebasing.","commit_id":"a5f535a1149f266100ae05d999a4839dd3a347c8"}],"ironic/objects/port.py":[{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"unresolved":false,"context_lines":[{"line_number":75,"context_line":"        \"\"\""},{"line_number":76,"context_line":"        current \u003d self.__class__.get_by_uuid(context, uuid\u003dself.uuid)"},{"line_number":77,"context_line":"        for field in self.fields:"},{"line_number":78,"context_line":"            if (hasattr(self, base.get_attrname(field)) and"},{"line_number":79,"context_line":"                    getattr(self, field) !\u003d getattr(current, field)):"},{"line_number":80,"context_line":"                setattr(self, field, getattr(current, field))"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9DBQ%3D","line":78,"updated":"2013-12-17 10:27:28.000000000","message":"ditto","commit_id":"e3d26f040f4a04cd3e2172f1399569d3e8cf0ef7"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"0188c3019b1ebba78dd047dc86f8b3d05d397412","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        \"\"\""},{"line_number":76,"context_line":"        current \u003d self.__class__.get_by_uuid(context, uuid\u003dself.uuid)"},{"line_number":77,"context_line":"        for field in self.fields:"},{"line_number":78,"context_line":"            if (hasattr(self, base.get_attrname(field)) and"},{"line_number":79,"context_line":"                    getattr(self, field) !\u003d getattr(current, field)):"},{"line_number":80,"context_line":"                setattr(self, field, getattr(current, field))"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9Cf8%3D","line":78,"in_reply_to":"AAAATn%2F9DBQ%3D","updated":"2013-12-17 12:37:32.000000000","message":"said in the previous inline comments","commit_id":"e3d26f040f4a04cd3e2172f1399569d3e8cf0ef7"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"unresolved":false,"context_lines":[{"line_number":45,"context_line":"        :param uuid: the uuid of a port."},{"line_number":46,"context_line":"        :returns: a :class:`Port` object."},{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":"        return cls.dbapi.get_port(uuid)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @base.remotable"},{"line_number":51,"context_line":"    def save(self, context):"}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAAXX%2F%2F0b8%3D","line":48,"updated":"2014-04-26 05:04:59.000000000","message":"Same as Chassis. :)","commit_id":"a5f535a1149f266100ae05d999a4839dd3a347c8"}],"ironic/tests/api/test_acl.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"unresolved":false,"context_lines":[{"line_number":62,"context_line":"            response \u003d self.get_json(self.node_path,"},{"line_number":63,"context_line":"                                 headers\u003d{\u0027X-Auth-Token\u0027: utils.ADMIN_TOKEN})"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"            self.assertEqual(self.fake_db_node[\u0027uuid\u0027], response[\u0027uuid\u0027])"},{"line_number":66,"context_line":"            mock_get_node.assert_called_once_with(self.fake_db_node[\u0027uuid\u0027])"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def test_non_admin(self):"}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAAXH%2F%2FSsI%3D","line":65,"updated":"2014-04-22 18:58:54.000000000","message":"not self.fake_db_node.uuid?","commit_id":"a5f535a1149f266100ae05d999a4839dd3a347c8"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"0188c3019b1ebba78dd047dc86f8b3d05d397412","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            response \u003d self.get_json(self.node_path,"},{"line_number":63,"context_line":"                                 headers\u003d{\u0027X-Auth-Token\u0027: utils.ADMIN_TOKEN})"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"            self.assertEqual(self.fake_db_node[\u0027uuid\u0027], response[\u0027uuid\u0027])"},{"line_number":66,"context_line":"            mock_get_node.assert_called_once_with(self.fake_db_node[\u0027uuid\u0027])"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def test_non_admin(self):"}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAAXH%2F%2FRdw%3D","line":65,"in_reply_to":"AAAAXH%2F%2FSsI%3D","updated":"2014-04-22 20:36:32.000000000","message":"Hi Ruby! :) Not in this patch, I do it in next patch :)","commit_id":"a5f535a1149f266100ae05d999a4839dd3a347c8"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"unresolved":false,"context_lines":[{"line_number":63,"context_line":"                                 headers\u003d{\u0027X-Auth-Token\u0027: utils.ADMIN_TOKEN})"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"            self.assertEqual(self.fake_db_node[\u0027uuid\u0027], response[\u0027uuid\u0027])"},{"line_number":66,"context_line":"            mock_get_node.assert_called_once_with(self.fake_db_node[\u0027uuid\u0027])"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def test_non_admin(self):"},{"line_number":69,"context_line":"        response \u003d self.get_json(self.node_path,"}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAAXH%2F%2FSsE%3D","line":66,"updated":"2014-04-22 18:58:54.000000000","message":"ditto\n\nAlso, it might make sense to change self.fake_db_node -\u003e self.fake_node.","commit_id":"a5f535a1149f266100ae05d999a4839dd3a347c8"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"0188c3019b1ebba78dd047dc86f8b3d05d397412","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                                 headers\u003d{\u0027X-Auth-Token\u0027: utils.ADMIN_TOKEN})"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"            self.assertEqual(self.fake_db_node[\u0027uuid\u0027], response[\u0027uuid\u0027])"},{"line_number":66,"context_line":"            mock_get_node.assert_called_once_with(self.fake_db_node[\u0027uuid\u0027])"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def test_non_admin(self):"},{"line_number":69,"context_line":"        response \u003d self.get_json(self.node_path,"}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAAXH%2F%2FRdo%3D","line":66,"in_reply_to":"AAAAXH%2F%2FSsE%3D","updated":"2014-04-22 20:36:32.000000000","message":"I agree with you `self.fake_db_node -\u003e self.fake_node`. Will do! \u003d)","commit_id":"a5f535a1149f266100ae05d999a4839dd3a347c8"}],"ironic/tests/objects/test_chassis.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"0f765d688282e4d5ce66bd577e02a3c1f07b8786","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                        uuid, {\u0027extra\u0027: {\"test\": 123}})"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def test_refresh(self):"},{"line_number":62,"context_line":"        uuid \u003d self.fake_chassis[\u0027uuid\u0027]"},{"line_number":63,"context_line":"        new_uuid \u003d ironic_utils.generate_uuid()"},{"line_number":64,"context_line":"        returns \u003d [dict(self.fake_chassis, uuid\u003duuid),"},{"line_number":65,"context_line":"                   dict(self.fake_chassis, uuid\u003dnew_uuid)]"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F94gg%3D","side":"PARENT","line":62,"updated":"2013-12-04 22:15:49.000000000","message":"shouldn\u0027t this be changed to self.fake_chassis.uuid?","commit_id":"703309e5be784ff82a35cbfe9d1ad51e79987f30"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"649f312bc15b0262a95fd41cf34dc24896fd3438","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                        uuid, {\u0027extra\u0027: {\"test\": 123}})"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def test_refresh(self):"},{"line_number":62,"context_line":"        uuid \u003d self.fake_chassis[\u0027uuid\u0027]"},{"line_number":63,"context_line":"        new_uuid \u003d ironic_utils.generate_uuid()"},{"line_number":64,"context_line":"        returns \u003d [dict(self.fake_chassis, uuid\u003duuid),"},{"line_number":65,"context_line":"                   dict(self.fake_chassis, uuid\u003dnew_uuid)]"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F91zc%3D","side":"PARENT","line":62,"in_reply_to":"AAAATn%2F94gg%3D","updated":"2013-12-05 13:02:17.000000000","message":"Yes it is. Thank!","commit_id":"703309e5be784ff82a35cbfe9d1ad51e79987f30"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"d2aaebeb23ba9254030646208a87ec9d11564f5a","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":"import copy"},{"line_number":17,"context_line":"import mock"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from ironic.common import utils as ironic_utils"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F94Eo%3D","line":16,"updated":"2013-12-04 23:47:29.000000000","message":"should be a blank line before first import, and a blank line separating the import of built-in modules from third-party modules.","commit_id":"d28bb1381d7bab57e1a87ea2f32e2a8a61f8f9d3"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"649f312bc15b0262a95fd41cf34dc24896fd3438","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":"import copy"},{"line_number":17,"context_line":"import mock"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from ironic.common import utils as ironic_utils"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F910s%3D","line":16,"in_reply_to":"AAAATn%2F94Eo%3D","updated":"2013-12-05 13:02:17.000000000","message":"Done","commit_id":"d28bb1381d7bab57e1a87ea2f32e2a8a61f8f9d3"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"unresolved":false,"context_lines":[{"line_number":58,"context_line":"    def test_refresh(self):"},{"line_number":59,"context_line":"        uuid \u003d self.fake_chassis[\u0027uuid\u0027]"},{"line_number":60,"context_line":"        new_uuid \u003d ironic_utils.generate_uuid()"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        fake1 \u003d utils.get_test_chassis(uuid\u003duuid)"},{"line_number":63,"context_line":"        fake2 \u003d utils.get_test_chassis(uuid\u003dnew_uuid)"},{"line_number":64,"context_line":"        returns \u003d [fake1, fake2]"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F8pJg%3D","line":61,"updated":"2013-12-23 20:21:43.000000000","message":"nit: do we need a newline here?","commit_id":"9e0c7c234eb67158b6c50aa21caf34267b7d73be"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"unresolved":false,"context_lines":[{"line_number":36,"context_line":"        uuid \u003d self.fake_chassis.uuid"},{"line_number":37,"context_line":"        with mock.patch.object(self.dbapi, \u0027get_chassis\u0027,"},{"line_number":38,"context_line":"                               autospec\u003dTrue) as mock_get_chassis:"},{"line_number":39,"context_line":"            mock_get_chassis.return_value \u003d db_utils.get_test_chassis()"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"            objects.Chassis.get_by_uuid(self.context, uuid)"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"9ad9bd40_330e448e","line":39,"updated":"2014-05-03 19:56:31.000000000","message":"Technically this dbapi call currently returns an object. I wonder if we should not change this (at least until we get the patch to remove objectify decorator on this dbapi method)?","commit_id":"ae249e4e5d099a3706524542ec27a7afc0b09280"}],"ironic/tests/objects/test_conductor.py":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"d2aaebeb23ba9254030646208a87ec9d11564f5a","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":"import copy"},{"line_number":18,"context_line":"import datetime"},{"line_number":19,"context_line":"import mock"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F94E4%3D","line":17,"updated":"2013-12-04 23:47:29.000000000","message":"should be a blank line before first import","commit_id":"d28bb1381d7bab57e1a87ea2f32e2a8a61f8f9d3"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"649f312bc15b0262a95fd41cf34dc24896fd3438","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":"import copy"},{"line_number":18,"context_line":"import datetime"},{"line_number":19,"context_line":"import mock"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F91zM%3D","line":17,"in_reply_to":"AAAATn%2F94E4%3D","updated":"2013-12-05 13:02:17.000000000","message":"Done","commit_id":"d28bb1381d7bab57e1a87ea2f32e2a8a61f8f9d3"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"d2aaebeb23ba9254030646208a87ec9d11564f5a","unresolved":false,"context_lines":[{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":"import copy"},{"line_number":18,"context_line":"import datetime"},{"line_number":19,"context_line":"import mock"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from ironic.db import api as db_api"},{"line_number":22,"context_line":"from ironic.db.sqlalchemy import models"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F94Es%3D","line":19,"updated":"2013-12-04 23:47:29.000000000","message":"should be a blank line separating built-in modules from third-party modules like \"mock\"","commit_id":"d28bb1381d7bab57e1a87ea2f32e2a8a61f8f9d3"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"649f312bc15b0262a95fd41cf34dc24896fd3438","unresolved":false,"context_lines":[{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":"import copy"},{"line_number":18,"context_line":"import datetime"},{"line_number":19,"context_line":"import mock"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from ironic.db import api as db_api"},{"line_number":22,"context_line":"from ironic.db.sqlalchemy import models"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F91wk%3D","line":19,"in_reply_to":"AAAATn%2F94Es%3D","updated":"2013-12-05 13:02:17.000000000","message":"Done","commit_id":"d28bb1381d7bab57e1a87ea2f32e2a8a61f8f9d3"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"unresolved":false,"context_lines":[{"line_number":24,"context_line":"from ironic import objects"},{"line_number":25,"context_line":"from ironic.objects import utils as obj_utils"},{"line_number":26,"context_line":"from ironic.openstack.common import timeutils"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from ironic.tests.db import base"},{"line_number":29,"context_line":"from ironic.tests.db import utils as db_utils"},{"line_number":30,"context_line":"from ironic.tests.objects import utils"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F8%2FS8%3D","line":27,"updated":"2013-12-18 01:04:11.000000000","message":"extra white space should be removed","commit_id":"e3d26f040f4a04cd3e2172f1399569d3e8cf0ef7"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def setUp(self):"},{"line_number":36,"context_line":"        super(TestConductorObject, self).setUp()"},{"line_number":37,"context_line":"        self.fake_conductor \u003d utils.get_test_conductor("},{"line_number":38,"context_line":"                                        updated_at\u003dtimeutils.utcnow())"},{"line_number":39,"context_line":"        self.dbapi \u003d db_api.get_instance()"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F8%2FS4%3D","line":37,"updated":"2013-12-18 01:04:11.000000000","message":"either use self.fake_conductor in the unit tests (as in old code) or delete this line and don\u0027t create it here.","commit_id":"e3d26f040f4a04cd3e2172f1399569d3e8cf0ef7"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"unresolved":false,"context_lines":[{"line_number":74,"context_line":"        t0 \u003d self.fake_conductor.updated_at"},{"line_number":75,"context_line":"        t1 \u003d t0 + datetime.timedelta(seconds\u003d10)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        fake1 \u003d db_utils.get_test_conductor()"},{"line_number":78,"context_line":"        fake2 \u003d db_utils.get_test_conductor()"},{"line_number":79,"context_line":"        fake1[\u0027updated_at\u0027] \u003d t0"},{"line_number":80,"context_line":"        fake2[\u0027updated_at\u0027] \u003d t1"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F8%2FSw%3D","line":77,"updated":"2013-12-18 01:04:11.000000000","message":"this can be simplified:\n\n  fake1 \u003d db_utils.get_test_conductor(updated_at\u003dt0)\n  fake2 \u003d db_utils.get_test_conductor(updated_at\u003dt1)","commit_id":"e3d26f040f4a04cd3e2172f1399569d3e8cf0ef7"},{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def test_refresh(self):"},{"line_number":71,"context_line":"        host \u003d self.fake_conductor.hostname"},{"line_number":72,"context_line":"        t0 \u003d timeutils.utcnow()"},{"line_number":73,"context_line":"        t1 \u003d t0 + datetime.timedelta(seconds\u003d10)"},{"line_number":74,"context_line":"        fake1 \u003d utils.get_test_conductor(updated_at\u003dt0)"},{"line_number":75,"context_line":"        fake2 \u003d utils.get_test_conductor(updated_at\u003dt1)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAT3%2F%2F%2Bhk%3D","line":72,"updated":"2013-12-25 17:39:03.000000000","message":"Seems to be an unrelated change. Why do we switching to utcnow?","commit_id":"590461d784bec358ccb7dba3530ad813cfe2ef6c"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"0188c3019b1ebba78dd047dc86f8b3d05d397412","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def test_refresh(self):"},{"line_number":71,"context_line":"        host \u003d self.fake_conductor.hostname"},{"line_number":72,"context_line":"        t0 \u003d timeutils.utcnow()"},{"line_number":73,"context_line":"        t1 \u003d t0 + datetime.timedelta(seconds\u003d10)"},{"line_number":74,"context_line":"        fake1 \u003d utils.get_test_conductor(updated_at\u003dt0)"},{"line_number":75,"context_line":"        fake2 \u003d utils.get_test_conductor(updated_at\u003dt1)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAT3%2F%2F%2BSY%3D","line":72,"in_reply_to":"AAAAT3%2F%2F%2Bhk%3D","updated":"2013-12-25 22:12:25.000000000","message":"Done","commit_id":"590461d784bec358ccb7dba3530ad813cfe2ef6c"}],"ironic/tests/objects/test_node.py":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"d2aaebeb23ba9254030646208a87ec9d11564f5a","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":"import copy"},{"line_number":17,"context_line":"import mock"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from ironic.db import api as db_api"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F94Ek%3D","line":16,"updated":"2013-12-04 23:47:29.000000000","message":"ditto","commit_id":"d28bb1381d7bab57e1a87ea2f32e2a8a61f8f9d3"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"649f312bc15b0262a95fd41cf34dc24896fd3438","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":"import copy"},{"line_number":17,"context_line":"import mock"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from ironic.db import api as db_api"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F91wY%3D","line":16,"in_reply_to":"AAAATn%2F94Ek%3D","updated":"2013-12-05 13:02:17.000000000","message":"Done","commit_id":"d28bb1381d7bab57e1a87ea2f32e2a8a61f8f9d3"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"unresolved":false,"context_lines":[{"line_number":19,"context_line":"from ironic.db import api as db_api"},{"line_number":20,"context_line":"from ironic.db.sqlalchemy import models"},{"line_number":21,"context_line":"from ironic import objects"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from ironic.tests.db import base"},{"line_number":24,"context_line":"from ironic.tests.db import utils as db_utils"},{"line_number":25,"context_line":"from ironic.tests.objects import utils"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F8%2FSo%3D","line":22,"updated":"2013-12-18 01:04:11.000000000","message":"again, no whitespace here","commit_id":"e3d26f040f4a04cd3e2172f1399569d3e8cf0ef7"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def setUp(self):"},{"line_number":31,"context_line":"        super(TestNodeObject, self).setUp()"},{"line_number":32,"context_line":"        self.fake_node \u003d utils.get_test_node()"},{"line_number":33,"context_line":"        self.dbapi \u003d db_api.get_instance()"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def test_load(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F8%2FSk%3D","line":32,"updated":"2013-12-18 01:04:11.000000000","message":"again, delete fake_node if you\u0027re not going to use it.","commit_id":"e3d26f040f4a04cd3e2172f1399569d3e8cf0ef7"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"unresolved":false,"context_lines":[{"line_number":59,"context_line":"                        uuid, {\u0027properties\u0027: {\"fake\": \"property\"}})"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def test_refresh(self):"},{"line_number":62,"context_line":"        fake1 \u003d db_utils.get_test_node()"},{"line_number":63,"context_line":"        fake2 \u003d db_utils.get_test_node()"},{"line_number":64,"context_line":"        fake1[\u0027properties\u0027] \u003d {\"fake\": \"first\"}"},{"line_number":65,"context_line":"        fake2[\u0027properties\u0027] \u003d {\"fake\": \"second\"}"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F8%2FSc%3D","line":62,"updated":"2013-12-18 01:04:11.000000000","message":"this can be simplified in the same way as get_test_conductor","commit_id":"e3d26f040f4a04cd3e2172f1399569d3e8cf0ef7"},{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"unresolved":false,"context_lines":[{"line_number":58,"context_line":"    def test_refresh(self):"},{"line_number":59,"context_line":"        uuid \u003d self.fake_node.uuid"},{"line_number":60,"context_line":"        returns \u003d [utils.get_test_node(properties\u003d{\"fake\": \"first\"}),"},{"line_number":61,"context_line":"                   utils.get_test_node(properties\u003d{\"fake\": \"second\"})]"},{"line_number":62,"context_line":"        expected \u003d [mock.call(uuid), mock.call(uuid)]"},{"line_number":63,"context_line":"        with mock.patch.object(self.dbapi, \u0027get_node\u0027, side_effect\u003dreturns,"},{"line_number":64,"context_line":"                               autospec\u003dTrue) as mock_get_node:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAT3%2F%2F%2BhI%3D","line":61,"updated":"2013-12-25 17:39:03.000000000","message":"In other modules you\u0027ve made this a separate line: returns \u003d [fake1, fake2],\nwould you please to change this too. Or change the others to make it consistent","commit_id":"590461d784bec358ccb7dba3530ad813cfe2ef6c"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"0188c3019b1ebba78dd047dc86f8b3d05d397412","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    def test_refresh(self):"},{"line_number":59,"context_line":"        uuid \u003d self.fake_node.uuid"},{"line_number":60,"context_line":"        returns \u003d [utils.get_test_node(properties\u003d{\"fake\": \"first\"}),"},{"line_number":61,"context_line":"                   utils.get_test_node(properties\u003d{\"fake\": \"second\"})]"},{"line_number":62,"context_line":"        expected \u003d [mock.call(uuid), mock.call(uuid)]"},{"line_number":63,"context_line":"        with mock.patch.object(self.dbapi, \u0027get_node\u0027, side_effect\u003dreturns,"},{"line_number":64,"context_line":"                               autospec\u003dTrue) as mock_get_node:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAT3%2F%2F%2BSM%3D","line":61,"in_reply_to":"AAAAT3%2F%2F%2BhI%3D","updated":"2013-12-25 22:12:25.000000000","message":"Done","commit_id":"590461d784bec358ccb7dba3530ad813cfe2ef6c"}],"ironic/tests/objects/test_port.py":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def setUp(self):"},{"line_number":30,"context_line":"        super(TestPortObject, self).setUp()"},{"line_number":31,"context_line":"        self.fake_port \u003d utils.get_test_port()"},{"line_number":32,"context_line":"        self.dbapi \u003d db_api.get_instance()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def test_load(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F8%2FSQ%3D","line":31,"updated":"2013-12-18 01:04:11.000000000","message":"ditto","commit_id":"e3d26f040f4a04cd3e2172f1399569d3e8cf0ef7"},{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"unresolved":false,"context_lines":[{"line_number":58,"context_line":"    def test_refresh(self):"},{"line_number":59,"context_line":"        uuid \u003d self.fake_port.uuid"},{"line_number":60,"context_line":"        returns \u003d [utils.get_test_port(),"},{"line_number":61,"context_line":"                   utils.get_test_port(address\u003d\"c3:54:00:cf:2d:40\")]"},{"line_number":62,"context_line":"        expected \u003d [mock.call(uuid), mock.call(uuid)]"},{"line_number":63,"context_line":"        with mock.patch.object(self.dbapi, \u0027get_port\u0027, side_effect\u003dreturns,"},{"line_number":64,"context_line":"                               autospec\u003dTrue) as mock_get_port:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAT3%2F%2F%2BhA%3D","line":61,"updated":"2013-12-25 17:39:03.000000000","message":"same","commit_id":"590461d784bec358ccb7dba3530ad813cfe2ef6c"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"0188c3019b1ebba78dd047dc86f8b3d05d397412","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    def test_refresh(self):"},{"line_number":59,"context_line":"        uuid \u003d self.fake_port.uuid"},{"line_number":60,"context_line":"        returns \u003d [utils.get_test_port(),"},{"line_number":61,"context_line":"                   utils.get_test_port(address\u003d\"c3:54:00:cf:2d:40\")]"},{"line_number":62,"context_line":"        expected \u003d [mock.call(uuid), mock.call(uuid)]"},{"line_number":63,"context_line":"        with mock.patch.object(self.dbapi, \u0027get_port\u0027, side_effect\u003dreturns,"},{"line_number":64,"context_line":"                               autospec\u003dTrue) as mock_get_port:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAT3%2F%2F%2BSI%3D","line":61,"in_reply_to":"AAAAT3%2F%2F%2BhA%3D","updated":"2013-12-25 22:12:25.000000000","message":"Done","commit_id":"590461d784bec358ccb7dba3530ad813cfe2ef6c"}],"ironic/tests/objects/utils.py":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"d2aaebeb23ba9254030646208a87ec9d11564f5a","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":"\"\"\"Ironic test utilities.\"\"\""},{"line_number":18,"context_line":"import ironic.tests.db.utils as utils"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import ironic.objects.chassis as ch"},{"line_number":21,"context_line":"import ironic.objects.conductor as conduct"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F94EE%3D","line":18,"updated":"2013-12-04 23:47:29.000000000","message":"missing blank line before import, and this import should not be separated from the other ironic imports.","commit_id":"d28bb1381d7bab57e1a87ea2f32e2a8a61f8f9d3"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"649f312bc15b0262a95fd41cf34dc24896fd3438","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":"\"\"\"Ironic test utilities.\"\"\""},{"line_number":18,"context_line":"import ironic.tests.db.utils as utils"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import ironic.objects.chassis as ch"},{"line_number":21,"context_line":"import ironic.objects.conductor as conduct"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F91wM%3D","line":18,"in_reply_to":"AAAATn%2F94EE%3D","updated":"2013-12-05 13:02:17.000000000","message":"Done","commit_id":"d28bb1381d7bab57e1a87ea2f32e2a8a61f8f9d3"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"d2aaebeb23ba9254030646208a87ec9d11564f5a","unresolved":false,"context_lines":[{"line_number":17,"context_line":"\"\"\"Ironic test utilities.\"\"\""},{"line_number":18,"context_line":"import ironic.tests.db.utils as utils"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import ironic.objects.chassis as ch"},{"line_number":21,"context_line":"import ironic.objects.conductor as conduct"},{"line_number":22,"context_line":"import ironic.objects.node as node_obj"},{"line_number":23,"context_line":"import ironic.objects.port as port_obj"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F94D0%3D","line":20,"updated":"2013-12-04 23:47:29.000000000","message":"you don\u0027t need to import each object module separately; you should just:\n\n  from ironic import objects","commit_id":"d28bb1381d7bab57e1a87ea2f32e2a8a61f8f9d3"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"649f312bc15b0262a95fd41cf34dc24896fd3438","unresolved":false,"context_lines":[{"line_number":17,"context_line":"\"\"\"Ironic test utilities.\"\"\""},{"line_number":18,"context_line":"import ironic.tests.db.utils as utils"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import ironic.objects.chassis as ch"},{"line_number":21,"context_line":"import ironic.objects.conductor as conduct"},{"line_number":22,"context_line":"import ironic.objects.node as node_obj"},{"line_number":23,"context_line":"import ironic.objects.port as port_obj"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F91wE%3D","line":20,"in_reply_to":"AAAATn%2F94D0%3D","updated":"2013-12-05 13:02:17.000000000","message":"Done","commit_id":"d28bb1381d7bab57e1a87ea2f32e2a8a61f8f9d3"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"d2aaebeb23ba9254030646208a87ec9d11564f5a","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"def get_test_node(**kw):"},{"line_number":27,"context_line":"    node \u003d utils.get_test_node(**kw)"},{"line_number":28,"context_line":"    return node_obj.Node._from_db_object(node_obj.Node(), node)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def get_test_port(**kw):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F94C0%3D","line":28,"updated":"2013-12-04 23:47:29.000000000","message":"You should not need to call a private method.\n\nI think what you are trying to do here is to objectify the result of utils.get_test_node() without actually creating a record in the database. If that\u0027s correct, you should do this:\n\n  @objects.objectify(objects.Node)\n  def get_test_node(**kw):\n    return utils.get_test_node(**kw)","commit_id":"d28bb1381d7bab57e1a87ea2f32e2a8a61f8f9d3"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"649f312bc15b0262a95fd41cf34dc24896fd3438","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"def get_test_node(**kw):"},{"line_number":27,"context_line":"    node \u003d utils.get_test_node(**kw)"},{"line_number":28,"context_line":"    return node_obj.Node._from_db_object(node_obj.Node(), node)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def get_test_port(**kw):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F91wA%3D","line":28,"in_reply_to":"AAAATn%2F94C0%3D","updated":"2013-12-05 13:02:17.000000000","message":"Done","commit_id":"d28bb1381d7bab57e1a87ea2f32e2a8a61f8f9d3"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"d2aaebeb23ba9254030646208a87ec9d11564f5a","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    return node_obj.Node._from_db_object(node_obj.Node(), node)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def get_test_port(**kw):"},{"line_number":32,"context_line":"    port \u003d utils.get_test_port(**kw)"},{"line_number":33,"context_line":"    return port_obj.Port._from_db_object(port_obj.Port(), port)"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F94Cw%3D","line":31,"updated":"2013-12-04 23:47:29.000000000","message":"ditto for these functions","commit_id":"d28bb1381d7bab57e1a87ea2f32e2a8a61f8f9d3"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"649f312bc15b0262a95fd41cf34dc24896fd3438","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    return node_obj.Node._from_db_object(node_obj.Node(), node)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def get_test_port(**kw):"},{"line_number":32,"context_line":"    port \u003d utils.get_test_port(**kw)"},{"line_number":33,"context_line":"    return port_obj.Port._from_db_object(port_obj.Port(), port)"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F91v0%3D","line":31,"in_reply_to":"AAAATn%2F94Cw%3D","updated":"2013-12-05 13:02:17.000000000","message":"Done","commit_id":"d28bb1381d7bab57e1a87ea2f32e2a8a61f8f9d3"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 Hewlett-Packard Development Company, L.P."},{"line_number":4,"context_line":"# All Rights Reserved."},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F91Js%3D","line":3,"updated":"2013-12-05 14:07:34.000000000","message":"Hi do you work for HP or Mirantis? If it\u0027s the latter I think you should not attribute any copyright to a company you don\u0027t work for, you can simple omit the copyright notice if you wish so, it\u0027s not mandatory :)","commit_id":"f3b8f154b440e42ac2209f60cae48587963ae6d9"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"649f312bc15b0262a95fd41cf34dc24896fd3438","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 Hewlett-Packard Development Company, L.P."},{"line_number":4,"context_line":"# All Rights Reserved."},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F91Bo%3D","line":3,"in_reply_to":"AAAATn%2F91Js%3D","updated":"2013-12-05 14:23:50.000000000","message":"Done","commit_id":"f3b8f154b440e42ac2209f60cae48587963ae6d9"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAW3%2F%2F0A0%3D","line":1,"updated":"2014-04-10 08:51:43.000000000","message":"Please remove the vim config line, we had a patch cleaning that up awhile ago. (https://review.openstack.org/#/c/73160)","commit_id":"9d96a64e7140d544185345c3eb0ecb7c7bcd8099"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"0188c3019b1ebba78dd047dc86f8b3d05d397412","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAW3%2F%2Fz0A%3D","line":1,"in_reply_to":"AAAAW3%2F%2F0A0%3D","updated":"2014-04-10 09:13:02.000000000","message":"Will do, thanks! \u003d)","commit_id":"9d96a64e7140d544185345c3eb0ecb7c7bcd8099"}]}
