)]}'
{"nova/api/openstack/compute/legacy_v2/contrib/server_groups.py":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"285d384a522cec843d3b47a2147337683fdcfd92","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                utils.check_string_length(value, field,"},{"line_number":111,"context_line":"                                          min_length\u003d1, max_length\u003d255)"},{"line_number":112,"context_line":"                if not common.VALID_NAME_REGEX.search(value):"},{"line_number":113,"context_line":"                    msg \u003d _(\"Invalid format for name: \u0027%s\u0027\") % value"},{"line_number":114,"context_line":"                    raise nova.exception.InvalidInput(reason\u003dmsg)"},{"line_number":115,"context_line":"            elif field \u003d\u003d \u0027policies\u0027:"},{"line_number":116,"context_line":"                if isinstance(value, list):"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_263a1fcd","side":"PARENT","line":113,"updated":"2015-08-28 21:29:50.000000000","message":"need _() to make translate for the exception","commit_id":"19810750b41a063262bdb6a6f57e759a1bf951df"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"b70e6c397f2571b2d8899b6879c2a948cf0ceabf","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                utils.check_string_length(value, field,"},{"line_number":112,"context_line":"                                          min_length\u003d1, max_length\u003d255)"},{"line_number":113,"context_line":"                if not parameter_types.valid_name_regex_obj.search(value):"},{"line_number":114,"context_line":"                    msg \u003d parameter_types.get_invalid_name_message(value,"},{"line_number":115,"context_line":"                                                          \"server group\")"},{"line_number":116,"context_line":"                    raise nova.exception.InvalidInput(reason\u003dmsg)"},{"line_number":117,"context_line":"            elif field \u003d\u003d \u0027policies\u0027:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_77255ec0","line":114,"updated":"2015-10-03 06:39:23.000000000","message":"this is real nit picking, but please conside having \nvalue, \"server group\")\non a new line as the indentation is dodgy","commit_id":"5a85baffb1597c681eb79aec60305fea1d6a4bdf"},{"author":{"_account_id":17139,"name":"Chuck Carmack","email":"carmack@us.ibm.com","username":"ccarmack"},"change_message_id":"e1ad03247570200d9268beb8bfaf6db851c691cb","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                utils.check_string_length(value, field,"},{"line_number":112,"context_line":"                                          min_length\u003d1, max_length\u003d255)"},{"line_number":113,"context_line":"                if not parameter_types.valid_name_regex_obj.search(value):"},{"line_number":114,"context_line":"                    msg \u003d parameter_types.get_invalid_name_message(value,"},{"line_number":115,"context_line":"                                                          \"server group\")"},{"line_number":116,"context_line":"                    raise nova.exception.InvalidInput(reason\u003dmsg)"},{"line_number":117,"context_line":"            elif field \u003d\u003d \u0027policies\u0027:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_8bc56b3e","line":114,"in_reply_to":"9a1a9d01_77255ec0","updated":"2015-10-03 15:51:59.000000000","message":"Done","commit_id":"5a85baffb1597c681eb79aec60305fea1d6a4bdf"}],"nova/api/validation/parameter_types.py":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"285d384a522cec843d3b47a2147337683fdcfd92","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    if name_type is None:"},{"line_number":60,"context_line":"        msg \u003d \"Invalid format for name: \u0027%s\u0027.\" % name_value"},{"line_number":61,"context_line":"    else:"},{"line_number":62,"context_line":"        msg \u003d \"Invalid format for %s name: \u0027%s\u0027.\" % (name_type, name_value)"},{"line_number":63,"context_line":"    return msg + (\u0027  Names can only contain printable characters \u0027"},{"line_number":64,"context_line":"                 \u0027and horizontal spaces, and cannot begin or end \u0027"},{"line_number":65,"context_line":"                 \u0027with printable whitespace.\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_660c973b","line":62,"updated":"2015-08-28 21:29:50.000000000","message":"these messages should be _ prefix ...","commit_id":"0d3443c3e87b9db79c8bddb3ec95b50ae9042a2c"},{"author":{"_account_id":17139,"name":"Chuck Carmack","email":"carmack@us.ibm.com","username":"ccarmack"},"change_message_id":"8ee5685fd93e76215f601e483404917da85bda73","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    if name_type is None:"},{"line_number":60,"context_line":"        msg \u003d \"Invalid format for name: \u0027%s\u0027.\" % name_value"},{"line_number":61,"context_line":"    else:"},{"line_number":62,"context_line":"        msg \u003d \"Invalid format for %s name: \u0027%s\u0027.\" % (name_type, name_value)"},{"line_number":63,"context_line":"    return msg + (\u0027  Names can only contain printable characters \u0027"},{"line_number":64,"context_line":"                 \u0027and horizontal spaces, and cannot begin or end \u0027"},{"line_number":65,"context_line":"                 \u0027with printable whitespace.\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_c5a762bb","line":62,"in_reply_to":"da20952f_660c973b","updated":"2015-08-31 13:49:32.000000000","message":"Thanks for the comment.  I think there is a rule that you cannot concatenate 2 translated strings, so I will combine the second message substrings.","commit_id":"0d3443c3e87b9db79c8bddb3ec95b50ae9042a2c"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"6ae01391a4b0a13edc2e915381ffca1164540447","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    else:"},{"line_number":62,"context_line":"        msg \u003d \"Invalid format for %s name: \u0027%s\u0027.\" % (name_type, name_value)"},{"line_number":63,"context_line":"    return msg + (\u0027  Names can only contain printable characters \u0027"},{"line_number":64,"context_line":"                 \u0027and horizontal spaces, and cannot begin or end \u0027"},{"line_number":65,"context_line":"                 \u0027with printable whitespace.\u0027)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"boolean \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_513fc686","line":64,"updated":"2015-08-29 06:31:34.000000000","message":"also have to put one more whitespace before \u0027 , and also the next line","commit_id":"0d3443c3e87b9db79c8bddb3ec95b50ae9042a2c"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c80e567ae505a7bb8ca3fe123f465082c3492ed3","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        msg \u003d \"Invalid format for %s name: \u0027%s\u0027.\" % (name_type, name_value)"},{"line_number":63,"context_line":"    return msg + (\u0027  Names can only contain printable characters \u0027"},{"line_number":64,"context_line":"                 \u0027and horizontal spaces, and cannot begin or end \u0027"},{"line_number":65,"context_line":"                 \u0027with printable whitespace.\u0027)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"boolean \u003d {"},{"line_number":68,"context_line":"    \u0027type\u0027: [\u0027boolean\u0027, \u0027string\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_e0040619","line":65,"updated":"2015-08-29 03:13:24.000000000","message":"missing translations","commit_id":"0d3443c3e87b9db79c8bddb3ec95b50ae9042a2c"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ab8551eeb052b58c453c1e134c67449293083835","unresolved":false,"context_lines":[{"line_number":54,"context_line":"                        if unicodedata.category(c) \u003d\u003d \"Zs\")"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"# NOTE: If you change this regex, then change the"},{"line_number":57,"context_line":"# get_invalid_name_message function below."},{"line_number":58,"context_line":"valid_name_regex \u003d \u0027^(?![%s])[%s]*(?\u003c![%s])$\u0027 % ("},{"line_number":59,"context_line":"    re.escape(_printable_ws), re.escape(_printable), re.escape(_printable_ws))"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_08cbc673","line":57,"updated":"2015-09-02 09:46:39.000000000","message":"I think a unittest related to get_invalid_name_message() could cover that without really needing to mention that with an helpful failing assertion message saying that you need to modify the docstring","commit_id":"3020643a1dfe2ede84f759806ef081a185515e72"},{"author":{"_account_id":17139,"name":"Chuck Carmack","email":"carmack@us.ibm.com","username":"ccarmack"},"change_message_id":"5d4990a8f8188237acfc62c526191d54ce56590b","unresolved":false,"context_lines":[{"line_number":54,"context_line":"                        if unicodedata.category(c) \u003d\u003d \"Zs\")"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"# NOTE: If you change this regex, then change the"},{"line_number":57,"context_line":"# get_invalid_name_message function below."},{"line_number":58,"context_line":"valid_name_regex \u003d \u0027^(?![%s])[%s]*(?\u003c![%s])$\u0027 % ("},{"line_number":59,"context_line":"    re.escape(_printable_ws), re.escape(_printable), re.escape(_printable_ws))"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_2ab6abdc","line":57,"in_reply_to":"da20952f_08cbc673","updated":"2015-09-02 16:11:29.000000000","message":"This makes sense, I will do it.","commit_id":"3020643a1dfe2ede84f759806ef081a185515e72"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ab8551eeb052b58c453c1e134c67449293083835","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    re.escape(_printable_ws), re.escape(_printable), re.escape(_printable_ws))"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def get_invalid_name_message(name_value, name_type\u003dNone):"},{"line_number":63,"context_line":"    if name_type is None:"},{"line_number":64,"context_line":"        msg \u003d _(\"Invalid format for name: \u0027%s\u0027.  \""},{"line_number":65,"context_line":"                \"Names can only contain printable characters \""}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_c6037e75","line":62,"updated":"2015-09-02 09:46:39.000000000","message":"Not 100% sure it\u0027s the best place for providing that method, but okay - not -1 for that","commit_id":"3020643a1dfe2ede84f759806ef081a185515e72"},{"author":{"_account_id":17139,"name":"Chuck Carmack","email":"carmack@us.ibm.com","username":"ccarmack"},"change_message_id":"5d4990a8f8188237acfc62c526191d54ce56590b","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    re.escape(_printable_ws), re.escape(_printable), re.escape(_printable_ws))"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def get_invalid_name_message(name_value, name_type\u003dNone):"},{"line_number":63,"context_line":"    if name_type is None:"},{"line_number":64,"context_line":"        msg \u003d _(\"Invalid format for name: \u0027%s\u0027.  \""},{"line_number":65,"context_line":"                \"Names can only contain printable characters \""}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_4a92ff4c","line":62,"in_reply_to":"da20952f_c6037e75","updated":"2015-09-02 16:11:29.000000000","message":"I wanted to put this function next to the regex so that developers would see the two together.  But as you say, I can add a unit test.  If there is a better module to put this function, let me know.","commit_id":"3020643a1dfe2ede84f759806ef081a185515e72"},{"author":{"_account_id":16839,"name":"Cale Rath","email":"ctrath@us.ibm.com","username":"ctrath"},"change_message_id":"22710c1bdc67bd0c5991337a2af25541a7741983","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    if name_type is None:"},{"line_number":64,"context_line":"        msg \u003d _(\"Invalid format for name: \u0027%s\u0027.  \""},{"line_number":65,"context_line":"                \"Names can only contain printable characters \""},{"line_number":66,"context_line":"                \"and horizontal spaces, and cannot begin or end \""},{"line_number":67,"context_line":"                \"with printable whitespace.\") % name_value"},{"line_number":68,"context_line":"    else:"},{"line_number":69,"context_line":"        msg \u003d _(\"Invalid format for %(name_type)s name: \u0027%(name_value)s\u0027.  \""}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_9343ef12","line":66,"updated":"2015-08-31 15:33:09.000000000","message":"Would it be helpful to define what \u0027printable characters\u0027 entail?  Maybe you can use the _is_printable docstring text?  \" that is: letters; combining marks; numbers; punctuation; symbols; (horizontal) space separators.\"","commit_id":"3020643a1dfe2ede84f759806ef081a185515e72"},{"author":{"_account_id":17139,"name":"Chuck Carmack","email":"carmack@us.ibm.com","username":"ccarmack"},"change_message_id":"5d4990a8f8188237acfc62c526191d54ce56590b","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    if name_type is None:"},{"line_number":64,"context_line":"        msg \u003d _(\"Invalid format for name: \u0027%s\u0027.  \""},{"line_number":65,"context_line":"                \"Names can only contain printable characters \""},{"line_number":66,"context_line":"                \"and horizontal spaces, and cannot begin or end \""},{"line_number":67,"context_line":"                \"with printable whitespace.\") % name_value"},{"line_number":68,"context_line":"    else:"},{"line_number":69,"context_line":"        msg \u003d _(\"Invalid format for %(name_type)s name: \u0027%(name_value)s\u0027.  \""}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_0a8647db","line":66,"in_reply_to":"da20952f_9343ef12","updated":"2015-09-02 16:11:29.000000000","message":"It makes for a long message.  Maybe I can say something like \"printable according to the unicode spec\".  If not, then I\u0027ll add that list to the message.","commit_id":"3020643a1dfe2ede84f759806ef081a185515e72"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"b70e6c397f2571b2d8899b6879c2a948cf0ceabf","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    else:"},{"line_number":88,"context_line":"        msg \u003d _(\"Invalid format for %(name_type)s name: \u0027%(name_value)s\u0027.  \""},{"line_number":89,"context_line":"                \"Names can only contain letters, combining marks, numbers, \""},{"line_number":90,"context_line":"                \"punctuation, symbols, and space separators.  \""},{"line_number":91,"context_line":"                \"A name cannot begin or end with a space \""},{"line_number":92,"context_line":"                \"separator.\") % {\u0027name_type\u0027: name_type,"},{"line_number":93,"context_line":"                                 \u0027name_value\u0027: name_value}"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_572a9a91","line":90,"updated":"2015-10-03 06:39:23.000000000","message":"minor nit but you only need one space at the end of the line and not 2","commit_id":"5a85baffb1597c681eb79aec60305fea1d6a4bdf"},{"author":{"_account_id":17139,"name":"Chuck Carmack","email":"carmack@us.ibm.com","username":"ccarmack"},"change_message_id":"e1ad03247570200d9268beb8bfaf6db851c691cb","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    else:"},{"line_number":88,"context_line":"        msg \u003d _(\"Invalid format for %(name_type)s name: \u0027%(name_value)s\u0027.  \""},{"line_number":89,"context_line":"                \"Names can only contain letters, combining marks, numbers, \""},{"line_number":90,"context_line":"                \"punctuation, symbols, and space separators.  \""},{"line_number":91,"context_line":"                \"A name cannot begin or end with a space \""},{"line_number":92,"context_line":"                \"separator.\") % {\u0027name_type\u0027: name_type,"},{"line_number":93,"context_line":"                                 \u0027name_value\u0027: name_value}"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_cbe923b9","line":90,"in_reply_to":"9a1a9d01_572a9a91","updated":"2015-10-03 15:51:59.000000000","message":"Done","commit_id":"5a85baffb1597c681eb79aec60305fea1d6a4bdf"}],"nova/tests/unit/compute/test_flavors.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ab8551eeb052b58c453c1e134c67449293083835","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        except exception.InvalidInput as e:"},{"line_number":62,"context_line":"            self.assertIn(\"ephemeral\", e.message)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def test_create_flavor_name_error(self):"},{"line_number":65,"context_line":"        # name with unprintable character"},{"line_number":66,"context_line":"        test_name \u003d \u0027abc\\x01def\u0027"},{"line_number":67,"context_line":"        expected_err \u003d parameter_types.get_invalid_name_message(test_name,"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_08f50682","line":64,"updated":"2015-09-02 09:46:39.000000000","message":"while the test is good because it covers when the name is invalid (and it was not provided yet), I think you don\u0027t need to verify the syntaxic sugar of the exception message here, but rather just need to assert the InvalidInput exception.","commit_id":"3020643a1dfe2ede84f759806ef081a185515e72"},{"author":{"_account_id":17139,"name":"Chuck Carmack","email":"carmack@us.ibm.com","username":"ccarmack"},"change_message_id":"5d4990a8f8188237acfc62c526191d54ce56590b","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        except exception.InvalidInput as e:"},{"line_number":62,"context_line":"            self.assertIn(\"ephemeral\", e.message)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def test_create_flavor_name_error(self):"},{"line_number":65,"context_line":"        # name with unprintable character"},{"line_number":66,"context_line":"        test_name \u003d \u0027abc\\x01def\u0027"},{"line_number":67,"context_line":"        expected_err \u003d parameter_types.get_invalid_name_message(test_name,"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_aa4b9b2a","line":64,"in_reply_to":"da20952f_08f50682","updated":"2015-09-02 16:11:29.000000000","message":"I\u0027ll make this change.","commit_id":"3020643a1dfe2ede84f759806ef081a185515e72"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ab8551eeb052b58c453c1e134c67449293083835","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            self.fail(\"Be sure this will never be executed.\")"},{"line_number":73,"context_line":"        except exception.InvalidInput as e:"},{"line_number":74,"context_line":"            self.assertIn(test_name, expected_err)"},{"line_number":75,"context_line":"            self.assertIn(expected_err, e.message)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_069f3660","line":75,"updated":"2015-09-02 09:46:39.000000000","message":"Testing the output of the exception message should be done in https://github.com/openstack/nova/blob/master/nova/tests/unit/test_api_validation.py and where you could also add a new test for verifying the regex and fail if different IMHO","commit_id":"3020643a1dfe2ede84f759806ef081a185515e72"},{"author":{"_account_id":17139,"name":"Chuck Carmack","email":"carmack@us.ibm.com","username":"ccarmack"},"change_message_id":"5d4990a8f8188237acfc62c526191d54ce56590b","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            self.fail(\"Be sure this will never be executed.\")"},{"line_number":73,"context_line":"        except exception.InvalidInput as e:"},{"line_number":74,"context_line":"            self.assertIn(test_name, expected_err)"},{"line_number":75,"context_line":"            self.assertIn(expected_err, e.message)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_aa72bb7a","line":75,"in_reply_to":"da20952f_069f3660","updated":"2015-09-02 16:11:29.000000000","message":"Thanks for the comment.  I\u0027ll add tests to test_api_validation.py, but the 2nd assert here verifies that flavors.create( ) is calling get_invalid_name_message( ).  I\u0027d like to keep the 2nd assert and remove the 1st assert.","commit_id":"3020643a1dfe2ede84f759806ef081a185515e72"}]}
