)]}'
{"etcd3gw/client.py":[{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"747f16b5d698ab31392eef7386d79d130727910b","unresolved":true,"context_lines":[{"line_number":72,"context_line":"        self.token \u003d None"},{"line_number":73,"context_line":"        payload \u003d {"},{"line_number":74,"context_line":"            \"name\": self.username,"},{"line_number":75,"context_line":"            \"password\": self.password"},{"line_number":76,"context_line":"        }"},{"line_number":77,"context_line":"        setattr(self.session, \u0027auth\u0027, None)"},{"line_number":78,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa678cee_8d3ef188","line":75,"updated":"2021-04-14 18:09:10.000000000","message":"nit: lack of trailing comma","commit_id":"50c3a69922822df2618c88fc6a255e6bbc7d546d"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"319a53d074f2948a59eac4baad320db7d6f4797e","unresolved":true,"context_lines":[{"line_number":55,"context_line":"        self.username \u003d username"},{"line_number":56,"context_line":"        self.password \u003d password"},{"line_number":57,"context_line":"        self.token \u003d None"},{"line_number":58,"context_line":"        self._auth \u003d True"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        self.session \u003d requests.Session()"},{"line_number":61,"context_line":"        if timeout is not None:"}],"source_content_type":"text/x-python","patch_set":5,"id":"2c67bcbb_3dfa2d09","line":58,"range":{"start_line":58,"start_character":21,"end_line":58,"end_character":25},"updated":"2021-04-16 13:30:35.000000000","message":"True if username is given else false","commit_id":"59a7fd93935f8748ae60700b7ecbcfb3c1e24870"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"319a53d074f2948a59eac4baad320db7d6f4797e","unresolved":true,"context_lines":[{"line_number":55,"context_line":"        self.username \u003d username"},{"line_number":56,"context_line":"        self.password \u003d password"},{"line_number":57,"context_line":"        self.token \u003d None"},{"line_number":58,"context_line":"        self._auth \u003d True"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        self.session \u003d requests.Session()"},{"line_number":61,"context_line":"        if timeout is not None:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5609727e_bf69daea","line":58,"range":{"start_line":58,"start_character":13,"end_line":58,"end_character":19},"updated":"2021-04-16 13:30:35.000000000","message":"_auth_pending","commit_id":"59a7fd93935f8748ae60700b7ecbcfb3c1e24870"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"319a53d074f2948a59eac4baad320db7d6f4797e","unresolved":true,"context_lines":[{"line_number":71,"context_line":"            \"name\": self.username,"},{"line_number":72,"context_line":"            \"password\": self.password,"},{"line_number":73,"context_line":"        }"},{"line_number":74,"context_line":"        setattr(self.session, \u0027auth\u0027, None)"},{"line_number":75,"context_line":"        try:"},{"line_number":76,"context_line":"            self._auth \u003d False"},{"line_number":77,"context_line":"            self.token \u003d None"}],"source_content_type":"text/x-python","patch_set":5,"id":"e1cf415a_a93383ea","line":74,"range":{"start_line":74,"start_character":8,"end_line":74,"end_character":43},"updated":"2021-04-16 13:30:35.000000000","message":"no need to set at all","commit_id":"59a7fd93935f8748ae60700b7ecbcfb3c1e24870"},{"author":{"_account_id":14985,"name":"Alex Schultz","email":"aschultz@next-development.com","username":"mwhahaha"},"change_message_id":"54a1a378356102d5d358f1bd4bf977d523272b1d","unresolved":true,"context_lines":[{"line_number":71,"context_line":"            \"name\": self.username,"},{"line_number":72,"context_line":"            \"password\": self.password,"},{"line_number":73,"context_line":"        }"},{"line_number":74,"context_line":"        setattr(self.session, \u0027auth\u0027, None)"},{"line_number":75,"context_line":"        try:"},{"line_number":76,"context_line":"            self._auth \u003d False"},{"line_number":77,"context_line":"            self.token \u003d None"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf83c527_665eda94","line":74,"range":{"start_line":74,"start_character":8,"end_line":74,"end_character":43},"in_reply_to":"e1cf415a_a93383ea","updated":"2021-04-16 14:06:42.000000000","message":"When I was testing it was required because clearing it out would not work correctly.","commit_id":"59a7fd93935f8748ae60700b7ecbcfb3c1e24870"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"319a53d074f2948a59eac4baad320db7d6f4797e","unresolved":true,"context_lines":[{"line_number":73,"context_line":"        }"},{"line_number":74,"context_line":"        setattr(self.session, \u0027auth\u0027, None)"},{"line_number":75,"context_line":"        try:"},{"line_number":76,"context_line":"            self._auth \u003d False"},{"line_number":77,"context_line":"            self.token \u003d None"},{"line_number":78,"context_line":"            resp \u003d self.post(self.get_url(\u0027/auth/authenticate\u0027), json\u003dpayload)"},{"line_number":79,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5194162e_01f693a0","line":76,"range":{"start_line":76,"start_character":17,"end_line":76,"end_character":23},"updated":"2021-04-16 13:30:35.000000000","message":"ditto name","commit_id":"59a7fd93935f8748ae60700b7ecbcfb3c1e24870"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"319a53d074f2948a59eac4baad320db7d6f4797e","unresolved":true,"context_lines":[{"line_number":74,"context_line":"        setattr(self.session, \u0027auth\u0027, None)"},{"line_number":75,"context_line":"        try:"},{"line_number":76,"context_line":"            self._auth \u003d False"},{"line_number":77,"context_line":"            self.token \u003d None"},{"line_number":78,"context_line":"            resp \u003d self.post(self.get_url(\u0027/auth/authenticate\u0027), json\u003dpayload)"},{"line_number":79,"context_line":"        except Exception as e:"},{"line_number":80,"context_line":"            # auth failed, so we\u0027ll need to try again next time"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba6a944b_8a9fe6fa","line":77,"range":{"start_line":77,"start_character":12,"end_line":77,"end_character":29},"updated":"2021-04-16 13:30:35.000000000","message":"no need to set at all","commit_id":"59a7fd93935f8748ae60700b7ecbcfb3c1e24870"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"319a53d074f2948a59eac4baad320db7d6f4797e","unresolved":true,"context_lines":[{"line_number":78,"context_line":"            resp \u003d self.post(self.get_url(\u0027/auth/authenticate\u0027), json\u003dpayload)"},{"line_number":79,"context_line":"        except Exception as e:"},{"line_number":80,"context_line":"            # auth failed, so we\u0027ll need to try again next time"},{"line_number":81,"context_line":"            self._auth \u003d True"},{"line_number":82,"context_line":"            raise exceptions.AuthenticationFailedError("},{"line_number":83,"context_line":"                \u0027Unable to fetch auth token\u0027, \u0027Auth failed\u0027) from e"},{"line_number":84,"context_line":"        self.token \u003d self.TokenAuth(resp.get(\u0027token\u0027, None))"}],"source_content_type":"text/x-python","patch_set":5,"id":"63f84af8_18afa05b","line":81,"range":{"start_line":81,"start_character":17,"end_line":81,"end_character":23},"updated":"2021-04-16 13:30:35.000000000","message":"ditto name","commit_id":"59a7fd93935f8748ae60700b7ecbcfb3c1e24870"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"319a53d074f2948a59eac4baad320db7d6f4797e","unresolved":true,"context_lines":[{"line_number":81,"context_line":"            self._auth \u003d True"},{"line_number":82,"context_line":"            raise exceptions.AuthenticationFailedError("},{"line_number":83,"context_line":"                \u0027Unable to fetch auth token\u0027, \u0027Auth failed\u0027) from e"},{"line_number":84,"context_line":"        self.token \u003d self.TokenAuth(resp.get(\u0027token\u0027, None))"},{"line_number":85,"context_line":"        setattr(self.session, \u0027auth\u0027, self.token)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def get_url(self, path):"}],"source_content_type":"text/x-python","patch_set":5,"id":"faba27b2_573537fb","line":84,"range":{"start_line":84,"start_character":36,"end_line":84,"end_character":59},"updated":"2021-04-16 13:30:35.000000000","message":"what if it fails?","commit_id":"59a7fd93935f8748ae60700b7ecbcfb3c1e24870"},{"author":{"_account_id":14985,"name":"Alex Schultz","email":"aschultz@next-development.com","username":"mwhahaha"},"change_message_id":"54a1a378356102d5d358f1bd4bf977d523272b1d","unresolved":true,"context_lines":[{"line_number":81,"context_line":"            self._auth \u003d True"},{"line_number":82,"context_line":"            raise exceptions.AuthenticationFailedError("},{"line_number":83,"context_line":"                \u0027Unable to fetch auth token\u0027, \u0027Auth failed\u0027) from e"},{"line_number":84,"context_line":"        self.token \u003d self.TokenAuth(resp.get(\u0027token\u0027, None))"},{"line_number":85,"context_line":"        setattr(self.session, \u0027auth\u0027, self.token)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def get_url(self, path):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a9ce1fa_7f555678","line":84,"range":{"start_line":84,"start_character":36,"end_line":84,"end_character":59},"in_reply_to":"faba27b2_573537fb","updated":"2021-04-16 14:06:42.000000000","message":"it would fail in the previous exception?   Additionally this clears it so it won\u0027t be used for the auth request itself.  Since we are throwing an AuthenticationFailedError and it\u0027ll retry on the next request, an end user could add retry logic themselves","commit_id":"59a7fd93935f8748ae60700b7ecbcfb3c1e24870"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"319a53d074f2948a59eac4baad320db7d6f4797e","unresolved":true,"context_lines":[{"line_number":82,"context_line":"            raise exceptions.AuthenticationFailedError("},{"line_number":83,"context_line":"                \u0027Unable to fetch auth token\u0027, \u0027Auth failed\u0027) from e"},{"line_number":84,"context_line":"        self.token \u003d self.TokenAuth(resp.get(\u0027token\u0027, None))"},{"line_number":85,"context_line":"        setattr(self.session, \u0027auth\u0027, self.token)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def get_url(self, path):"},{"line_number":88,"context_line":"        \"\"\"Construct a full url to the v3 API given a specific path"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ba45ce7_bc780653","line":85,"range":{"start_line":85,"start_character":38,"end_line":85,"end_character":48},"updated":"2021-04-16 13:30:35.000000000","message":"I wonder if this token expires - what then?","commit_id":"59a7fd93935f8748ae60700b7ecbcfb3c1e24870"},{"author":{"_account_id":14985,"name":"Alex Schultz","email":"aschultz@next-development.com","username":"mwhahaha"},"change_message_id":"54a1a378356102d5d358f1bd4bf977d523272b1d","unresolved":true,"context_lines":[{"line_number":82,"context_line":"            raise exceptions.AuthenticationFailedError("},{"line_number":83,"context_line":"                \u0027Unable to fetch auth token\u0027, \u0027Auth failed\u0027) from e"},{"line_number":84,"context_line":"        self.token \u003d self.TokenAuth(resp.get(\u0027token\u0027, None))"},{"line_number":85,"context_line":"        setattr(self.session, \u0027auth\u0027, self.token)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def get_url(self, path):"},{"line_number":88,"context_line":"        \"\"\"Construct a full url to the v3 API given a specific path"}],"source_content_type":"text/x-python","patch_set":5,"id":"caadd59a_09bcf806","line":85,"range":{"start_line":85,"start_character":38,"end_line":85,"end_character":48},"in_reply_to":"9ba45ce7_bc780653","updated":"2021-04-16 14:06:42.000000000","message":"You\u0027d get an auth failed, I mean i guess we could retry once?  There is no token expiration information in the response so the only way to get that is to add some reauthentication logic. I can dig that up but I wasn\u0027t trying to add a ton of extra logic","commit_id":"59a7fd93935f8748ae60700b7ecbcfb3c1e24870"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"319a53d074f2948a59eac4baad320db7d6f4797e","unresolved":true,"context_lines":[{"line_number":102,"context_line":"        :param kwargs:"},{"line_number":103,"context_line":"        :return: json response"},{"line_number":104,"context_line":"        \"\"\""},{"line_number":105,"context_line":"        if self._auth and self.username and not self.token:"},{"line_number":106,"context_line":"            self.authenticate()"},{"line_number":107,"context_line":"        try:"},{"line_number":108,"context_line":"            resp \u003d self.session.post(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":5,"id":"d8558415_8811df60","line":105,"range":{"start_line":105,"start_character":16,"end_line":105,"end_character":58},"updated":"2021-04-16 13:30:35.000000000","message":"just: _auth_pending","commit_id":"59a7fd93935f8748ae60700b7ecbcfb3c1e24870"}],"etcd3gw/tests/test_client.py":[{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"747f16b5d698ab31392eef7386d79d130727910b","unresolved":true,"context_lines":[{"line_number":94,"context_line":"        mock_session.post.return_value \u003d mock_response"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        client \u003d Etcd3Client(host\u003d\"127.0.0.1\", username\u003d\"u\", password\u003d\"p\")"},{"line_number":97,"context_line":"        self.assertEqual(client.token.token, \"sssvIpwfnLAcWAQH.9\")"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        mock_response \u003d mock.Mock()"},{"line_number":100,"context_line":"        mock_response.status_code \u003d 412"}],"source_content_type":"text/x-python","patch_set":4,"id":"15cc0b7e_b0ceb435","line":97,"updated":"2021-04-14 18:09:10.000000000","message":"let\u0027s also test that the desired username and password are passed to the req payload","commit_id":"50c3a69922822df2618c88fc6a255e6bbc7d546d"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"319a53d074f2948a59eac4baad320db7d6f4797e","unresolved":true,"context_lines":[{"line_number":105,"context_line":"            ]"},{"line_number":106,"context_line":"            self.assertEqual(mock_session.post.mock_calls, calls)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        client \u003d Etcd3Client(host\u003d\"127.0.0.1\", username\u003d\u0027u\u0027, password\u003d\u0027p\u0027)"},{"line_number":109,"context_line":"        with mock.patch.object(client, \"session\") as mock_session:"},{"line_number":110,"context_line":"            auth_resp \u003d mock.Mock()"},{"line_number":111,"context_line":"            auth_resp.status_code \u003d 412"},{"line_number":112,"context_line":"            auth_resp.text \u003d \u0027\u0027\u0027{"}],"source_content_type":"text/x-python","patch_set":5,"id":"9cc5671a_305120ac","line":109,"range":{"start_line":108,"start_character":8,"end_line":109,"end_character":66},"updated":"2021-04-16 13:30:35.000000000","message":"this pattern suggests this would live better as two separate test cases (success and failure)","commit_id":"59a7fd93935f8748ae60700b7ecbcfb3c1e24870"}]}
