)]}'
{"oslo_utils/strutils.py":[{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"a697c19ca294653bf283133f079ae4858365ebc1","unresolved":false,"context_lines":[{"line_number":506,"context_line":""},{"line_number":507,"context_line":"    :param value: value to be splitted"},{"line_number":508,"context_line":"    \"\"\""},{"line_number":509,"context_line":"    validate_quotes(value)"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":"    inner \u003d pp.ZeroOrMore(pp.Word(pp.printables, excludeChars\u003d\u0027\"\\\\\u0027))"},{"line_number":512,"context_line":"    escaped_character \u003d \"\\\\\" + pp.Word(pp.printables, exact\u003d1)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_78f63bfa","line":509,"updated":"2016-08-04 11:13:12.000000000","message":"I don\u0027t think you need this function at all now? PP will tell you if the string doesn\u0027t match the grammar","commit_id":"410ed814683a5948c98cd092b91fd1be8b9f480c"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"533707309d15cbc0dc59a7f42f388d14847efbba","unresolved":false,"context_lines":[{"line_number":474,"context_line":"def split_by_commas(value):"},{"line_number":475,"context_line":"    \"\"\"Split values by commas and quotes according to api-wg"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"    :param value: value to be split"},{"line_number":478,"context_line":"    \"\"\""},{"line_number":479,"context_line":"    word \u003d (pp.QuotedString(quoteChar\u003d\u0027\"\u0027, escChar\u003d\u0027\\\\\u0027)"},{"line_number":480,"context_line":"            | pp.Word(pp.printables, excludeChars\u003d\u0027\",\u0027))"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_d26adf19","line":477,"range":{"start_line":477,"start_character":30,"end_line":477,"end_character":35},"updated":"2016-08-09 08:25:25.000000000","message":"In docstring we need metion something like \u0027 .. versionadded:: X.X\"","commit_id":"ea2bfdd24c960d6d6e80cf36fbf8c7f037b3f435"},{"author":{"_account_id":20563,"name":"Omar Shykhkerimov","email":"omar.shikhkerimov@gmail.com","username":"oshykhkerimov"},"change_message_id":"191f1d61516bef25479575efd287ce368b4f3692","unresolved":false,"context_lines":[{"line_number":474,"context_line":"def split_by_commas(value):"},{"line_number":475,"context_line":"    \"\"\"Split values by commas and quotes according to api-wg"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"    :param value: value to be split"},{"line_number":478,"context_line":"    \"\"\""},{"line_number":479,"context_line":"    word \u003d (pp.QuotedString(quoteChar\u003d\u0027\"\u0027, escChar\u003d\u0027\\\\\u0027)"},{"line_number":480,"context_line":"            | pp.Word(pp.printables, excludeChars\u003d\u0027\",\u0027))"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_1958fc31","line":477,"range":{"start_line":477,"start_character":30,"end_line":477,"end_character":35},"in_reply_to":"9ad45d7e_d26adf19","updated":"2016-08-09 17:30:16.000000000","message":"Done","commit_id":"ea2bfdd24c960d6d6e80cf36fbf8c7f037b3f435"}],"oslo_utils/tests/test_strutils.py":[{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"a697c19ca294653bf283133f079ae4858365ebc1","unresolved":false,"context_lines":[{"line_number":783,"context_line":"    def test_split_for_quotes_with_backslash(self):"},{"line_number":784,"context_line":"        self.assertEqual([\u0027a\"bc\u0027, \u0027de\u0027, \u0027fg,h\u0027, r\u0027klm\\\\\u0027, \u0027\"nop\u0027],"},{"line_number":785,"context_line":"                         strutils.split_for_quotes(r\u0027\"a\\\"bc\",\"de\",\u0027"},{"line_number":786,"context_line":"                                                   r\u0027\"fg,h\",\"klm\\\\\",\"\\\"nop\"\u0027))"},{"line_number":787,"context_line":""},{"line_number":788,"context_line":"    def test_split_for_quotes_with_escaped_quotes_in_row(self):"},{"line_number":789,"context_line":"        self.assertEqual([\u0027a\"b\"\"c\u0027, \u0027d\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_1863bfdd","line":786,"updated":"2016-08-04 11:13:12.000000000","message":"nit this looks nicer to me as:\n\n  expect \u003d [\u0027a\"bc\u0027, \u0027de\u0027, \u0027fg,h\u0027, r\u0027klm\\\\\u0027, \u0027\"nop\u0027]\n  input \u003d r\u0027\"a\\\"bc\",\"de\",\"fg,h\",\"klm\\\\\",\"\\\"nop\"\u0027\n  self.assertEqual(expect, strutils.split_for_quotes(input))","commit_id":"410ed814683a5948c98cd092b91fd1be8b9f480c"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"d971b787e269ec334ca0f1a614b87f007b205601","unresolved":false,"context_lines":[{"line_number":778,"context_line":"        self.check([\"a,b\", \"ac\"], \u0027\"a,b\",ac\u0027)"},{"line_number":779,"context_line":""},{"line_number":780,"context_line":"    def test_with_backslash(self):"},{"line_number":781,"context_line":"        self.check([\u0027abc\"\u0027, \u0027de\u0027, \u0027fg,h\u0027, \u0027klm\\\\\u0027, \u0027\"nop\u0027],"},{"line_number":782,"context_line":"                   r\u0027\"abc\\\"\",\"de\",\"fg,h\",\"klm\\\\\",\"\\\"nop\"\u0027)"},{"line_number":783,"context_line":""},{"line_number":784,"context_line":"    def test_with_escaped_quotes_in_row(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bacf61ea_d98be666","line":781,"range":{"start_line":781,"start_character":42,"end_line":781,"end_character":49},"updated":"2016-08-04 11:27:56.000000000","message":"note \"\\\\\" now becomes \"\\\", which is a change from your code. The api-wg guidance doesn\u0027t state the correct behaviour.","commit_id":"ea2bfdd24c960d6d6e80cf36fbf8c7f037b3f435"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"cf86f15709a39980ed9e9fc3afcf8bb5810b293c","unresolved":false,"context_lines":[{"line_number":778,"context_line":"        self.check([\"a,b\", \"ac\"], \u0027\"a,b\",ac\u0027)"},{"line_number":779,"context_line":""},{"line_number":780,"context_line":"    def test_with_backslash(self):"},{"line_number":781,"context_line":"        self.check([\u0027abc\"\u0027, \u0027de\u0027, \u0027fg,h\u0027, \u0027klm\\\\\u0027, \u0027\"nop\u0027],"},{"line_number":782,"context_line":"                   r\u0027\"abc\\\"\",\"de\",\"fg,h\",\"klm\\\\\",\"\\\"nop\"\u0027)"},{"line_number":783,"context_line":""},{"line_number":784,"context_line":"    def test_with_escaped_quotes_in_row(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bacf61ea_6f414c0b","line":781,"range":{"start_line":781,"start_character":42,"end_line":781,"end_character":49},"in_reply_to":"bacf61ea_790c7a94","updated":"2016-08-04 12:18:31.000000000","message":"Yes that\u0027d be good","commit_id":"ea2bfdd24c960d6d6e80cf36fbf8c7f037b3f435"},{"author":{"_account_id":20563,"name":"Omar Shykhkerimov","email":"omar.shikhkerimov@gmail.com","username":"oshykhkerimov"},"change_message_id":"40b0296003087bdf6f87480cccca3c366507b7af","unresolved":false,"context_lines":[{"line_number":778,"context_line":"        self.check([\"a,b\", \"ac\"], \u0027\"a,b\",ac\u0027)"},{"line_number":779,"context_line":""},{"line_number":780,"context_line":"    def test_with_backslash(self):"},{"line_number":781,"context_line":"        self.check([\u0027abc\"\u0027, \u0027de\u0027, \u0027fg,h\u0027, \u0027klm\\\\\u0027, \u0027\"nop\u0027],"},{"line_number":782,"context_line":"                   r\u0027\"abc\\\"\",\"de\",\"fg,h\",\"klm\\\\\",\"\\\"nop\"\u0027)"},{"line_number":783,"context_line":""},{"line_number":784,"context_line":"    def test_with_escaped_quotes_in_row(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bacf61ea_790c7a94","line":781,"range":{"start_line":781,"start_character":42,"end_line":781,"end_character":49},"in_reply_to":"bacf61ea_d98be666","updated":"2016-08-04 11:40:43.000000000","message":"Should an appropriate commit be done to api-wg?","commit_id":"ea2bfdd24c960d6d6e80cf36fbf8c7f037b3f435"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"d971b787e269ec334ca0f1a614b87f007b205601","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"bacf61ea_b9c43292","line":786,"updated":"2016-08-04 11:27:56.000000000","message":"we could add a test that \"a\\\"b\", IE a no_comma string with an escape in it, is invalid","commit_id":"ea2bfdd24c960d6d6e80cf36fbf8c7f037b3f435"},{"author":{"_account_id":20563,"name":"Omar Shykhkerimov","email":"omar.shikhkerimov@gmail.com","username":"oshykhkerimov"},"change_message_id":"e5fb2a79f6664fd66ae3eebd08776f1fcfd82ce9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"9ad45d7e_f9cd28b8","line":786,"in_reply_to":"9ad45d7e_99350cdc","updated":"2016-08-09 17:33:30.000000000","message":"* even if user meant [\u0027wo,rd\u0027,\u0027letter\u0027].","commit_id":"ea2bfdd24c960d6d6e80cf36fbf8c7f037b3f435"},{"author":{"_account_id":20563,"name":"Omar Shykhkerimov","email":"omar.shikhkerimov@gmail.com","username":"oshykhkerimov"},"change_message_id":"191f1d61516bef25479575efd287ce368b4f3692","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"9ad45d7e_99350cdc","line":786,"in_reply_to":"bacf61ea_2f8f5424","updated":"2016-08-09 17:30:16.000000000","message":"Added appropriate tests.\nAlso have to add that unquoted values can contain commas, it will look as \u0027wo,rd,letter\u0027 with parsing like [\u0027wo\u0027,\u0027rd\u0027,\u0027letter\u0027] even if user meant [\u0027word\u0027,\u0027letter\u0027].","commit_id":"ea2bfdd24c960d6d6e80cf36fbf8c7f037b3f435"},{"author":{"_account_id":20563,"name":"Omar Shykhkerimov","email":"omar.shikhkerimov@gmail.com","username":"oshykhkerimov"},"change_message_id":"40b0296003087bdf6f87480cccca3c366507b7af","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"bacf61ea_d94486b8","line":786,"in_reply_to":"bacf61ea_b9c43292","updated":"2016-08-04 11:40:43.000000000","message":"Do you mean that value without comma shouldn\u0027t contain backslashes? Why so?\nLooks quite similar to example from api-wg:\nFor a value a\"b\"c the query would be ?foo\u003d\"a\\\"b\\\"c\"\nSo it\u0027s ok. Or I misunderstood you.","commit_id":"ea2bfdd24c960d6d6e80cf36fbf8c7f037b3f435"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"cf86f15709a39980ed9e9fc3afcf8bb5810b293c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"bacf61ea_2f8f5424","line":786,"in_reply_to":"bacf61ea_d94486b8","updated":"2016-08-04 12:18:31.000000000","message":"Sorry, my comment wasn\u0027t quite correct. Unquoted values can contain backslashes but they have no special meaning. Quoted values can contain backslashes but they must be doubled.\n\nUnquoted values cannot contain quotes (even preceded by a \\) or commas.","commit_id":"ea2bfdd24c960d6d6e80cf36fbf8c7f037b3f435"}]}
