)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"07f01271459fe3cf1705755a31e314a4221e8142","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"normalize_version_number([1]) \u003d\u003e (1, 0) and docs"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Fix an edge case where discover.normalize_version_number could return a"},{"line_number":10,"context_line":"one-member tuple rather than the expected \u003e\u003d2-member tuple."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Be a little more lenient on the discovery document: if it contains an"},{"line_number":13,"context_line":"empty `max_version` but a nonempty version, ignore the former and use"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f1d235d_66a8f0da","line":10,"range":{"start_line":9,"start_character":0,"end_line":10,"end_character":59},"updated":"2017-07-07 20:43:50.000000000","message":"This should have a bug associated with it. This looks like the primary fix. Ideally this should be split into two commits unless the fix is inexorably tied together (you can\u0027t fix the [1] \u003d (1,) vs (1,0) without the more leanient discovery doc handling).","commit_id":"51a1b0b808ef792ea4671b72ed21a18a4de2cb0c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"088b5b6c8ab0cb90014cee5eb2733fe041e19f3e","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"normalize_version_number([1]) \u003d\u003e (1, 0) and docs"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Fix an edge case where discover.normalize_version_number could return a"},{"line_number":10,"context_line":"one-member tuple rather than the expected \u003e\u003d2-member tuple."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Be a little more lenient on the discovery document: if it contains an"},{"line_number":13,"context_line":"empty `max_version` but a nonempty version, ignore the former and use"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f1d235d_c53aefcb","line":10,"range":{"start_line":9,"start_character":0,"end_line":10,"end_character":59},"in_reply_to":"3f1d235d_66a8f0da","updated":"2017-07-10 17:40:32.000000000","message":"Done","commit_id":"51a1b0b808ef792ea4671b72ed21a18a4de2cb0c"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"07f01271459fe3cf1705755a31e314a4221e8142","unresolved":false,"context_lines":[{"line_number":10,"context_line":"one-member tuple rather than the expected \u003e\u003d2-member tuple."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Be a little more lenient on the discovery document: if it contains an"},{"line_number":13,"context_line":"empty `max_version` but a nonempty version, ignore the former and use"},{"line_number":14,"context_line":"the latter."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Add unit test framework \u0026 test cases for version conversion in"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f1d235d_e6452045","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":19},"updated":"2017-07-07 20:43:50.000000000","message":"Is this really a valid case we have to address? Or is it a bugged service? I\u0027d like something a bit more specific here and/or a bug id for tracking this.\n\nRelated, this commit message looks like 2 fixes bundled as one.","commit_id":"51a1b0b808ef792ea4671b72ed21a18a4de2cb0c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"088b5b6c8ab0cb90014cee5eb2733fe041e19f3e","unresolved":false,"context_lines":[{"line_number":10,"context_line":"one-member tuple rather than the expected \u003e\u003d2-member tuple."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Be a little more lenient on the discovery document: if it contains an"},{"line_number":13,"context_line":"empty `max_version` but a nonempty version, ignore the former and use"},{"line_number":14,"context_line":"the latter."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Add unit test framework \u0026 test cases for version conversion in"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f1d235d_c53f8fb3","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":19},"in_reply_to":"3f1d235d_919d5d68","updated":"2017-07-10 17:40:32.000000000","message":"Moving this part to a different patch.","commit_id":"51a1b0b808ef792ea4671b72ed21a18a4de2cb0c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7ed9a07d853e2517cc769d39c919f7f43b36c524","unresolved":false,"context_lines":[{"line_number":10,"context_line":"one-member tuple rather than the expected \u003e\u003d2-member tuple."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Be a little more lenient on the discovery document: if it contains an"},{"line_number":13,"context_line":"empty `max_version` but a nonempty version, ignore the former and use"},{"line_number":14,"context_line":"the latter."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Add unit test framework \u0026 test cases for version conversion in"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f1d235d_bce82916","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":19},"in_reply_to":"3f1d235d_c53f8fb3","updated":"2017-07-10 20:04:42.000000000","message":"This is now in https://review.openstack.org/#/c/482250/","commit_id":"51a1b0b808ef792ea4671b72ed21a18a4de2cb0c"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"c5dbd894e2ca7584436e351ba94bdc86d9517974","unresolved":false,"context_lines":[{"line_number":10,"context_line":"one-member tuple rather than the expected \u003e\u003d2-member tuple."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Be a little more lenient on the discovery document: if it contains an"},{"line_number":13,"context_line":"empty `max_version` but a nonempty version, ignore the former and use"},{"line_number":14,"context_line":"the latter."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Add unit test framework \u0026 test cases for version conversion in"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f1d235d_919d5d68","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":19},"in_reply_to":"3f1d235d_e6452045","updated":"2017-07-10 15:58:29.000000000","message":"It is valid. Discovery documents may or may not have microversion information listed. (so they may not have min_version, version, or max_version) They may also have either version or max_version - and it\u0027s possible that if services providing version decide to start providing max_version in the future to align with API-WG spec, that we could get documents with both verison and max_version.\n\nYay!","commit_id":"51a1b0b808ef792ea4671b72ed21a18a4de2cb0c"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"07f01271459fe3cf1705755a31e314a4221e8142","unresolved":false,"context_lines":[{"line_number":16,"context_line":"Add unit test framework \u0026 test cases for version conversion in"},{"line_number":17,"context_line":"Discover.version_data."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Add some helpful docstrings and comments."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: Ibe54da05705846e47063f8fc639b31df773bed9d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f1d235d_269318a6","line":19,"range":{"start_line":19,"start_character":1,"end_line":19,"end_character":41},"updated":"2017-07-07 20:43:50.000000000","message":"Please do not combine fixes like this. This is now three different items in a single commit.\n\nI know it\u0027s a pain to make 3 reviews, but the docstring changes look relevant even without the other bits here. \n\nPlease in the future split reviews up logically.","commit_id":"51a1b0b808ef792ea4671b72ed21a18a4de2cb0c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"088b5b6c8ab0cb90014cee5eb2733fe041e19f3e","unresolved":false,"context_lines":[{"line_number":16,"context_line":"Add unit test framework \u0026 test cases for version conversion in"},{"line_number":17,"context_line":"Discover.version_data."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Add some helpful docstrings and comments."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: Ibe54da05705846e47063f8fc639b31df773bed9d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f1d235d_2551a30f","line":19,"range":{"start_line":19,"start_character":1,"end_line":19,"end_character":41},"in_reply_to":"3f1d235d_269318a6","updated":"2017-07-10 17:40:32.000000000","message":"I split out the bulk of the docstring fixes into https://review.openstack.org/#/c/482207/\n\nI kept the delta to normalize_version_number\u0027s docstring here, because it specifies the behavior changed by the fix.","commit_id":"51a1b0b808ef792ea4671b72ed21a18a4de2cb0c"}],"keystoneauth1/discover.py":[{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"46dfd68af4d0780d657d58350b2afd0eed20935e","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            },"},{"line_number":56,"context_line":"        ],"},{"line_number":57,"context_line":"        \u0027min_version\u0027: \u00272.0\u0027,"},{"line_number":58,"context_line":"        \u0027max_version\u0027: \u00272.7\u0027,"},{"line_number":59,"context_line":"     },"},{"line_number":60,"context_line":"     ...,"},{"line_number":61,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f1d235d_ada3aeb1","line":58,"updated":"2017-07-06 22:23:41.000000000","message":"It may not be max_version - it may also be version.\n\nIt\u0027s also worth mentioning that there may be OTHER dict keys and other links[] entries - and that min_version, version and max_version may not exist.\n\nOtherwise this is a great improvement.","commit_id":"bec5ba2a5bee305e1dc88788e90273aa16595891"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a163f22fa47a83f78b82db7739e62fca9c727b84","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            },"},{"line_number":56,"context_line":"        ],"},{"line_number":57,"context_line":"        \u0027min_version\u0027: \u00272.0\u0027,"},{"line_number":58,"context_line":"        \u0027max_version\u0027: \u00272.7\u0027,"},{"line_number":59,"context_line":"     },"},{"line_number":60,"context_line":"     ...,"},{"line_number":61,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f1d235d_4d0f7a87","line":58,"in_reply_to":"3f1d235d_ada3aeb1","updated":"2017-07-06 22:32:35.000000000","message":"Yeah, I didn\u0027t know whether it was worth getting that precise in here.  But just to make sure I\u0027m getting it right:\n\n- *version are optional.\n- version xor max_version.\n- Other dict keys and links are ignored.","commit_id":"bec5ba2a5bee305e1dc88788e90273aa16595891"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"46dfd68af4d0780d657d58350b2afd0eed20935e","unresolved":false,"context_lines":[{"line_number":337,"context_line":"          :min_microversion: The minimum microversion supported by the"},{"line_number":338,"context_line":"                             endpoint.  May be None."},{"line_number":339,"context_line":"          :max_microversion: The maximum microversion supported by the"},{"line_number":340,"context_line":"                             endpoint.  May be None."},{"line_number":341,"context_line":"          :raw_status str: The status as provided by the server"},{"line_number":342,"context_line":"        :rtype: list(dict)"},{"line_number":343,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f1d235d_ed752633","line":340,"updated":"2017-07-06 22:23:41.000000000","message":"Yes. Here it\u0027s consistently min and max.","commit_id":"bec5ba2a5bee305e1dc88788e90273aa16595891"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"f48d702c7c97fa39e9caf159ae907167f268289e","unresolved":false,"context_lines":[{"line_number":134,"context_line":"    # at least one decimal point, or something decidedly else."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    # if it\u0027s a string from above break it on ."},{"line_number":137,"context_line":"    if hasattr(ver, \u0027split\u0027):"},{"line_number":138,"context_line":"        ver \u003d ver.split(\u0027.\u0027)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    # It\u0027s either an interable, or something else that makes us sad."}],"source_content_type":"text/x-python","patch_set":4,"id":"3f1d235d_40bb6de4","line":137,"updated":"2017-07-10 18:52:05.000000000","message":"better to just use split and catch AttributeError than to use hasattr","commit_id":"3d2e6a31a5691d9340cedff541ebde43143e9a62"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8d09c544d7ae578825a5efd2bf686ff74165a04d","unresolved":false,"context_lines":[{"line_number":134,"context_line":"    # at least one decimal point, or something decidedly else."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    # if it\u0027s a string from above break it on ."},{"line_number":137,"context_line":"    if hasattr(ver, \u0027split\u0027):"},{"line_number":138,"context_line":"        ver \u003d ver.split(\u0027.\u0027)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    # It\u0027s either an interable, or something else that makes us sad."}],"source_content_type":"text/x-python","patch_set":4,"id":"3f1d235d_7c9e1108","line":137,"in_reply_to":"3f1d235d_40bb6de4","updated":"2017-07-10 20:38:02.000000000","message":"Okay; not really related to this change, but will fix.","commit_id":"3d2e6a31a5691d9340cedff541ebde43143e9a62"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"f48d702c7c97fa39e9caf159ae907167f268289e","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    # It\u0027s either an interable, or something else that makes us sad."},{"line_number":141,"context_line":"    try:"},{"line_number":142,"context_line":"        return tuple(map(int, ver))"},{"line_number":143,"context_line":"    except (TypeError, ValueError):"},{"line_number":144,"context_line":"        pass"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3f1d235d_60d669f4","line":142,"updated":"2017-07-10 18:52:05.000000000","message":"With the addition of the map call above, I don\u0027t think there are any cases where this line would be run that it wouldn\u0027t raise an exception, so I don\u0027t think this is really needed anymore.","commit_id":"3d2e6a31a5691d9340cedff541ebde43143e9a62"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8d09c544d7ae578825a5efd2bf686ff74165a04d","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    # It\u0027s either an interable, or something else that makes us sad."},{"line_number":141,"context_line":"    try:"},{"line_number":142,"context_line":"        return tuple(map(int, ver))"},{"line_number":143,"context_line":"    except (TypeError, ValueError):"},{"line_number":144,"context_line":"        pass"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3f1d235d_9cc0cde2","line":142,"in_reply_to":"3f1d235d_60d669f4","updated":"2017-07-10 20:38:02.000000000","message":"Which map call?  Under normal circumstances, the split on L138 will make `ver` a list of int()able strings, which is exactly what this line is intended to convert.\n\nProof of the pudding: when I comment out this line, 91 unit tests fail :)","commit_id":"3d2e6a31a5691d9340cedff541ebde43143e9a62"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"b2c38904db366e1d84182cd69d2a66bf67912625","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    # It\u0027s either an interable, or something else that makes us sad."},{"line_number":141,"context_line":"    try:"},{"line_number":142,"context_line":"        return tuple(map(int, ver))"},{"line_number":143,"context_line":"    except (TypeError, ValueError):"},{"line_number":144,"context_line":"        pass"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3f1d235d_b0d4c848","line":142,"in_reply_to":"3f1d235d_9cc0cde2","updated":"2017-07-10 23:22:49.000000000","message":"I was referring to the only map you added, the one line 109. But I missed the fact that the split turns it back into an iterable, so you\u0027re absolutely right, this is definitely needed.","commit_id":"3d2e6a31a5691d9340cedff541ebde43143e9a62"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"f48d702c7c97fa39e9caf159ae907167f268289e","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    except (TypeError, ValueError):"},{"line_number":144,"context_line":"        pass"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    raise TypeError(\u0027Invalid version specified: %s\u0027 % version)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"def _normalize_version_args(version, min_version, max_version):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f1d235d_40b7edd9","line":146,"updated":"2017-07-10 18:52:05.000000000","message":"if we do keep L142, move this up in place of the pass on line 144","commit_id":"3d2e6a31a5691d9340cedff541ebde43143e9a62"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8d09c544d7ae578825a5efd2bf686ff74165a04d","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    except (TypeError, ValueError):"},{"line_number":144,"context_line":"        pass"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    raise TypeError(\u0027Invalid version specified: %s\u0027 % version)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"def _normalize_version_args(version, min_version, max_version):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f1d235d_fc2d81a8","line":146,"in_reply_to":"3f1d235d_40b7edd9","updated":"2017-07-10 20:38:02.000000000","message":"Stylistically, I much prefer having the final exit point be at the outermost scope.  Makes it immediately clear to the reader that there\u0027s no way this method silently/implicitly returns None.  Makes hypothetical subsequent deltas that add logic after L144 easier \u0026 fewer LOC.","commit_id":"3d2e6a31a5691d9340cedff541ebde43143e9a62"}],"keystoneauth1/tests/unit/test_discovery.py":[{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"46dfd68af4d0780d657d58350b2afd0eed20935e","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            \"id\": \"v3.0\","},{"line_number":156,"context_line":"            \"version\": \"3.27\","},{"line_number":157,"context_line":"            \"min_version\": \"3.0\","},{"line_number":158,"context_line":"            \"max_version\": \"\","},{"line_number":159,"context_line":"            \"links\": ["},{"line_number":160,"context_line":"                {"},{"line_number":161,"context_line":"                    \"href\": BASE_URL,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f1d235d_6d97d63b","line":158,"updated":"2017-07-06 22:23:41.000000000","message":"In this test, \"version\" is the value for \"max_version\".\n\n(nova and cinder use min_version and version, other projects use min_version and max_version - as does the API-WG spec)","commit_id":"bec5ba2a5bee305e1dc88788e90273aa16595891"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a163f22fa47a83f78b82db7739e62fca9c727b84","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            \"id\": \"v3.0\","},{"line_number":156,"context_line":"            \"version\": \"3.27\","},{"line_number":157,"context_line":"            \"min_version\": \"3.0\","},{"line_number":158,"context_line":"            \"max_version\": \"\","},{"line_number":159,"context_line":"            \"links\": ["},{"line_number":160,"context_line":"                {"},{"line_number":161,"context_line":"                    \"href\": BASE_URL,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f1d235d_cd6f0a26","line":158,"in_reply_to":"3f1d235d_6d97d63b","updated":"2017-07-06 22:32:35.000000000","message":"Right - this was just an easy place for me to validate the change at https://review.openstack.org/#/c/481309/1/keystoneauth1/discover.py@367 -- but what might be more appropriate is a new EDGE_CASE_EXAMPLES.","commit_id":"bec5ba2a5bee305e1dc88788e90273aa16595891"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8d09c544d7ae578825a5efd2bf686ff74165a04d","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        assertVersion(\u00273.20\u0027, (3, 20))"},{"line_number":298,"context_line":"        assertVersion((6, 1), (6, 1))"},{"line_number":299,"context_line":"        assertVersion([1, 40], (1, 40))"},{"line_number":300,"context_line":"        assertVersion((1), (1, 0))"},{"line_number":301,"context_line":"        assertVersion([\u00271\u0027], (1, 0))"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"        versionRaises(\u0027hello\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f1d235d_fc06a120","line":300,"range":{"start_line":300,"start_character":22,"end_line":300,"end_character":25},"updated":"2017-07-10 20:38:02.000000000","message":"Ugh, make this a tuple.\n\nDone.","commit_id":"3d2e6a31a5691d9340cedff541ebde43143e9a62"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"f48d702c7c97fa39e9caf159ae907167f268289e","unresolved":false,"context_lines":[{"line_number":303,"context_line":"        versionRaises(\u0027hello\u0027)"},{"line_number":304,"context_line":"        versionRaises(\u00271.a\u0027)"},{"line_number":305,"context_line":"        versionRaises(\u0027vacuum\u0027)"},{"line_number":306,"context_line":"        versionRaises(\u0027\u0027)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"class VersionDataTests(utils.TestCase):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f1d235d_c0cf7d55","line":306,"updated":"2017-07-10 18:52:05.000000000","message":"I\u0027d also like to see a bad iterable case here","commit_id":"3d2e6a31a5691d9340cedff541ebde43143e9a62"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8d09c544d7ae578825a5efd2bf686ff74165a04d","unresolved":false,"context_lines":[{"line_number":303,"context_line":"        versionRaises(\u0027hello\u0027)"},{"line_number":304,"context_line":"        versionRaises(\u00271.a\u0027)"},{"line_number":305,"context_line":"        versionRaises(\u0027vacuum\u0027)"},{"line_number":306,"context_line":"        versionRaises(\u0027\u0027)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"class VersionDataTests(utils.TestCase):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f1d235d_5c16b557","line":306,"in_reply_to":"3f1d235d_c0cf7d55","updated":"2017-07-10 20:38:02.000000000","message":"Done","commit_id":"3d2e6a31a5691d9340cedff541ebde43143e9a62"}]}
