)]}'
{"swift/__init__.py":[{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"2a1cd3eda7126cde0a24aac8e0f9f2800516b900","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def gettext_(msg):"},{"line_number":41,"context_line":"    return _t.gettext(msg).decode(\u0027utf-8\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9abb7d3a_d294f937","line":41,"updated":"2016-06-01 20:27:26.000000000","message":"This should be ugettext I think.","commit_id":"95db07632928af46a135afe042f4e030a1f7a8ed"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"e019fc53cd7fad8c35ced7a1813cfdecacfa5a15","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def gettext_(msg):"},{"line_number":41,"context_line":"    return _t.gettext(msg).decode(\u0027utf-8\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_7465951c","line":41,"in_reply_to":"9abb7d3a_d294f937","updated":"2016-06-07 18:32:49.000000000","message":"Well, it should use ugettext if the function itself would be named ugettext - so keeping this as it is.","commit_id":"95db07632928af46a135afe042f4e030a1f7a8ed"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c7a12c5f2834c2581cce75fa0811ff92d827c0fa","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def gettext_(msg):"},{"line_number":41,"context_line":"    return _t.gettext(msg).decode(\u0027utf-8\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_cf6afdb2","line":41,"updated":"2016-07-06 00:35:54.000000000","message":"maybe ugettext?\n\nhttps://docs.python.org/2/library/gettext.html#gettext.NullTranslations.ugettext","commit_id":"1b6f35e01b95aeb8f73a18d61e292552a63f472b"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"3b707e35089734cd707397eb53f727db0b6e441b","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def gettext_(msg):"},{"line_number":41,"context_line":"    return _t.gettext(msg).decode(\u0027utf-8\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_3a2d8ffe","line":41,"in_reply_to":"1aa78d24_cd331b61","updated":"2016-07-06 19:51:31.000000000","message":"so I tested out ugettext and it doesn\u0027t seem to reliably return unicode :\\\n\nso this way wfm","commit_id":"1b6f35e01b95aeb8f73a18d61e292552a63f472b"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"4da3d992144825342a7e96e4a76448149585590d","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def gettext_(msg):"},{"line_number":41,"context_line":"    return _t.gettext(msg).decode(\u0027utf-8\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_cd331b61","line":41,"in_reply_to":"1aa78d24_cf6afdb2","updated":"2016-07-06 08:06:37.000000000","message":"Yeah, I proposed that in an earlier comment too.\n\nBut then we should call the method itself also ugettext, or not?","commit_id":"1b6f35e01b95aeb8f73a18d61e292552a63f472b"}],"test/unit/test_locale/test_locale.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fabd5fa041a185241e9e5bca0a0ec887da5b5967","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        self.orig_stop \u003d threading._DummyThread._Thread__stop"},{"line_number":57,"context_line":"        # See http://stackoverflow.com/questions/13193278/\\"},{"line_number":58,"context_line":"        #     understand-python-threading-bug"},{"line_number":59,"context_line":"        threading._DummyThread._Thread__stop \u003d lambda x: 42"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def tearDown(self):"},{"line_number":62,"context_line":"        for var, val in self.orig_env.items():"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_14039510","side":"PARENT","line":59,"updated":"2016-06-07 10:39:21.000000000","message":"The bug mentioned here got fixed in python 2.7.4 [1] so is it safe to remove this workaround when technically we do not require \u003e\u003d2.7.4? AFAICT ubuntu 12.04 for example shipped with 2.7.3 [2]. Most likely people are on a newer version, and I am being paranoid, but just asking.\n\n[1] https://hg.python.org/cpython/file/ab9d6c4907e7/Misc/NEWS\n[2] http://packages.ubuntu.com/precise/python","commit_id":"ae0149811ddfc550f5e407f16d85d551d10e6f5f"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"e019fc53cd7fad8c35ced7a1813cfdecacfa5a15","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        self.orig_stop \u003d threading._DummyThread._Thread__stop"},{"line_number":57,"context_line":"        # See http://stackoverflow.com/questions/13193278/\\"},{"line_number":58,"context_line":"        #     understand-python-threading-bug"},{"line_number":59,"context_line":"        threading._DummyThread._Thread__stop \u003d lambda x: 42"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def tearDown(self):"},{"line_number":62,"context_line":"        for var, val in self.orig_env.items():"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_4f38c2ef","side":"PARENT","line":59,"in_reply_to":"7aa08908_14039510","updated":"2016-06-07 18:32:49.000000000","message":"I think we don\u0027t need this workaround anymore, because the whole code using subprocess to catch the output is no longer used. Even with 2.7.3 on precise I was not able see this error.\n\nI\u0027m going to have a look at Fedora 18, because Peter originally saw these issues there (see https://review.openstack.org/#/c/53131/)","commit_id":"ae0149811ddfc550f5e407f16d85d551d10e6f5f"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"da06ac3320696a85356017217fce65cb277d47f9","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        self.orig_stop \u003d threading._DummyThread._Thread__stop"},{"line_number":57,"context_line":"        # See http://stackoverflow.com/questions/13193278/\\"},{"line_number":58,"context_line":"        #     understand-python-threading-bug"},{"line_number":59,"context_line":"        threading._DummyThread._Thread__stop \u003d lambda x: 42"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def tearDown(self):"},{"line_number":62,"context_line":"        for var, val in self.orig_env.items():"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_8febc712","side":"PARENT","line":59,"in_reply_to":"7aa08908_4f38c2ef","updated":"2016-06-07 19:11:56.000000000","message":"Checked this on Fedora 18, I don\u0027t see the threading issues running this patch.","commit_id":"ae0149811ddfc550f5e407f16d85d551d10e6f5f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fabd5fa041a185241e9e5bca0a0ec887da5b5967","unresolved":false,"context_lines":[{"line_number":29,"context_line":"            \u0027LC_ALL\u0027: language,"},{"line_number":30,"context_line":"            \u0027SWIFT_LOCALEDIR\u0027: os.path.dirname(__file__),"},{"line_number":31,"context_line":"        }"},{"line_number":32,"context_line":"        with mock.patch.dict(os.environ, tmpenv):"},{"line_number":33,"context_line":"            reload(swift)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def test_translations_english(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_e5ac5137","line":32,"updated":"2016-06-07 10:39:21.000000000","message":"mock.patch.dict updates but does not clear the original dict* unless the clear\u003dTrue arg is used. That means that in my test env i was left with LANGUAGE\u003den still in os.environ and this is the first env var tha gettext.find chooses to decide upon locale dir to search. That in turn means that the esperanto tests failed because gettext was in fact defaulting to English despite LC_ALL\u003deo\n\nEither use clear\u003dTrue or use LANGUAGE\u003deo in the tmpenv\n\n(*this has burnt me before :/ )","commit_id":"95db07632928af46a135afe042f4e030a1f7a8ed"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"e019fc53cd7fad8c35ced7a1813cfdecacfa5a15","unresolved":false,"context_lines":[{"line_number":29,"context_line":"            \u0027LC_ALL\u0027: language,"},{"line_number":30,"context_line":"            \u0027SWIFT_LOCALEDIR\u0027: os.path.dirname(__file__),"},{"line_number":31,"context_line":"        }"},{"line_number":32,"context_line":"        with mock.patch.dict(os.environ, tmpenv):"},{"line_number":33,"context_line":"            reload(swift)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def test_translations_english(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_7433d514","line":32,"in_reply_to":"7aa08908_e5ac5137","updated":"2016-06-07 18:32:49.000000000","message":"Ah, and now the former\n\n os.environ[\u0027LANGUAGE\u0027] \u003d \u0027\u0027\n\nmakes a lot more sense as well! Good to know, thanks for the note!","commit_id":"95db07632928af46a135afe042f4e030a1f7a8ed"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"2a1cd3eda7126cde0a24aac8e0f9f2800516b900","unresolved":false,"context_lines":[{"line_number":50,"context_line":"            \u0027test message %(msg)s\u0027) % {\u0027msg\u0027: \u0027stuff\u0027}"},{"line_number":51,"context_line":"        self.assertEqual(translated_message, u\u0027prova mesaĝo stuff\u0027)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def test_translations_with_unicode_append(self):"},{"line_number":54,"context_line":"        self._set_language(\u0027eo\u0027)"},{"line_number":55,"context_line":"        translated_message \u003d swift.gettext_("},{"line_number":56,"context_line":"            \u0027test message %(msg)s\u0027) % {\u0027msg\u0027: u\u0027stuff\u0027}"}],"source_content_type":"text/x-python","patch_set":1,"id":"9abb7d3a_f2b81dca","line":53,"updated":"2016-06-01 20:27:26.000000000","message":"Name should be test_translations_esperanto_with_unicode_append","commit_id":"95db07632928af46a135afe042f4e030a1f7a8ed"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"e608e0badf64a8506c4ae07e11430423ff0efce8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"7aa08908_3e4bf988","line":61,"updated":"2016-06-12 13:52:50.000000000","message":"Don\u0027t we need the following lines at the bottom?\n\nif __name__ \u003d\u003d \u0027__main__\u0027:\n    unittest.main()","commit_id":"1b6f35e01b95aeb8f73a18d61e292552a63f472b"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"4da3d992144825342a7e96e4a76448149585590d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"1aa78d24_ed6c1737","line":61,"in_reply_to":"7aa08908_3e4bf988","updated":"2016-07-06 08:06:37.000000000","message":"Only if you want to call this file directly. Nose and tox will start it even without this, so it\u0027s not needed IMO","commit_id":"1b6f35e01b95aeb8f73a18d61e292552a63f472b"}]}
