)]}'
{"keystoneclient/client.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"cec03dbe443fdc7f5ddc8a3fe9544a0d2a49a224","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    }"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def __init__(self, username\u003dNone, tenant_id\u003dNone, tenant_name\u003dNone,"},{"line_number":58,"context_line":"                 password\u003dNone, auth_url\u003dNone, region_name\u003dNone, timeout\u003dNone,"},{"line_number":59,"context_line":"                 endpoint\u003dNone, token\u003dNone, cacert\u003dNone, key\u003dNone,"},{"line_number":60,"context_line":"                 cert\u003dNone, insecure\u003dFalse, original_ip\u003dNone, debug\u003dFalse,"},{"line_number":61,"context_line":"                 auth_ref\u003dNone, use_keyring\u003dFalse, force_new_token\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FmO4%3D","line":58,"updated":"2013-01-14 17:27:08.000000000","message":"i assume requests doesn\u0027t timeout at all if timeout\u003dNone?","commit_id":"31bb32b262e19ffa926bacee95515d50e1795461"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"f50c55392f07fe8ff000df72b92c1187cb314091","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    }"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def __init__(self, username\u003dNone, tenant_id\u003dNone, tenant_name\u003dNone,"},{"line_number":58,"context_line":"                 password\u003dNone, auth_url\u003dNone, region_name\u003dNone, timeout\u003dNone,"},{"line_number":59,"context_line":"                 endpoint\u003dNone, token\u003dNone, cacert\u003dNone, key\u003dNone,"},{"line_number":60,"context_line":"                 cert\u003dNone, insecure\u003dFalse, original_ip\u003dNone, debug\u003dFalse,"},{"line_number":61,"context_line":"                 auth_ref\u003dNone, use_keyring\u003dFalse, force_new_token\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FlWY%3D","line":58,"in_reply_to":"AAAAM3%2F%2FmO4%3D","updated":"2013-01-15 01:04:00.000000000","message":"sure seems like it, makes the cli hang up, not so good","commit_id":"31bb32b262e19ffa926bacee95515d50e1795461"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"cec03dbe443fdc7f5ddc8a3fe9544a0d2a49a224","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        self.token \u003d None"},{"line_number":70,"context_line":"        self.auth_token \u003d None"},{"line_number":71,"context_line":"        self.management_url \u003d None"},{"line_number":72,"context_line":"        self.timeout \u003d timeout"},{"line_number":73,"context_line":"        # if loading from a dictionary passed in via auth_ref,"},{"line_number":74,"context_line":"        # load values from AccessInfo parsing that dictionary"},{"line_number":75,"context_line":"        self.auth_ref \u003d access.AccessInfo(**auth_ref) if auth_ref else None"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FmPQ%3D","line":72,"updated":"2013-01-14 17:27:08.000000000","message":"\u003d int(timeout) ?","commit_id":"31bb32b262e19ffa926bacee95515d50e1795461"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"f50c55392f07fe8ff000df72b92c1187cb314091","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        self.token \u003d None"},{"line_number":70,"context_line":"        self.auth_token \u003d None"},{"line_number":71,"context_line":"        self.management_url \u003d None"},{"line_number":72,"context_line":"        self.timeout \u003d timeout"},{"line_number":73,"context_line":"        # if loading from a dictionary passed in via auth_ref,"},{"line_number":74,"context_line":"        # load values from AccessInfo parsing that dictionary"},{"line_number":75,"context_line":"        self.auth_ref \u003d access.AccessInfo(**auth_ref) if auth_ref else None"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FlWU%3D","line":72,"in_reply_to":"AAAAM3%2F%2FmPQ%3D","updated":"2013-01-15 01:04:00.000000000","message":"can add.","commit_id":"31bb32b262e19ffa926bacee95515d50e1795461"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"47def1a35eafb86c9559f98bf49af26ba944f4be","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        if timeout is not None:"},{"line_number":73,"context_line":"            self.timeout \u003d float(timeout)"},{"line_number":74,"context_line":"        else:"},{"line_number":75,"context_line":"            self.timeout \u003d None"},{"line_number":76,"context_line":"        # if loading from a dictionary passed in via auth_ref,"},{"line_number":77,"context_line":"        # load values from AccessInfo parsing that dictionary"},{"line_number":78,"context_line":"        self.auth_ref \u003d access.AccessInfo(**auth_ref) if auth_ref else None"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2FfJA%3D","line":75,"updated":"2013-01-18 22:34:48.000000000","message":"Could this set of changes be just self.timeout \u003d timeout ? Document that the argument must be a float (or whatever else the requests lib accepts).","commit_id":"2795e983cfc6e9b6812f5f23d052116603691caa"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0754fa114389218fcd8566d9ce3080ec3dff6550","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        if timeout is not None:"},{"line_number":73,"context_line":"            self.timeout \u003d float(timeout)"},{"line_number":74,"context_line":"        else:"},{"line_number":75,"context_line":"            self.timeout \u003d None"},{"line_number":76,"context_line":"        # if loading from a dictionary passed in via auth_ref,"},{"line_number":77,"context_line":"        # load values from AccessInfo parsing that dictionary"},{"line_number":78,"context_line":"        self.auth_ref \u003d access.AccessInfo(**auth_ref) if auth_ref else None"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2FfFs%3D","line":75,"in_reply_to":"AAAAM3%2F%2FfHI%3D","updated":"2013-01-18 22:55:10.000000000","message":"My mistake, I should have said \"Document that the argument must be a float or None\". (and you can replace float or None with whatever type of argument the requests lib accepts)","commit_id":"2795e983cfc6e9b6812f5f23d052116603691caa"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"47b790464e829073162e51f8cddd7d9d248c2105","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        if timeout is not None:"},{"line_number":73,"context_line":"            self.timeout \u003d float(timeout)"},{"line_number":74,"context_line":"        else:"},{"line_number":75,"context_line":"            self.timeout \u003d None"},{"line_number":76,"context_line":"        # if loading from a dictionary passed in via auth_ref,"},{"line_number":77,"context_line":"        # load values from AccessInfo parsing that dictionary"},{"line_number":78,"context_line":"        self.auth_ref \u003d access.AccessInfo(**auth_ref) if auth_ref else None"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2FfHI%3D","line":75,"in_reply_to":"AAAAM3%2F%2FfJA%3D","updated":"2013-01-18 22:40:05.000000000","message":"None is valid, so why not accept it?","commit_id":"2795e983cfc6e9b6812f5f23d052116603691caa"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"47def1a35eafb86c9559f98bf49af26ba944f4be","unresolved":false,"context_lines":[{"line_number":324,"context_line":"            del request_kwargs[\u0027body\u0027]"},{"line_number":325,"context_line":"        if self.cert:"},{"line_number":326,"context_line":"            request_kwargs[\u0027cert\u0027] \u003d self.cert"},{"line_number":327,"context_line":"        if self.timeout is not None:"},{"line_number":328,"context_line":"            request_kwargs.setdefault(\u0027timeout\u0027, self.timeout)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"        self.http_log_req((url, method,), request_kwargs)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2FfI0%3D","line":327,"updated":"2013-01-18 22:34:48.000000000","message":"Can this be \"if self.timeout:\" (removing \"is not None\")? Also, is this necessary, would request_kwards.setdefault( ... ) work with None self.timeout?","commit_id":"2795e983cfc6e9b6812f5f23d052116603691caa"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"4c24fa3cb5604c385e37f6459a7ec9ae185c210b","unresolved":false,"context_lines":[{"line_number":324,"context_line":"            del request_kwargs[\u0027body\u0027]"},{"line_number":325,"context_line":"        if self.cert:"},{"line_number":326,"context_line":"            request_kwargs[\u0027cert\u0027] \u003d self.cert"},{"line_number":327,"context_line":"        if self.timeout is not None:"},{"line_number":328,"context_line":"            request_kwargs.setdefault(\u0027timeout\u0027, self.timeout)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"        self.http_log_req((url, method,), request_kwargs)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2Fe6o%3D","line":327,"in_reply_to":"AAAAM3%2F%2FfFY%3D","updated":"2013-01-19 03:05:43.000000000","message":"shell.py is just one user of this class, and is orthogonal to its usage here, not all users go through shell.py.","commit_id":"2795e983cfc6e9b6812f5f23d052116603691caa"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0754fa114389218fcd8566d9ce3080ec3dff6550","unresolved":false,"context_lines":[{"line_number":324,"context_line":"            del request_kwargs[\u0027body\u0027]"},{"line_number":325,"context_line":"        if self.cert:"},{"line_number":326,"context_line":"            request_kwargs[\u0027cert\u0027] \u003d self.cert"},{"line_number":327,"context_line":"        if self.timeout is not None:"},{"line_number":328,"context_line":"            request_kwargs.setdefault(\u0027timeout\u0027, self.timeout)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"        self.http_log_req((url, method,), request_kwargs)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2FfFY%3D","line":327,"in_reply_to":"AAAAM3%2F%2FfG8%3D","updated":"2013-01-18 22:55:10.000000000","message":"I thought 0 was not valid because the change to shell.py rejects 0 as an argument. The other part of my comment was that the if check be removed.","commit_id":"2795e983cfc6e9b6812f5f23d052116603691caa"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"47b790464e829073162e51f8cddd7d9d248c2105","unresolved":false,"context_lines":[{"line_number":324,"context_line":"            del request_kwargs[\u0027body\u0027]"},{"line_number":325,"context_line":"        if self.cert:"},{"line_number":326,"context_line":"            request_kwargs[\u0027cert\u0027] \u003d self.cert"},{"line_number":327,"context_line":"        if self.timeout is not None:"},{"line_number":328,"context_line":"            request_kwargs.setdefault(\u0027timeout\u0027, self.timeout)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"        self.http_log_req((url, method,), request_kwargs)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2FfG8%3D","line":327,"in_reply_to":"AAAAM3%2F%2FfI0%3D","updated":"2013-01-18 22:40:05.000000000","message":"0 is valid, so if self.timeout would remove it from being valid.","commit_id":"2795e983cfc6e9b6812f5f23d052116603691caa"}],"keystoneclient/shell.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"cec03dbe443fdc7f5ddc8a3fe9544a0d2a49a224","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"def positive_non_zero_int(text):"},{"line_number":37,"context_line":"    value \u003d int(text)"},{"line_number":38,"context_line":"    if value \u003c\u003d 0:"},{"line_number":39,"context_line":"        msg \u003d \"%s must be greater than 0\" % text"},{"line_number":40,"context_line":"        raise argparse.ArgumentTypeError(msg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FmPI%3D","line":37,"updated":"2013-01-14 17:27:08.000000000","message":"try / except ValueError to handle --timeout\u003dfoobar","commit_id":"31bb32b262e19ffa926bacee95515d50e1795461"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"cec03dbe443fdc7f5ddc8a3fe9544a0d2a49a224","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        parser.add_argument(\u0027--timeout\u0027,"},{"line_number":86,"context_line":"                            default\u003d600,"},{"line_number":87,"context_line":"                            type\u003dpositive_non_zero_int,"},{"line_number":88,"context_line":"                            help\u003d\"Set http call timeout (in seconds)\")"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        parser.add_argument(\u0027--os-username\u0027,"},{"line_number":91,"context_line":"                            metavar\u003d\u0027\u003cauth-user-name\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FmPE%3D","line":88,"updated":"2013-01-14 17:27:08.000000000","message":"http -\u003e HTTP","commit_id":"31bb32b262e19ffa926bacee95515d50e1795461"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9a2c586b4ad4c26ab8ab9da674d1668987ab8f11","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    try:"},{"line_number":40,"context_line":"        value \u003d int(text)"},{"line_number":41,"context_line":"    except ValueError:"},{"line_number":42,"context_line":"        msg \u003d \"%s must be a integer\" % text"},{"line_number":43,"context_line":"        raise argparse.ArgumentTypeError(msg)"},{"line_number":44,"context_line":"    if value \u003c\u003d 0:"},{"line_number":45,"context_line":"        msg \u003d \"%s must be greater than 0\" % text"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FlQg%3D","line":42,"updated":"2013-01-15 02:19:54.000000000","message":"an* integer","commit_id":"fa4131985a652e773d6e704794ad1372c104884f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"47def1a35eafb86c9559f98bf49af26ba944f4be","unresolved":false,"context_lines":[{"line_number":33,"context_line":"from keystoneclient.contrib.bootstrap import shell as shell_bootstrap"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"def positive_non_zero_float(text):"},{"line_number":37,"context_line":"    if text is None:"},{"line_number":38,"context_line":"        return None"},{"line_number":39,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2FfIk%3D","line":36,"updated":"2013-01-18 22:34:48.000000000","message":"suggest rename \u0027text\u0027 to \u0027argument_name\u0027 if that\u0027s what it is.","commit_id":"2795e983cfc6e9b6812f5f23d052116603691caa"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"47b790464e829073162e51f8cddd7d9d248c2105","unresolved":false,"context_lines":[{"line_number":33,"context_line":"from keystoneclient.contrib.bootstrap import shell as shell_bootstrap"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"def positive_non_zero_float(text):"},{"line_number":37,"context_line":"    if text is None:"},{"line_number":38,"context_line":"        return None"},{"line_number":39,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2FfG4%3D","line":36,"in_reply_to":"AAAAM3%2F%2FfIk%3D","updated":"2013-01-18 22:40:05.000000000","message":"Its argument value, but sure, can rename.","commit_id":"2795e983cfc6e9b6812f5f23d052116603691caa"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"47def1a35eafb86c9559f98bf49af26ba944f4be","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                            default\u003d600,"},{"line_number":96,"context_line":"                            type\u003dpositive_non_zero_float,"},{"line_number":97,"context_line":"                            metavar\u003d\u0027\u003cseconds\u003e\u0027,"},{"line_number":98,"context_line":"                            help\u003d\"Set HTTP call timeout (in seconds)\")"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        parser.add_argument(\u0027--os-username\u0027,"},{"line_number":101,"context_line":"                            metavar\u003d\u0027\u003cauth-user-name\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2FfHk%3D","line":98,"updated":"2013-01-18 22:34:48.000000000","message":"Regarding the help text\n1) that the API uses HTTP is an implementation detail we don\u0027t need to expose. \n2) the help output already indicates seconds because of the metavar\nI suggest just \"Request timeout\" ... I expect anyone who\u0027s used a computer before will find it self-explanatory what a --timeout argument does.\n\nAnother question, should there be an environment variable like with the other arguments?","commit_id":"2795e983cfc6e9b6812f5f23d052116603691caa"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"47b790464e829073162e51f8cddd7d9d248c2105","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                            default\u003d600,"},{"line_number":96,"context_line":"                            type\u003dpositive_non_zero_float,"},{"line_number":97,"context_line":"                            metavar\u003d\u0027\u003cseconds\u003e\u0027,"},{"line_number":98,"context_line":"                            help\u003d\"Set HTTP call timeout (in seconds)\")"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        parser.add_argument(\u0027--os-username\u0027,"},{"line_number":101,"context_line":"                            metavar\u003d\u0027\u003cauth-user-name\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2FfGs%3D","line":98,"in_reply_to":"AAAAM3%2F%2FfHk%3D","updated":"2013-01-18 22:40:05.000000000","message":"Sure, no need to mention http.\n\nI\u0027m a big fan of getting rid of env variables, so i\u0027ll leave that for someone else to decide (more ways of getting data in, the more confusion it causes).","commit_id":"2795e983cfc6e9b6812f5f23d052116603691caa"}],"tests/test_shell.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9a2c586b4ad4c26ab8ab9da674d1668987ab8f11","unresolved":false,"context_lines":[{"line_number":313,"context_line":"            assert do_shell_mock.called"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"    def test_timeout_parse(self):"},{"line_number":316,"context_line":"        for f in [\u0027-1\u0027, \u0027foobar\u0027, \u00270\u0027]:"},{"line_number":317,"context_line":"            stdout, stderr \u003d (StringIO(), StringIO())"},{"line_number":318,"context_line":"            errored \u003d False"},{"line_number":319,"context_line":"            with capture_out_err(stdout, stderr):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FlQY%3D","line":316,"updated":"2013-01-15 02:19:54.000000000","message":"these should really be 3 separate tests","commit_id":"fa4131985a652e773d6e704794ad1372c104884f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9a2c586b4ad4c26ab8ab9da674d1668987ab8f11","unresolved":false,"context_lines":[{"line_number":314,"context_line":""},{"line_number":315,"context_line":"    def test_timeout_parse(self):"},{"line_number":316,"context_line":"        for f in [\u0027-1\u0027, \u0027foobar\u0027, \u00270\u0027]:"},{"line_number":317,"context_line":"            stdout, stderr \u003d (StringIO(), StringIO())"},{"line_number":318,"context_line":"            errored \u003d False"},{"line_number":319,"context_line":"            with capture_out_err(stdout, stderr):"},{"line_number":320,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FlQM%3D","line":317,"updated":"2013-01-15 02:19:54.000000000","message":"this should be in a setUp","commit_id":"fa4131985a652e773d6e704794ad1372c104884f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9a2c586b4ad4c26ab8ab9da674d1668987ab8f11","unresolved":false,"context_lines":[{"line_number":320,"context_line":"                try:"},{"line_number":321,"context_line":"                    shell(\u0027--timeout %s endpoint-create\u0027 % (f))"},{"line_number":322,"context_line":"                except SystemExit:"},{"line_number":323,"context_line":"                    errored \u003d True"},{"line_number":324,"context_line":"            stderr \u003d stderr.getvalue()"},{"line_number":325,"context_line":"            self.assertTrue(len(stderr) \u003e 0)"},{"line_number":326,"context_line":"            self.assertTrue(errored)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FlPw%3D","line":323,"updated":"2013-01-15 02:19:54.000000000","message":"abstract into assertStdErr(cmd) or something, which either raises an assertion error or returns stderr output?","commit_id":"fa4131985a652e773d6e704794ad1372c104884f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9a2c586b4ad4c26ab8ab9da674d1668987ab8f11","unresolved":false,"context_lines":[{"line_number":326,"context_line":"            self.assertTrue(errored)"},{"line_number":327,"context_line":"            if f !\u003d \u0027foobar\u0027:"},{"line_number":328,"context_line":"                self.assertIn(\u0027--timeout: %s must be greater than 0\u0027 % f,"},{"line_number":329,"context_line":"                              stderr)"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def test_do_timeout(self):"},{"line_number":332,"context_line":"        response_mock \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FlQE%3D","line":329,"updated":"2013-01-15 02:19:54.000000000","message":"this should be in 2/3 tests, obviously","commit_id":"fa4131985a652e773d6e704794ad1372c104884f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"47def1a35eafb86c9559f98bf49af26ba944f4be","unresolved":false,"context_lines":[{"line_number":303,"context_line":"            assert do_shell_mock.called"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    def test_timeout_parse_invalid_type(self):"},{"line_number":306,"context_line":"        for f in [\u0027foobar\u0027, \u0027xyz\u0027]:"},{"line_number":307,"context_line":"            cmd \u003d \u0027--timeout %s endpoint-create\u0027 % (f)"},{"line_number":308,"context_line":"            self.assertRaises(exceptions.CommandError,"},{"line_number":309,"context_line":"                              self._tolerant_shell, cmd)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2FfJU%3D","line":306,"updated":"2013-01-18 22:34:48.000000000","message":"Dolph\u0027s comments from patch set 2 have not been addressed... https://review.openstack.org/#/c/19535/2/tests/test_shell.py","commit_id":"2795e983cfc6e9b6812f5f23d052116603691caa"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"47b790464e829073162e51f8cddd7d9d248c2105","unresolved":false,"context_lines":[{"line_number":303,"context_line":"            assert do_shell_mock.called"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    def test_timeout_parse_invalid_type(self):"},{"line_number":306,"context_line":"        for f in [\u0027foobar\u0027, \u0027xyz\u0027]:"},{"line_number":307,"context_line":"            cmd \u003d \u0027--timeout %s endpoint-create\u0027 % (f)"},{"line_number":308,"context_line":"            self.assertRaises(exceptions.CommandError,"},{"line_number":309,"context_line":"                              self._tolerant_shell, cmd)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2FfGo%3D","line":306,"in_reply_to":"AAAAM3%2F%2FfJU%3D","updated":"2013-01-18 22:40:05.000000000","message":"What hasn\u0027t been addressed, these both test invalid types of the same \u0027kind\u0027","commit_id":"2795e983cfc6e9b6812f5f23d052116603691caa"}]}
