)]}'
{"oslo_versionedobjects/base.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"068755651e01ad944d144fb82a0c07331949c88f","unresolved":false,"context_lines":[{"line_number":156,"context_line":"    @six.wraps(fn)"},{"line_number":157,"context_line":"    def wrapper(cls, context, *args, **kwargs):"},{"line_number":158,"context_line":"        if cls.indirection_api:"},{"line_number":159,"context_line":"            result \u003d cls.indirection_api.object_class_action("},{"line_number":160,"context_line":"                context, cls.obj_name(), fn.__name__, cls.VERSION,"},{"line_number":161,"context_line":"                args, kwargs)"},{"line_number":162,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aca2d91_86d7a622","line":159,"updated":"2015-05-08 14:36:12.000000000","message":"If we do this, are you sure we don\u0027t have to set indirection_api on all the subclasses individually? Even if they are imported first, and then the indirection_api is set?\n\nIn nova, we will import all our objects (a lot of them) and then set the indirection_api pretty late and/or toggle it later. We need to have the single switch at the root of the tree.","commit_id":"85bbdd8e95a2eba1cd5ada11e66fa63b20f8d133"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"23eb3f30eaced152229597df5bedad54875985d8","unresolved":false,"context_lines":[{"line_number":156,"context_line":"    @six.wraps(fn)"},{"line_number":157,"context_line":"    def wrapper(cls, context, *args, **kwargs):"},{"line_number":158,"context_line":"        if cls.indirection_api:"},{"line_number":159,"context_line":"            result \u003d cls.indirection_api.object_class_action("},{"line_number":160,"context_line":"                context, cls.obj_name(), fn.__name__, cls.VERSION,"},{"line_number":161,"context_line":"                args, kwargs)"},{"line_number":162,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aca2d91_a619828a","line":159,"in_reply_to":"1aca2d91_86d7a622","updated":"2015-05-08 14:49:18.000000000","message":"There shouldn\u0027t be any problems. I have seen the nova implementation. The scenario is as follows:\n\n\u003e\u003e\u003e class A(object):\n\n...     pass\n\n... \n\n\u003e\u003e\u003e a \u003d A()\n\n\u003e\u003e\u003e A.x \u003d \u0027x\u0027\n\n\u003e\u003e\u003e a.x\n\n\u0027x\u0027\n\n\u003e\u003e\u003e","commit_id":"85bbdd8e95a2eba1cd5ada11e66fa63b20f8d133"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"371e4196046ff075606c861cd4497d595a024867","unresolved":false,"context_lines":[{"line_number":156,"context_line":"    @six.wraps(fn)"},{"line_number":157,"context_line":"    def wrapper(cls, context, *args, **kwargs):"},{"line_number":158,"context_line":"        if cls.indirection_api:"},{"line_number":159,"context_line":"            result \u003d cls.indirection_api.object_class_action("},{"line_number":160,"context_line":"                context, cls.obj_name(), fn.__name__, cls.VERSION,"},{"line_number":161,"context_line":"                args, kwargs)"},{"line_number":162,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aca2d91_ba9bd271","line":159,"in_reply_to":"1aca2d91_a619828a","updated":"2015-05-08 14:53:42.000000000","message":"Also, if the property is not set in an inheriting class (which is the case in Nova), setting it on the base class works just the same.","commit_id":"85bbdd8e95a2eba1cd5ada11e66fa63b20f8d133"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0775f6c870db10f7fcc374b326bdc264915cff9b","unresolved":false,"context_lines":[{"line_number":156,"context_line":"    @six.wraps(fn)"},{"line_number":157,"context_line":"    def wrapper(cls, context, *args, **kwargs):"},{"line_number":158,"context_line":"        if cls.indirection_api:"},{"line_number":159,"context_line":"            result \u003d cls.indirection_api.object_class_action("},{"line_number":160,"context_line":"                context, cls.obj_name(), fn.__name__, cls.VERSION,"},{"line_number":161,"context_line":"                args, kwargs)"},{"line_number":162,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aca2d91_5a839e04","line":159,"in_reply_to":"1aca2d91_a619828a","updated":"2015-05-08 14:54:04.000000000","message":"Okay, what I was actually interested in was this:\n\n \u003e\u003e\u003e class A(object): pass\n ...\n \u003e\u003e\u003e class B(A): pass\n ...\n \u003e\u003e\u003e A.x \u003d 123\n \u003e\u003e\u003e B.x\n 123\n\nBut cool.","commit_id":"85bbdd8e95a2eba1cd5ada11e66fa63b20f8d133"}]}
