)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"fd7e1d2b71d48b1fb6616656258c1178df21b830","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Lin Tan \u003clin.tan@intel.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-08-17 13:10:53 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Base IronicObject on VersionedObject"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Make IronicObjest based on oslo.versionedobjects VersionedObject."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa1b9901_d7493a32","line":7,"updated":"2015-08-21 07:27:33.000000000","message":"Can we make the commit message more clearer.  I don\u0027t get the change actually.  IronicObject is already derived from oslo_versionedobjects.base.VersionedObject.  Then why is this change required now ?","commit_id":"c524188efbfa80682d1e33a9190a77ed2ed7f083"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"fd7e1d2b71d48b1fb6616656258c1178df21b830","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Base IronicObject on VersionedObject"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Make IronicObjest based on oslo.versionedobjects VersionedObject."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Partial-Bug: #1461239"},{"line_number":12,"context_line":"Change-Id: Ieb2c406c10da75f9c42320085c563c166eda1703"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa1b9901_1759f234","line":9,"updated":"2015-08-21 07:27:33.000000000","message":"s/IronicObjest/IronicObject","commit_id":"c524188efbfa80682d1e33a9190a77ed2ed7f083"}],"ironic/objects/base.py":[{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"fd7e1d2b71d48b1fb6616656258c1178df21b830","unresolved":false,"context_lines":[{"line_number":208,"context_line":"    OBJ_BASE_CLASS \u003d IronicObject"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"class IronicObjectDictCompat(object_base.VersionedObjectDictCompat):"},{"line_number":212,"context_line":"    pass"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_57bc4aba","line":211,"updated":"2015-08-21 07:27:33.000000000","message":"Why not do multiple inheritance on IronicObject.  It preserves existing structure and all the child classes don\u0027t need to do multiple inheritance..\n\n  class IronicObject(object_base.VersionedObject, object_base.VersionedObjectDictCompat):","commit_id":"c524188efbfa80682d1e33a9190a77ed2ed7f083"},{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"41d135e5060abb584cadfa54d9800ce99ecced3b","unresolved":false,"context_lines":[{"line_number":208,"context_line":"    OBJ_BASE_CLASS \u003d IronicObject"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"class IronicObjectDictCompat(object_base.VersionedObjectDictCompat):"},{"line_number":212,"context_line":"    pass"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_ac059b10","line":211,"in_reply_to":"fa1b9901_57bc4aba","updated":"2015-08-26 03:16:50.000000000","message":"object_base.VersionedObjectDictCompat is only a temporary solution to support node[\u0027key\u0027], but we should only support node.key style. That means we will remove  object_base.VersionedObjectDictCompat finally. To make multiple inherit for child objects can reduce the workload. For example, we can remove the support for node, then port and so on.","commit_id":"c524188efbfa80682d1e33a9190a77ed2ed7f083"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0255df2bf665e6c853f3c3aaed77a6bd7c7391eb","unresolved":false,"context_lines":[{"line_number":44,"context_line":"            cls._obj_classes \u003d collections.defaultdict(list)"},{"line_number":45,"context_line":"        else:"},{"line_number":46,"context_line":"            # Add the subclass to IronicObject._obj_classes"},{"line_number":47,"context_line":"            object_base._make_class_properties(cls)"},{"line_number":48,"context_line":"            cls._obj_classes[cls.obj_name()].append(cls)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_69add62f","line":47,"updated":"2015-09-08 08:58:44.000000000","message":"we should not be using private functions from 3rdparty modules","commit_id":"c3f6640c503262e35aa403056b5df9896914fcb1"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"efaf151c35ead7eb92d966f7f0846735e9bae045","unresolved":false,"context_lines":[{"line_number":44,"context_line":"            cls._obj_classes \u003d collections.defaultdict(list)"},{"line_number":45,"context_line":"        else:"},{"line_number":46,"context_line":"            # Add the subclass to IronicObject._obj_classes"},{"line_number":47,"context_line":"            object_base._make_class_properties(cls)"},{"line_number":48,"context_line":"            cls._obj_classes[cls.obj_name()].append(cls)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_b8cf6728","line":47,"in_reply_to":"da20952f_69add62f","updated":"2015-09-09 21:58:42.000000000","message":"Agreed, this is not okay.\n\nThis metaclass also needs to go away. See:\n\nhttps://review.openstack.org/#/c/221971","commit_id":"c3f6640c503262e35aa403056b5df9896914fcb1"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0255df2bf665e6c853f3c3aaed77a6bd7c7391eb","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"class IronicObjectDictCompat(object_base.VersionedObjectDictCompat):"},{"line_number":204,"context_line":"    pass"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"def obj_to_primitive(obj):"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_09a8da1e","line":204,"updated":"2015-09-08 08:58:44.000000000","message":"this class it not needed, just use VersionedObjectDictCompat where you need it","commit_id":"c3f6640c503262e35aa403056b5df9896914fcb1"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f3beff726295aae8b4fb49df8c07638e7e0d1d38","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"# Note(lintan): This is a transition work to migrate oslo.versionedobjects,"},{"line_number":35,"context_line":"# which should be removed after finish the migration."},{"line_number":36,"context_line":"make_class_properties \u003d object_base._make_class_properties"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class IronicObjectMetaclass(type):"}],"source_content_type":"text/x-python","patch_set":7,"id":"da20952f_eba72ba5","line":36,"updated":"2015-09-10 14:41:25.000000000","message":"If you remove your remotable decorators and use the ones from o.vo I think you can avoid doing this, right? Given my change to fix the calling convention, I think you can probably go ahead and make that change without any problems at this point.\n\nI really don\u0027t think that using this private function from the library is a good idea...","commit_id":"6f429eb9ed21e67677fc21e20565c40475ebfd8f"},{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"3d7d4970964be10c4c89b56ea23441a05893ff95","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"# Note(lintan): This is a transition work to migrate oslo.versionedobjects,"},{"line_number":35,"context_line":"# which should be removed after finish the migration."},{"line_number":36,"context_line":"make_class_properties \u003d object_base._make_class_properties"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class IronicObjectMetaclass(type):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_dfe6fde7","line":36,"in_reply_to":"da20952f_eba72ba5","updated":"2015-09-14 09:25:10.000000000","message":"Thanks, Dan. You are right.","commit_id":"6f429eb9ed21e67677fc21e20565c40475ebfd8f"}],"ironic/tests/objects/test_objects.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"86305e9698775083a1c84ffc95a2922f9fac830a","unresolved":false,"context_lines":[{"line_number":31,"context_line":"gettext.install(\u0027ironic\u0027)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class MyObj(base.IronicObject, base.IronicObjectDictCompat):"},{"line_number":35,"context_line":"    VERSION \u003d \u00271.5\u0027"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    fields \u003d {\u0027foo\u0027: fields.IntegerField(),"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_3ea75cbe","line":34,"updated":"2015-08-26 12:59:44.000000000","message":"If base.IronicObjectDictCompat is added to child classes just to make its removal easier in future, maybe makes sense to add one more test that shows that without this class only object.key can be used?","commit_id":"1d2da546fe17ef5fe8122d1f770ef9e3e3d8510d"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"20487f677f3c3fa522b3c57e5419aba113453df2","unresolved":false,"context_lines":[{"line_number":460,"context_line":"        try:"},{"line_number":461,"context_line":"            obj[\u0027bar\u0027] \u003d \u0027value\u0027"},{"line_number":462,"context_line":"        except TypeError as e:"},{"line_number":463,"context_line":"            err_message \u003d str(e)"},{"line_number":464,"context_line":"        finally:"},{"line_number":465,"context_line":"            self.assertIn(\"\u0027TestObj\u0027 object does not support item assignment\","},{"line_number":466,"context_line":"                          err_message)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_19418c0b","line":463,"updated":"2015-09-03 18:00:58.000000000","message":"This should be six.text_type() for Python 3 consistency.","commit_id":"c3ad1f70b9cceb988ed5c5fdd9fce01701a65af3"},{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"fb06e1b8e7db3d3a3e74360d5361a69ccce6264f","unresolved":false,"context_lines":[{"line_number":460,"context_line":"        try:"},{"line_number":461,"context_line":"            obj[\u0027bar\u0027] \u003d \u0027value\u0027"},{"line_number":462,"context_line":"        except TypeError as e:"},{"line_number":463,"context_line":"            err_message \u003d str(e)"},{"line_number":464,"context_line":"        finally:"},{"line_number":465,"context_line":"            self.assertIn(\"\u0027TestObj\u0027 object does not support item assignment\","},{"line_number":466,"context_line":"                          err_message)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_4ba90e8f","line":463,"in_reply_to":"da20952f_19418c0b","updated":"2015-09-07 08:39:25.000000000","message":"Nice catch","commit_id":"c3ad1f70b9cceb988ed5c5fdd9fce01701a65af3"}]}
