)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"98b3bf40d5a74536e2027f75a440c4685d8a1984","unresolved":false,"context_lines":[{"line_number":11,"context_line":"The patch adds a new hacking check - N319. This ensures that"},{"line_number":12,"context_line":"all log messages, except debug ones, have translations."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"A \u0027# noqa\u0027 insidates that the validation will not be done on"},{"line_number":15,"context_line":"the specific log message."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Closes-bug: #1290261"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"AAAAXX%2F%2F%2BSM%3D","line":14,"updated":"2014-04-24 22:42:26.000000000","message":"s/insidates/indicates/","commit_id":"779d2df3f0a9bd55223925c970936a886b0468cf"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"1c1eb184bb72edc8e75f8fc98861960044025dc7","unresolved":false,"context_lines":[{"line_number":11,"context_line":"The patch adds a new hacking check - N319. This ensures that"},{"line_number":12,"context_line":"all log messages, except debug ones, have translations."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"A \u0027# noqa\u0027 insidates that the validation will not be done on"},{"line_number":15,"context_line":"the specific log message."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Closes-bug: #1290261"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"AAAAXX%2F%2F0A8%3D","line":14,"in_reply_to":"AAAAXX%2F%2F%2BSM%3D","updated":"2014-04-26 08:37:03.000000000","message":"Done","commit_id":"779d2df3f0a9bd55223925c970936a886b0468cf"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"e165e8542f1d71c4cd19c2e92c166bd2d1f60d0c","unresolved":false,"context_lines":[{"line_number":12,"context_line":"all log messages, except debug ones, have translations."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"A \u0027# noqa\u0027 indicates that the validation will not be done on"},{"line_number":15,"context_line":"the specific log message."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Closes-bug: #1290261"},{"line_number":18,"context_line":"Change-Id: Ib2ca0bfaaf432e15448c96619682c2cfd073fbbc"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"AAAAXX%2F%2FxOY%3D","line":15,"updated":"2014-04-28 04:57:16.000000000","message":"It would be nice to describe the reason of #noqa for considering it at the other places in the future.\n\nI guess the reason is that the places output just raw messages which are gotten from libraries and it would be difficult to debug if translating them, right?","commit_id":"0406ae53c963a4b40b915ba327f93d97f208b6da"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"13adebbf4ddeeef004b25cfd92bac2fb69f95320","unresolved":false,"context_lines":[{"line_number":12,"context_line":"all log messages, except debug ones, have translations."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"A \u0027# noqa\u0027 indicates that the validation will not be done on"},{"line_number":15,"context_line":"the specific log message."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Closes-bug: #1290261"},{"line_number":18,"context_line":"Change-Id: Ib2ca0bfaaf432e15448c96619682c2cfd073fbbc"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"AAAAXX%2F%2FwrU%3D","line":15,"in_reply_to":"AAAAXX%2F%2FxOY%3D","updated":"2014-04-28 07:08:45.000000000","message":"Done","commit_id":"0406ae53c963a4b40b915ba327f93d97f208b6da"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"2b57057fd7b6956b638945acf933551e59942147","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Update a number of files to add missing translation support."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"The patch adds a new hacking check - N321. This ensures that"},{"line_number":12,"context_line":"all log messages, except debug ones, have translations."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"A \u0027# noqa\u0027 indicates that the validation will not be done on"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"1ae5cdf2_bf9a2a61","line":11,"updated":"2014-06-02 02:33:28.000000000","message":"Here is N321.","commit_id":"0b9882b0003fc5a12c4a5cddb7366756476aadc0"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"1aa6d6d04a06c940ae7aa6d034123611e796970a","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Update a number of files to add missing translation support."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"The patch adds a new hacking check - N321. This ensures that"},{"line_number":12,"context_line":"all log messages, except debug ones, have translations."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"A \u0027# noqa\u0027 indicates that the validation will not be done on"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"1ae5cdf2_cfeabf0e","line":11,"in_reply_to":"1ae5cdf2_bf9a2a61","updated":"2014-06-03 05:18:57.000000000","message":"It should be 321 - please see https://review.openstack.org/#/c/97393/","commit_id":"0b9882b0003fc5a12c4a5cddb7366756476aadc0"}],"HACKING.rst":[{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"33f7126ce63af484883db95304d4a9b6162fe448","unresolved":false,"context_lines":[{"line_number":30,"context_line":"  assertIsInstance(A, B)"},{"line_number":31,"context_line":"- [N318] Change assertEqual(A, None) or assertEqual(None, A) by optimal assert like"},{"line_number":32,"context_line":"  assertIsNone(A)"},{"line_number":33,"context_line":"- [N319] Ensure that LOG messages, except debug ones, have translations"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"Creating Unit Tests"}],"source_content_type":"text/x-rst","patch_set":14,"id":"AAAAXX%2F%2F1gc%3D","line":33,"updated":"2014-04-25 21:38:48.000000000","message":"this isn\u0027t making sure log messages have translations, the translators do that.\n\nThis just lets them know to translate it and makes nova support using the translated text.","commit_id":"779d2df3f0a9bd55223925c970936a886b0468cf"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"1c1eb184bb72edc8e75f8fc98861960044025dc7","unresolved":false,"context_lines":[{"line_number":30,"context_line":"  assertIsInstance(A, B)"},{"line_number":31,"context_line":"- [N318] Change assertEqual(A, None) or assertEqual(None, A) by optimal assert like"},{"line_number":32,"context_line":"  assertIsNone(A)"},{"line_number":33,"context_line":"- [N319] Ensure that LOG messages, except debug ones, have translations"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"Creating Unit Tests"}],"source_content_type":"text/x-rst","patch_set":14,"id":"AAAAXX%2F%2F0AE%3D","line":33,"in_reply_to":"AAAAXX%2F%2F1gc%3D","updated":"2014-04-26 08:37:03.000000000","message":"Done","commit_id":"779d2df3f0a9bd55223925c970936a886b0468cf"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"2b57057fd7b6956b638945acf933551e59942147","unresolved":false,"context_lines":[{"line_number":31,"context_line":"- [N318] Change assertEqual(A, None) or assertEqual(None, A) by optimal assert like"},{"line_number":32,"context_line":"  assertIsNone(A)"},{"line_number":33,"context_line":"- [N319] Validate that debug level logs are not translated."},{"line_number":34,"context_line":"- [N320] Validate that LOG messages, except debug ones, have translations"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"Creating Unit Tests"},{"line_number":37,"context_line":"-------------------"}],"source_content_type":"text/x-rst","patch_set":19,"id":"1ae5cdf2_df9d365b","line":34,"updated":"2014-06-02 02:33:28.000000000","message":"but here is N320.","commit_id":"0b9882b0003fc5a12c4a5cddb7366756476aadc0"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"1aa6d6d04a06c940ae7aa6d034123611e796970a","unresolved":false,"context_lines":[{"line_number":31,"context_line":"- [N318] Change assertEqual(A, None) or assertEqual(None, A) by optimal assert like"},{"line_number":32,"context_line":"  assertIsNone(A)"},{"line_number":33,"context_line":"- [N319] Validate that debug level logs are not translated."},{"line_number":34,"context_line":"- [N320] Validate that LOG messages, except debug ones, have translations"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"Creating Unit Tests"},{"line_number":37,"context_line":"-------------------"}],"source_content_type":"text/x-rst","patch_set":19,"id":"1ae5cdf2_af8c9380","line":34,"in_reply_to":"1ae5cdf2_df9d365b","updated":"2014-06-03 05:18:57.000000000","message":"N320 was added by commit https://review.openstack.org/#q,9235ada8c2c250603dc5b299cc08bb7a982d4fc6,n,z\nplease see https://review.openstack.org/#/c/97393/\nI have based this patch on that one","commit_id":"0b9882b0003fc5a12c4a5cddb7366756476aadc0"}],"nova/api/ec2/__init__.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6cac70d56165f52f008c31b78a7b381bfe5b9e93","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        seconds \u003d delta.seconds"},{"line_number":112,"context_line":"        microseconds \u003d delta.microseconds"},{"line_number":113,"context_line":"        LOG.info("},{"line_number":114,"context_line":"            _(\"%(seconds)s.%(microseconds)s %(remote_addr)s \""},{"line_number":115,"context_line":"              \"%(method)s %(script)s %(controller)s:%(action)s \""},{"line_number":116,"context_line":"              \"%(status)s [%(user_agent)s] %(req_content_type)s \""},{"line_number":117,"context_line":"              \"%(res_content_type)s\"),"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXH%2F%2FL28%3D","line":114,"updated":"2014-04-23 13:42:21.000000000","message":"Wonder if this should be # noqa.","commit_id":"96ea45a35ebd376ef3aa97ab937edfeb70a0cff9"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"837f1d72a176cf800d70d47782b94010d453d3ce","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        seconds \u003d delta.seconds"},{"line_number":112,"context_line":"        microseconds \u003d delta.microseconds"},{"line_number":113,"context_line":"        LOG.info("},{"line_number":114,"context_line":"            _(\"%(seconds)s.%(microseconds)s %(remote_addr)s \""},{"line_number":115,"context_line":"              \"%(method)s %(script)s %(controller)s:%(action)s \""},{"line_number":116,"context_line":"              \"%(status)s [%(user_agent)s] %(req_content_type)s \""},{"line_number":117,"context_line":"              \"%(res_content_type)s\"),"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXH%2F%2FLXg%3D","line":114,"in_reply_to":"AAAAXH%2F%2FL28%3D","updated":"2014-04-24 05:07:10.000000000","message":"why - we should follow the example with the dictionaries. can you please elaborate","commit_id":"96ea45a35ebd376ef3aa97ab937edfeb70a0cff9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8d8f59482415b42c7439d857cf93128c424fa136","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        seconds \u003d delta.seconds"},{"line_number":112,"context_line":"        microseconds \u003d delta.microseconds"},{"line_number":113,"context_line":"        LOG.info("},{"line_number":114,"context_line":"            _(\"%(seconds)s.%(microseconds)s %(remote_addr)s \""},{"line_number":115,"context_line":"              \"%(method)s %(script)s %(controller)s:%(action)s \""},{"line_number":116,"context_line":"              \"%(status)s [%(user_agent)s] %(req_content_type)s \""},{"line_number":117,"context_line":"              \"%(res_content_type)s\"),"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXX%2F%2F%2BSs%3D","line":114,"in_reply_to":"AAAAXH%2F%2FLXg%3D","updated":"2014-04-24 22:42:01.000000000","message":"Because there is nothing to translate here, it\u0027s all dynamic values.","commit_id":"96ea45a35ebd376ef3aa97ab937edfeb70a0cff9"}],"nova/exception.py":[{"author":{"_account_id":5371,"name":"Mathew Odden","email":"locke105@gmail.com","username":"locke105"},"change_message_id":"078fc377f196113304df3d3d395bb64c6de41e22","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                # log the issue and the kwargs"},{"line_number":124,"context_line":"                LOG.exception(_(\u0027Exception in string format operation\u0027))"},{"line_number":125,"context_line":"                for name, value in kwargs.iteritems():"},{"line_number":126,"context_line":"                    LOG.error(_(\"%(name)s: %(value)s\"), {\u0027name\u0027: name,"},{"line_number":127,"context_line":"                                                         \u0027value\u0027: value})"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"                if CONF.fatal_exception_format_errors:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAXH%2F%2Fmkc%3D","line":126,"updated":"2014-04-18 22:11:26.000000000","message":"There is nothing needing to be translated here... why would you put it through the _() function.","commit_id":"25cdbde2b8ac0a9f55e4b76daae154683beeeeb3"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"3490cca2b7997e3fbfc4f9633b03e05c71bf837e","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                # log the issue and the kwargs"},{"line_number":124,"context_line":"                LOG.exception(_(\u0027Exception in string format operation\u0027))"},{"line_number":125,"context_line":"                for name, value in kwargs.iteritems():"},{"line_number":126,"context_line":"                    LOG.error(_(\"%(name)s: %(value)s\"), {\u0027name\u0027: name,"},{"line_number":127,"context_line":"                                                         \u0027value\u0027: value})"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"                if CONF.fatal_exception_format_errors:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAXH%2F%2Fktg%3D","line":126,"in_reply_to":"AAAAXH%2F%2Fmkc%3D","updated":"2014-04-19 07:14:57.000000000","message":"The script that does the check is unable to differentiate when a actual translation is needed. This needs to have the _()","commit_id":"25cdbde2b8ac0a9f55e4b76daae154683beeeeb3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6cac70d56165f52f008c31b78a7b381bfe5b9e93","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                # log the issue and the kwargs"},{"line_number":124,"context_line":"                LOG.exception(_(\u0027Exception in string format operation\u0027))"},{"line_number":125,"context_line":"                for name, value in kwargs.iteritems():"},{"line_number":126,"context_line":"                    LOG.error(_(\"%(name)s: %(value)s\"), {\u0027name\u0027: name,"},{"line_number":127,"context_line":"                                                         \u0027value\u0027: value})"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"                if CONF.fatal_exception_format_errors:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXH%2F%2FL34%3D","line":126,"updated":"2014-04-23 13:42:21.000000000","message":"Wondering if we should # noqa this.","commit_id":"96ea45a35ebd376ef3aa97ab937edfeb70a0cff9"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"837f1d72a176cf800d70d47782b94010d453d3ce","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                # log the issue and the kwargs"},{"line_number":124,"context_line":"                LOG.exception(_(\u0027Exception in string format operation\u0027))"},{"line_number":125,"context_line":"                for name, value in kwargs.iteritems():"},{"line_number":126,"context_line":"                    LOG.error(_(\"%(name)s: %(value)s\"), {\u0027name\u0027: name,"},{"line_number":127,"context_line":"                                                         \u0027value\u0027: value})"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"                if CONF.fatal_exception_format_errors:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXH%2F%2FLQc%3D","line":126,"in_reply_to":"AAAAXH%2F%2FL34%3D","updated":"2014-04-24 05:07:10.000000000","message":"Not sure why. Can you please elaborate?","commit_id":"96ea45a35ebd376ef3aa97ab937edfeb70a0cff9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8d8f59482415b42c7439d857cf93128c424fa136","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                # log the issue and the kwargs"},{"line_number":124,"context_line":"                LOG.exception(_(\u0027Exception in string format operation\u0027))"},{"line_number":125,"context_line":"                for name, value in kwargs.iteritems():"},{"line_number":126,"context_line":"                    LOG.error(_(\"%(name)s: %(value)s\"), {\u0027name\u0027: name,"},{"line_number":127,"context_line":"                                                         \u0027value\u0027: value})"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"                if CONF.fatal_exception_format_errors:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXX%2F%2F%2BSk%3D","line":126,"in_reply_to":"AAAAXH%2F%2FLQc%3D","updated":"2014-04-24 22:42:01.000000000","message":"Because there is nothing to translate here, it\u0027s all dynamic values.","commit_id":"96ea45a35ebd376ef3aa97ab937edfeb70a0cff9"}],"nova/hacking/checks.py":[{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"8bd40c108f2a6d6f129637df02e948fecafc849b","unresolved":false,"context_lines":[{"line_number":195,"context_line":"               \"sentences not allowed\")"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"def validate_log_translations(physical_line, filename):"},{"line_number":199,"context_line":"    # Translations are not required in the test directory"},{"line_number":200,"context_line":"    # and the Xen utilities"},{"line_number":201,"context_line":"    if (\"nova/tests\" in filename or"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAVn%2F%2FBSk%3D","line":198,"updated":"2014-03-10 16:58:05.000000000","message":"I think you need to use logical_line not physical_line here, to catch heavily-indented lines like:\n\n                             LOG.debug(\n                                     \"Some string\")","commit_id":"a5866a3f69e7dadb32ce6a34a5ccfa897cbd20ae"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"db7d472069d5443cb9c9c3626c56fb715adbee48","unresolved":false,"context_lines":[{"line_number":195,"context_line":"               \"sentences not allowed\")"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"def validate_log_translations(physical_line, filename):"},{"line_number":199,"context_line":"    # Translations are not required in the test directory"},{"line_number":200,"context_line":"    # and the Xen utilities"},{"line_number":201,"context_line":"    if (\"nova/tests\" in filename or"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAVn%2F%2B5W0%3D","line":198,"in_reply_to":"AAAAVn%2F%2FBSk%3D","updated":"2014-03-11 13:33:05.000000000","message":"Done","commit_id":"a5866a3f69e7dadb32ce6a34a5ccfa897cbd20ae"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"8bd40c108f2a6d6f129637df02e948fecafc849b","unresolved":false,"context_lines":[{"line_number":204,"context_line":"    res \u003d log_translation.match(physical_line)"},{"line_number":205,"context_line":"    if res:"},{"line_number":206,"context_line":"        pos \u003d physical_line.find(\u0027LOG\u0027)"},{"line_number":207,"context_line":"        return pos, \"N319: Log messages require translations!\""},{"line_number":208,"context_line":""},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"def factory(register):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAVn%2F%2FBSU%3D","line":207,"updated":"2014-03-10 16:58:05.000000000","message":"BTW, if using logical_line this needs to be a yield rather than a return...","commit_id":"a5866a3f69e7dadb32ce6a34a5ccfa897cbd20ae"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"db7d472069d5443cb9c9c3626c56fb715adbee48","unresolved":false,"context_lines":[{"line_number":204,"context_line":"    res \u003d log_translation.match(physical_line)"},{"line_number":205,"context_line":"    if res:"},{"line_number":206,"context_line":"        pos \u003d physical_line.find(\u0027LOG\u0027)"},{"line_number":207,"context_line":"        return pos, \"N319: Log messages require translations!\""},{"line_number":208,"context_line":""},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"def factory(register):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAVn%2F%2B6n0%3D","line":207,"in_reply_to":"AAAAVn%2F%2FBSU%3D","updated":"2014-03-11 13:33:05.000000000","message":"Done","commit_id":"a5866a3f69e7dadb32ce6a34a5ccfa897cbd20ae"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6cac70d56165f52f008c31b78a7b381bfe5b9e93","unresolved":false,"context_lines":[{"line_number":49,"context_line":"asse_equal_start_with_none_re \u003d re.compile("},{"line_number":50,"context_line":"                           r\"(.)*assertEqual\\(None, (\\w|\\.|\\\u0027|\\\"|\\[|\\])+\\)\")"},{"line_number":51,"context_line":"log_translation \u003d re.compile("},{"line_number":52,"context_line":"    r\"(.)*LOG\\.(audit|info|warning|critical|exception)\\(\\s*(\u0027|\\\")\")"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"def import_no_db_in_virt(logical_line, filename):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXH%2F%2FL2U%3D","line":52,"updated":"2014-04-23 13:42:21.000000000","message":"What about warn and error?","commit_id":"96ea45a35ebd376ef3aa97ab937edfeb70a0cff9"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"837f1d72a176cf800d70d47782b94010d453d3ce","unresolved":false,"context_lines":[{"line_number":49,"context_line":"asse_equal_start_with_none_re \u003d re.compile("},{"line_number":50,"context_line":"                           r\"(.)*assertEqual\\(None, (\\w|\\.|\\\u0027|\\\"|\\[|\\])+\\)\")"},{"line_number":51,"context_line":"log_translation \u003d re.compile("},{"line_number":52,"context_line":"    r\"(.)*LOG\\.(audit|info|warning|critical|exception)\\(\\s*(\u0027|\\\")\")"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"def import_no_db_in_virt(logical_line, filename):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXH%2F%2FLWs%3D","line":52,"in_reply_to":"AAAAXH%2F%2FL2U%3D","updated":"2014-04-24 05:07:10.000000000","message":"Done","commit_id":"96ea45a35ebd376ef3aa97ab937edfeb70a0cff9"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"2b57057fd7b6956b638945acf933551e59942147","unresolved":false,"context_lines":[{"line_number":272,"context_line":"        return"},{"line_number":273,"context_line":"    if pep8.noqa(physical_line):"},{"line_number":274,"context_line":"        return"},{"line_number":275,"context_line":"    msg \u003d \"N321: Log messages require translations!\""},{"line_number":276,"context_line":"    if log_translation.match(logical_line):"},{"line_number":277,"context_line":"        yield (0, msg)"},{"line_number":278,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"1ae5cdf2_3f77fa3b","line":275,"updated":"2014-06-02 02:33:28.000000000","message":"and here is N321.","commit_id":"0b9882b0003fc5a12c4a5cddb7366756476aadc0"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"1aa6d6d04a06c940ae7aa6d034123611e796970a","unresolved":false,"context_lines":[{"line_number":272,"context_line":"        return"},{"line_number":273,"context_line":"    if pep8.noqa(physical_line):"},{"line_number":274,"context_line":"        return"},{"line_number":275,"context_line":"    msg \u003d \"N321: Log messages require translations!\""},{"line_number":276,"context_line":"    if log_translation.match(logical_line):"},{"line_number":277,"context_line":"        yield (0, msg)"},{"line_number":278,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"1ae5cdf2_2f81634a","line":275,"in_reply_to":"1ae5cdf2_3f77fa3b","updated":"2014-06-03 05:18:57.000000000","message":"is should be 321 - please see commit message comment","commit_id":"0b9882b0003fc5a12c4a5cddb7366756476aadc0"}],"nova/tests/test_hacking.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6cac70d56165f52f008c31b78a7b381bfe5b9e93","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        self.assertEqual(len(list(checks.no_translate_debug_logs("},{"line_number":92,"context_line":"            \"LOG.info(_(\u0027foo\u0027))\", \"nova/scheduler/foo.py\"))), 0)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def test_log_translations(self):"},{"line_number":95,"context_line":"        self.assertEqual(0,"},{"line_number":96,"context_line":"            len(list("},{"line_number":97,"context_line":"                checks.validate_log_translations(\"LOG.debug(\u0027OK\u0027)\", \u0027f\u0027))))"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXH%2F%2FL1k%3D","line":94,"updated":"2014-04-23 13:42:21.000000000","message":"Just a thought, but a matrix might be better that hits each logging method in the hacking regex and does an ok/not-ok test for each with expected results.","commit_id":"96ea45a35ebd376ef3aa97ab937edfeb70a0cff9"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"837f1d72a176cf800d70d47782b94010d453d3ce","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        self.assertEqual(len(list(checks.no_translate_debug_logs("},{"line_number":92,"context_line":"            \"LOG.info(_(\u0027foo\u0027))\", \"nova/scheduler/foo.py\"))), 0)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def test_log_translations(self):"},{"line_number":95,"context_line":"        self.assertEqual(0,"},{"line_number":96,"context_line":"            len(list("},{"line_number":97,"context_line":"                checks.validate_log_translations(\"LOG.debug(\u0027OK\u0027)\", \u0027f\u0027))))"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXH%2F%2FLUk%3D","line":94,"in_reply_to":"AAAAXH%2F%2FL1k%3D","updated":"2014-04-24 05:07:10.000000000","message":"Done","commit_id":"96ea45a35ebd376ef3aa97ab937edfeb70a0cff9"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"33f7126ce63af484883db95304d4a9b6162fe448","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                len(list("},{"line_number":109,"context_line":"                    checks.validate_log_translations(ok, ok, \u0027f\u0027))))"},{"line_number":110,"context_line":"            ok \u003d \"LOG.%s(\u0027OK\u0027)    # noqa\" % log"},{"line_number":111,"context_line":"            self.assertEqual(0,"},{"line_number":112,"context_line":"                len(list("},{"line_number":113,"context_line":"                    checks.validate_log_translations(ok, ok, \u0027f\u0027))))"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAXX%2F%2F1g8%3D","line":111,"updated":"2014-04-25 21:38:48.000000000","message":"Can you add a case for: \n\n  foo \u003d _(\"a translated string\")\n  LOG.info(foo)\n\nwhere foo is a string variable.","commit_id":"779d2df3f0a9bd55223925c970936a886b0468cf"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"1c1eb184bb72edc8e75f8fc98861960044025dc7","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                len(list("},{"line_number":109,"context_line":"                    checks.validate_log_translations(ok, ok, \u0027f\u0027))))"},{"line_number":110,"context_line":"            ok \u003d \"LOG.%s(\u0027OK\u0027)    # noqa\" % log"},{"line_number":111,"context_line":"            self.assertEqual(0,"},{"line_number":112,"context_line":"                len(list("},{"line_number":113,"context_line":"                    checks.validate_log_translations(ok, ok, \u0027f\u0027))))"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAXX%2F%2F0A4%3D","line":111,"in_reply_to":"AAAAXX%2F%2F1g8%3D","updated":"2014-04-26 08:37:03.000000000","message":"Done","commit_id":"779d2df3f0a9bd55223925c970936a886b0468cf"}],"nova/virt/images.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"942b1289aceeb4d4897c06614299bf53c7ec8c0f","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        if fmt !\u003d \"raw\" and CONF.force_raw_images:"},{"line_number":113,"context_line":"            staged \u003d \"%s.converted\" % path"},{"line_number":114,"context_line":"            LOG.debug(\"%(image_href)s was %(fmt)s, converting to raw\","},{"line_number":115,"context_line":"                      {\u0027image_href\u0027: image_href, \u0027fmt\u0027: fmt})"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"            with fileutils.remove_path_on_error(staged):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAXH%2F%2FSII%3D","line":114,"updated":"2014-04-22 18:59:54.000000000","message":"You\u0027re just changing the formatting, not making this translatable.\n\nLooks like you shouldn\u0027t anyway.\n\nhttps://review.openstack.org/#/c/88453/","commit_id":"3eb1509f958a01334d923bdd99cebe803d4aa51a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"4f81058593aca9eaad1ab64026985738b7622bc2","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        if fmt !\u003d \"raw\" and CONF.force_raw_images:"},{"line_number":113,"context_line":"            staged \u003d \"%s.converted\" % path"},{"line_number":114,"context_line":"            LOG.debug(\"%(image_href)s was %(fmt)s, converting to raw\","},{"line_number":115,"context_line":"                      {\u0027image_href\u0027: image_href, \u0027fmt\u0027: fmt})"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"            with fileutils.remove_path_on_error(staged):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAXH%2F%2FOxg%3D","line":114,"in_reply_to":"AAAAXH%2F%2FSII%3D","updated":"2014-04-23 06:55:58.000000000","message":"Done","commit_id":"3eb1509f958a01334d923bdd99cebe803d4aa51a"}],"nova/virt/xenapi/volume_utils.py":[{"author":{"_account_id":5371,"name":"Mathew Odden","email":"locke105@gmail.com","username":"locke105"},"change_message_id":"078fc377f196113304df3d3d395bb64c6de41e22","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"def _get_vdi_ref(session, sr_ref, vdi_uuid, target_lun):"},{"line_number":141,"context_line":"    if vdi_uuid:"},{"line_number":142,"context_line":"        LOG.debug(\"vdi_uuid: %s\" % vdi_uuid)"},{"line_number":143,"context_line":"        return session.call_xenapi(\"VDI.get_by_uuid\", vdi_uuid)"},{"line_number":144,"context_line":"    elif target_lun:"},{"line_number":145,"context_line":"        vdi_refs \u003d session.call_xenapi(\"SR.get_VDIs\", sr_ref)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAXH%2F%2FmjI%3D","side":"PARENT","line":142,"updated":"2014-04-18 22:11:26.000000000","message":"Doing the string injection before logging like this allows us to find string formatting errors when debug \u003d False, otherwise the LOG.debug call never does the string format, since the log level is disabled.","commit_id":"d7d68732ae2e1f6f4148149d21d0a92fe60cefa2"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"30c07cf5a7c7ed482a06297373459cfdab09a107","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"def _get_vdi_ref(session, sr_ref, vdi_uuid, target_lun):"},{"line_number":141,"context_line":"    if vdi_uuid:"},{"line_number":142,"context_line":"        LOG.debug(\"vdi_uuid: %s\" % vdi_uuid)"},{"line_number":143,"context_line":"        return session.call_xenapi(\"VDI.get_by_uuid\", vdi_uuid)"},{"line_number":144,"context_line":"    elif target_lun:"},{"line_number":145,"context_line":"        vdi_refs \u003d session.call_xenapi(\"SR.get_VDIs\", sr_ref)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAXH%2F%2FmdI%3D","side":"PARENT","line":142,"in_reply_to":"AAAAXH%2F%2FmjI%3D","updated":"2014-04-18 22:31:45.000000000","message":"This isn\u0027t true anymore.  see ahttps://review.openstack.org/#/c/85867/ and a whole bunch of other patches I wrote","commit_id":"d7d68732ae2e1f6f4148149d21d0a92fe60cefa2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"942b1289aceeb4d4897c06614299bf53c7ec8c0f","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"def _get_vdi_ref(session, sr_ref, vdi_uuid, target_lun):"},{"line_number":141,"context_line":"    if vdi_uuid:"},{"line_number":142,"context_line":"        LOG.debug(\"vdi_uuid: %s\", vdi_uuid)"},{"line_number":143,"context_line":"        return session.call_xenapi(\"VDI.get_by_uuid\", vdi_uuid)"},{"line_number":144,"context_line":"    elif target_lun:"},{"line_number":145,"context_line":"        vdi_refs \u003d session.call_xenapi(\"SR.get_VDIs\", sr_ref)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAXH%2F%2FSH4%3D","line":142,"updated":"2014-04-22 18:59:54.000000000","message":"This isn\u0027t adding translation, this is changing when it\u0027s formatted.","commit_id":"3eb1509f958a01334d923bdd99cebe803d4aa51a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"4f81058593aca9eaad1ab64026985738b7622bc2","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"def _get_vdi_ref(session, sr_ref, vdi_uuid, target_lun):"},{"line_number":141,"context_line":"    if vdi_uuid:"},{"line_number":142,"context_line":"        LOG.debug(\"vdi_uuid: %s\", vdi_uuid)"},{"line_number":143,"context_line":"        return session.call_xenapi(\"VDI.get_by_uuid\", vdi_uuid)"},{"line_number":144,"context_line":"    elif target_lun:"},{"line_number":145,"context_line":"        vdi_refs \u003d session.call_xenapi(\"SR.get_VDIs\", sr_ref)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAXH%2F%2FOxU%3D","line":142,"in_reply_to":"AAAAXH%2F%2FSH4%3D","updated":"2014-04-23 06:55:58.000000000","message":"Done","commit_id":"3eb1509f958a01334d923bdd99cebe803d4aa51a"}]}
