)]}'
{"oslo/messaging/_drivers/base.py":[{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"3c19fe6be0b5e27cb071bc56b40e8d04eddb85b7","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import abc"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from oslo.config import cfg"},{"line_number":19,"context_line":"import six"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo.messaging import exceptions"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_c6d7f621","line":18,"updated":"2014-11-13 13:57:30.000000000","message":"It looks correct, but pep8 gate thinks that it is wrong. If it is a bug in pep8 gate we need to fix it. If it is a new correct rule we need to move oslo.config into  project import section.","commit_id":"7d957837de6c74c136d48aadb313ed3575e6a85a"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"23b0eead73519755f3f84a527a78c6996a1b9d42","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import abc"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from oslo.config import cfg"},{"line_number":19,"context_line":"import six"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo.messaging import exceptions"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_e0e93581","line":18,"in_reply_to":"5a890539_c6d7f621","updated":"2014-11-13 15:17:51.000000000","message":"Done, this is because oslo.config and oslo.messaging are in the same namespace","commit_id":"7d957837de6c74c136d48aadb313ed3575e6a85a"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"3c19fe6be0b5e27cb071bc56b40e8d04eddb85b7","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        self._url \u003d url"},{"line_number":86,"context_line":"        self._default_exchange \u003d default_exchange"},{"line_number":87,"context_line":"        self._allowed_remote_exmods \u003d allowed_remote_exmods or []"},{"line_number":88,"context_line":"        opt_group \u003d cfg.OptGroup(name\u003d\u0027oslo_messaging\u0027,"},{"line_number":89,"context_line":"                                 title\u003d\u0027Common driver options\u0027)"},{"line_number":90,"context_line":"        self.conf.register_group(opt_group)"},{"line_number":91,"context_line":"        self.conf.register_opts(_base_driver_opts, group\u003dopt_group)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_a08f32cb","line":88,"updated":"2014-11-13 13:57:30.000000000","message":"Too indistinct name for group. How about \"driver\" or \"base_driver\"?","commit_id":"7d957837de6c74c136d48aadb313ed3575e6a85a"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"23b0eead73519755f3f84a527a78c6996a1b9d42","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        self._url \u003d url"},{"line_number":86,"context_line":"        self._default_exchange \u003d default_exchange"},{"line_number":87,"context_line":"        self._allowed_remote_exmods \u003d allowed_remote_exmods or []"},{"line_number":88,"context_line":"        opt_group \u003d cfg.OptGroup(name\u003d\u0027oslo_messaging\u0027,"},{"line_number":89,"context_line":"                                 title\u003d\u0027Common driver options\u0027)"},{"line_number":90,"context_line":"        self.conf.register_group(opt_group)"},{"line_number":91,"context_line":"        self.conf.register_opts(_base_driver_opts, group\u003dopt_group)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_e3de9f3e","line":88,"in_reply_to":"5a890539_a08f32cb","updated":"2014-11-13 15:17:51.000000000","message":"It just a oslo.messaging option, many other oslo.messaging options have to move to this new group later, to follow the new convention: http://docs.openstack.org/developer/oslo.config/namespaces.html","commit_id":"7d957837de6c74c136d48aadb313ed3575e6a85a"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"0db8031c06f6aa70f1119278de95caee1fd12982","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        self._url \u003d url"},{"line_number":86,"context_line":"        self._default_exchange \u003d default_exchange"},{"line_number":87,"context_line":"        self._allowed_remote_exmods \u003d allowed_remote_exmods or []"},{"line_number":88,"context_line":"        opt_group \u003d cfg.OptGroup(name\u003d\u0027oslo_messaging\u0027,"},{"line_number":89,"context_line":"                                 title\u003d\u0027Common driver options\u0027)"},{"line_number":90,"context_line":"        self.conf.register_group(opt_group)"},{"line_number":91,"context_line":"        self.conf.register_opts(_base_driver_opts, group\u003dopt_group)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_ca42900f","line":88,"in_reply_to":"5a890539_e3de9f3e","updated":"2014-11-13 17:10:04.000000000","message":"Thank you. I got it.","commit_id":"7d957837de6c74c136d48aadb313ed3575e6a85a"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"3c19fe6be0b5e27cb071bc56b40e8d04eddb85b7","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def heartbeat(self):"},{"line_number":122,"context_line":"        \"Heartbeat method to ensure the driver is alive.\""},{"line_number":123,"context_line":"        pass"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    @abc.abstractmethod"},{"line_number":126,"context_line":"    def cleanup(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_263b5ad2","line":123,"updated":"2014-11-13 13:57:30.000000000","message":"Can\u0027t we implement some base logic? If we can\u0027t, please describe in the docstring that drivers\u0027 apis are too different and we can\u0027t allocate a common snippet. And for sure we need it to be @abtractmethod decorated if we keep it with pass statement.","commit_id":"7d957837de6c74c136d48aadb313ed3575e6a85a"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"42eb8c7c9d40cfe7d79a7d55f5b18704cdf39a74","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def heartbeat(self):"},{"line_number":122,"context_line":"        \"Heartbeat method to ensure the driver is alive.\""},{"line_number":123,"context_line":"        pass"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    @abc.abstractmethod"},{"line_number":126,"context_line":"    def cleanup(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_ea3f4cd4","line":123,"in_reply_to":"5a890539_0a21f84c","updated":"2014-11-14 14:12:47.000000000","message":"Not necessary.","commit_id":"7d957837de6c74c136d48aadb313ed3575e6a85a"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"23b0eead73519755f3f84a527a78c6996a1b9d42","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def heartbeat(self):"},{"line_number":122,"context_line":"        \"Heartbeat method to ensure the driver is alive.\""},{"line_number":123,"context_line":"        pass"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    @abc.abstractmethod"},{"line_number":126,"context_line":"    def cleanup(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_a04bad85","line":123,"in_reply_to":"5a890539_263b5ad2","updated":"2014-11-13 15:17:51.000000000","message":"This is voluntary a noop, perhaps they are nothing to do to have a working heartbeat. I have added that as comment.","commit_id":"7d957837de6c74c136d48aadb313ed3575e6a85a"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"0db8031c06f6aa70f1119278de95caee1fd12982","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def heartbeat(self):"},{"line_number":122,"context_line":"        \"Heartbeat method to ensure the driver is alive.\""},{"line_number":123,"context_line":"        pass"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    @abc.abstractmethod"},{"line_number":126,"context_line":"    def cleanup(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_0a21f84c","line":123,"in_reply_to":"5a890539_a04bad85","updated":"2014-11-13 17:10:04.000000000","message":"Should it be implemented in all the subclasses of BaseDriver?","commit_id":"7d957837de6c74c136d48aadb313ed3575e6a85a"}],"oslo/messaging/_executors/impl_blocking.py":[{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"591dbc563d6a292d91b404814c9661846a4fb7aa","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            # NOTE(sileht): because this executor is a blocking one we can\u0027t"},{"line_number":40,"context_line":"            # have a background task to do the heartbeat, so do it"},{"line_number":41,"context_line":"            # before polling a message"},{"line_number":42,"context_line":"            self.listener.heartbeat()"},{"line_number":43,"context_line":"            with self.dispatcher(self.listener.poll()) as callback:"},{"line_number":44,"context_line":"                callback()"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7a8c0949_ee5be22b","line":42,"updated":"2014-11-07 11:16:39.000000000","message":"looks like this method returns bool value. Should we invoke callback after we got True from heartbeat?\n\n    if self.listener.heartbeat():\n        with self.dispatcher...","commit_id":"8c51c951d759e1da95b848861d969e027871ab34"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"2a62cc58b240f7e7f74dfbfa34065243fc0cd091","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            # NOTE(sileht): because this executor is a blocking one we can\u0027t"},{"line_number":40,"context_line":"            # have a background task to do the heartbeat, so do it"},{"line_number":41,"context_line":"            # before polling a message"},{"line_number":42,"context_line":"            self.listener.heartbeat()"},{"line_number":43,"context_line":"            with self.dispatcher(self.listener.poll()) as callback:"},{"line_number":44,"context_line":"                callback()"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_1c85d8cf","line":42,"in_reply_to":"7a8c0949_ee5be22b","updated":"2014-11-13 10:56:44.000000000","message":"no heartbeat doesn\u0027t returns anything.","commit_id":"8c51c951d759e1da95b848861d969e027871ab34"}],"oslo/messaging/_executors/impl_eventlet.py":[{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"c1dda68e4b47c4df0953b8446d8a2f45b8afe018","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        self._heartbeat_thread \u003d eventlet.spawn_after(self.conf.heartbeat,"},{"line_number":101,"context_line":"                                                      _heartbeat_thread)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def stop(self):"},{"line_number":104,"context_line":"        if self._thread is None:"},{"line_number":105,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8c0949_1f65d344","line":102,"updated":"2014-11-06 10:40:11.000000000","message":"Just wanted to double check, how does this call the heartbeat periodically? Doesn\u0027t this just call it once (and retry if it fails). Are repeated calls desired (perhaps \u0027self.listener.heartbeat\u0027 then needs to be in a periodic loop?)","commit_id":"b2170aebe2d4e9560a7cfb04589770b71b4414c5"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"65880b55d0a47b7f0c649f839f394c0223bbdc6c","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        self._heartbeat_thread \u003d eventlet.spawn_after(self.conf.heartbeat,"},{"line_number":101,"context_line":"                                                      _heartbeat_thread)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def stop(self):"},{"line_number":104,"context_line":"        if self._thread is None:"},{"line_number":105,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8c0949_ff9647ef","line":102,"in_reply_to":"7a8c0949_1f65d344","updated":"2014-11-06 10:43:29.000000000","message":"Ah, nm, my misunderstanding of spawn_after; seems to do this scheduling by itself.","commit_id":"b2170aebe2d4e9560a7cfb04589770b71b4414c5"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"f21dbc2f7b01aaf833ed2ba4d77cbe79f3fcdd9c","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        self._heartbeat_thread \u003d eventlet.spawn_after(self.conf.heartbeat,"},{"line_number":101,"context_line":"                                                      _heartbeat_thread)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def stop(self):"},{"line_number":104,"context_line":"        if self._thread is None:"},{"line_number":105,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_9c21c8fd","line":102,"in_reply_to":"7a8c0949_ff9647ef","updated":"2014-11-13 10:56:12.000000000","message":"Done","commit_id":"b2170aebe2d4e9560a7cfb04589770b71b4414c5"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"3f46102d2bd2df0309c71427b298848ad072f09a","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                                                      _heartbeat_thread)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def stop(self):"},{"line_number":104,"context_line":"        if self._thread is None:"},{"line_number":105,"context_line":"            return"},{"line_number":106,"context_line":"        self._thread.kill()"},{"line_number":107,"context_line":"        if self._heartbeat_thread is None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8c0949_ff05677a","line":104,"updated":"2014-11-06 10:36:49.000000000","message":"This doesn\u0027t seem right.\n\nPerhaps remove the returns here; they don\u0027t seem needed and actually stop re-calling stop() if something breaks during stop...","commit_id":"b2170aebe2d4e9560a7cfb04589770b71b4414c5"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"f21dbc2f7b01aaf833ed2ba4d77cbe79f3fcdd9c","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                                                      _heartbeat_thread)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def stop(self):"},{"line_number":104,"context_line":"        if self._thread is None:"},{"line_number":105,"context_line":"            return"},{"line_number":106,"context_line":"        self._thread.kill()"},{"line_number":107,"context_line":"        if self._heartbeat_thread is None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_732aaa2d","line":104,"in_reply_to":"7a8c0949_ff05677a","updated":"2014-11-13 10:56:12.000000000","message":"Done","commit_id":"b2170aebe2d4e9560a7cfb04589770b71b4414c5"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"94d80c0276c77897d7a64482bd140d7426ecee92","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        self._thread.kill()"},{"line_number":107,"context_line":"        if self._heartbeat_thread is None:"},{"line_number":108,"context_line":"            return"},{"line_number":109,"context_line":"        self._heartbeat_thread.kill()"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def wait(self):"},{"line_number":112,"context_line":"        if self._thread is None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8c0949_1fc153e4","line":109,"updated":"2014-11-06 10:44:43.000000000","message":"Someday it\u0027d be nice to not do this kill() but use cancel() instead; killing code that could have side-effects is never good (it can leave the thread/program in an inconsistent state, ie imagine the thread is holding a lock and u just killed it...)","commit_id":"b2170aebe2d4e9560a7cfb04589770b71b4414c5"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"f21dbc2f7b01aaf833ed2ba4d77cbe79f3fcdd9c","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        self._thread.kill()"},{"line_number":107,"context_line":"        if self._heartbeat_thread is None:"},{"line_number":108,"context_line":"            return"},{"line_number":109,"context_line":"        self._heartbeat_thread.kill()"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def wait(self):"},{"line_number":112,"context_line":"        if self._thread is None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_462b0f30","line":109,"in_reply_to":"7a8c0949_1fc153e4","updated":"2014-11-13 10:56:12.000000000","message":"Done","commit_id":"b2170aebe2d4e9560a7cfb04589770b71b4414c5"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"3f46102d2bd2df0309c71427b298848ad072f09a","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        self._heartbeat_thread.kill()"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def wait(self):"},{"line_number":112,"context_line":"        if self._thread is None:"},{"line_number":113,"context_line":"            return"},{"line_number":114,"context_line":"        if self._heartbeat_thread is None:"},{"line_number":115,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8c0949_5f03db72","line":112,"updated":"2014-11-06 10:36:49.000000000","message":"I don\u0027t think u want this return.\n\nie if self._thread \u003d None, then the wait() call blows up (for whatever reason) then you can never re-call the wait() method (since self._thread is now none); that seems bad/undesireable.","commit_id":"b2170aebe2d4e9560a7cfb04589770b71b4414c5"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"f21dbc2f7b01aaf833ed2ba4d77cbe79f3fcdd9c","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        self._heartbeat_thread.kill()"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def wait(self):"},{"line_number":112,"context_line":"        if self._thread is None:"},{"line_number":113,"context_line":"            return"},{"line_number":114,"context_line":"        if self._heartbeat_thread is None:"},{"line_number":115,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_f66768b5","line":112,"in_reply_to":"7a8c0949_5f03db72","updated":"2014-11-13 10:56:12.000000000","message":"Done","commit_id":"b2170aebe2d4e9560a7cfb04589770b71b4414c5"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"591dbc563d6a292d91b404814c9661846a4fb7aa","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        if self._thread is None:"},{"line_number":105,"context_line":"            return"},{"line_number":106,"context_line":"        self._thread.kill()"},{"line_number":107,"context_line":"        if self._heartbeat_thread is None:"},{"line_number":108,"context_line":"            return"},{"line_number":109,"context_line":"        self._heartbeat_thread.kill()"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7a8c0949_6e5e1214","line":107,"updated":"2014-11-07 11:16:39.000000000","message":"if self._heartbeat_thread:\n         self._heartbeat_thread.kill()","commit_id":"8c51c951d759e1da95b848861d969e027871ab34"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"2a62cc58b240f7e7f74dfbfa34065243fc0cd091","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        if self._thread is None:"},{"line_number":105,"context_line":"            return"},{"line_number":106,"context_line":"        self._thread.kill()"},{"line_number":107,"context_line":"        if self._heartbeat_thread is None:"},{"line_number":108,"context_line":"            return"},{"line_number":109,"context_line":"        self._heartbeat_thread.kill()"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_d3c43e42","line":107,"in_reply_to":"7a8c0949_6e5e1214","updated":"2014-11-13 10:56:44.000000000","message":"Done","commit_id":"8c51c951d759e1da95b848861d969e027871ab34"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"591dbc563d6a292d91b404814c9661846a4fb7aa","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        self._heartbeat_thread.kill()"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def wait(self):"},{"line_number":112,"context_line":"        if self._thread is None:"},{"line_number":113,"context_line":"            return"},{"line_number":114,"context_line":"        if self._heartbeat_thread is None:"},{"line_number":115,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a8c0949_4eba3624","line":112,"updated":"2014-11-07 11:16:39.000000000","message":"ditto","commit_id":"8c51c951d759e1da95b848861d969e027871ab34"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"2a62cc58b240f7e7f74dfbfa34065243fc0cd091","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        self._heartbeat_thread.kill()"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def wait(self):"},{"line_number":112,"context_line":"        if self._thread is None:"},{"line_number":113,"context_line":"            return"},{"line_number":114,"context_line":"        if self._heartbeat_thread is None:"},{"line_number":115,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_f3bf7aa8","line":112,"in_reply_to":"7a8c0949_4eba3624","updated":"2014-11-13 10:56:44.000000000","message":"Done","commit_id":"8c51c951d759e1da95b848861d969e027871ab34"}]}
