)]}'
{"keystoneclient/common/cms.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"ca6e9c5b63abf46f80c1e5899cb33f319d240043","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def cms_verify(formatted, signing_cert_file_name, ca_file_name,"},{"line_number":43,"context_line":"               **kwargs):"},{"line_number":44,"context_line":"    \"\"\"Verifies the signature of the contents IAW CMS syntax."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    :raises: subprocess.CalledProcessError"},{"line_number":47,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2Fdlo%3D","line":44,"updated":"2013-10-15 21:13:36.000000000","message":"need to document the new subprocess argument and tell how to use it. \n\nI\u0027d rather this change was made like...\n\n def set_subprocess(new_subprocess):\n    global subprocess\n    subprocess \u003d new_subprocess\n\nThen an application that uses python-keystoneclient could optionally call that early on.","commit_id":"43070e34d0e61a139e790c370d4ced04b3465b9a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"ca6e9c5b63abf46f80c1e5899cb33f319d240043","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        if retcode \u003d\u003d 3 or \"Error\" in err:"},{"line_number":67,"context_line":"            LOG.error((\"Signing error: Unable to load certificate - \""},{"line_number":68,"context_line":"                       \"ensure you\u0027ve configured PKI with \""},{"line_number":69,"context_line":"                       \"\u0027keystone-manage pki_setup\u0027\"))"},{"line_number":70,"context_line":"        else:"},{"line_number":71,"context_line":"            LOG.error(\u0027Signing error: %s\u0027 % err)"},{"line_number":72,"context_line":"        e \u003d subprocess.CalledProcessError(retcode, \"openssl\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2Fdlc%3D","line":69,"updated":"2013-10-15 21:13:36.000000000","message":"the client should have to know anything about keystone-manage pki_setup.  Suggest raise a distinct exception that the caller can catch and report the error correctly.","commit_id":"43070e34d0e61a139e790c370d4ced04b3465b9a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"09456f3cf5c05889d5920a6a49eea1b5621c0251","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import logging"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from keystoneclient import exceptions"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"subprocess \u003d None"},{"line_number":22,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2FZ6E%3D","line":19,"updated":"2013-10-16 16:10:59.000000000","message":"suggest add  a docstring for this module:\n\n \"\"\"Signing functions.\n\n Call set_subprocess() with the subprocess module to use\n (either eventlet.green.subprocess if using eventlet or Python\u0027s subprocess).\n\n If set_subprocess is not used then this module will pick \n eventlet.green.subprocess or Python\u0027s subprocess based on if os is patched\n by eventlet.\n\n \"\"\"","commit_id":"83411059e324e2d3011fa1deb32110f9d6f53f47"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"09456f3cf5c05889d5920a6a49eea1b5621c0251","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            import subprocess  # noqa"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def set_subprocess(_subprocess\u003dNone):"},{"line_number":43,"context_line":"    global subprocess"},{"line_number":44,"context_line":"    subprocess \u003d _subprocess"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2FZ54%3D","line":42,"updated":"2013-10-16 16:10:59.000000000","message":"Add a docstring since this is part of the public api of keystoneclient now.\n\n \"\"\"Set subprocess module to use.\n\n The subprocess could be eventlet.green.subprocess if using eventlet,\n or Python\u0027s subprocess otherwise.\n \"\"\"","commit_id":"83411059e324e2d3011fa1deb32110f9d6f53f47"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"09456f3cf5c05889d5920a6a49eea1b5621c0251","unresolved":false,"context_lines":[{"line_number":47,"context_line":"def cms_verify(formatted, signing_cert_file_name, ca_file_name):"},{"line_number":48,"context_line":"    \"\"\"Verifies the signature of the contents IAW CMS syntax."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    :raises: subprocess.CalledProcessError"},{"line_number":51,"context_line":"    \"\"\""},{"line_number":52,"context_line":"    _ensure_subprocess()"},{"line_number":53,"context_line":"    process \u003d subprocess.Popen([\"openssl\", \"cms\", \"-verify\","}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2FZ5w%3D","line":50,"updated":"2013-10-16 16:10:59.000000000","message":"also document the new CertificateConfigError\n\n :raises: CertificateConfigError if the certificate file(s) couldn\u0027t be opened","commit_id":"83411059e324e2d3011fa1deb32110f9d6f53f47"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"09456f3cf5c05889d5920a6a49eea1b5621c0251","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    output, err \u003d process.communicate(formatted)"},{"line_number":63,"context_line":"    retcode \u003d process.poll()"},{"line_number":64,"context_line":"    if retcode:"},{"line_number":65,"context_line":"        # Do not log errors, as some happen in the positive thread"},{"line_number":66,"context_line":"        # instead, catch them in the calling code and log them there."},{"line_number":67,"context_line":"        # NOTE(dmllr): Python 2.6 compatibility:"},{"line_number":68,"context_line":"        # CalledProcessError did not have output keyword argument"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2FZ5Y%3D","line":65,"updated":"2013-10-16 16:10:59.000000000","message":"it\u0027s strange this says to not log errors, but then at line 72 it logs an error. So either remove the LOG.error or change this comment (i\u0027d prefer remove the LOG.error unless there\u0027s a really good reason.)","commit_id":"83411059e324e2d3011fa1deb32110f9d6f53f47"},{"author":{"_account_id":7488,"name":"Jeffrey Zhang","email":"zhang.lei.fly@gmail.com","username":"Jeffrey4l"},"change_message_id":"32f6a81f89087bd4a657d719583a8d74e14c9fed","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    output, err \u003d process.communicate(formatted)"},{"line_number":63,"context_line":"    retcode \u003d process.poll()"},{"line_number":64,"context_line":"    if retcode:"},{"line_number":65,"context_line":"        # Do not log errors, as some happen in the positive thread"},{"line_number":66,"context_line":"        # instead, catch them in the calling code and log them there."},{"line_number":67,"context_line":"        # NOTE(dmllr): Python 2.6 compatibility:"},{"line_number":68,"context_line":"        # CalledProcessError did not have output keyword argument"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2FXzQ%3D","line":65,"in_reply_to":"AAAATH%2F%2FZ5Y%3D","updated":"2013-10-17 04:04:02.000000000","message":"OK, I will remove the LOG.error.\n\nAnother question. What is positive thread? I find nothing for this term.","commit_id":"83411059e324e2d3011fa1deb32110f9d6f53f47"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"09456f3cf5c05889d5920a6a49eea1b5621c0251","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    if retcode:"},{"line_number":65,"context_line":"        # Do not log errors, as some happen in the positive thread"},{"line_number":66,"context_line":"        # instead, catch them in the calling code and log them there."},{"line_number":67,"context_line":"        # NOTE(dmllr): Python 2.6 compatibility:"},{"line_number":68,"context_line":"        # CalledProcessError did not have output keyword argument"},{"line_number":69,"context_line":"        if retcode \u003d\u003d 3 or \"Error\" in err:"},{"line_number":70,"context_line":"            raise exceptions.CertificateConfigError(err)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2FZ4Y%3D","line":67,"updated":"2013-10-16 16:10:59.000000000","message":"I think this note belongs just before 73 (the call to subprocess.CalledProcessError)","commit_id":"83411059e324e2d3011fa1deb32110f9d6f53f47"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"09456f3cf5c05889d5920a6a49eea1b5621c0251","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        # NOTE(dmllr): Python 2.6 compatibility:"},{"line_number":68,"context_line":"        # CalledProcessError did not have output keyword argument"},{"line_number":69,"context_line":"        if retcode \u003d\u003d 3 or \"Error\" in err:"},{"line_number":70,"context_line":"            raise exceptions.CertificateConfigError(err)"},{"line_number":71,"context_line":"        else:"},{"line_number":72,"context_line":"            LOG.error(\u0027Signing error: %s\u0027 % err)"},{"line_number":73,"context_line":"        e \u003d subprocess.CalledProcessError(retcode, \"openssl\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2FZ4Q%3D","line":70,"updated":"2013-10-16 16:10:59.000000000","message":"This needs unit tests... I\u0027m surprised that an existing unit test wasn\u0027t broken by this change.","commit_id":"83411059e324e2d3011fa1deb32110f9d6f53f47"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8dbd4b4751a499eaee77adfb63231f6e203f8056","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"\"\"\"Certificatie Signing functions."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Call set_subprocess() with the subprocess module. Either Python\u0027s"},{"line_number":18,"context_line":"subprocess or eventlet.green.subprocess can bee used."}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATH%2F%2FVcA%3D","line":15,"updated":"2013-10-17 15:51:24.000000000","message":"(typo) change \"Certificatie\" to \"Certificate\"\n\nalso, lowercase \"signing\"","commit_id":"8f15c83fa4a357d7da40703179c9fe937f02d70c"},{"author":{"_account_id":7488,"name":"Jeffrey Zhang","email":"zhang.lei.fly@gmail.com","username":"Jeffrey4l"},"change_message_id":"f717afddbbad741c9886736439ddb4368736e4db","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"\"\"\"Certificatie Signing functions."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Call set_subprocess() with the subprocess module. Either Python\u0027s"},{"line_number":18,"context_line":"subprocess or eventlet.green.subprocess can bee used."}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATH%2F%2FTYA%3D","line":15,"in_reply_to":"AAAATH%2F%2FVcA%3D","updated":"2013-10-18 03:39:17.000000000","message":"Done","commit_id":"8f15c83fa4a357d7da40703179c9fe937f02d70c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8dbd4b4751a499eaee77adfb63231f6e203f8056","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    output, err \u003d process.communicate(formatted)"},{"line_number":77,"context_line":"    retcode \u003d process.poll()"},{"line_number":78,"context_line":"    if retcode:"},{"line_number":79,"context_line":"        # Do not log errors, as some happen in the positive thread"},{"line_number":80,"context_line":"        # instead, catch them in the calling code and log them there."},{"line_number":81,"context_line":"        if retcode \u003d\u003d 3 or \"Error\" in err:"},{"line_number":82,"context_line":"            raise exceptions.CertificateConfigError(err)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATH%2F%2FVWs%3D","line":79,"updated":"2013-10-17 15:51:24.000000000","message":"the \"positive thread\" that we should not log errors for is the case where we\u0027re first starting up the auth_token middleware and it calls this method, which raises an exception (was  CalledProcessError but will now be CertificateConfigError) because it hasn\u0027t fetched the certificates yet. See auth_token.py line 1152. \"Positive thread\" is probably not the best phrase for it.\n\nThis also shows how the behavior of the client and server when calling this function is different -- on the client it\u0027s an error that we recover from but on the server it\u0027s not recoverable.","commit_id":"8f15c83fa4a357d7da40703179c9fe937f02d70c"},{"author":{"_account_id":7488,"name":"Jeffrey Zhang","email":"zhang.lei.fly@gmail.com","username":"Jeffrey4l"},"change_message_id":"f717afddbbad741c9886736439ddb4368736e4db","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    output, err \u003d process.communicate(formatted)"},{"line_number":77,"context_line":"    retcode \u003d process.poll()"},{"line_number":78,"context_line":"    if retcode:"},{"line_number":79,"context_line":"        # Do not log errors, as some happen in the positive thread"},{"line_number":80,"context_line":"        # instead, catch them in the calling code and log them there."},{"line_number":81,"context_line":"        if retcode \u003d\u003d 3 or \"Error\" in err:"},{"line_number":82,"context_line":"            raise exceptions.CertificateConfigError(err)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATH%2F%2FTYI%3D","line":79,"in_reply_to":"AAAATH%2F%2FVWs%3D","updated":"2013-10-18 03:39:17.000000000","message":"Thanks for you explanation. I have a clearly understanding.","commit_id":"8f15c83fa4a357d7da40703179c9fe937f02d70c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8dbd4b4751a499eaee77adfb63231f6e203f8056","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        # instead, catch them in the calling code and log them there."},{"line_number":81,"context_line":"        if retcode \u003d\u003d 3 or \"Error\" in err:"},{"line_number":82,"context_line":"            raise exceptions.CertificateConfigError(err)"},{"line_number":83,"context_line":"        e \u003d subprocess.CalledProcessError(retcode, \"openssl\")"},{"line_number":84,"context_line":"        # NOTE(dmllr): Python 2.6 compatibility:"},{"line_number":85,"context_line":"        # CalledProcessError did not have output keyword argument"},{"line_number":86,"context_line":"        e.output \u003d err"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATH%2F%2FVY0%3D","line":83,"updated":"2013-10-17 15:51:24.000000000","message":"move line 83 after line 85.","commit_id":"8f15c83fa4a357d7da40703179c9fe937f02d70c"},{"author":{"_account_id":7488,"name":"Jeffrey Zhang","email":"zhang.lei.fly@gmail.com","username":"Jeffrey4l"},"change_message_id":"f717afddbbad741c9886736439ddb4368736e4db","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        # instead, catch them in the calling code and log them there."},{"line_number":81,"context_line":"        if retcode \u003d\u003d 3 or \"Error\" in err:"},{"line_number":82,"context_line":"            raise exceptions.CertificateConfigError(err)"},{"line_number":83,"context_line":"        e \u003d subprocess.CalledProcessError(retcode, \"openssl\")"},{"line_number":84,"context_line":"        # NOTE(dmllr): Python 2.6 compatibility:"},{"line_number":85,"context_line":"        # CalledProcessError did not have output keyword argument"},{"line_number":86,"context_line":"        e.output \u003d err"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATH%2F%2FTYE%3D","line":83,"in_reply_to":"AAAATH%2F%2FVY0%3D","updated":"2013-10-18 03:39:17.000000000","message":"Done","commit_id":"8f15c83fa4a357d7da40703179c9fe937f02d70c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2c31e89e816ff3a92dba57138251d60a2d382970","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"\"\"\"Certificatie signing functions."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Call set_subprocess() with the subprocess module. Either Python\u0027s"},{"line_number":18,"context_line":"subprocess or eventlet.green.subprocess can bee used."}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATH%2F%2FK9k%3D","line":15,"updated":"2013-10-22 02:18:10.000000000","message":"(typo) change \"Certificatie\" to \"Certificate\"","commit_id":"53667fa1d0fba23d18ee5513223952067436fcdb"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2c31e89e816ff3a92dba57138251d60a2d382970","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    if retcode:"},{"line_number":79,"context_line":"        # Do not log errors, as some happen in the positive thread"},{"line_number":80,"context_line":"        # instead, catch them in the calling code and log them there."},{"line_number":81,"context_line":"        if retcode \u003d\u003d 3 or \"Error\" in err:"},{"line_number":82,"context_line":"            raise exceptions.CertificateConfigError(err)"},{"line_number":83,"context_line":"        # NOTE(dmllr): Python 2.6 compatibility:"},{"line_number":84,"context_line":"        # CalledProcessError did not have output keyword argument"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATH%2F%2FK9E%3D","line":81,"updated":"2013-10-22 02:18:10.000000000","message":"suggest add a comment here saying why checking for retcode \u003d\u003d 3 and \u0027Error\u0027 in err. Include sample output.","commit_id":"53667fa1d0fba23d18ee5513223952067436fcdb"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c624be7c154cf0fa781b35b0ceb1a8f0a6fa7c3b","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        #       -nocerts -noattr"},{"line_number":90,"context_line":"        # Error opening certificate file not_exist_file"},{"line_number":91,"context_line":"        #"},{"line_number":92,"context_line":"        if retcode \u003d\u003d 2:"},{"line_number":93,"context_line":"            raise exceptions.CertificateConfigError(err)"},{"line_number":94,"context_line":"        # NOTE(dmllr): Python 2.6 compatibility:"},{"line_number":95,"context_line":"        # CalledProcessError did not have output keyword argument"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2F0Tw%3D","line":92,"updated":"2013-10-28 14:53:15.000000000","message":"The code and behavior changed here since the last patch set but there\u0027s no change to the tests. Please add a test to cover this. Would expect it to stub out subprocess.Popen, etc, to have process.poll return 2 and expect CertificateConfigError.","commit_id":"fd70a1432ae194c0582f34990535f25bf6175c13"},{"author":{"_account_id":7488,"name":"Jeffrey Zhang","email":"zhang.lei.fly@gmail.com","username":"Jeffrey4l"},"change_message_id":"dfeafa11ff53f77788f2b4c3e54e87c5c68be7ec","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        #       -nocerts -noattr"},{"line_number":90,"context_line":"        # Error opening certificate file not_exist_file"},{"line_number":91,"context_line":"        #"},{"line_number":92,"context_line":"        if retcode \u003d\u003d 2:"},{"line_number":93,"context_line":"            raise exceptions.CertificateConfigError(err)"},{"line_number":94,"context_line":"        # NOTE(dmllr): Python 2.6 compatibility:"},{"line_number":95,"context_line":"        # CalledProcessError did not have output keyword argument"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2F0Og%3D","line":92,"in_reply_to":"AAAATn%2F%2F0Tw%3D","updated":"2013-10-28 15:14:18.000000000","message":"Just now, the unittest is depend on the real subprocess.Popen. Why to stub it? will it be better to call the real openssl command?","commit_id":"fd70a1432ae194c0582f34990535f25bf6175c13"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"a75c7b105fd5958ba90490bfff28c887b7c372d1","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\"\"\"Certificate signing functions."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Call set_subprocess() with the subprocess module. Either Python\u0027s"},{"line_number":18,"context_line":"subprocess or eventlet.green.subprocess can bee used."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"If set_subprocess() is not called, this module will pick Python\u0027s subprocess"},{"line_number":21,"context_line":"or eventlet.green.subprocess based on if os module is patched by eventlet."}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2F0Mc%3D","line":18,"updated":"2013-10-28 15:26:57.000000000","message":"typo s/bee/be","commit_id":"713d85903c58f1c50e3c30c500c9c1ec7507afc6"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"a75c7b105fd5958ba90490bfff28c887b7c372d1","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    \"\"\"Verifies the signature of the contents IAW CMS syntax."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    :raises: subprocess.CalledProcessError"},{"line_number":64,"context_line":"    :raises: CertificateConfigError if certificate is not configure properly."},{"line_number":65,"context_line":"    \"\"\""},{"line_number":66,"context_line":"    _ensure_subprocess()"},{"line_number":67,"context_line":"    process \u003d subprocess.Popen([\"openssl\", \"cms\", \"-verify\","}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2F0MU%3D","line":64,"updated":"2013-10-28 15:26:57.000000000","message":"s/configure/configured","commit_id":"713d85903c58f1c50e3c30c500c9c1ec7507afc6"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"a75c7b105fd5958ba90490bfff28c887b7c372d1","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                               stderr\u003dsubprocess.PIPE)"},{"line_number":76,"context_line":"    output, err \u003d process.communicate(formatted)"},{"line_number":77,"context_line":"    retcode \u003d process.poll()"},{"line_number":78,"context_line":"    if retcode or \"Error\" in err:"},{"line_number":79,"context_line":"        # Do not log errors, as some happen in the positive thread"},{"line_number":80,"context_line":"        # instead, catch them in the calling code and log them there."},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2F0MM%3D","line":78,"updated":"2013-10-28 15:26:57.000000000","message":"Why do you need the or \"Error\", when the retcode will be nonzero?","commit_id":"713d85903c58f1c50e3c30c500c9c1ec7507afc6"}],"keystoneclient/exceptions.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f4035e5586f19f3a6ed76158f316ad9bd4778bfb","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"#flake8: noqa"},{"line_number":22,"context_line":"from keystoneclient.apiclient.exceptions import *"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class CertificateConfigError(Exception):"},{"line_number":25,"context_line":"    \"\"\"Error when loading the certificate\"\"\""},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2FaCI%3D","line":23,"updated":"2013-10-16 15:45:20.000000000","message":"add an extra blank line here.","commit_id":"5f9a56cb55bcbe9fc53fcd66d8b967ed2ec80415"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f4035e5586f19f3a6ed76158f316ad9bd4778bfb","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        msg \u003d (\"Unable to load certificate - \""},{"line_number":30,"context_line":"               \"ensure you\u0027ve configured properly\")"},{"line_number":31,"context_line":"        super(CertificateConfigError, self).__init__(msg)"},{"line_number":32,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2FaCQ%3D","line":32,"updated":"2013-10-16 15:45:20.000000000","message":"remove extra spaces because it looks bad in gerrit.","commit_id":"5f9a56cb55bcbe9fc53fcd66d8b967ed2ec80415"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2c31e89e816ff3a92dba57138251d60a2d382970","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class CertificateConfigError(Exception):"},{"line_number":26,"context_line":"    \"\"\"Error when loading the certificate\"\"\""},{"line_number":27,"context_line":"    def __init__(self, output):"},{"line_number":28,"context_line":"        self.output \u003d output"},{"line_number":29,"context_line":"        msg \u003d (\"Unable to load certificate. \""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATH%2F%2FK9Q%3D","line":26,"updated":"2013-10-22 02:18:10.000000000","message":"change \"when loading\" to \"reading\"","commit_id":"53667fa1d0fba23d18ee5513223952067436fcdb"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2c31e89e816ff3a92dba57138251d60a2d382970","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    def __init__(self, output):"},{"line_number":28,"context_line":"        self.output \u003d output"},{"line_number":29,"context_line":"        msg \u003d (\"Unable to load certificate. \""},{"line_number":30,"context_line":"               \"ensure you\u0027ve configured properly.\")"},{"line_number":31,"context_line":"        super(CertificateConfigError, self).__init__(msg)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATH%2F%2FK9Y%3D","line":30,"updated":"2013-10-22 02:18:10.000000000","message":"capitalize \"Ensure\"\n\nsuggest \"Ensure your system is configured properly.\"","commit_id":"53667fa1d0fba23d18ee5513223952067436fcdb"}],"keystoneclient/middleware/auth_token.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f4035e5586f19f3a6ed76158f316ad9bd4778bfb","unresolved":false,"context_lines":[{"line_number":157,"context_line":"import six"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"from keystoneclient.common import cms"},{"line_number":160,"context_line":"from keystoneclient.exceptions import CertificateConfigError"},{"line_number":161,"context_line":"from keystoneclient.middleware import memcache_crypt"},{"line_number":162,"context_line":"from keystoneclient.openstack.common import jsonutils"},{"line_number":163,"context_line":"from keystoneclient.openstack.common import memorycache"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2FaA4%3D","line":160,"updated":"2013-10-16 15:45:20.000000000","message":"should be importing modules and not objects, see https://github.com/openstack-dev/hacking/blame/master/doc/source/index.rst#L52\n\nSo should be\n\n from keystoneclient import exceptions\n\nI thought that flake8 checked for this.","commit_id":"5f9a56cb55bcbe9fc53fcd66d8b967ed2ec80415"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8dbd4b4751a499eaee77adfb63231f6e203f8056","unresolved":false,"context_lines":[{"line_number":1259,"context_line":"                certfile.write(data)"},{"line_number":1260,"context_line":""},{"line_number":1261,"context_line":"        if response.status_code !\u003d 200:"},{"line_number":1262,"context_line":"            raise exceptions.CertificateConfigError(response.text)"},{"line_number":1263,"context_line":""},{"line_number":1264,"context_line":"        try:"},{"line_number":1265,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATH%2F%2FVZk%3D","line":1262,"updated":"2013-10-17 15:51:24.000000000","message":"I\u0027d prefer it if the changes to fetch_signing_cert and fetch_ca_cert were made in a separate commit.","commit_id":"8f15c83fa4a357d7da40703179c9fe937f02d70c"},{"author":{"_account_id":7488,"name":"Jeffrey Zhang","email":"zhang.lei.fly@gmail.com","username":"Jeffrey4l"},"change_message_id":"f717afddbbad741c9886736439ddb4368736e4db","unresolved":false,"context_lines":[{"line_number":1259,"context_line":"                certfile.write(data)"},{"line_number":1260,"context_line":""},{"line_number":1261,"context_line":"        if response.status_code !\u003d 200:"},{"line_number":1262,"context_line":"            raise exceptions.CertificateConfigError(response.text)"},{"line_number":1263,"context_line":""},{"line_number":1264,"context_line":"        try:"},{"line_number":1265,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATH%2F%2FTYM%3D","line":1262,"in_reply_to":"AAAATH%2F%2FVZk%3D","updated":"2013-10-18 03:39:17.000000000","message":"I think this is required. \nNow, we separate the certificate config error with others. When the keystone doesn\u0027t return a 200 response, which mean the certificate config error in keystone side, the CertificateConfigError should be raise and tell the caller what happened. \nIf not, the caller just get a subprocess.CalledProcessError which helpless.","commit_id":"8f15c83fa4a357d7da40703179c9fe937f02d70c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8dbd4b4751a499eaee77adfb63231f6e203f8056","unresolved":false,"context_lines":[{"line_number":1269,"context_line":"                write_cert_file(response.text)"},{"line_number":1270,"context_line":"        except (AssertionError, KeyError):"},{"line_number":1271,"context_line":"            self.LOG.warn("},{"line_number":1272,"context_line":"                \"Unexpected response from keystone service: %s\", response.text)"},{"line_number":1273,"context_line":"            raise ServiceError(\u0027invalid json response\u0027)"},{"line_number":1274,"context_line":""},{"line_number":1275,"context_line":"    def fetch_ca_cert(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATH%2F%2FVaE%3D","line":1272,"updated":"2013-10-17 15:51:24.000000000","message":"this doesn\u0027t seem to apply anymore, and maybe never did.","commit_id":"8f15c83fa4a357d7da40703179c9fe937f02d70c"},{"author":{"_account_id":7488,"name":"Jeffrey Zhang","email":"zhang.lei.fly@gmail.com","username":"Jeffrey4l"},"change_message_id":"f717afddbbad741c9886736439ddb4368736e4db","unresolved":false,"context_lines":[{"line_number":1269,"context_line":"                write_cert_file(response.text)"},{"line_number":1270,"context_line":"        except (AssertionError, KeyError):"},{"line_number":1271,"context_line":"            self.LOG.warn("},{"line_number":1272,"context_line":"                \"Unexpected response from keystone service: %s\", response.text)"},{"line_number":1273,"context_line":"            raise ServiceError(\u0027invalid json response\u0027)"},{"line_number":1274,"context_line":""},{"line_number":1275,"context_line":"    def fetch_ca_cert(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATH%2F%2FTa4%3D","line":1272,"in_reply_to":"AAAATH%2F%2FVaE%3D","updated":"2013-10-18 03:39:17.000000000","message":"Yes. \nI found nothing about why invalid json response error msg is raise, and it will be never reached. \nI will make another commit to remove this useless code.","commit_id":"8f15c83fa4a357d7da40703179c9fe937f02d70c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8dbd4b4751a499eaee77adfb63231f6e203f8056","unresolved":false,"context_lines":[{"line_number":1285,"context_line":"        except (AssertionError, KeyError):"},{"line_number":1286,"context_line":"            self.LOG.warn("},{"line_number":1287,"context_line":"                \"Unexpected response from keystone service: %s\", response.text)"},{"line_number":1288,"context_line":"            raise ServiceError(\u0027invalid json response\u0027)"},{"line_number":1289,"context_line":""},{"line_number":1290,"context_line":""},{"line_number":1291,"context_line":"def filter_factory(global_conf, **local_conf):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATH%2F%2FVZw%3D","line":1288,"updated":"2013-10-17 15:51:24.000000000","message":"this doesn\u0027t seem to apply anymore either.","commit_id":"8f15c83fa4a357d7da40703179c9fe937f02d70c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2c31e89e816ff3a92dba57138251d60a2d382970","unresolved":false,"context_lines":[{"line_number":1157,"context_line":"                                          self.signing_ca_file_name):"},{"line_number":1158,"context_line":"                    self.fetch_ca_cert()"},{"line_number":1159,"context_line":"                    continue"},{"line_number":1160,"context_line":"                raise err"},{"line_number":1161,"context_line":"            except cms.subprocess.CalledProcessError as err:"},{"line_number":1162,"context_line":"                self.LOG.warning(\u0027Verify error: %s\u0027 % err)"},{"line_number":1163,"context_line":"                raise err"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATH%2F%2FK9g%3D","line":1160,"updated":"2013-10-22 02:18:10.000000000","message":"change this to just raise","commit_id":"53667fa1d0fba23d18ee5513223952067436fcdb"}]}
