)]}'
{"httpd/keystone.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"171d1d8c14531312965bfd6e534c312ee6e3e66c","unresolved":false,"context_lines":[{"line_number":23,"context_line":"# keystone.i18n._() is called to ensure it has the desired lazy lookup"},{"line_number":24,"context_line":"# behavior. This includes cases, like keystone.exceptions, where"},{"line_number":25,"context_line":"# keystone.i18n._() is called at import time."},{"line_number":26,"context_line":"i18n.enable_lazy()"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from keystone import backends"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_ab1f416f","line":26,"updated":"2014-07-17 16:16:58.000000000","message":"is there a reason this whole block doesn\u0027t stick with the import of i18n ?","commit_id":"e527802f6877d033576bdc27b961b0998e818354"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"20629f0e323fb7379603d6c26750a456b81d0450","unresolved":false,"context_lines":[{"line_number":23,"context_line":"# keystone.i18n._() is called to ensure it has the desired lazy lookup"},{"line_number":24,"context_line":"# behavior. This includes cases, like keystone.exceptions, where"},{"line_number":25,"context_line":"# keystone.i18n._() is called at import time."},{"line_number":26,"context_line":"i18n.enable_lazy()"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from keystone import backends"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_965d404b","line":26,"in_reply_to":"baada198_565ac883","updated":"2014-07-17 16:41:12.000000000","message":"I like this conforming more to import guidelines, but I don\u0027t feel strongly enough to say this comment would affect my view on the patchset.","commit_id":"e527802f6877d033576bdc27b961b0998e818354"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"3186aaa77992b05de76f44ef3ea80455705d00d2","unresolved":false,"context_lines":[{"line_number":23,"context_line":"# keystone.i18n._() is called to ensure it has the desired lazy lookup"},{"line_number":24,"context_line":"# behavior. This includes cases, like keystone.exceptions, where"},{"line_number":25,"context_line":"# keystone.i18n._() is called at import time."},{"line_number":26,"context_line":"i18n.enable_lazy()"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from keystone import backends"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_eeb3f207","line":26,"in_reply_to":"baada198_965d404b","updated":"2014-07-18 05:10:43.000000000","message":"Ok, thanks....I think I\u0027m fine with it as you have it.","commit_id":"e527802f6877d033576bdc27b961b0998e818354"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"34e1d3dde7cee1acc748d59aa6890bfa252e2443","unresolved":false,"context_lines":[{"line_number":23,"context_line":"# keystone.i18n._() is called to ensure it has the desired lazy lookup"},{"line_number":24,"context_line":"# behavior. This includes cases, like keystone.exceptions, where"},{"line_number":25,"context_line":"# keystone.i18n._() is called at import time."},{"line_number":26,"context_line":"i18n.enable_lazy()"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from keystone import backends"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_565ac883","line":26,"in_reply_to":"baada198_ab1f416f","updated":"2014-07-17 16:32:16.000000000","message":"henry - do you mean that \"from oslo import i18n\" should be at line 21 again?\n\nthe way it is now is more consistent with the import guidelines. stdlib then external lib then internal libs\n\nwhen using oslo-incubator, we couldn\u0027t comply with that guideline since the oslo common files were internal. with the change to oslo.i18n, we can be more compliant.\n\nI\u0027m fine with it either way, so just say it and I\u0027ll change it back.","commit_id":"e527802f6877d033576bdc27b961b0998e818354"}],"keystone/i18n.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"171458c6cc0c0eae1fbc0a73b3cf4a5d5c1d5dba","unresolved":false,"context_lines":[{"line_number":42,"context_line":"# needs to do something to allow them to work. One option is to continue to"},{"line_number":43,"context_line":"# initialize gettextutils, but with the way that Keystone has initialization"},{"line_number":44,"context_line":"# spread out over keystone-all, httpd/keystone.py, and keystone.tests, we\u0027ll"},{"line_number":45,"context_line":"# monkey-patch gettextutils._(), _LI(), etc., to use our oslo.i18n versions."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"# FIXME(blk-u): Remove the monkey-patching and update openstack-common.conf and"},{"line_number":48,"context_line":"# do a sync with oslo-incubator to remove gettextutils once oslo-incubator"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_d599397a","line":45,"updated":"2014-07-11 19:30:50.000000000","message":"++","commit_id":"eb0a706268dbf30b5ae349d28e33e8dbb3bdf5a7"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"171458c6cc0c0eae1fbc0a73b3cf4a5d5c1d5dba","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"# FIXME(blk-u): Remove the monkey-patching and update openstack-common.conf and"},{"line_number":48,"context_line":"# do a sync with oslo-incubator to remove gettextutils once oslo-incubator"},{"line_number":49,"context_line":"# isn\u0027t using oslo-incubator gettextutils any more."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"from keystone.openstack.common import gettextutils"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_55852905","line":49,"updated":"2014-07-11 19:30:50.000000000","message":"++","commit_id":"eb0a706268dbf30b5ae349d28e33e8dbb3bdf5a7"}],"keystone/tests/test_wsgi.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"173d619f62cd9d15ad2dfdfc5b9dedfef7a0e3d6","unresolved":false,"context_lines":[{"line_number":269,"context_line":"    def setUp(self):"},{"line_number":270,"context_line":"        super(LocalizedResponseTest, self).setUp()"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"        i18n._gettextutils._AVAILABLE_LANGUAGES.clear()"},{"line_number":273,"context_line":"        self.addCleanup(i18n._gettextutils._AVAILABLE_LANGUAGES.clear)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    def _set_expected_languages(self, all_locales, avail_locales\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_a0327ea4","line":272,"updated":"2014-07-07 17:01:34.000000000","message":"Tests should not rely on manipulating private data inside the library. Does the code in these tests need to mock at the gettext level, or can it mock the oslo.i18n function that calls gettext.find()?","commit_id":"c5fef58a1471c40438a38875b2d2e31905803ea9"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"da798d72c9ac8407412b202c1e0f3a7cc972ac89","unresolved":false,"context_lines":[{"line_number":269,"context_line":"    def setUp(self):"},{"line_number":270,"context_line":"        super(LocalizedResponseTest, self).setUp()"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"        i18n._gettextutils._AVAILABLE_LANGUAGES.clear()"},{"line_number":273,"context_line":"        self.addCleanup(i18n._gettextutils._AVAILABLE_LANGUAGES.clear)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    def _set_expected_languages(self, all_locales, avail_locales\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_80c22c83","line":272,"in_reply_to":"baada198_a0327ea4","updated":"2014-07-11 15:25:01.000000000","message":"Done","commit_id":"c5fef58a1471c40438a38875b2d2e31905803ea9"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"173d619f62cd9d15ad2dfdfc5b9dedfef7a0e3d6","unresolved":false,"context_lines":[{"line_number":317,"context_line":"        req \u003d webob.Request.blank(\u0027/\u0027, headers\u003d{\u0027Accept-Language\u0027: \u0027zh\u0027})"},{"line_number":318,"context_line":"        self.assertIsNone(wsgi.best_match_language(req))"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"    def test_static_translated_string_is_Message(self):"},{"line_number":321,"context_line":"        # Statically created message strings are Message objects so that they"},{"line_number":322,"context_line":"        # are lazy-translated."},{"line_number":323,"context_line":"        self.assertIsInstance(exception.Unauthorized.message_format,"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_604306af","line":320,"updated":"2014-07-07 17:01:34.000000000","message":"If the wrong type of response is returned from _() here this test won\u0027t verify what you want to be testing. If you look at the type of message_format using \u003d\u003d instead of isinstance() you can verify that it is not a unicode instance.\n\n  self.assertNotEqual(type(exception.Unauthorized.message_format), unicode)","commit_id":"c5fef58a1471c40438a38875b2d2e31905803ea9"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"da798d72c9ac8407412b202c1e0f3a7cc972ac89","unresolved":false,"context_lines":[{"line_number":317,"context_line":"        req \u003d webob.Request.blank(\u0027/\u0027, headers\u003d{\u0027Accept-Language\u0027: \u0027zh\u0027})"},{"line_number":318,"context_line":"        self.assertIsNone(wsgi.best_match_language(req))"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"    def test_static_translated_string_is_Message(self):"},{"line_number":321,"context_line":"        # Statically created message strings are Message objects so that they"},{"line_number":322,"context_line":"        # are lazy-translated."},{"line_number":323,"context_line":"        self.assertIsInstance(exception.Unauthorized.message_format,"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_bd5cb91a","line":320,"in_reply_to":"baada198_604306af","updated":"2014-07-11 15:25:01.000000000","message":"Done","commit_id":"c5fef58a1471c40438a38875b2d2e31905803ea9"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"173d619f62cd9d15ad2dfdfc5b9dedfef7a0e3d6","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        self.assertIsInstance(exception.Unauthorized.message_format,"},{"line_number":324,"context_line":"                              type(_(\u0027The resource could not be found.\u0027)))"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    def test_dynamic_translated_string_is_Message(self):"},{"line_number":327,"context_line":"        # Dynamically created message strings are objects not plain strings so"},{"line_number":328,"context_line":"        # that they can be lazy-translated."},{"line_number":329,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_60eb06dc","line":326,"updated":"2014-07-07 17:01:34.000000000","message":"This test looks like something that we cover in the i18n library tests. Does it need to be reproduced here?","commit_id":"c5fef58a1471c40438a38875b2d2e31905803ea9"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"da798d72c9ac8407412b202c1e0f3a7cc972ac89","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        self.assertIsInstance(exception.Unauthorized.message_format,"},{"line_number":324,"context_line":"                              type(_(\u0027The resource could not be found.\u0027)))"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    def test_dynamic_translated_string_is_Message(self):"},{"line_number":327,"context_line":"        # Dynamically created message strings are objects not plain strings so"},{"line_number":328,"context_line":"        # that they can be lazy-translated."},{"line_number":329,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_00d7fc4b","line":326,"in_reply_to":"baada198_60eb06dc","updated":"2014-07-11 15:25:01.000000000","message":"Done","commit_id":"c5fef58a1471c40438a38875b2d2e31905803ea9"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"171458c6cc0c0eae1fbc0a73b3cf4a5d5c1d5dba","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        self.assertIsNone(wsgi.best_match_language(req))"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    @mock.patch.object(i18n, \u0027get_available_languages\u0027)"},{"line_number":278,"context_line":"    def test_request_match_language_expected(self, mock_gal):"},{"line_number":279,"context_line":"        # If Accept-Language is a supported language, best_match_language()"},{"line_number":280,"context_line":"        # returns it."},{"line_number":281,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_1519f1d6","line":278,"updated":"2014-07-11 19:30:50.000000000","message":"lol","commit_id":"eb0a706268dbf30b5ae349d28e33e8dbb3bdf5a7"}]}
