)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"12a783b6ee630c3ee2f99f70b728093386279429","unresolved":false,"context_lines":[{"line_number":10,"context_line":"representing an ID. Previously we were just checking that the ID was in"},{"line_number":11,"context_line":"fact a string. This change introduces a new validation type that fits a"},{"line_number":12,"context_line":"general case for all Keystone resources. This functionality defaults to"},{"line_number":13,"context_line":"a regular expression but it can be strengthened through a the validation"},{"line_number":14,"context_line":"configuration group available in the keystone.conf.sample."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I4878a1c718159304960fc7c40c1a80b8599c5657"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"baada198_f45bf852","line":13,"updated":"2014-07-23 08:27:07.000000000","message":"remove \u0027a\u0027","commit_id":"24ad2555dcedd9b75dd066d0493102d4c1c74571"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f7f2c8fbbf6de51db5455af78e24cdb065a5b07c","unresolved":false,"context_lines":[{"line_number":10,"context_line":"representing an ID. Previously we were just checking that the ID was in"},{"line_number":11,"context_line":"fact a string. This change introduces a new validation type that fits a"},{"line_number":12,"context_line":"general case for all Keystone resources. This functionality defaults to"},{"line_number":13,"context_line":"a regular expression but it can be strengthened through a the validation"},{"line_number":14,"context_line":"configuration group available in the keystone.conf.sample."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I4878a1c718159304960fc7c40c1a80b8599c5657"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"baada198_fb69198d","line":13,"in_reply_to":"baada198_f45bf852","updated":"2014-07-23 13:39:11.000000000","message":"Done","commit_id":"24ad2555dcedd9b75dd066d0493102d4c1c74571"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"45622ed557944b872d429299c4541034eac18587","unresolved":false,"context_lines":[{"line_number":12,"context_line":"general case for all Keystone resources."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This change makes it so that `domain_id` cannot be null on project"},{"line_number":15,"context_line":"creation using the new id_string type."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I4878a1c718159304960fc7c40c1a80b8599c5657"},{"line_number":18,"context_line":"bp: api-validation"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"1abeadc6_774328af","line":15,"updated":"2014-08-27 19:04:21.000000000","message":"update the commit message since `domain_id` can be passed in as optional and the domain_id will be determined by the server, based on the token.","commit_id":"f5cdbc372d99df04f645644c49972e482ccb6457"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7e73a32d1084682b25bcf6c0dc8b2e9d73011aa1","unresolved":false,"context_lines":[{"line_number":12,"context_line":"general case for all Keystone resources."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This change makes it so that `domain_id` cannot be null on project"},{"line_number":15,"context_line":"creation using the new id_string type."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I4878a1c718159304960fc7c40c1a80b8599c5657"},{"line_number":18,"context_line":"bp: api-validation"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"1abeadc6_572c6cac","line":15,"in_reply_to":"1abeadc6_774328af","updated":"2014-08-27 19:11:05.000000000","message":"Done","commit_id":"f5cdbc372d99df04f645644c49972e482ccb6457"}],"etc/keystone.conf.sample":[{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"12a783b6ee630c3ee2f99f70b728093386279429","unresolved":false,"context_lines":[{"line_number":148,"context_line":"#allowed_rpc_exception_modules\u003doslo.messaging.exceptions,nova.exception,cinder.exception,exceptions"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"# Qpid broker hostname. (string value)"},{"line_number":151,"context_line":"#qpid_hostname\u003dkeystone"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"# Qpid broker port. (integer value)"},{"line_number":154,"context_line":"#qpid_port\u003d5672"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"baada198_b50dfaea","line":151,"updated":"2014-07-23 08:27:07.000000000","message":"Is this change to keystone.conf.sample part of the commit?","commit_id":"24ad2555dcedd9b75dd066d0493102d4c1c74571"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f7f2c8fbbf6de51db5455af78e24cdb065a5b07c","unresolved":false,"context_lines":[{"line_number":148,"context_line":"#allowed_rpc_exception_modules\u003doslo.messaging.exceptions,nova.exception,cinder.exception,exceptions"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"# Qpid broker hostname. (string value)"},{"line_number":151,"context_line":"#qpid_hostname\u003dkeystone"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"# Qpid broker port. (integer value)"},{"line_number":154,"context_line":"#qpid_port\u003d5672"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"baada198_12f5d250","line":151,"in_reply_to":"baada198_b50dfaea","updated":"2014-07-23 13:39:11.000000000","message":"Done","commit_id":"24ad2555dcedd9b75dd066d0493102d4c1c74571"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"12a783b6ee630c3ee2f99f70b728093386279429","unresolved":false,"context_lines":[{"line_number":205,"context_line":""},{"line_number":206,"context_line":"# The RabbitMQ broker address where a single node is used."},{"line_number":207,"context_line":"# (string value)"},{"line_number":208,"context_line":"#rabbit_host\u003dkeystone"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"# The RabbitMQ broker port where a single node is used."},{"line_number":211,"context_line":"# (integer value)"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"baada198_f5f692d7","line":208,"updated":"2014-07-23 08:27:07.000000000","message":"same as above","commit_id":"24ad2555dcedd9b75dd066d0493102d4c1c74571"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f7f2c8fbbf6de51db5455af78e24cdb065a5b07c","unresolved":false,"context_lines":[{"line_number":205,"context_line":""},{"line_number":206,"context_line":"# The RabbitMQ broker address where a single node is used."},{"line_number":207,"context_line":"# (string value)"},{"line_number":208,"context_line":"#rabbit_host\u003dkeystone"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"# The RabbitMQ broker port where a single node is used."},{"line_number":211,"context_line":"# (integer value)"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"baada198_d2819aa1","line":208,"in_reply_to":"baada198_f5f692d7","updated":"2014-07-23 13:39:11.000000000","message":"Done","commit_id":"24ad2555dcedd9b75dd066d0493102d4c1c74571"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"12a783b6ee630c3ee2f99f70b728093386279429","unresolved":false,"context_lines":[{"line_number":858,"context_line":"#"},{"line_number":859,"context_line":""},{"line_number":860,"context_line":"# URL for connecting to the LDAP server. (string value)"},{"line_number":861,"context_line":"#url\u003dldap://keystone"},{"line_number":862,"context_line":""},{"line_number":863,"context_line":"# User BindDN to query the LDAP server. (string value)"},{"line_number":864,"context_line":"#user\u003d\u003cNone\u003e"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"baada198_3501eaaf","line":861,"updated":"2014-07-23 08:27:07.000000000","message":"same as above","commit_id":"24ad2555dcedd9b75dd066d0493102d4c1c74571"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f7f2c8fbbf6de51db5455af78e24cdb065a5b07c","unresolved":false,"context_lines":[{"line_number":858,"context_line":"#"},{"line_number":859,"context_line":""},{"line_number":860,"context_line":"# URL for connecting to the LDAP server. (string value)"},{"line_number":861,"context_line":"#url\u003dldap://keystone"},{"line_number":862,"context_line":""},{"line_number":863,"context_line":"# User BindDN to query the LDAP server. (string value)"},{"line_number":864,"context_line":"#user\u003d\u003cNone\u003e"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"baada198_52966af0","line":861,"in_reply_to":"baada198_3501eaaf","updated":"2014-07-23 13:39:11.000000000","message":"Done","commit_id":"24ad2555dcedd9b75dd066d0493102d4c1c74571"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"12a783b6ee630c3ee2f99f70b728093386279429","unresolved":false,"context_lines":[{"line_number":1326,"context_line":""},{"line_number":1327,"context_line":"# SSL certificate subject (auto generated certificate)."},{"line_number":1328,"context_line":"# (string value)"},{"line_number":1329,"context_line":"#cert_subject\u003d/C\u003dUS/ST\u003dUnset/L\u003dUnset/O\u003dUnset/CN\u003dkeystone"},{"line_number":1330,"context_line":""},{"line_number":1331,"context_line":""},{"line_number":1332,"context_line":"[stats]"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"baada198_55fc9eb5","line":1329,"updated":"2014-07-23 08:27:07.000000000","message":"same as above","commit_id":"24ad2555dcedd9b75dd066d0493102d4c1c74571"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f7f2c8fbbf6de51db5455af78e24cdb065a5b07c","unresolved":false,"context_lines":[{"line_number":1326,"context_line":""},{"line_number":1327,"context_line":"# SSL certificate subject (auto generated certificate)."},{"line_number":1328,"context_line":"# (string value)"},{"line_number":1329,"context_line":"#cert_subject\u003d/C\u003dUS/ST\u003dUnset/L\u003dUnset/O\u003dUnset/CN\u003dkeystone"},{"line_number":1330,"context_line":""},{"line_number":1331,"context_line":""},{"line_number":1332,"context_line":"[stats]"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"baada198_f2905eef","line":1329,"in_reply_to":"baada198_55fc9eb5","updated":"2014-07-23 13:39:11.000000000","message":"Done","commit_id":"24ad2555dcedd9b75dd066d0493102d4c1c74571"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"cc2d112fbe33d6bbfd7ceafeefe8f9d300fcff48","unresolved":false,"context_lines":[{"line_number":1420,"context_line":"#"},{"line_number":1421,"context_line":""},{"line_number":1422,"context_line":"# Regex for matching UUID strings (string value)"},{"line_number":1423,"context_line":"#id_string_regex\u003d[a-zA-Z0-9-]*$"},{"line_number":1424,"context_line":""},{"line_number":1425,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":4,"id":"baada198_8cb1c5e2","line":1423,"updated":"2014-07-23 14:58:58.000000000","message":"Change the regex to [a-zA-Z0-9-]+$ to be consistent with the regex defined in keystone/common/config.py","commit_id":"0ffcfc303b3071d0a5c430ebe4673abbf9ee567c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f1ba684cc528d70dbfeaf5a811637665beb7c990","unresolved":false,"context_lines":[{"line_number":1420,"context_line":"#"},{"line_number":1421,"context_line":""},{"line_number":1422,"context_line":"# Regex for matching UUID strings (string value)"},{"line_number":1423,"context_line":"#id_string_regex\u003d[a-zA-Z0-9-]*$"},{"line_number":1424,"context_line":""},{"line_number":1425,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":4,"id":"baada198_afb598ee","line":1423,"in_reply_to":"baada198_8cb1c5e2","updated":"2014-07-23 16:37:56.000000000","message":"Done","commit_id":"0ffcfc303b3071d0a5c430ebe4673abbf9ee567c"}],"keystone/assignment/schema.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"45622ed557944b872d429299c4541034eac18587","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    # NOTE(lbragstad): A project name is the only parameter required for"},{"line_number":31,"context_line":"    # project creation according to the Identity V3 API. We should think"},{"line_number":32,"context_line":"    # about using the maxProperties validator here, and in update."},{"line_number":33,"context_line":"    \u0027required\u0027: [\u0027name\u0027, \u0027domain_id\u0027],"},{"line_number":34,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":35,"context_line":"}"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_9790c444","line":33,"updated":"2014-08-27 19:04:21.000000000","message":"revert this, if the domain_id is not supplied in the reference _normalize_domain_id() in the identity/controller.py will populate it. We should never have a case were the `domain_id` isn\u0027t in the reference by the time we hit backend code.","commit_id":"f5cdbc372d99df04f645644c49972e482ccb6457"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7e73a32d1084682b25bcf6c0dc8b2e9d73011aa1","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    # NOTE(lbragstad): A project name is the only parameter required for"},{"line_number":31,"context_line":"    # project creation according to the Identity V3 API. We should think"},{"line_number":32,"context_line":"    # about using the maxProperties validator here, and in update."},{"line_number":33,"context_line":"    \u0027required\u0027: [\u0027name\u0027, \u0027domain_id\u0027],"},{"line_number":34,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":35,"context_line":"}"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_372370be","line":33,"in_reply_to":"1abeadc6_9790c444","updated":"2014-08-27 19:11:05.000000000","message":"Done","commit_id":"f5cdbc372d99df04f645644c49972e482ccb6457"}],"keystone/common/config.py":[{"author":{"_account_id":7179,"name":"Brad Pokorny","email":"brad_pokorny@symantec.com","username":"bpokorny"},"change_message_id":"0160915a5a04bd013b295abbc5413328ee891daf","unresolved":false,"context_lines":[{"line_number":764,"context_line":"                   help\u003d\u0027Default lock timeout for distributed locking.\u0027),"},{"line_number":765,"context_line":"    ],"},{"line_number":766,"context_line":"    \u0027validation\u0027: ["},{"line_number":767,"context_line":"        cfg.StrOpt(\u0027id_string_regex\u0027, default\u003d\u0027[a-zA-Z0-9-]*$\u0027,"},{"line_number":768,"context_line":"                   help\u003d\u0027Regex for matching UUID strings\u0027)"},{"line_number":769,"context_line":"    ],"},{"line_number":770,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_ac394d41","line":767,"updated":"2014-07-22 23:57:54.000000000","message":"Suggest changing the regex to \u0027[a-zA-Z0-9-]+$\u0027 , to keep it consistent with requiring a min length of 1.  The current regex would match an empty string.","commit_id":"24ad2555dcedd9b75dd066d0493102d4c1c74571"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f7f2c8fbbf6de51db5455af78e24cdb065a5b07c","unresolved":false,"context_lines":[{"line_number":764,"context_line":"                   help\u003d\u0027Default lock timeout for distributed locking.\u0027),"},{"line_number":765,"context_line":"    ],"},{"line_number":766,"context_line":"    \u0027validation\u0027: ["},{"line_number":767,"context_line":"        cfg.StrOpt(\u0027id_string_regex\u0027, default\u003d\u0027[a-zA-Z0-9-]*$\u0027,"},{"line_number":768,"context_line":"                   help\u003d\u0027Regex for matching UUID strings\u0027)"},{"line_number":769,"context_line":"    ],"},{"line_number":770,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_950aac1e","line":767,"in_reply_to":"baada198_55b73e21","updated":"2014-07-23 13:39:11.000000000","message":"Done","commit_id":"24ad2555dcedd9b75dd066d0493102d4c1c74571"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"12a783b6ee630c3ee2f99f70b728093386279429","unresolved":false,"context_lines":[{"line_number":764,"context_line":"                   help\u003d\u0027Default lock timeout for distributed locking.\u0027),"},{"line_number":765,"context_line":"    ],"},{"line_number":766,"context_line":"    \u0027validation\u0027: ["},{"line_number":767,"context_line":"        cfg.StrOpt(\u0027id_string_regex\u0027, default\u003d\u0027[a-zA-Z0-9-]*$\u0027,"},{"line_number":768,"context_line":"                   help\u003d\u0027Regex for matching UUID strings\u0027)"},{"line_number":769,"context_line":"    ],"},{"line_number":770,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_55b73e21","line":767,"in_reply_to":"baada198_ac394d41","updated":"2014-07-23 08:27:07.000000000","message":"The validator already has existing checks for min and max length that catch this. I believe the regex here is focused purely on the content of the id string.","commit_id":"24ad2555dcedd9b75dd066d0493102d4c1c74571"}],"keystone/common/validation/parameter_types.py":[{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"12a783b6ee630c3ee2f99f70b728093386279429","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    \u0027maxLength\u0027: 255"},{"line_number":34,"context_line":"}"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"id_string \u003d {"},{"line_number":37,"context_line":"    \u0027type\u0027: \u0027string\u0027,"},{"line_number":38,"context_line":"    \u0027minLength\u0027: 1,"},{"line_number":39,"context_line":"    \u0027maxLength\u0027: 64,"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_d5834e01","line":36,"updated":"2014-07-23 08:27:07.000000000","message":"Why the name change from uuid to id?","commit_id":"24ad2555dcedd9b75dd066d0493102d4c1c74571"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f7f2c8fbbf6de51db5455af78e24cdb065a5b07c","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    \u0027maxLength\u0027: 255"},{"line_number":34,"context_line":"}"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"id_string \u003d {"},{"line_number":37,"context_line":"    \u0027type\u0027: \u0027string\u0027,"},{"line_number":38,"context_line":"    \u0027minLength\u0027: 1,"},{"line_number":39,"context_line":"    \u0027maxLength\u0027: 64,"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_12707207","line":36,"in_reply_to":"baada198_d5834e01","updated":"2014-07-23 13:39:11.000000000","message":"A case can be made in the event a user passes a user-defined string to represent a region. In this case, Keystone will not generate a UUID for the unique identifier. \n\nhttps://github.com/openstack/identity-api/blob/master/v3/src/markdown/identity-api-v3.md#create-region-with-specific-id-put-regionsuser_defined_region_id\n\nBecause of this case, we broadened the scope of the hex_uuid to an id_string. If in a particular deployment, the administrator is using strict hex uuid IDs for resource IDs, they can control that through the regex and tighten up the regex as much as they want. We also have to maintain backward compatibility to previous OpenStack deployments (essex/diablo I believe), that use \u0027-\u0027 in the uuid, instead of generating them with uuid.uuid4().hex.","commit_id":"24ad2555dcedd9b75dd066d0493102d4c1c74571"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"50296ce4d62e4d84b83249ba30d14d07d7b0e825","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    \u0027maxLength\u0027: 64,"},{"line_number":35,"context_line":"    # TODO(lbragstad): Find a way to make this configurable such that the end"},{"line_number":36,"context_line":"    # user chooses how much control they want over id_strings with a regex"},{"line_number":37,"context_line":"    \u0027pattern\u0027: \u0027^[a-zA-Z0-9-]+$\u0027"},{"line_number":38,"context_line":"}"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"description \u003d {"}],"source_content_type":"text/x-python","patch_set":12,"id":"1abeadc6_bf09ee32","line":37,"updated":"2014-08-28 18:31:48.000000000","message":"that works for now","commit_id":"ebdc03b0f5910210da8d5d1d38ad5ca45fe2b3d9"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"66dd12f10dfd47134c2913eca393273f09d51f81","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    \u0027maxLength\u0027: 64,"},{"line_number":35,"context_line":"    # TODO(lbragstad): Find a way to make this configurable such that the end"},{"line_number":36,"context_line":"    # user chooses how much control they want over id_strings with a regex"},{"line_number":37,"context_line":"    \u0027pattern\u0027: \u0027^[a-zA-Z0-9-]+$\u0027"},{"line_number":38,"context_line":"}"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"description \u003d {"}],"source_content_type":"text/x-python","patch_set":12,"id":"1abeadc6_424b9eb0","line":37,"in_reply_to":"1abeadc6_bf09ee32","updated":"2014-08-28 20:16:36.000000000","message":"yeah, we can come back and figure out the lazy load bit, I tried @dstanek\u0027s suggestions in one of his reviews but couldn\u0027t get it completely fleshed out.","commit_id":"ebdc03b0f5910210da8d5d1d38ad5ca45fe2b3d9"}],"keystone/tests/test_validation.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"a39998973edda5ba8ac9e991caf0efbbbcaada82","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        \u0027enabled\u0027: parameter_types.boolean,"},{"line_number":29,"context_line":"        \u0027url\u0027: parameter_types.url,"},{"line_number":30,"context_line":"        \u0027email\u0027: parameter_types.email,"},{"line_number":31,"context_line":"        \u0027uuid\u0027: parameter_types.required_id_string,"},{"line_number":32,"context_line":"        \u0027user_id\u0027: parameter_types.optional_id_string"},{"line_number":33,"context_line":"    },"},{"line_number":34,"context_line":"    \u0027required\u0027: [\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_dded5f27","line":31,"updated":"2014-08-25 18:37:45.000000000","message":"nit: this isn\u0027t just for uuids... it can be used for user defined IDs too","commit_id":"c09687fe712b4f9340c8ceada85e3541bfca2aac"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"e05330bd5e2c08e8bd174d062417c0dc005e3120","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        \u0027enabled\u0027: parameter_types.boolean,"},{"line_number":29,"context_line":"        \u0027url\u0027: parameter_types.url,"},{"line_number":30,"context_line":"        \u0027email\u0027: parameter_types.email,"},{"line_number":31,"context_line":"        \u0027uuid\u0027: parameter_types.required_id_string,"},{"line_number":32,"context_line":"        \u0027user_id\u0027: parameter_types.optional_id_string"},{"line_number":33,"context_line":"    },"},{"line_number":34,"context_line":"    \u0027required\u0027: [\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_8ec35856","line":31,"in_reply_to":"1abeadc6_dded5f27","updated":"2014-08-27 15:32:10.000000000","message":"Done","commit_id":"c09687fe712b4f9340c8ceada85e3541bfca2aac"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"45622ed557944b872d429299c4541034eac18587","unresolved":false,"context_lines":[{"line_number":289,"context_line":"    def test_validate_project_request(self):"},{"line_number":290,"context_line":"        \"\"\"Test that we validate a project with `name` in request.\"\"\""},{"line_number":291,"context_line":"        request_to_validate \u003d {\u0027name\u0027: self.project_name,"},{"line_number":292,"context_line":"                               \u0027domain_id\u0027: uuid.uuid4().hex}"},{"line_number":293,"context_line":"        self.create_project_validator.validate(request_to_validate)"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    def test_validate_project_request_without_name_fails(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_f79bb863","line":292,"updated":"2014-08-27 19:04:21.000000000","message":"remove domain_id","commit_id":"f5cdbc372d99df04f645644c49972e482ccb6457"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7e73a32d1084682b25bcf6c0dc8b2e9d73011aa1","unresolved":false,"context_lines":[{"line_number":289,"context_line":"    def test_validate_project_request(self):"},{"line_number":290,"context_line":"        \"\"\"Test that we validate a project with `name` in request.\"\"\""},{"line_number":291,"context_line":"        request_to_validate \u003d {\u0027name\u0027: self.project_name,"},{"line_number":292,"context_line":"                               \u0027domain_id\u0027: uuid.uuid4().hex}"},{"line_number":293,"context_line":"        self.create_project_validator.validate(request_to_validate)"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    def test_validate_project_request_without_name_fails(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_77a4084b","line":292,"in_reply_to":"1abeadc6_f79bb863","updated":"2014-08-27 19:11:05.000000000","message":"Done","commit_id":"f5cdbc372d99df04f645644c49972e482ccb6457"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"45622ed557944b872d429299c4541034eac18587","unresolved":false,"context_lines":[{"line_number":299,"context_line":"                          self.create_project_validator.validate,"},{"line_number":300,"context_line":"                          request_to_validate)"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"    def test_validate_project_request_without_domain_id_fails(self):"},{"line_number":303,"context_line":"        \"\"\"Validate project request fails without domain_id.\"\"\""},{"line_number":304,"context_line":"        request_to_validate \u003d {\u0027name\u0027: self.project_name}"},{"line_number":305,"context_line":"        self.assertRaises(exception.SchemaValidationError,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_d7addc85","line":302,"updated":"2014-08-27 19:04:21.000000000","message":"this test is invalid","commit_id":"f5cdbc372d99df04f645644c49972e482ccb6457"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7e73a32d1084682b25bcf6c0dc8b2e9d73011aa1","unresolved":false,"context_lines":[{"line_number":299,"context_line":"                          self.create_project_validator.validate,"},{"line_number":300,"context_line":"                          request_to_validate)"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"    def test_validate_project_request_without_domain_id_fails(self):"},{"line_number":303,"context_line":"        \"\"\"Validate project request fails without domain_id.\"\"\""},{"line_number":304,"context_line":"        request_to_validate \u003d {\u0027name\u0027: self.project_name}"},{"line_number":305,"context_line":"        self.assertRaises(exception.SchemaValidationError,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_377530cb","line":302,"in_reply_to":"1abeadc6_d7addc85","updated":"2014-08-27 19:11:05.000000000","message":"Done","commit_id":"f5cdbc372d99df04f645644c49972e482ccb6457"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"45622ed557944b872d429299c4541034eac18587","unresolved":false,"context_lines":[{"line_number":306,"context_line":"                          self.create_project_validator.validate,"},{"line_number":307,"context_line":"                          request_to_validate)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    def test_validate_project_request_with_null_domain_id_fails(self):"},{"line_number":310,"context_line":"        \"\"\"Exception is raised when `domain_id` is null.\"\"\""},{"line_number":311,"context_line":"        request_to_validate \u003d {\u0027name\u0027: self.project_name,"},{"line_number":312,"context_line":"                               \u0027domain_id\u0027: None}"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_37c8d054","line":309,"updated":"2014-08-27 19:04:21.000000000","message":"this test is invalid","commit_id":"f5cdbc372d99df04f645644c49972e482ccb6457"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7e73a32d1084682b25bcf6c0dc8b2e9d73011aa1","unresolved":false,"context_lines":[{"line_number":306,"context_line":"                          self.create_project_validator.validate,"},{"line_number":307,"context_line":"                          request_to_validate)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    def test_validate_project_request_with_null_domain_id_fails(self):"},{"line_number":310,"context_line":"        \"\"\"Exception is raised when `domain_id` is null.\"\"\""},{"line_number":311,"context_line":"        request_to_validate \u003d {\u0027name\u0027: self.project_name,"},{"line_number":312,"context_line":"                               \u0027domain_id\u0027: None}"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_777b28be","line":309,"in_reply_to":"1abeadc6_37c8d054","updated":"2014-08-27 19:11:05.000000000","message":"Done","commit_id":"f5cdbc372d99df04f645644c49972e482ccb6457"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"45622ed557944b872d429299c4541034eac18587","unresolved":false,"context_lines":[{"line_number":318,"context_line":"        \"\"\"Validate `enabled` as boolean-like values for projects.\"\"\""},{"line_number":319,"context_line":"        for valid_enabled in _VALID_ENABLED_FORMATS:"},{"line_number":320,"context_line":"            request_to_validate \u003d {\u0027name\u0027: self.project_name,"},{"line_number":321,"context_line":"                                   \u0027domain_id\u0027: uuid.uuid4().hex,"},{"line_number":322,"context_line":"                                   \u0027enabled\u0027: valid_enabled}"},{"line_number":323,"context_line":"            self.create_project_validator.validate(request_to_validate)"},{"line_number":324,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_77bec8af","line":321,"updated":"2014-08-27 19:04:21.000000000","message":"remove","commit_id":"f5cdbc372d99df04f645644c49972e482ccb6457"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7e73a32d1084682b25bcf6c0dc8b2e9d73011aa1","unresolved":false,"context_lines":[{"line_number":318,"context_line":"        \"\"\"Validate `enabled` as boolean-like values for projects.\"\"\""},{"line_number":319,"context_line":"        for valid_enabled in _VALID_ENABLED_FORMATS:"},{"line_number":320,"context_line":"            request_to_validate \u003d {\u0027name\u0027: self.project_name,"},{"line_number":321,"context_line":"                                   \u0027domain_id\u0027: uuid.uuid4().hex,"},{"line_number":322,"context_line":"                                   \u0027enabled\u0027: valid_enabled}"},{"line_number":323,"context_line":"            self.create_project_validator.validate(request_to_validate)"},{"line_number":324,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_d7387cf0","line":321,"in_reply_to":"1abeadc6_77bec8af","updated":"2014-08-27 19:11:05.000000000","message":"Done","commit_id":"f5cdbc372d99df04f645644c49972e482ccb6457"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"45622ed557944b872d429299c4541034eac18587","unresolved":false,"context_lines":[{"line_number":326,"context_line":"        \"\"\"Exception is raised when `enabled` isn\u0027t a boolean-like value.\"\"\""},{"line_number":327,"context_line":"        for invalid_enabled in _INVALID_ENABLED_FORMATS:"},{"line_number":328,"context_line":"            request_to_validate \u003d {\u0027name\u0027: self.project_name,"},{"line_number":329,"context_line":"                                   \u0027domain_id\u0027: uuid.uuid4().hex,"},{"line_number":330,"context_line":"                                   \u0027enabled\u0027: invalid_enabled}"},{"line_number":331,"context_line":"            self.assertRaises(exception.SchemaValidationError,"},{"line_number":332,"context_line":"                              self.create_project_validator.validate,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_b7e300d8","line":329,"updated":"2014-08-27 19:04:21.000000000","message":"remove","commit_id":"f5cdbc372d99df04f645644c49972e482ccb6457"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7e73a32d1084682b25bcf6c0dc8b2e9d73011aa1","unresolved":false,"context_lines":[{"line_number":326,"context_line":"        \"\"\"Exception is raised when `enabled` isn\u0027t a boolean-like value.\"\"\""},{"line_number":327,"context_line":"        for invalid_enabled in _INVALID_ENABLED_FORMATS:"},{"line_number":328,"context_line":"            request_to_validate \u003d {\u0027name\u0027: self.project_name,"},{"line_number":329,"context_line":"                                   \u0027domain_id\u0027: uuid.uuid4().hex,"},{"line_number":330,"context_line":"                                   \u0027enabled\u0027: invalid_enabled}"},{"line_number":331,"context_line":"            self.assertRaises(exception.SchemaValidationError,"},{"line_number":332,"context_line":"                              self.create_project_validator.validate,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_b73780fe","line":329,"in_reply_to":"1abeadc6_b7e300d8","updated":"2014-08-27 19:11:05.000000000","message":"Done","commit_id":"f5cdbc372d99df04f645644c49972e482ccb6457"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"45622ed557944b872d429299c4541034eac18587","unresolved":false,"context_lines":[{"line_number":335,"context_line":"    def test_validate_project_request_with_valid_description(self):"},{"line_number":336,"context_line":"        \"\"\"Test that we validate `description` in create project requests.\"\"\""},{"line_number":337,"context_line":"        request_to_validate \u003d {\u0027name\u0027: self.project_name,"},{"line_number":338,"context_line":"                               \u0027domain_id\u0027: uuid.uuid4().hex,"},{"line_number":339,"context_line":"                               \u0027description\u0027: \u0027My Project\u0027}"},{"line_number":340,"context_line":"        self.create_project_validator.validate(request_to_validate)"},{"line_number":341,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_d7e4fce1","line":338,"updated":"2014-08-27 19:04:21.000000000","message":"remove","commit_id":"f5cdbc372d99df04f645644c49972e482ccb6457"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7e73a32d1084682b25bcf6c0dc8b2e9d73011aa1","unresolved":false,"context_lines":[{"line_number":335,"context_line":"    def test_validate_project_request_with_valid_description(self):"},{"line_number":336,"context_line":"        \"\"\"Test that we validate `description` in create project requests.\"\"\""},{"line_number":337,"context_line":"        request_to_validate \u003d {\u0027name\u0027: self.project_name,"},{"line_number":338,"context_line":"                               \u0027domain_id\u0027: uuid.uuid4().hex,"},{"line_number":339,"context_line":"                               \u0027description\u0027: \u0027My Project\u0027}"},{"line_number":340,"context_line":"        self.create_project_validator.validate(request_to_validate)"},{"line_number":341,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_9732840e","line":338,"in_reply_to":"1abeadc6_d7e4fce1","updated":"2014-08-27 19:11:05.000000000","message":"Done","commit_id":"f5cdbc372d99df04f645644c49972e482ccb6457"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"45622ed557944b872d429299c4541034eac18587","unresolved":false,"context_lines":[{"line_number":342,"context_line":"    def test_validate_project_request_with_invalid_description_fails(self):"},{"line_number":343,"context_line":"        \"\"\"Exception is raised when `description` as a non-string value.\"\"\""},{"line_number":344,"context_line":"        request_to_validate \u003d {\u0027name\u0027: self.project_name,"},{"line_number":345,"context_line":"                               \u0027domain_id\u0027: uuid.uuid4().hex,"},{"line_number":346,"context_line":"                               \u0027description\u0027: False}"},{"line_number":347,"context_line":"        self.assertRaises(exception.SchemaValidationError,"},{"line_number":348,"context_line":"                          self.create_project_validator.validate,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_f7e9f8b7","line":345,"updated":"2014-08-27 19:04:21.000000000","message":"remove","commit_id":"f5cdbc372d99df04f645644c49972e482ccb6457"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7e73a32d1084682b25bcf6c0dc8b2e9d73011aa1","unresolved":false,"context_lines":[{"line_number":342,"context_line":"    def test_validate_project_request_with_invalid_description_fails(self):"},{"line_number":343,"context_line":"        \"\"\"Exception is raised when `description` as a non-string value.\"\"\""},{"line_number":344,"context_line":"        request_to_validate \u003d {\u0027name\u0027: self.project_name,"},{"line_number":345,"context_line":"                               \u0027domain_id\u0027: uuid.uuid4().hex,"},{"line_number":346,"context_line":"                               \u0027description\u0027: False}"},{"line_number":347,"context_line":"        self.assertRaises(exception.SchemaValidationError,"},{"line_number":348,"context_line":"                          self.create_project_validator.validate,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_77524836","line":345,"in_reply_to":"1abeadc6_f7e9f8b7","updated":"2014-08-27 19:11:05.000000000","message":"Done","commit_id":"f5cdbc372d99df04f645644c49972e482ccb6457"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"45622ed557944b872d429299c4541034eac18587","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        request_to_validate \u003d {\u0027domain_id\u0027: uuid.uuid4().hex}"},{"line_number":354,"context_line":"        self.update_project_validator.validate(request_to_validate)"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"    def test_validate_project_update_request_fails_will_null_domain_id(self):"},{"line_number":357,"context_line":"        \"\"\"Exception is raised when `domain_id` is null.\"\"\""},{"line_number":358,"context_line":"        request_to_validate \u003d {\u0027name\u0027: self.project_name,"},{"line_number":359,"context_line":"                               \u0027domain_id\u0027: None}"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_9705247c","line":356,"updated":"2014-08-27 19:04:21.000000000","message":"this test is invalid","commit_id":"f5cdbc372d99df04f645644c49972e482ccb6457"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7e73a32d1084682b25bcf6c0dc8b2e9d73011aa1","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        request_to_validate \u003d {\u0027domain_id\u0027: uuid.uuid4().hex}"},{"line_number":354,"context_line":"        self.update_project_validator.validate(request_to_validate)"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"    def test_validate_project_update_request_fails_will_null_domain_id(self):"},{"line_number":357,"context_line":"        \"\"\"Exception is raised when `domain_id` is null.\"\"\""},{"line_number":358,"context_line":"        request_to_validate \u003d {\u0027name\u0027: self.project_name,"},{"line_number":359,"context_line":"                               \u0027domain_id\u0027: None}"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_172674ce","line":356,"in_reply_to":"1abeadc6_9705247c","updated":"2014-08-27 19:11:05.000000000","message":"Done","commit_id":"f5cdbc372d99df04f645644c49972e482ccb6457"}]}
