)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"829f6d370bd0bfacfd8c25ea4704afe8fd3765dc","unresolved":false,"context_lines":[{"line_number":19,"context_line":"classes -this could be easily fixed by checking if it\u0027s a"},{"line_number":20,"context_line":"CinderPersistentObject class-."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"This mechanism could also be used to populate the obj_relationships if"},{"line_number":23,"context_line":"we decided we wanted to initialize them on registration instead of doing"},{"line_number":24,"context_line":"it when we first need it."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Change-Id: I44c0fb41e3a2e6d615dc87ee6fe32d6a3ecf102a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9abb7d3a_5e84f45c","line":24,"range":{"start_line":22,"start_character":0,"end_line":24,"end_character":25},"updated":"2016-05-31 11:51:20.000000000","message":"Are we using obj_relationships now with manifests?","commit_id":"7cabcf666dfd67fc6ccd1b8b9d0a0c24bb2b4b63"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5ad56f6d0c73ced44c85fd79c96b2e391c22828e","unresolved":false,"context_lines":[{"line_number":19,"context_line":"classes -this could be easily fixed by checking if it\u0027s a"},{"line_number":20,"context_line":"CinderPersistentObject class-."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"This mechanism could also be used to populate the obj_relationships if"},{"line_number":23,"context_line":"we decided we wanted to initialize them on registration instead of doing"},{"line_number":24,"context_line":"it when we first need it."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Change-Id: I44c0fb41e3a2e6d615dc87ee6fe32d6a3ecf102a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9abb7d3a_e17eed17","line":24,"range":{"start_line":22,"start_character":0,"end_line":24,"end_character":25},"in_reply_to":"9abb7d3a_5e84f45c","updated":"2016-05-31 12:04:26.000000000","message":"Nop, I didn\u0027t update this after mechanism was changed, will remove.","commit_id":"7cabcf666dfd67fc6ccd1b8b9d0a0c24bb2b4b63"}],"cinder/objects/base.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"829f6d370bd0bfacfd8c25ea4704afe8fd3765dc","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        init_methods \u003d {supercls.cinder_ovo_cls_init"},{"line_number":122,"context_line":"                        for supercls in inspect.getmro(cls)"},{"line_number":123,"context_line":"                        if hasattr(supercls, \u0027cinder_ovo_cls_init\u0027)}"},{"line_number":124,"context_line":"        for init_method in init_methods:"},{"line_number":125,"context_line":"            init_method(cls)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"class CinderObject(base.VersionedObject):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_de3c64ca","line":125,"range":{"start_line":124,"start_character":0,"end_line":125,"end_character":28},"updated":"2016-05-31 11:51:20.000000000","message":"You\u0027re using MRO, but as set doesn\u0027t preserve order, this will call the methods in random order.","commit_id":"7cabcf666dfd67fc6ccd1b8b9d0a0c24bb2b4b63"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5826e4c489b84b0934861e512a0f715496ce8a0d","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        init_methods \u003d {supercls.cinder_ovo_cls_init"},{"line_number":122,"context_line":"                        for supercls in inspect.getmro(cls)"},{"line_number":123,"context_line":"                        if hasattr(supercls, \u0027cinder_ovo_cls_init\u0027)}"},{"line_number":124,"context_line":"        for init_method in init_methods:"},{"line_number":125,"context_line":"            init_method(cls)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"class CinderObject(base.VersionedObject):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_bcb24804","line":125,"range":{"start_line":124,"start_character":0,"end_line":125,"end_character":28},"in_reply_to":"9abb7d3a_01d7b1ed","updated":"2016-05-31 12:13:05.000000000","message":"So I\u0027m losing possibility of overwriting what a parent init does in a child class? I see it as counter-intuitive.","commit_id":"7cabcf666dfd67fc6ccd1b8b9d0a0c24bb2b4b63"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"24d6151cc2c29cb6ed4084476cf9d5b2ebef2eb5","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        init_methods \u003d {supercls.cinder_ovo_cls_init"},{"line_number":122,"context_line":"                        for supercls in inspect.getmro(cls)"},{"line_number":123,"context_line":"                        if hasattr(supercls, \u0027cinder_ovo_cls_init\u0027)}"},{"line_number":124,"context_line":"        for init_method in init_methods:"},{"line_number":125,"context_line":"            init_method(cls)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"class CinderObject(base.VersionedObject):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_d158d28c","line":125,"range":{"start_line":124,"start_character":0,"end_line":125,"end_character":28},"in_reply_to":"9abb7d3a_bcb24804","updated":"2016-05-31 13:17:58.000000000","message":"Yes, you are losing that possibility because in my opinion you should never need to do that.  This is not the parent init, it\u0027s a class initialization mechanism, which is different, the __init__ behavior will be the same as always.\n\nThe only way to change what the parent does is using the normal Python inheritance mechanism, which has the following problems:\n\n- You have to be careful in your code to call all relevant base classes `cinder_ovo_cls_init` methods, not only the one from super, otherwise some of the init methods would not get called and we could end up with unexpected behavior.\n\n- You can end up calling the same class initialization method twice, and in general class initialization should only be called once as expensive code or code with side effects would usually go there.\n\nI originally implemented it that way, but it meant that we would have to be more careful when writing and reviewing new OVOS; which is the main reason why I didn\u0027t go with that implementation.  If you feel strong about this class initialization mechanism following the same pattern as __init__ I\u0027ll change it.","commit_id":"7cabcf666dfd67fc6ccd1b8b9d0a0c24bb2b4b63"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5ad56f6d0c73ced44c85fd79c96b2e391c22828e","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        init_methods \u003d {supercls.cinder_ovo_cls_init"},{"line_number":122,"context_line":"                        for supercls in inspect.getmro(cls)"},{"line_number":123,"context_line":"                        if hasattr(supercls, \u0027cinder_ovo_cls_init\u0027)}"},{"line_number":124,"context_line":"        for init_method in init_methods:"},{"line_number":125,"context_line":"            init_method(cls)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"class CinderObject(base.VersionedObject):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_01d7b1ed","line":125,"range":{"start_line":124,"start_character":0,"end_line":125,"end_character":28},"in_reply_to":"9abb7d3a_de3c64ca","updated":"2016-05-31 12:04:26.000000000","message":"That is OK, because the order should be irrelevant for an OVO class initialization, as this is not like an instance initialization where you call your super init method and the order in which you call your parent\u0027s init is relevant.","commit_id":"7cabcf666dfd67fc6ccd1b8b9d0a0c24bb2b4b63"}]}
