)]}'
{"keystone/common/validation/parameter_types.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"2c4871c3a59209a964816b66cb71513517b1d6f1","unresolved":false,"context_lines":[{"line_number":54,"context_line":"               \u0027(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)\u0027"},{"line_number":55,"context_line":"               \u0027+[a-zA-Z]{2,6}\\.?|\u0027"},{"line_number":56,"context_line":"               \u0027localhost|\u0027"},{"line_number":57,"context_line":"               \u0027(?:(?:25[0-5]|(?:2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}\u0027"},{"line_number":58,"context_line":"               \u0027(?:25[0-5]|(?:2[0-4]|1{0,1}[0-9]){0,1}[0-9])|\u0027"},{"line_number":59,"context_line":"               \u0027\\[(?:(?:[a-fA-F0-9]{1,4}:){7,7}[a-fA-F0-9]{1,4}|\u0027"},{"line_number":60,"context_line":"               \u0027(?:[a-fA-F0-9]{1,4}:){1,7}:|\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_ae740468","line":57,"updated":"2014-10-28 17:57:23.000000000","message":"Is there a standard regex for this somewhere? It would be nice to say that we got it here some source and copied it here. Otherwise this may take a fair amount of time to review.","commit_id":"e288a1757fc9f2f508ebdca30af4149383610d1d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9e594cc2a549a6ea60f85dfa950d3ab51132f38d","unresolved":false,"context_lines":[{"line_number":54,"context_line":"               \u0027(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)\u0027"},{"line_number":55,"context_line":"               \u0027+[a-zA-Z]{2,6}\\.?|\u0027"},{"line_number":56,"context_line":"               \u0027localhost|\u0027"},{"line_number":57,"context_line":"               \u0027(?:(?:25[0-5]|(?:2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}\u0027"},{"line_number":58,"context_line":"               \u0027(?:25[0-5]|(?:2[0-4]|1{0,1}[0-9]){0,1}[0-9])|\u0027"},{"line_number":59,"context_line":"               \u0027\\[(?:(?:[a-fA-F0-9]{1,4}:){7,7}[a-fA-F0-9]{1,4}|\u0027"},{"line_number":60,"context_line":"               \u0027(?:[a-fA-F0-9]{1,4}:){1,7}:|\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_8a78f190","line":57,"in_reply_to":"9aa7fdbe_0e527034","updated":"2014-10-29 14:17:10.000000000","message":"what about http://pythex.org/ ?","commit_id":"e288a1757fc9f2f508ebdca30af4149383610d1d"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"2ca58e5b494fcf55f628febb78065dedfcbb917a","unresolved":false,"context_lines":[{"line_number":54,"context_line":"               \u0027(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)\u0027"},{"line_number":55,"context_line":"               \u0027+[a-zA-Z]{2,6}\\.?|\u0027"},{"line_number":56,"context_line":"               \u0027localhost|\u0027"},{"line_number":57,"context_line":"               \u0027(?:(?:25[0-5]|(?:2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}\u0027"},{"line_number":58,"context_line":"               \u0027(?:25[0-5]|(?:2[0-4]|1{0,1}[0-9]){0,1}[0-9])|\u0027"},{"line_number":59,"context_line":"               \u0027\\[(?:(?:[a-fA-F0-9]{1,4}:){7,7}[a-fA-F0-9]{1,4}|\u0027"},{"line_number":60,"context_line":"               \u0027(?:[a-fA-F0-9]{1,4}:){1,7}:|\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_6aed8d8e","line":57,"in_reply_to":"9aa7fdbe_8a78f190","updated":"2014-10-29 14:36:17.000000000","message":"Looks like that\u0027s just a graphical tool for testing a regex. I didn\u0027t see a standard regex for URLs or IP addresses there. Also note that this patch set has been superceded. See the newer patch set 7, which should be easier to read and provide better conformance to the relevant RFCs.","commit_id":"e288a1757fc9f2f508ebdca30af4149383610d1d"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"f85974eb14c85a4239d3ae0866d515a9c46350ec","unresolved":false,"context_lines":[{"line_number":54,"context_line":"               \u0027(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)\u0027"},{"line_number":55,"context_line":"               \u0027+[a-zA-Z]{2,6}\\.?|\u0027"},{"line_number":56,"context_line":"               \u0027localhost|\u0027"},{"line_number":57,"context_line":"               \u0027(?:(?:25[0-5]|(?:2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}\u0027"},{"line_number":58,"context_line":"               \u0027(?:25[0-5]|(?:2[0-4]|1{0,1}[0-9]){0,1}[0-9])|\u0027"},{"line_number":59,"context_line":"               \u0027\\[(?:(?:[a-fA-F0-9]{1,4}:){7,7}[a-fA-F0-9]{1,4}|\u0027"},{"line_number":60,"context_line":"               \u0027(?:[a-fA-F0-9]{1,4}:){1,7}:|\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_0e527034","line":57,"in_reply_to":"9aa7fdbe_ae740468","updated":"2014-10-28 18:16:21.000000000","message":"I wish there was... but not to my knowledge.","commit_id":"e288a1757fc9f2f508ebdca30af4149383610d1d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c35c28455a473414a86db01e9d7cb3ecbe7ddebc","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":"\"\"\"Common parameter types for validating a request reference.\"\"\""},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"rfc3986_dec_octet \u003d \u002725[0-5]|(?:2[0-4]|1?[0-9])?[0-9]\u0027"},{"line_number":15,"context_line":"rfc3986_ipv4_address \u003d \u0027(?:%(dec-octet)s\\.){3}(?:%(dec-octet)s)\u0027 \\"},{"line_number":16,"context_line":"    % {\u0027dec-octet\u0027: rfc3986_dec_octet}"},{"line_number":17,"context_line":"rfc3986_h16 \u003d \u0027[0-9A-Fa-f]{1,4}\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa7fdbe_ea6b3d1d","line":14,"updated":"2014-10-29 14:50:16.000000000","message":"Testing this in http://pythex.org/ and \u0027254.101.101.101\u0027 doesn\u0027t match the above regex.","commit_id":"1a354d5d2825258e26477f9da7adefbf0644c022"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"8d6cc7ff43fab75fe8b1a589b63723851b5ea17f","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":"\"\"\"Common parameter types for validating a request reference.\"\"\""},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"rfc3986_dec_octet \u003d \u002725[0-5]|(?:2[0-4]|1?[0-9])?[0-9]\u0027"},{"line_number":15,"context_line":"rfc3986_ipv4_address \u003d \u0027(?:%(dec-octet)s\\.){3}(?:%(dec-octet)s)\u0027 \\"},{"line_number":16,"context_line":"    % {\u0027dec-octet\u0027: rfc3986_dec_octet}"},{"line_number":17,"context_line":"rfc3986_h16 \u003d \u0027[0-9A-Fa-f]{1,4}\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa7fdbe_70673c26","line":14,"in_reply_to":"9aa7fdbe_ea6b3d1d","updated":"2014-10-29 15:29:23.000000000","message":"fixed in patch set 8","commit_id":"1a354d5d2825258e26477f9da7adefbf0644c022"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"a96825be8a8f0d5c3484c2e580f186802737fad1","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    \u0027maxLength\u0027: 225,"},{"line_number":48,"context_line":"    # NOTE(edmondsw): we could do more to validate per various RFCs, but"},{"line_number":49,"context_line":"    # decision was made to err on the side of leniency. The following is based"},{"line_number":50,"context_line":"    # on rfc1738 section 2.1"},{"line_number":51,"context_line":"    \u0027pattern\u0027: \u0027[a-zA-Z0-9+.-]+:.+\u0027"},{"line_number":52,"context_line":"}"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7a8c0949_2e656745","line":50,"updated":"2014-10-29 21:48:58.000000000","message":"it\u0027d be nice to reference the discussions we had today if possible. \n\nhttp://eavesdrop.openstack.org/irclogs/%23openstack-keystone/%23openstack-keystone.2014-10-29.log\n\nparticularly around 2014-10-29T14:37:01","commit_id":"7fa6e92c441644c0d990e79a78692b786d88acec"}],"keystone/tests/test_validation.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"710a33bb7a7bb43436ec3fbd2231b25cf27c5be8","unresolved":false,"context_lines":[{"line_number":969,"context_line":"                        \u0027http://[::1.2.3.4]\u0027, \u0027http://[2001:DB8::1.2.3.4]\u0027]"},{"line_number":970,"context_line":"    _invalid_url_types \u003d [False, \u0027this is not a URL\u0027, 1234, \u0027www.example.com\u0027,"},{"line_number":971,"context_line":"                          \u0027localhost\u0027, \u0027http://266.0.0.1\u0027, \u0027http://[::g]\u0027]"},{"line_number":972,"context_line":""},{"line_number":973,"context_line":"    def setUp(self):"},{"line_number":974,"context_line":"        super(EndpointValidationTestCase, self).setUp()"},{"line_number":975,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9aa7fdbe_c52770c8","line":972,"updated":"2014-10-28 14:46:51.000000000","message":"since `_valid_url_types` and `_invalid_url_types` are being used in multiple test classes, they should be shared.","commit_id":"75ae551b77f250fbbcd08c4ba74d2953b09eeea5"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"2c4871c3a59209a964816b66cb71513517b1d6f1","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"_INVALID_ENABLED_FORMATS \u003d [\u0027some string\u0027, 1, 0, \u0027True\u0027, \u0027False\u0027]"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"_VALID_URL_TYPES \u003d [\u0027https://example.com\u0027, \u0027http://EXAMPLE.com/v3\u0027,"},{"line_number":76,"context_line":"                    \u0027http://localhost\u0027, \u0027http://127.0.0.1:5000\u0027,"},{"line_number":77,"context_line":"                    \u0027http://[::1]\u0027, \u0027http://[::1]:35357\u0027,"},{"line_number":78,"context_line":"                    \u0027http://[1::8]\u0027, \u0027http://[fe80::8%eth0]\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_4e3d588e","line":75,"updated":"2014-10-28 17:57:23.000000000","message":"Why name these _TYPES? _VALID_URLS makes more send to me because that\u0027s what they are.","commit_id":"e288a1757fc9f2f508ebdca30af4149383610d1d"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"f85974eb14c85a4239d3ae0866d515a9c46350ec","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"_INVALID_ENABLED_FORMATS \u003d [\u0027some string\u0027, 1, 0, \u0027True\u0027, \u0027False\u0027]"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"_VALID_URL_TYPES \u003d [\u0027https://example.com\u0027, \u0027http://EXAMPLE.com/v3\u0027,"},{"line_number":76,"context_line":"                    \u0027http://localhost\u0027, \u0027http://127.0.0.1:5000\u0027,"},{"line_number":77,"context_line":"                    \u0027http://[::1]\u0027, \u0027http://[::1]:35357\u0027,"},{"line_number":78,"context_line":"                    \u0027http://[1::8]\u0027, \u0027http://[fe80::8%eth0]\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_112e118c","line":75,"in_reply_to":"9aa7fdbe_4e3d588e","updated":"2014-10-28 18:16:21.000000000","message":"I would agree, but I just left them named the way they were before... I\u0027ll change them.","commit_id":"e288a1757fc9f2f508ebdca30af4149383610d1d"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"4cfd8751835b1c6b8f1e9e5d2403c04625e64446","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                 \u0027localhost\u0027, \u0027http//something.com\u0027,"},{"line_number":85,"context_line":"                 \u0027https//something.com\u0027, \u0027https://9.9.9\u0027,"},{"line_number":86,"context_line":"                 \u0027http://256.0.0.1\u0027, \u0027http://[::g]\u0027]"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"class EntityValidationTestCase(testtools.TestCase):"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa7fdbe_1bc37139","line":87,"updated":"2014-10-29 15:51:00.000000000","message":"Would like to see a broader array of invalid IPv6 addresses here:  for example, too many segments, duplicate :: :: short cuts and the like.\n\nWould like  tests specifically for the IPv6 addresses, and then also the ones that unify v4 and v6 into a single set of valid/invalid urls.","commit_id":"e59bc309f8127d5cd1f41b6ac45e017d0263712f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"17fb240a0c82b1c463d18e8b4f9dd283d69da584","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                 \u0027localhost\u0027, \u0027http//something.com\u0027,"},{"line_number":85,"context_line":"                 \u0027https//something.com\u0027, \u0027https://9.9.9\u0027,"},{"line_number":86,"context_line":"                 \u0027http://256.0.0.1\u0027, \u0027http://[::g]\u0027]"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"class EntityValidationTestCase(testtools.TestCase):"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa7fdbe_96af387d","line":87,"in_reply_to":"9aa7fdbe_1bc37139","updated":"2014-10-29 16:20:08.000000000","message":"Yeah, I was about to make the same comment. This is a double edge sword though because we can\u0027t test against *every* case but at the same time we want a rich set of data to test against, so where do we draw the line. \n\nSince this is a \"roll your own\" implementation, we should probably have a broad set of test data.\n\nIf we were relying on a library to do this, I\u0027d say a smaller data set for testing would be acceptable.","commit_id":"e59bc309f8127d5cd1f41b6ac45e017d0263712f"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"fea9de436c67f3d6a695b9a837d5e3d2d52008e9","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                 \u0027localhost\u0027, \u0027http//something.com\u0027,"},{"line_number":85,"context_line":"                 \u0027https//something.com\u0027, \u0027https://9.9.9\u0027,"},{"line_number":86,"context_line":"                 \u0027http://256.0.0.1\u0027, \u0027http://[::g]\u0027]"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"class EntityValidationTestCase(testtools.TestCase):"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa7fdbe_2ac6204a","line":87,"in_reply_to":"9aa7fdbe_96af387d","updated":"2014-10-29 16:53:49.000000000","message":"added more cases for both valid and invalid to better test IPv6 edge cases. See new patch set.","commit_id":"e59bc309f8127d5cd1f41b6ac45e017d0263712f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2f4cf04d7ac91669cf5be30ca60346dbae88a666","unresolved":false,"context_lines":[{"line_number":80,"context_line":"               \u0027http://[::1.2.3.4]\u0027, \u0027http://[2001:DB8::1.2.3.4]\u0027,"},{"line_number":81,"context_line":"               \u0027http://[::a:1.2.3.4]\u0027, \u0027http://[a::b:1.2.3.4]\u0027,"},{"line_number":82,"context_line":"               \u0027http://[1:2:3:4:5:6:7:8]\u0027, \u0027http://[1:2:3:4:5:6:1.2.3.4]\u0027,"},{"line_number":83,"context_line":"               \u0027http://[abcd:efAB:CDEF:1111:9999::]\u0027]"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"_INVALID_URLS \u003d [False, \u0027this is not a URL\u0027, 1234, \u0027www.example.com\u0027,"},{"line_number":86,"context_line":"                 \u0027localhost\u0027, \u0027http//something.com\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a8c0949_aec6b747","line":83,"updated":"2014-10-29 21:38:06.000000000","message":"should have an uppercase http.","commit_id":"7fa6e92c441644c0d990e79a78692b786d88acec"}]}
