)]}'
{"glance/store/http.py":[{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"68e9afca2066a717ed4716b253ef59c8eeb6978c","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import requests"},{"line_number":19,"context_line":"import urlparse"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from glance.common import exception"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2Fvr0%3D","line":18,"updated":"2014-01-02 14:52:30.000000000","message":"nit: as a 3rd lib, we need put this line to a dedicated group for pep8, says add this line after \"import urlparse\" with a blank line.","commit_id":"475a508ee7ae81af0240ab517b0a22a1c33878d0"},{"author":{"_account_id":7073,"name":"mouad benchchaoui","email":"m.benchchaoui@x-ion.de","username":"mouad"},"change_message_id":"9c646212e03c05a71432865e7e5b612162d41c33","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import requests"},{"line_number":19,"context_line":"import urlparse"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from glance.common import exception"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2Fuvc%3D","line":18,"in_reply_to":"AAAAT3%2F%2Fvr0%3D","updated":"2014-01-02 19:29:26.000000000","message":"Done, wonder why flake8 didn\u0027t catch this one, it should be his job :)","commit_id":"475a508ee7ae81af0240ab517b0a22a1c33878d0"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"68e9afca2066a717ed4716b253ef59c8eeb6978c","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        \"\"\""},{"line_number":133,"context_line":"        try:"},{"line_number":134,"context_line":"            return self._query(location, \u0027HEAD\u0027)[1]"},{"line_number":135,"context_line":"        except (requests.RequestException,"},{"line_number":136,"context_line":"                exception.MaxRedirectsExceeded,"},{"line_number":137,"context_line":"                exception.UnexpectedStatus):"},{"line_number":138,"context_line":"            return 0"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FvsM%3D","line":135,"updated":"2014-01-02 14:52:30.000000000","message":"I think we\u0027d better to keep original code in this change, never raise any exception out when get_size request failed, since under current implementation upper layer code can not handle exception branch but always expect this interface return a number.","commit_id":"475a508ee7ae81af0240ab517b0a22a1c33878d0"},{"author":{"_account_id":7073,"name":"mouad benchchaoui","email":"m.benchchaoui@x-ion.de","username":"mouad"},"change_message_id":"9c646212e03c05a71432865e7e5b612162d41c33","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        \"\"\""},{"line_number":133,"context_line":"        try:"},{"line_number":134,"context_line":"            return self._query(location, \u0027HEAD\u0027)[1]"},{"line_number":135,"context_line":"        except (requests.RequestException,"},{"line_number":136,"context_line":"                exception.MaxRedirectsExceeded,"},{"line_number":137,"context_line":"                exception.UnexpectedStatus):"},{"line_number":138,"context_line":"            return 0"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FuvI%3D","line":135,"in_reply_to":"AAAAT3%2F%2FvsM%3D","updated":"2014-01-02 19:29:26.000000000","message":"This should not raise anything outside of the exceptions sited in the except statement as described by the _query docstring and if it did it\u0027s a bug, and in this case i would prefer if it fail **hard** and fast instead of swallowing it i.e. Diaper Anti-Pattern a.k.a. except Exception.\n\nThoughts ?","commit_id":"475a508ee7ae81af0240ab517b0a22a1c33878d0"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"68e9afca2066a717ed4716b253ef59c8eeb6978c","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        # Check for bad status codes."},{"line_number":168,"context_line":"        if not resp.ok:"},{"line_number":169,"context_line":"            raise exception.UnexpectedStatus(status\u003dresp.status_code,"},{"line_number":170,"context_line":"                                             body\u003dresp.text)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        content_length \u003d int(resp.headers.get(\u0027content-length\u0027, 0))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2Fvn8%3D","line":169,"updated":"2014-01-02 14:52:30.000000000","message":"Actually I have some concerns on this point, whether we need raise other type exception than BadStoreUri. You can see them at https://review.openstack.org/64409 if you like, so I think probably we need get #64409 merger first then to this. Thanks for your patience.","commit_id":"475a508ee7ae81af0240ab517b0a22a1c33878d0"},{"author":{"_account_id":7073,"name":"mouad benchchaoui","email":"m.benchchaoui@x-ion.de","username":"mouad"},"change_message_id":"9c646212e03c05a71432865e7e5b612162d41c33","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        # Check for bad status codes."},{"line_number":168,"context_line":"        if not resp.ok:"},{"line_number":169,"context_line":"            raise exception.UnexpectedStatus(status\u003dresp.status_code,"},{"line_number":170,"context_line":"                                             body\u003dresp.text)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        content_length \u003d int(resp.headers.get(\u0027content-length\u0027, 0))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FuuM%3D","line":169,"in_reply_to":"AAAAT3%2F%2Fvn8%3D","updated":"2014-01-02 19:29:26.000000000","message":"Hmmm i see i would comment on that bug then.","commit_id":"475a508ee7ae81af0240ab517b0a22a1c33878d0"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"792a8de90b8ca0d35b1ac61d4bb0f23771d83c98","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        \"\"\""},{"line_number":107,"context_line":"        try:"},{"line_number":108,"context_line":"            resp, content_length \u003d self._query(location, \u0027GET\u0027)"},{"line_number":109,"context_line":"        except exception.BadStoreUri as ex:"},{"line_number":110,"context_line":"            raise exception.NotFound(str(ex))"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        iterator \u003d resp.iter_content(chunk_size\u003dself.CHUNKSIZE)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2Brg4%3D","line":109,"updated":"2014-01-23 09:51:31.000000000","message":"As we discussed, I don\u0027t think we should to always convert BadStoreUri to NotFound, IMO we can expose both two exceptions out, and NotFound should be raised when  image does not exist only.","commit_id":"d239c2f347ffb1c63d0eb339c6706fee9f927582"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"792a8de90b8ca0d35b1ac61d4bb0f23771d83c98","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                      (resp.status_code, resp.text))"},{"line_number":166,"context_line":"            LOG.debug(reason)"},{"line_number":167,"context_line":"            raise exception.BadStoreUri(loc.path, reason\u003dreason)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        content_length \u003d int(resp.headers.get(\u0027content-length\u0027, 0))"},{"line_number":170,"context_line":"        return resp, content_length"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2Brfs%3D","line":168,"updated":"2014-01-23 09:51:31.000000000","message":"IMO we should have an exception conversion for requests 400 exception \u003d\u003e glance.exception.NotFound, but always exception.BadStoreUri , IIRC in our discussion we allowed store driver raise those both exceptions out.","commit_id":"d239c2f347ffb1c63d0eb339c6706fee9f927582"},{"author":{"_account_id":7073,"name":"mouad benchchaoui","email":"m.benchchaoui@x-ion.de","username":"mouad"},"change_message_id":"51295a1d909573c75ab12de090df2166eeb59392","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                      (resp.status_code, resp.text))"},{"line_number":166,"context_line":"            LOG.debug(reason)"},{"line_number":167,"context_line":"            raise exception.BadStoreUri(loc.path, reason\u003dreason)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        content_length \u003d int(resp.headers.get(\u0027content-length\u0027, 0))"},{"line_number":170,"context_line":"        return resp, content_length"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUX%2F%2FCi4%3D","line":168,"in_reply_to":"AAAAUH%2F%2BQhU%3D","updated":"2014-02-17 14:02:26.000000000","message":"I didn\u0027t test i just read the code :), and yes according to the code BadStoreUri is not catched only NotFound is, that\u0027s why i did convert BadStoreUri to NotFound above.\n\nsrc: https://github.com/openstack/glance/blob/master/glance/api/v1/images.py#L437\n\nHope i am not mistaken, i will add a TODO explain why i needed to convert BadStoreURI to NotFound for get(..) call.","commit_id":"d239c2f347ffb1c63d0eb339c6706fee9f927582"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"4816424a8736b1235105b1f21e3f0fe7cb59a675","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                      (resp.status_code, resp.text))"},{"line_number":166,"context_line":"            LOG.debug(reason)"},{"line_number":167,"context_line":"            raise exception.BadStoreUri(loc.path, reason\u003dreason)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        content_length \u003d int(resp.headers.get(\u0027content-length\u0027, 0))"},{"line_number":170,"context_line":"        return resp, content_length"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2BQhU%3D","line":168,"in_reply_to":"AAAAUH%2F%2BhVo%3D","updated":"2014-01-28 16:20:13.000000000","message":"OK, so you tested that if we raise NotFound at here, current upper layer code will meet a problem, right?\n\nIf answer is \"yes\", your path is make sense to me, and could you pls add a NOTE/TODO at here for it?\n\nbtw, there is a patch which do the NotFound conversion on 404, https://review.openstack.org/#/c/58883/39/glance/store/vmware_datastore.py , and it got 1 cent from Jenkins.","commit_id":"d239c2f347ffb1c63d0eb339c6706fee9f927582"},{"author":{"_account_id":7073,"name":"mouad benchchaoui","email":"m.benchchaoui@x-ion.de","username":"mouad"},"change_message_id":"f59e8d6545f7847681e3f25cbcf3288caf94a61d","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                      (resp.status_code, resp.text))"},{"line_number":166,"context_line":"            LOG.debug(reason)"},{"line_number":167,"context_line":"            raise exception.BadStoreUri(loc.path, reason\u003dreason)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        content_length \u003d int(resp.headers.get(\u0027content-length\u0027, 0))"},{"line_number":170,"context_line":"        return resp, content_length"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2BhVo%3D","line":168,"in_reply_to":"AAAAUH%2F%2Brfs%3D","updated":"2014-01-24 19:57:52.000000000","message":"Yes but if i am not mistaken currently the API code doesn\u0027t support both exceptions to be raise and i think we agree that this should be done outside this patch, so until the other patch is committed i would like to keep this the way it\u0027s now, and change when and if the other patch is committed first, does this make sense ?","commit_id":"d239c2f347ffb1c63d0eb339c6706fee9f927582"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"70a86e667aae083421a96e2cd189b29ead418c24","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                        \"%(body)s \") % {\"code\": resp.status_code,"},{"line_number":169,"context_line":"                        \"body\": resp.text})"},{"line_number":170,"context_line":"            LOG.debug(reason)"},{"line_number":171,"context_line":"            raise exception.BadStoreUri(loc.path, reason\u003dreason)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        content_length \u003d int(resp.headers.get(\u0027content-length\u0027, 0))"},{"line_number":174,"context_line":"        return resp, content_length"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2FAO8%3D","line":171,"updated":"2014-02-17 17:48:10.000000000","message":"Your previous is make sense to me so I think conversion at line #113 is works for me, thanks.\n\nBut I still think here, within this function, is a little different than above get() function, IMHO it will be nice if we raise exception.NotFound and exception.BadStoreUri from here as we needed/discussed, and do the necessary in get() as your TODO described, since IMO this function should be implemented separately and follow what we discussed before.\n\nThanks for your patience, and you can ping me in IRC room if I confuse you.","commit_id":"36515a1b69e1327945248aa24bf82fb3b9736911"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"33c9120be09241e8970e2be0e1da6f8749236c68","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                        \"%(body)s \") % {\"code\": resp.status_code,"},{"line_number":169,"context_line":"                        \"body\": resp.text})"},{"line_number":170,"context_line":"            LOG.debug(reason)"},{"line_number":171,"context_line":"            raise exception.BadStoreUri(loc.path, reason\u003dreason)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        content_length \u003d int(resp.headers.get(\u0027content-length\u0027, 0))"},{"line_number":174,"context_line":"        return resp, content_length"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2BYxY%3D","line":171,"in_reply_to":"AAAAUX%2F%2BZyY%3D","updated":"2014-02-21 13:39:36.000000000","message":"I like dedicated patch way more also. Thanks for your patience mouad.","commit_id":"36515a1b69e1327945248aa24bf82fb3b9736911"},{"author":{"_account_id":7073,"name":"mouad benchchaoui","email":"m.benchchaoui@x-ion.de","username":"mouad"},"change_message_id":"823c6235e055b145155f99d0e43f29259f794cdc","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                        \"%(body)s \") % {\"code\": resp.status_code,"},{"line_number":169,"context_line":"                        \"body\": resp.text})"},{"line_number":170,"context_line":"            LOG.debug(reason)"},{"line_number":171,"context_line":"            raise exception.BadStoreUri(loc.path, reason\u003dreason)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        content_length \u003d int(resp.headers.get(\u0027content-length\u0027, 0))"},{"line_number":174,"context_line":"        return resp, content_length"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2BZyY%3D","line":171,"in_reply_to":"AAAAUX%2F%2Ba84%3D","updated":"2014-02-21 11:40:06.000000000","message":"I can do it in another patch which IMHO will be better, i kind of like specific commit i.e. change only one thing, if you don\u0027t like the idea i can still do it here, your choice :)","commit_id":"36515a1b69e1327945248aa24bf82fb3b9736911"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"77460a9e6a4b9b88f5f85b67a9eae2986401b4a7","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                        \"%(body)s \") % {\"code\": resp.status_code,"},{"line_number":169,"context_line":"                        \"body\": resp.text})"},{"line_number":170,"context_line":"            LOG.debug(reason)"},{"line_number":171,"context_line":"            raise exception.BadStoreUri(loc.path, reason\u003dreason)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        content_length \u003d int(resp.headers.get(\u0027content-length\u0027, 0))"},{"line_number":174,"context_line":"        return resp, content_length"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2Ba84%3D","line":171,"in_reply_to":"AAAAUX%2F%2BlsQ%3D","updated":"2014-02-21 08:53:19.000000000","message":"After discuss with koofoss, I believe #64409 work will be dropped completely, so would you mind do this stuff in this change? thanks.","commit_id":"36515a1b69e1327945248aa24bf82fb3b9736911"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"5604284a1c6534a223ccf4c4adc78712d450898d","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                        \"%(body)s \") % {\"code\": resp.status_code,"},{"line_number":169,"context_line":"                        \"body\": resp.text})"},{"line_number":170,"context_line":"            LOG.debug(reason)"},{"line_number":171,"context_line":"            raise exception.BadStoreUri(loc.path, reason\u003dreason)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        content_length \u003d int(resp.headers.get(\u0027content-length\u0027, 0))"},{"line_number":174,"context_line":"        return resp, content_length"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2BlsQ%3D","line":171,"in_reply_to":"AAAAUX%2F%2BlyU%3D","updated":"2014-02-20 10:34:16.000000000","message":"This is a worth point, a dedicated patch change is make sense to me. I will sync up this with koofoss because #64409 had stopped weeks ago.","commit_id":"36515a1b69e1327945248aa24bf82fb3b9736911"},{"author":{"_account_id":7073,"name":"mouad benchchaoui","email":"m.benchchaoui@x-ion.de","username":"mouad"},"change_message_id":"6ec807d2c45ba1b83bfbb6c976bb19b237ad34d2","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                        \"%(body)s \") % {\"code\": resp.status_code,"},{"line_number":169,"context_line":"                        \"body\": resp.text})"},{"line_number":170,"context_line":"            LOG.debug(reason)"},{"line_number":171,"context_line":"            raise exception.BadStoreUri(loc.path, reason\u003dreason)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        content_length \u003d int(resp.headers.get(\u0027content-length\u0027, 0))"},{"line_number":174,"context_line":"        return resp, content_length"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2BlyU%3D","line":171,"in_reply_to":"AAAAUX%2F%2FAO8%3D","updated":"2014-02-20 10:20:37.000000000","message":"But i am afraid that this patch will end up not just changing httplib with requests but also exceptions handling, i didn\u0027t want to change exceptions here anymore because you showed me that there is other patch that want to do that, so i did keep them as there were (except for MaxRedirectsExceeded :)). but if you think this patch should also change _query raised exceptions i don\u0027t mind doing it. \n\nSo if you still think it\u0027s a good idea so the idea is to change this line BadStoreUri to NotFound right ?","commit_id":"36515a1b69e1327945248aa24bf82fb3b9736911"}],"glance/tests/unit/test_http_store.py":[{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"68e9afca2066a717ed4716b253ef59c8eeb6978c","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import mox"},{"line_number":19,"context_line":"import stubout"},{"line_number":20,"context_line":"import requests"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2Fvqk%3D","line":18,"updated":"2014-01-02 14:52:30.000000000","message":"Currently we\u0027d like always using mock instead mox, so I would encourage you to use mock in preference to what you have here.","commit_id":"475a508ee7ae81af0240ab517b0a22a1c33878d0"},{"author":{"_account_id":7073,"name":"mouad benchchaoui","email":"m.benchchaoui@x-ion.de","username":"mouad"},"change_message_id":"9c646212e03c05a71432865e7e5b612162d41c33","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import mox"},{"line_number":19,"context_line":"import stubout"},{"line_number":20,"context_line":"import requests"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2Fuus%3D","line":18,"in_reply_to":"AAAAT3%2F%2Fvqk%3D","updated":"2014-01-02 19:29:26.000000000","message":"I see ok will do, but maybe it should be removed from dependencies if it\u0027s not to be used.","commit_id":"475a508ee7ae81af0240ab517b0a22a1c33878d0"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"68e9afca2066a717ed4716b253ef59c8eeb6978c","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import mox"},{"line_number":19,"context_line":"import stubout"},{"line_number":20,"context_line":"import requests"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from glance.common import exception"},{"line_number":23,"context_line":"from glance import context"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FvqY%3D","line":20,"updated":"2014-01-02 14:52:30.000000000","message":"pls keep this be alphabetical order, to make pep8 happy.","commit_id":"475a508ee7ae81af0240ab517b0a22a1c33878d0"},{"author":{"_account_id":7073,"name":"mouad benchchaoui","email":"m.benchchaoui@x-ion.de","username":"mouad"},"change_message_id":"9c646212e03c05a71432865e7e5b612162d41c33","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import mox"},{"line_number":19,"context_line":"import stubout"},{"line_number":20,"context_line":"import requests"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from glance.common import exception"},{"line_number":23,"context_line":"from glance import context"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2Fuu8%3D","line":20,"in_reply_to":"AAAAT3%2F%2FvqY%3D","updated":"2014-01-02 19:29:26.000000000","message":"Done, again what is the tox -epep8 job !? :)","commit_id":"475a508ee7ae81af0240ab517b0a22a1c33878d0"}]}
