)]}'
{"dragonflow/db/model_proxy.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"f0ed6c508c1a2b0d2251a1f90a06cd51422085bf","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def _fetch_obj(self):"},{"line_number":37,"context_line":"        obj \u003d db_store2.get().get(self._model(id\u003dself._id))"},{"line_number":38,"context_line":"        # FIXME fetch from NbApi"},{"line_number":39,"context_line":"        return obj"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def get_object(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a3905b3_61e01997","line":38,"range":{"start_line":38,"start_character":0,"end_line":38,"end_character":32},"updated":"2017-01-23 19:46:12.000000000","message":"Is this needed? I thought is_stale is set from db_store2?","commit_id":"ea423e214b7eae032195ab7d826b2a323545afdb"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"5951ce586ef6a0dbef90eef230d14f1b866a457e","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def _fetch_obj(self):"},{"line_number":37,"context_line":"        obj \u003d db_store2.get().get(self._model(id\u003dself._id))"},{"line_number":38,"context_line":"        # FIXME fetch from NbApi"},{"line_number":39,"context_line":"        return obj"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def get_object(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a3905b3_dcd50743","line":38,"range":{"start_line":38,"start_character":0,"end_line":38,"end_character":32},"in_reply_to":"5a3905b3_61e01997","updated":"2017-01-24 15:13:06.000000000","message":"I will add stale logic and retrieving form nb api in subsequent patches","commit_id":"ea423e214b7eae032195ab7d826b2a323545afdb"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"fa150356ad99f110b294fd3e3539541c0db12a38","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        return obj"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def get_object(self):"},{"line_number":55,"context_line":"        if self._obj is None:"},{"line_number":56,"context_line":"            self._obj \u003d self._fetch_obj()"},{"line_number":57,"context_line":"        return self._obj"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"1a430d35_d22be2e9","line":55,"updated":"2017-02-05 20:57:44.000000000","message":"The _obj.is_stale() functionality is removed?","commit_id":"62219b2926da94004c5df1d5021f518dcb90f9a5"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"fb296b159f3d7a9b2739d5f295a18a65611ee193","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        return obj"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def get_object(self):"},{"line_number":55,"context_line":"        if self._obj is None:"},{"line_number":56,"context_line":"            self._obj \u003d self._fetch_obj()"},{"line_number":57,"context_line":"        return self._obj"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"1a430d35_60b893e6","line":55,"in_reply_to":"1a430d35_d22be2e9","updated":"2017-02-06 06:34:02.000000000","message":"Yes, for now.\n\nI think its best to implement separately.","commit_id":"62219b2926da94004c5df1d5021f518dcb90f9a5"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"018e23117a8f7ceb9993b359a228b8315ccbe0b7","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            self.get_object()"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def _fetch_obj(self):"},{"line_number":50,"context_line":"        obj \u003d db_store2.get_instance().get(self._model(id\u003dself._id))"},{"line_number":51,"context_line":"        # FIXME fetch from NbApi"},{"line_number":52,"context_line":"        return obj"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"1a430d35_709d7cbb","line":50,"range":{"start_line":50,"start_character":39,"end_line":50,"end_character":42},"updated":"2017-02-07 12:45:09.000000000","message":"Needs to be get_one, fixing in next patch","commit_id":"948c794d7c2aeb9ff73c8acb298c62c357e395f4"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"1eaa2b45e3c5c1f4053c77a998e4a44daa5f4a00","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    def __init__(self, name):"},{"line_number":21,"context_line":"        self._name \u003d name"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def __get__(self, inst, owner\u003dNone):"},{"line_number":24,"context_line":"        if inst is not None:"},{"line_number":25,"context_line":"            return getattr(inst.get_object(), self._name)"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"fa31d9ce_3f157f3f","line":23,"range":{"start_line":23,"start_character":28,"end_line":23,"end_character":38},"updated":"2017-02-14 13:26:32.000000000","message":"Is there any case that owner will need a default value?","commit_id":"5b7b804792bd196b62210c04122044c66ab1ef40"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"68472565cf11e329533548fe220f9864ba2baae0","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    def __init__(self, name):"},{"line_number":21,"context_line":"        self._name \u003d name"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def __get__(self, inst, owner\u003dNone):"},{"line_number":24,"context_line":"        if inst is not None:"},{"line_number":25,"context_line":"            return getattr(inst.get_object(), self._name)"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"fa31d9ce_df50e334","line":23,"range":{"start_line":23,"start_character":28,"end_line":23,"end_character":38},"in_reply_to":"fa31d9ce_3f157f3f","updated":"2017-02-14 13:51:30.000000000","message":"This is a signature taken from python reference on the descriptors [1] - (I\u0027ll change param names to reflect the ones in the link)..\n\nFrom what I understand, the third param is optional because a call with just one call is a valid.\n\nUsually when you have a class A with field b that is a descriptor:\n\n 1. A.b is translated to \u003cb object\u003e.__get__(None, A)\n 2. A().b is translated to \u003cb object\u003e.__get__(\u003cA object\u003e, A)\n\nbut it is also valid to just call b.__get__(\u003cA instance\u003e).\n\n[1] https://docs.python.org/2/howto/descriptor.html#descriptor-protocol","commit_id":"5b7b804792bd196b62210c04122044c66ab1ef40"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"9d2fa71d1e902af0ed9435ff79533a5c76ea045f","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    objects will fetch the backing model right away."},{"line_number":40,"context_line":"    \u0027\u0027\u0027"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def __init__(self, id, lazy\u003dTrue):"},{"line_number":43,"context_line":"        self._id \u003d id"},{"line_number":44,"context_line":"        self._obj \u003d None"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"fa31d9ce_d67a9087","line":42,"range":{"start_line":42,"start_character":23,"end_line":42,"end_character":25},"updated":"2017-02-14 13:24:41.000000000","message":"There is an effort to avoid shadowing python build-in words, it is better to change to uuid here to align with that patch.\n\nhttps://review.openstack.org/#/c/432711/","commit_id":"5b7b804792bd196b62210c04122044c66ab1ef40"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"82f2bd3a07cf34d6267c3f73cbb58abf52d61b95","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    objects will fetch the backing model right away."},{"line_number":40,"context_line":"    \u0027\u0027\u0027"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def __init__(self, id, lazy\u003dTrue):"},{"line_number":43,"context_line":"        self._id \u003d id"},{"line_number":44,"context_line":"        self._obj \u003d None"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"fa31d9ce_421b1aca","line":42,"range":{"start_line":42,"start_character":23,"end_line":42,"end_character":25},"in_reply_to":"fa31d9ce_9f158be6","updated":"2017-02-15 01:27:55.000000000","message":"It is a controversial area. There are some arguing in stackoverflow[1-2]. And [3] tells not to do this way. Basically, it hurts nothing. The shortcoming are (1) IDE will report warning (2) cause some issue hard to detect when code evolves. For (2), I changed the name of parameter \u0027id\u0027 in one patch, other patch rebase and still use \u0027id\u0027 inside the method, and the pep8/UT reports nothing. uuid might not be good enough here. Maybe we can use obj_id?\n\n[1] http://stackoverflow.com/questions/77552/id-is-a-bad-variable-name-in-python?noredirect\u003d1\u0026lq\u003d1\n[2] http://stackoverflow.com/questions/9109333/is-it-bad-practice-to-use-a-built-in-function-name-as-an-attribute-or-method-ide?noredirect\u003d1\u0026lq\u003d1\n[3] https://docs.openstack.org/developer/hacking/#general","commit_id":"5b7b804792bd196b62210c04122044c66ab1ef40"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"68472565cf11e329533548fe220f9864ba2baae0","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    objects will fetch the backing model right away."},{"line_number":40,"context_line":"    \u0027\u0027\u0027"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def __init__(self, id, lazy\u003dTrue):"},{"line_number":43,"context_line":"        self._id \u003d id"},{"line_number":44,"context_line":"        self._obj \u003d None"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"fa31d9ce_9f158be6","line":42,"range":{"start_line":42,"start_character":23,"end_line":42,"end_character":25},"in_reply_to":"fa31d9ce_d67a9087","updated":"2017-02-14 13:51:30.000000000","message":"I understand we\u0027re shadowing a built-in here but it makes the most sense, \u0027id\u0027 is a the field name we\u0027re referencing by.","commit_id":"5b7b804792bd196b62210c04122044c66ab1ef40"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"9d2fa71d1e902af0ed9435ff79533a5c76ea045f","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            self.get_object()"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def _fetch_obj(self):"},{"line_number":50,"context_line":"        obj \u003d db_store2.get_instance().get_one(self._model(id\u003dself._id))"},{"line_number":51,"context_line":"        # FIXME fetch from NbApi"},{"line_number":52,"context_line":"        return obj"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"fa31d9ce_36fa0c76","line":50,"range":{"start_line":50,"start_character":52,"end_line":50,"end_character":58},"updated":"2017-02-14 13:24:41.000000000","message":"This depends on line 86 to pass in the model, right? Can you add some comment for it?","commit_id":"5b7b804792bd196b62210c04122044c66ab1ef40"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"68472565cf11e329533548fe220f9864ba2baae0","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            self.get_object()"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def _fetch_obj(self):"},{"line_number":50,"context_line":"        obj \u003d db_store2.get_instance().get_one(self._model(id\u003dself._id))"},{"line_number":51,"context_line":"        # FIXME fetch from NbApi"},{"line_number":52,"context_line":"        return obj"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"fa31d9ce_9f8bcb67","line":50,"range":{"start_line":50,"start_character":52,"end_line":50,"end_character":58},"in_reply_to":"fa31d9ce_36fa0c76","updated":"2017-02-14 13:51:30.000000000","message":"Yes, this class is just the base, and the deriving class is required to provide _model field with the actual model class we\u0027re proxying. Will add a comment explaining.","commit_id":"5b7b804792bd196b62210c04122044c66ab1ef40"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"9d2fa71d1e902af0ed9435ff79533a5c76ea045f","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        return self._id"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @id.setter"},{"line_number":64,"context_line":"    def ___set_id(self, value):"},{"line_number":65,"context_line":"        raise RuntimeError(_LE(\u0027Setting ID of model-proxy is not allowed\u0027))"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def to_struct(self):"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa31d9ce_965018d6","line":64,"range":{"start_line":64,"start_character":8,"end_line":64,"end_character":17},"updated":"2017-02-14 13:24:41.000000000","message":"Does this have to be this name? It looks a bit strange to me(with 2 underscore). Can this just be \"id\"?","commit_id":"5b7b804792bd196b62210c04122044c66ab1ef40"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"68472565cf11e329533548fe220f9864ba2baae0","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        return self._id"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @id.setter"},{"line_number":64,"context_line":"    def ___set_id(self, value):"},{"line_number":65,"context_line":"        raise RuntimeError(_LE(\u0027Setting ID of model-proxy is not allowed\u0027))"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def to_struct(self):"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa31d9ce_9f466b4d","line":64,"range":{"start_line":64,"start_character":8,"end_line":64,"end_character":17},"in_reply_to":"fa31d9ce_965018d6","updated":"2017-02-14 13:51:30.000000000","message":"Will change to id_setter","commit_id":"5b7b804792bd196b62210c04122044c66ab1ef40"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"9d2fa71d1e902af0ed9435ff79533a5c76ea045f","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    def ___set_id(self, value):"},{"line_number":65,"context_line":"        raise RuntimeError(_LE(\u0027Setting ID of model-proxy is not allowed\u0027))"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def to_struct(self):"},{"line_number":68,"context_line":"        return {\u0027id\u0027: self._id}"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"def create_model_proxy(model):"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa31d9ce_dc18f1d5","line":68,"range":{"start_line":67,"start_character":0,"end_line":68,"end_character":31},"updated":"2017-02-14 13:24:41.000000000","message":"what about other attributes? Do they need to be considered when construct a dictionary?","commit_id":"5b7b804792bd196b62210c04122044c66ab1ef40"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"68472565cf11e329533548fe220f9864ba2baae0","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    def ___set_id(self, value):"},{"line_number":65,"context_line":"        raise RuntimeError(_LE(\u0027Setting ID of model-proxy is not allowed\u0027))"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def to_struct(self):"},{"line_number":68,"context_line":"        return {\u0027id\u0027: self._id}"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"def create_model_proxy(model):"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa31d9ce_9fc3cb56","line":68,"range":{"start_line":67,"start_character":0,"end_line":68,"end_character":31},"in_reply_to":"fa31d9ce_dc18f1d5","updated":"2017-02-14 13:51:30.000000000","message":"The other attributes are stored on the actual object. This object is used only as a \"pointer\" for the real one so we don\u0027t need to store any other fields.","commit_id":"5b7b804792bd196b62210c04122044c66ab1ef40"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"487e794e010fb870db21b588060e621822e72c93","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    objects will fetch the backing model right away."},{"line_number":40,"context_line":"    \u0027\u0027\u0027"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def __init__(self, id, lazy\u003dTrue):"},{"line_number":43,"context_line":"        self._id \u003d id"},{"line_number":44,"context_line":"        self._obj \u003d None"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"fa31d9ce_531a0318","line":42,"range":{"start_line":42,"start_character":23,"end_line":42,"end_character":25},"updated":"2017-02-15 09:38:05.000000000","message":"I think to avoid issues, a rename to id_ (or _id) will be fine (like the usage of \u0027type_\u0027 to not shadow \u0027type\u0027)","commit_id":"3da98ce4a808d0c05caaf4f78c1f50efdf26c2f2"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"86286fe47fd45af18b98544cbd2225992c994e88","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    objects will fetch the backing model right away."},{"line_number":40,"context_line":"    \u0027\u0027\u0027"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def __init__(self, id, lazy\u003dTrue):"},{"line_number":43,"context_line":"        self._id \u003d id"},{"line_number":44,"context_line":"        self._obj \u003d None"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"fa31d9ce_ceb3a808","line":42,"range":{"start_line":42,"start_character":23,"end_line":42,"end_character":25},"in_reply_to":"fa31d9ce_531a0318","updated":"2017-02-15 10:10:44.000000000","message":"@Omer, Xiao..\n\nI don\u0027t mind changing it to either (id_ / obj_id) though initialization [*] will look different between a proxy object and a non-proxy object for (IMO) minuscule reason. We\u0027re shadowing id() but in a very short scope and I don\u0027t think this rename makes the code better. And since we don\u0027t *need* id() in this function (a quick look found no uses of id() in the project at all) I think having it as is outweighs following the convention. \n\n[*]\n\n  Model(id\u003d1, name\u003d\u0027a\u0027)\n  ModelProxy(id_\u003d1)","commit_id":"3da98ce4a808d0c05caaf4f78c1f50efdf26c2f2"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"3e9a8ddfc24b3d15b134374bfe76199b97a46ea0","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    objects will fetch the backing model right away."},{"line_number":40,"context_line":"    \u0027\u0027\u0027"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def __init__(self, id, lazy\u003dTrue):"},{"line_number":43,"context_line":"        self._id \u003d id"},{"line_number":44,"context_line":"        self._obj \u003d None"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"fa31d9ce_57290589","line":42,"range":{"start_line":42,"start_character":23,"end_line":42,"end_character":25},"in_reply_to":"fa31d9ce_9fe0f92a","updated":"2017-02-15 13:13:12.000000000","message":"I prefer for it to stay as is, and will keep following the other patch that renames id in the project. If we decide to follow the convention and find a suitable alternative I\u0027ll change it.","commit_id":"3da98ce4a808d0c05caaf4f78c1f50efdf26c2f2"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"ddd5f8a8c7ecf6e1b733c32576e4c8365bf252fb","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    objects will fetch the backing model right away."},{"line_number":40,"context_line":"    \u0027\u0027\u0027"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def __init__(self, id, lazy\u003dTrue):"},{"line_number":43,"context_line":"        self._id \u003d id"},{"line_number":44,"context_line":"        self._obj \u003d None"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"fa31d9ce_9fe0f92a","line":42,"range":{"start_line":42,"start_character":23,"end_line":42,"end_character":25},"in_reply_to":"fa31d9ce_ceb3a808","updated":"2017-02-15 12:00:36.000000000","message":"maybe change the parameter of model too? It hurts nothing to use \u0027id\u0027. Just some code convention here. Since there is already effort to adopt the code convention, it is better to align with the effort. If we decide not to go this way. Then it is ok to use id as parameter here.","commit_id":"3da98ce4a808d0c05caaf4f78c1f50efdf26c2f2"}],"dragonflow/tests/unit/test_model_proxy.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"487e794e010fb870db21b588060e621822e72c93","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            \u0027dragonflow.db.db_store2.get_instance\u0027,"},{"line_number":35,"context_line":"            return_value\u003dself.db_store2"},{"line_number":36,"context_line":"        )"},{"line_number":37,"context_line":"        self.get_inst_mock.start()"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def tearDown(self):"},{"line_number":40,"context_line":"        super(TestObjectProxy, self).tearDown()"}],"source_content_type":"text/x-python","patch_set":32,"id":"fa31d9ce_d3aa7384","line":37,"range":{"start_line":37,"start_character":0,"end_line":37,"end_character":34},"updated":"2017-02-15 09:38:05.000000000","message":"Sorry for not seeing this earlier, but why not use:\nself.addCleanup(self.get_inst_mock.stop)\n\nbefore calling start? Then you won\u0027t need a tearDown.","commit_id":"3da98ce4a808d0c05caaf4f78c1f50efdf26c2f2"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"86286fe47fd45af18b98544cbd2225992c994e88","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            \u0027dragonflow.db.db_store2.get_instance\u0027,"},{"line_number":35,"context_line":"            return_value\u003dself.db_store2"},{"line_number":36,"context_line":"        )"},{"line_number":37,"context_line":"        self.get_inst_mock.start()"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def tearDown(self):"},{"line_number":40,"context_line":"        super(TestObjectProxy, self).tearDown()"}],"source_content_type":"text/x-python","patch_set":32,"id":"fa31d9ce_aed6744c","line":37,"range":{"start_line":37,"start_character":0,"end_line":37,"end_character":34},"in_reply_to":"fa31d9ce_d3aa7384","updated":"2017-02-15 10:10:44.000000000","message":"Thanks, changing.","commit_id":"3da98ce4a808d0c05caaf4f78c1f50efdf26c2f2"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"e25f3cb8cb0f6d4ea41cbe9e037194eb221473e8","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            \u0027dragonflow.db.db_store2.get_instance\u0027,"},{"line_number":35,"context_line":"            return_value\u003dself.db_store2"},{"line_number":36,"context_line":"        )"},{"line_number":37,"context_line":"        self.get_inst_mock.start()"},{"line_number":38,"context_line":"        self.addCleanup(self.get_inst_mock.stop)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def test_proxied_attrs(self):"},{"line_number":41,"context_line":"        self.db_store2.get_one.return_value \u003d ModelTest("}],"source_content_type":"text/x-python","patch_set":33,"id":"fa31d9ce_4becfc29","line":38,"range":{"start_line":37,"start_character":0,"end_line":38,"end_character":48},"updated":"2017-02-15 14:33:59.000000000","message":"nit: It should be safer to reverse the order of these commands, but it shouldn\u0027t really make a difference.","commit_id":"c60d62342c7febda0f81262ec7912a90c84264c1"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"07c146095664301eb76839c14b5a6857c6482e1b","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            \u0027dragonflow.db.db_store2.get_instance\u0027,"},{"line_number":35,"context_line":"            return_value\u003dself.db_store2"},{"line_number":36,"context_line":"        )"},{"line_number":37,"context_line":"        self.get_inst_mock.start()"},{"line_number":38,"context_line":"        self.addCleanup(self.get_inst_mock.stop)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def test_proxied_attrs(self):"},{"line_number":41,"context_line":"        self.db_store2.get_one.return_value \u003d ModelTest("}],"source_content_type":"text/x-python","patch_set":33,"id":"fa31d9ce_ab001867","line":38,"range":{"start_line":37,"start_character":0,"end_line":38,"end_character":48},"in_reply_to":"fa31d9ce_4becfc29","updated":"2017-02-15 14:40:37.000000000","message":"Will reverse if I respin this.","commit_id":"c60d62342c7febda0f81262ec7912a90c84264c1"}]}
