)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"ad6635b9449e88a1fab85976c7e756cbd113cbb1","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2016-11-30 18:49:37 -0600"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Allow to specify ID on project creation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I6866243096d59cb669453028eadc973627940361"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"3a71b18c_81ceab81","line":8,"updated":"2016-12-01 16:19:48.000000000","message":"Please add here a link to the bugreport or to a spec. I have no idea why this is being done.","commit_id":"198610f06c80a50fd6f5fea2bebbcf44c198c566"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"60852a951e99b318757ed4b68acaed87e2207cb2","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Allow to specify ID on project creation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I6866243096d59cb669453028eadc973627940361"},{"line_number":10,"context_line":"Closes-bug: #1646563"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"3a71b18c_f90b0422","line":10,"updated":"2016-12-05 21:19:43.000000000","message":"Is there a spec for this already? It seems that this small change has significant implications than need some discussion.","commit_id":"290713e51ec0b8051256f5f7b102927dff3627ff"}],"keystone/common/validation/parameter_types.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"dc4321307a5bfaeca097a692367fdf9683e3f41a","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"uuid_string \u003d {"},{"line_number":48,"context_line":"    \u0027type\u0027: \u0027string\u0027,"},{"line_number":49,"context_line":"    \u0027minLength\u0027: 1,"},{"line_number":50,"context_line":"    \u0027maxLength\u0027: 64,"},{"line_number":51,"context_line":"    # TODO(lbragstad): Find a way to make this configurable such that the end"},{"line_number":52,"context_line":"    # user chooses how much control they want over id_strings with a regex"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_64998b6e","line":49,"updated":"2016-12-01 22:16:18.000000000","message":"UUID hex is always 32 bytes. please make min/max 32","commit_id":"290713e51ec0b8051256f5f7b102927dff3627ff"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0e8951e96135fd933c5f76bc8b7f4435e1d91627","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"uuid_string \u003d {"},{"line_number":48,"context_line":"    \u0027type\u0027: \u0027string\u0027,"},{"line_number":49,"context_line":"    \u0027minLength\u0027: 1,"},{"line_number":50,"context_line":"    \u0027maxLength\u0027: 64,"},{"line_number":51,"context_line":"    # TODO(lbragstad): Find a way to make this configurable such that the end"},{"line_number":52,"context_line":"    # user chooses how much control they want over id_strings with a regex"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_c5a2e1fb","line":49,"in_reply_to":"3a71b18c_64998b6e","updated":"2016-12-05 19:53:29.000000000","message":"++, that\u0027s a good point.","commit_id":"290713e51ec0b8051256f5f7b102927dff3627ff"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0e8951e96135fd933c5f76bc8b7f4435e1d91627","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    \u0027maxLength\u0027: 64,"},{"line_number":51,"context_line":"    # TODO(lbragstad): Find a way to make this configurable such that the end"},{"line_number":52,"context_line":"    # user chooses how much control they want over id_strings with a regex"},{"line_number":53,"context_line":"    \u0027pattern\u0027: \u0027^[a-z0-9]+$\u0027"},{"line_number":54,"context_line":"}"},{"line_number":55,"context_line":"mapping_id_string \u003d {"},{"line_number":56,"context_line":"    \u0027type\u0027: \u0027string\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_a50b25d5","line":53,"updated":"2016-12-05 19:53:29.000000000","message":"According to the RFC - we can tighten this even further [0]: \n\n  \u0027pattern\u0027: \u0027^[a-f0-9]+$\u0027\n\nThe current pattern would allow me to create a project ID that doesn\u0027t conform the to the UUID spec, but passes validation [1].\n\n[0] https://tools.ietf.org/html/rfc4122.html#section-3\n[1] http://cdn.pasteraw.com/ntgohgancxl2q7howkmas5wy0f04jli","commit_id":"290713e51ec0b8051256f5f7b102927dff3627ff"}],"keystone/resource/controllers.py":[{"author":{"_account_id":19814,"name":"Travis Truman (automagically)","email":"travis_truman@cable.comcast.com","username":"trumant"},"change_message_id":"0e9e11fa2debf94463eb839704f40412f6811d5b","unresolved":false,"context_lines":[{"line_number":234,"context_line":"    def create_project(self, request, project):"},{"line_number":235,"context_line":"        validation.lazy_validate(schema.project_create, project)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        if project.get(\u0027id\u0027):"},{"line_number":238,"context_line":"            try:"},{"line_number":239,"context_line":"                uuid.UUID(project.get(\u0027id\u0027), version\u003d4)"},{"line_number":240,"context_line":"            except ValueError as e:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a74a57a_e1af4492","line":237,"updated":"2016-11-30 14:47:33.000000000","message":"Can the validation framework be used for this? It appears that the id_string parameter type in parameter_types.py would be appropriate.","commit_id":"ed66d3dbd43ca5182c9d6aa20f23129b4f2cb5d2"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"2959babd6a3dadd10cef24ca41b98b2f9602d595","unresolved":false,"context_lines":[{"line_number":234,"context_line":"    def create_project(self, request, project):"},{"line_number":235,"context_line":"        validation.lazy_validate(schema.project_create, project)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        if project.get(\u0027id\u0027):"},{"line_number":238,"context_line":"            try:"},{"line_number":239,"context_line":"                uuid.UUID(project.get(\u0027id\u0027), version\u003d4)"},{"line_number":240,"context_line":"            except ValueError as e:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a74a57a_b2202ef9","line":237,"in_reply_to":"5a74a57a_9aafd27c","updated":"2016-11-30 19:42:56.000000000","message":"Correct the validation schema must also be updated as well to ensure the ID is properly formatted/optional.\n\nThe below check at line 239 looks correct to me and should ensure the value is in-fact a UUID-form","commit_id":"ed66d3dbd43ca5182c9d6aa20f23129b4f2cb5d2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"34e6e8712ccaab0e7f7d24a1ea409f9b50b27a0e","unresolved":false,"context_lines":[{"line_number":234,"context_line":"    def create_project(self, request, project):"},{"line_number":235,"context_line":"        validation.lazy_validate(schema.project_create, project)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        if project.get(\u0027id\u0027):"},{"line_number":238,"context_line":"            try:"},{"line_number":239,"context_line":"                uuid.UUID(project.get(\u0027id\u0027), version\u003d4)"},{"line_number":240,"context_line":"            except ValueError as e:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a74a57a_9aafd27c","line":237,"in_reply_to":"5a74a57a_e1af4492","updated":"2016-11-30 16:33:57.000000000","message":"note that the line above is the bit that validates, the schema would have to be updated","commit_id":"ed66d3dbd43ca5182c9d6aa20f23129b4f2cb5d2"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"60852a951e99b318757ed4b68acaed87e2207cb2","unresolved":false,"context_lines":[{"line_number":234,"context_line":"    def create_project(self, request, project):"},{"line_number":235,"context_line":"        validation.lazy_validate(schema.project_create, project)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        if project.get(\u0027id\u0027):"},{"line_number":238,"context_line":"            ref \u003d project"},{"line_number":239,"context_line":"        else:"},{"line_number":240,"context_line":"            ref \u003d self._assign_unique_id(self._normalize_dict(project))"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_de41ce64","line":237,"updated":"2016-12-05 21:19:43.000000000","message":"if \u0027id\u0027 in project:","commit_id":"290713e51ec0b8051256f5f7b102927dff3627ff"}],"keystone/resource/schema.py":[{"author":{"_account_id":24248,"name":"mingyong_chan","email":"chenmy@winhong.com","username":"ChenMingyong"},"change_message_id":"c8f9dd000c6cfedee2f82a16af64d49827bb1715","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    \u0027is_domain\u0027: parameter_types.boolean,"},{"line_number":29,"context_line":"    \u0027parent_id\u0027: validation.nullable(parameter_types.id_string),"},{"line_number":30,"context_line":"    \u0027name\u0027: _name_properties,"},{"line_number":31,"context_line":"    \u0027id\u0027: validation.nullable(parameter_types.uuid_string)"},{"line_number":32,"context_line":"}"},{"line_number":33,"context_line":"project_create \u003d {"},{"line_number":34,"context_line":"    \u0027type\u0027: \u0027object\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a74a57a_9f732db4","line":31,"range":{"start_line":31,"start_character":3,"end_line":31,"end_character":58},"updated":"2016-12-01 01:43:55.000000000","message":"data structure to add a parameter, should be no problem","commit_id":"198610f06c80a50fd6f5fea2bebbcf44c198c566"},{"author":{"_account_id":11782,"name":"Andrey Grebennikov","email":"agrebennikov1983@gmail.com","username":"agrebennikov"},"change_message_id":"88aea53501bbe7844d3875bf95aca70118c87f8c","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    \u0027is_domain\u0027: parameter_types.boolean,"},{"line_number":29,"context_line":"    \u0027parent_id\u0027: validation.nullable(parameter_types.id_string),"},{"line_number":30,"context_line":"    \u0027name\u0027: _name_properties,"},{"line_number":31,"context_line":"    \u0027id\u0027: validation.nullable(parameter_types.uuid_string)"},{"line_number":32,"context_line":"}"},{"line_number":33,"context_line":"project_create \u003d {"},{"line_number":34,"context_line":"    \u0027type\u0027: \u0027object\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_1a5a0b84","line":31,"range":{"start_line":31,"start_character":3,"end_line":31,"end_character":58},"in_reply_to":"5a74a57a_9f732db4","updated":"2016-12-01 16:16:52.000000000","message":"id_string already exists, and it is not that strict. It allows [a-zA-Z0-0-] regex","commit_id":"198610f06c80a50fd6f5fea2bebbcf44c198c566"}]}
