)]}'
{"setup-consul-env.sh":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e047e5eee8ec73c914ea6509809f422250d72c19","unresolved":false,"context_lines":[{"line_number":3,"context_line":""},{"line_number":4,"context_line":"if [ -z \"$(which consul)\" ]; then"},{"line_number":5,"context_line":"    # originally we used 0.6.3 (released in Jan 2016)."},{"line_number":6,"context_line":"\t# updated to 1.7.4 in Change-Id: Iaddf21f14c434129541e7c9ec7134e0661f7be52"},{"line_number":7,"context_line":"\t# 1.4.0 (released Nov 2018) has a new ACL system."},{"line_number":8,"context_line":"\t# 1.7.0 (released Feb 2020) changes standards enforcement."},{"line_number":9,"context_line":"\t# For details see upgrade notes in Change-Id: I98fc96468b21368ce66365e3fc38c495b1f2918a"}],"source_content_type":"text/x-sh","patch_set":23,"id":"ff570b3c_a10ca442","line":6,"range":{"start_line":6,"start_character":0,"end_line":6,"end_character":1},"updated":"2020-06-12 19:28:10.000000000","message":"Tabs should be switched over to spaces for consistency with the rest of the file.","commit_id":"bbd193be1dfdcbff61a0befd814f5029fbb9f359"},{"author":{"_account_id":32080,"name":"Jacob Floyd","email":"cognifloyd@gmail.com","username":"cognifloyd"},"change_message_id":"4fed72ac95608b55f3724e2611fece23007d2c46","unresolved":false,"context_lines":[{"line_number":3,"context_line":""},{"line_number":4,"context_line":"if [ -z \"$(which consul)\" ]; then"},{"line_number":5,"context_line":"    # originally we used 0.6.3 (released in Jan 2016)."},{"line_number":6,"context_line":"\t# updated to 1.7.4 in Change-Id: Iaddf21f14c434129541e7c9ec7134e0661f7be52"},{"line_number":7,"context_line":"\t# 1.4.0 (released Nov 2018) has a new ACL system."},{"line_number":8,"context_line":"\t# 1.7.0 (released Feb 2020) changes standards enforcement."},{"line_number":9,"context_line":"\t# For details see upgrade notes in Change-Id: I98fc96468b21368ce66365e3fc38c495b1f2918a"}],"source_content_type":"text/x-sh","patch_set":23,"id":"ff570b3c_24b702db","line":6,"range":{"start_line":6,"start_character":0,"end_line":6,"end_character":1},"in_reply_to":"ff570b3c_a10ca442","updated":"2020-06-12 20:47:57.000000000","message":"aargh. How did I miss mixed spaces/tabs? That\u0027s ugly! fixed in ps 24.","commit_id":"bbd193be1dfdcbff61a0befd814f5029fbb9f359"}],"tooz/drivers/consul.py":[{"author":{"_account_id":32080,"name":"Jacob Floyd","email":"cognifloyd@gmail.com","username":"cognifloyd"},"change_message_id":"b3243a7111ee95bc3bc969cb2141948d100efd96","unresolved":false,"context_lines":[{"line_number":222,"context_line":"                                        ttl\u003dself._ttl,"},{"line_number":223,"context_line":"                                        token\u003dself._acl_token)"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    def _stop(self):"},{"line_number":226,"context_line":"        if self._client is not None:"},{"line_number":227,"context_line":"            if self._session_id is not None:"},{"line_number":228,"context_line":"                self._client.session.destroy(self._session_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff570b3c_fcc82176","line":225,"updated":"2020-06-11 04:56:25.000000000","message":"re this test failure:\n\ntooz.tests.test_coordination.TestAPI.test_disconnect_leave_group\n\nCurrently, client.stop() is not removing the client from the groups. Do we need to handle this client side? ie\n\nfor group_id in self.get_groups():\n    self.leave_group(group_id)","commit_id":"dd00ee56dcf971f268fd5187e69ce792d2dfb498"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"31b779392cc6b2c893d796b056f4cf99121880b6","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    #: Consul ACL Token if not provided"},{"line_number":185,"context_line":"    ACL_TOKEN \u003d None"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    # TODO: What CHARACTERISTICS should Consul have? This list comes from zookeeper."},{"line_number":188,"context_line":"    #CHARACTERISTICS \u003d ("},{"line_number":189,"context_line":"    #    coordination.Characteristics.NON_TIMEOUT_BASED,"},{"line_number":190,"context_line":"    #    coordination.Characteristics.DISTRIBUTED_ACROSS_THREADS,"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff570b3c_7f123564","line":187,"updated":"2020-06-11 20:17:18.000000000","message":"pep8: E501 line too long (84 \u003e 79 characters)","commit_id":"643385c3ccc7c16cbbb51f5035aa2bfb08a94ded"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"31b779392cc6b2c893d796b056f4cf99121880b6","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    #: Consul ACL Token if not provided"},{"line_number":185,"context_line":"    ACL_TOKEN \u003d None"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    # TODO: What CHARACTERISTICS should Consul have? This list comes from zookeeper."},{"line_number":188,"context_line":"    #CHARACTERISTICS \u003d ("},{"line_number":189,"context_line":"    #    coordination.Characteristics.NON_TIMEOUT_BASED,"},{"line_number":190,"context_line":"    #    coordination.Characteristics.DISTRIBUTED_ACROSS_THREADS,"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff570b3c_1f1b3980","line":187,"updated":"2020-06-11 20:17:18.000000000","message":"pep8: H101: Use TODO(NAME)","commit_id":"643385c3ccc7c16cbbb51f5035aa2bfb08a94ded"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"31b779392cc6b2c893d796b056f4cf99121880b6","unresolved":false,"context_lines":[{"line_number":185,"context_line":"    ACL_TOKEN \u003d None"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    # TODO: What CHARACTERISTICS should Consul have? This list comes from zookeeper."},{"line_number":188,"context_line":"    #CHARACTERISTICS \u003d ("},{"line_number":189,"context_line":"    #    coordination.Characteristics.NON_TIMEOUT_BASED,"},{"line_number":190,"context_line":"    #    coordination.Characteristics.DISTRIBUTED_ACROSS_THREADS,"},{"line_number":191,"context_line":"    #    coordination.Characteristics.DISTRIBUTED_ACROSS_PROCESSES,"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff570b3c_5f15b148","line":188,"updated":"2020-06-11 20:17:18.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"643385c3ccc7c16cbbb51f5035aa2bfb08a94ded"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"31b779392cc6b2c893d796b056f4cf99121880b6","unresolved":false,"context_lines":[{"line_number":194,"context_line":"    #    # take a while for those writes to propagate to followers (and \u003d"},{"line_number":195,"context_line":"    #    # during this time clients can read older values)..."},{"line_number":196,"context_line":"    #    coordination.Characteristics.SEQUENTIAL,"},{"line_number":197,"context_line":"    #)"},{"line_number":198,"context_line":"    #\"\"\""},{"line_number":199,"context_line":"    #Tuple of :py:class:`~tooz.coordination.Characteristics` introspectable"},{"line_number":200,"context_line":"    #enum member(s) that can be used to interogate how this driver works."}],"source_content_type":"text/x-python","patch_set":10,"id":"ff570b3c_bf0b2d29","line":197,"updated":"2020-06-11 20:17:18.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"643385c3ccc7c16cbbb51f5035aa2bfb08a94ded"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"31b779392cc6b2c893d796b056f4cf99121880b6","unresolved":false,"context_lines":[{"line_number":195,"context_line":"    #    # during this time clients can read older values)..."},{"line_number":196,"context_line":"    #    coordination.Characteristics.SEQUENTIAL,"},{"line_number":197,"context_line":"    #)"},{"line_number":198,"context_line":"    #\"\"\""},{"line_number":199,"context_line":"    #Tuple of :py:class:`~tooz.coordination.Characteristics` introspectable"},{"line_number":200,"context_line":"    #enum member(s) that can be used to interogate how this driver works."},{"line_number":201,"context_line":"    #\"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"ff570b3c_9f062921","line":198,"updated":"2020-06-11 20:17:18.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"643385c3ccc7c16cbbb51f5035aa2bfb08a94ded"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"31b779392cc6b2c893d796b056f4cf99121880b6","unresolved":false,"context_lines":[{"line_number":196,"context_line":"    #    coordination.Characteristics.SEQUENTIAL,"},{"line_number":197,"context_line":"    #)"},{"line_number":198,"context_line":"    #\"\"\""},{"line_number":199,"context_line":"    #Tuple of :py:class:`~tooz.coordination.Characteristics` introspectable"},{"line_number":200,"context_line":"    #enum member(s) that can be used to interogate how this driver works."},{"line_number":201,"context_line":"    #\"\"\""},{"line_number":202,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ff570b3c_ff05a515","line":199,"updated":"2020-06-11 20:17:18.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"643385c3ccc7c16cbbb51f5035aa2bfb08a94ded"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"31b779392cc6b2c893d796b056f4cf99121880b6","unresolved":false,"context_lines":[{"line_number":197,"context_line":"    #)"},{"line_number":198,"context_line":"    #\"\"\""},{"line_number":199,"context_line":"    #Tuple of :py:class:`~tooz.coordination.Characteristics` introspectable"},{"line_number":200,"context_line":"    #enum member(s) that can be used to interogate how this driver works."},{"line_number":201,"context_line":"    #\"\"\""},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    def __init__(self, member_id, parsed_url, options):"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff570b3c_df00a105","line":200,"updated":"2020-06-11 20:17:18.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"643385c3ccc7c16cbbb51f5035aa2bfb08a94ded"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"31b779392cc6b2c893d796b056f4cf99121880b6","unresolved":false,"context_lines":[{"line_number":198,"context_line":"    #\"\"\""},{"line_number":199,"context_line":"    #Tuple of :py:class:`~tooz.coordination.Characteristics` introspectable"},{"line_number":200,"context_line":"    #enum member(s) that can be used to interogate how this driver works."},{"line_number":201,"context_line":"    #\"\"\""},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    def __init__(self, member_id, parsed_url, options):"},{"line_number":204,"context_line":"        super(ConsulDriver, self).__init__(member_id, parsed_url, options)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff570b3c_4afded06","line":201,"updated":"2020-06-11 20:17:18.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"643385c3ccc7c16cbbb51f5035aa2bfb08a94ded"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"65e688aa689e5aa056d43b1690702e6e5a82d7bb","unresolved":false,"context_lines":[{"line_number":241,"context_line":"    def _stop(self):"},{"line_number":242,"context_line":"        if self._client is not None:"},{"line_number":243,"context_line":"            if self._session_id is not None:"},{"line_number":244,"context_line":"                self._client.session.destroy(self._session_id, token\u003dself._acl_token)"},{"line_number":245,"context_line":"                self._session_id \u003d None"},{"line_number":246,"context_line":"            self._client \u003d None"},{"line_number":247,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ff570b3c_3f355da9","line":244,"updated":"2020-06-11 19:27:18.000000000","message":"This is going to cause a pep8 failure. Might be good to line break after the opening (.","commit_id":"643385c3ccc7c16cbbb51f5035aa2bfb08a94ded"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"31b779392cc6b2c893d796b056f4cf99121880b6","unresolved":false,"context_lines":[{"line_number":241,"context_line":"    def _stop(self):"},{"line_number":242,"context_line":"        if self._client is not None:"},{"line_number":243,"context_line":"            if self._session_id is not None:"},{"line_number":244,"context_line":"                self._client.session.destroy(self._session_id, token\u003dself._acl_token)"},{"line_number":245,"context_line":"                self._session_id \u003d None"},{"line_number":246,"context_line":"            self._client \u003d None"},{"line_number":247,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ff570b3c_2a007900","line":244,"updated":"2020-06-11 20:17:18.000000000","message":"pep8: E501 line too long (85 \u003e 79 characters)","commit_id":"643385c3ccc7c16cbbb51f5035aa2bfb08a94ded"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"31b779392cc6b2c893d796b056f4cf99121880b6","unresolved":false,"context_lines":[{"line_number":399,"context_line":"                # key doesn\u0027t exit"},{"line_number":400,"context_line":"                self._client.kv.put(member_path, utils.dumps(capabilities),"},{"line_number":401,"context_line":"                                    cas\u003d0)"},{"line_number":402,"context_line":"            # TODO: add to self._joined_groups?"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"        return ConsulFutureResult(self._executor.submit(_join_group))"},{"line_number":405,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ff570b3c_8a070519","line":402,"updated":"2020-06-11 20:17:18.000000000","message":"pep8: H101: Use TODO(NAME)","commit_id":"643385c3ccc7c16cbbb51f5035aa2bfb08a94ded"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"31b779392cc6b2c893d796b056f4cf99121880b6","unresolved":false,"context_lines":[{"line_number":426,"context_line":"            # we read above"},{"line_number":427,"context_line":"            self._client.kv.delete(member_path, cas\u003dmember[\u0027ModifyIndex\u0027])"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"            # TODO: remove from self._joined_groups?"},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"        return ConsulFutureResult(self._executor.submit(_leave_group))"},{"line_number":432,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ff570b3c_6a0a7120","line":429,"updated":"2020-06-11 20:17:18.000000000","message":"pep8: H101: Use TODO(NAME)","commit_id":"643385c3ccc7c16cbbb51f5035aa2bfb08a94ded"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"19b76aea7ee0cb4c8a507ddac4a9b2ef0dd145ff","unresolved":false,"context_lines":[{"line_number":240,"context_line":"        self._address \u003d local_agent[\u0027Member\u0027][\u0027Addr\u0027]"},{"line_number":241,"context_line":"        # implicitly uses the agent\u0027s datacenter (set in consul agent config)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        # TODO: define a service to register in the catalog?"},{"line_number":244,"context_line":"        #       or local_agent.service.register()?"},{"line_number":245,"context_line":"        # Register a Node (generic service used for locking)"},{"line_number":246,"context_line":"        self._client.catalog.register(node\u003dself._node,"}],"source_content_type":"text/x-python","patch_set":12,"id":"ff570b3c_7ae7e047","line":243,"updated":"2020-06-12 00:55:01.000000000","message":"pep8: H101: Use TODO(NAME)","commit_id":"218b927de7b23e707e04884f95077a9313285145"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"19b76aea7ee0cb4c8a507ddac4a9b2ef0dd145ff","unresolved":false,"context_lines":[{"line_number":257,"context_line":"    def _stop(self):"},{"line_number":258,"context_line":"        if self._client is not None:"},{"line_number":259,"context_line":"            if self._session_id is not None:"},{"line_number":260,"context_line":"                self._client.session.destroy(self._session_id, token\u003dself._acl_token)"},{"line_number":261,"context_line":"                self._session_id \u003d None"},{"line_number":262,"context_line":"            self._client \u003d None"},{"line_number":263,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ff570b3c_5aeadc0d","line":260,"updated":"2020-06-12 00:55:01.000000000","message":"pep8: E501 line too long (85 \u003e 79 characters)","commit_id":"218b927de7b23e707e04884f95077a9313285145"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"19b76aea7ee0cb4c8a507ddac4a9b2ef0dd145ff","unresolved":false,"context_lines":[{"line_number":415,"context_line":"                # key doesn\u0027t exit"},{"line_number":416,"context_line":"                self._client.kv.put(member_path, utils.dumps(capabilities),"},{"line_number":417,"context_line":"                                    cas\u003d0)"},{"line_number":418,"context_line":"            # TODO: add to self._joined_groups?"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"        return ConsulFutureResult(self._executor.submit(_join_group))"},{"line_number":421,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ff570b3c_baf17804","line":418,"updated":"2020-06-12 00:55:01.000000000","message":"pep8: H101: Use TODO(NAME)","commit_id":"218b927de7b23e707e04884f95077a9313285145"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"19b76aea7ee0cb4c8a507ddac4a9b2ef0dd145ff","unresolved":false,"context_lines":[{"line_number":442,"context_line":"            # we read above"},{"line_number":443,"context_line":"            self._client.kv.delete(member_path, cas\u003dmember[\u0027ModifyIndex\u0027])"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"            # TODO: remove from self._joined_groups?"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"        return ConsulFutureResult(self._executor.submit(_leave_group))"},{"line_number":448,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ff570b3c_9af474f3","line":445,"updated":"2020-06-12 00:55:01.000000000","message":"pep8: H101: Use TODO(NAME)","commit_id":"218b927de7b23e707e04884f95077a9313285145"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e047e5eee8ec73c914ea6509809f422250d72c19","unresolved":false,"context_lines":[{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import contextlib"},{"line_number":18,"context_line":"import functools"},{"line_number":19,"context_line":"import requests"},{"line_number":20,"context_line":"import six"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import consul"},{"line_number":23,"context_line":"from oslo_utils import encodeutils"}],"source_content_type":"text/x-python","patch_set":23,"id":"ff570b3c_e1069c20","line":20,"range":{"start_line":17,"start_character":0,"end_line":20,"end_character":10},"updated":"2020-06-12 19:28:10.000000000","message":"These should be grouped with the other third party imports below (consul and oslo_utils).","commit_id":"bbd193be1dfdcbff61a0befd814f5029fbb9f359"},{"author":{"_account_id":32080,"name":"Jacob Floyd","email":"cognifloyd@gmail.com","username":"cognifloyd"},"change_message_id":"4fed72ac95608b55f3724e2611fece23007d2c46","unresolved":false,"context_lines":[{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import contextlib"},{"line_number":18,"context_line":"import functools"},{"line_number":19,"context_line":"import requests"},{"line_number":20,"context_line":"import six"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import consul"},{"line_number":23,"context_line":"from oslo_utils import encodeutils"}],"source_content_type":"text/x-python","patch_set":23,"id":"ff570b3c_e4ab4a72","line":20,"range":{"start_line":17,"start_character":0,"end_line":20,"end_character":10},"in_reply_to":"ff570b3c_e1069c20","updated":"2020-06-12 20:47:57.000000000","message":"Fixed in ps 24","commit_id":"bbd193be1dfdcbff61a0befd814f5029fbb9f359"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"99f77c5a2e09b3885336c476c68fc02aadc770ff","unresolved":false,"context_lines":[{"line_number":20,"context_line":"import consul"},{"line_number":21,"context_line":"from oslo_utils import encodeutils"},{"line_number":22,"context_line":"import requests"},{"line_number":23,"context_line":"import six"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"import tooz"},{"line_number":26,"context_line":"from tooz import _retry"}],"source_content_type":"text/x-python","patch_set":24,"id":"bf51134e_986faac4","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":10},"updated":"2020-06-15 09:40:45.000000000","message":"We don\u0027t need to use `six` because tooz is \"python 3 only\" [1].\n\n[1] https://github.com/openstack/tooz/blob/master/setup.cfg#L21","commit_id":"611b2c1add7bb51a41e368a4f26e6bbcf2ad1faa"},{"author":{"_account_id":32080,"name":"Jacob Floyd","email":"cognifloyd@gmail.com","username":"cognifloyd"},"change_message_id":"f92a00899701280de2e214a41ea65f472b9a123a","unresolved":false,"context_lines":[{"line_number":20,"context_line":"import consul"},{"line_number":21,"context_line":"from oslo_utils import encodeutils"},{"line_number":22,"context_line":"import requests"},{"line_number":23,"context_line":"import six"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"import tooz"},{"line_number":26,"context_line":"from tooz import _retry"}],"source_content_type":"text/x-python","patch_set":24,"id":"bf51134e_d098d26b","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":10},"in_reply_to":"bf51134e_986faac4","updated":"2020-06-15 16:27:58.000000000","message":"Done","commit_id":"611b2c1add7bb51a41e368a4f26e6bbcf2ad1faa"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"99f77c5a2e09b3885336c476c68fc02aadc770ff","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"def _translate_failures(func):"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    @six.wraps(func)"},{"line_number":52,"context_line":"    def wrapper(*args, **kwargs):"},{"line_number":53,"context_line":"        with _failure_translator():"},{"line_number":54,"context_line":"            return func(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":24,"id":"bf51134e_18b8ba28","line":51,"range":{"start_line":51,"start_character":5,"end_line":51,"end_character":8},"updated":"2020-06-15 09:40:45.000000000","message":"should be replaced by functools [1]\n\n[1] https://docs.python.org/3.8/library/functools.html#functools.wraps","commit_id":"611b2c1add7bb51a41e368a4f26e6bbcf2ad1faa"},{"author":{"_account_id":32080,"name":"Jacob Floyd","email":"cognifloyd@gmail.com","username":"cognifloyd"},"change_message_id":"f92a00899701280de2e214a41ea65f472b9a123a","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"def _translate_failures(func):"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    @six.wraps(func)"},{"line_number":52,"context_line":"    def wrapper(*args, **kwargs):"},{"line_number":53,"context_line":"        with _failure_translator():"},{"line_number":54,"context_line":"            return func(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":24,"id":"bf51134e_b09d5e5b","line":51,"range":{"start_line":51,"start_character":5,"end_line":51,"end_character":8},"in_reply_to":"bf51134e_18b8ba28","updated":"2020-06-15 16:27:58.000000000","message":"Done","commit_id":"611b2c1add7bb51a41e368a4f26e6bbcf2ad1faa"}]}
