)]}'
{"keystone/identity/controllers.py":[{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"05452762d260cf3d258307bf60c1c8ca588c3553","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from keystone.common import validation"},{"line_number":22,"context_line":"import keystone.conf"},{"line_number":23,"context_line":"from keystone import exception"},{"line_number":24,"context_line":"from keystone.i18n import _ as _LW"},{"line_number":25,"context_line":"from keystone.identity import schema"},{"line_number":26,"context_line":"from keystone import notifications"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_02066985","line":24,"range":{"start_line":24,"start_character":28,"end_line":24,"end_character":34},"updated":"2016-07-21 02:12:25.000000000","message":"`_` and `_LW` are used for different purpose, there is no need to change this.","commit_id":"0fd6d28d4faaf56e317bf8f46b86ca323c72fba8"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"cc13690d55bdb109c34d218bbfc4cc9140e31ede","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from keystone.common import validation"},{"line_number":22,"context_line":"import keystone.conf"},{"line_number":23,"context_line":"from keystone import exception"},{"line_number":24,"context_line":"from keystone.i18n import _LW"},{"line_number":25,"context_line":"from keystone.identity import schema"},{"line_number":26,"context_line":"from keystone import notifications"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_db31dc5b","line":24,"updated":"2016-07-21 04:21:58.000000000","message":"pep8 was failing on this saying \u0027_\u0027 was unused","commit_id":"c3fdf2315a131c6bd54110a16bd069f4c7e16237"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"308874aa9fa568e76c63a0661711d974b0de20eb","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from keystone.common import validation"},{"line_number":22,"context_line":"import keystone.conf"},{"line_number":23,"context_line":"from keystone import exception"},{"line_number":24,"context_line":"from keystone.i18n import _LW"},{"line_number":25,"context_line":"from keystone.identity import schema"},{"line_number":26,"context_line":"from keystone import notifications"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_e7c23e84","line":24,"in_reply_to":"dada55a8_db31dc5b","updated":"2016-07-21 07:25:25.000000000","message":"yep, it that is not used, just remove it.","commit_id":"c3fdf2315a131c6bd54110a16bd069f4c7e16237"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a60cd815034c52d050071f9171fa0beef4363265","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    def create_user(self, request, user):"},{"line_number":64,"context_line":"        validation.lazy_validate(schema.user_create_v2, user)"},{"line_number":65,"context_line":"        user \u003d self._normalize_OSKSADM_password_on_request(user)"},{"line_number":66,"context_line":"        user \u003d self.normalize_username_in_request(user)"},{"line_number":67,"context_line":"        user \u003d self._normalize_dict(user)"},{"line_number":68,"context_line":"        self.assert_admin(request)"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_3198e669","line":66,"range":{"start_line":66,"start_character":8,"end_line":66,"end_character":55},"updated":"2016-07-21 21:35:17.000000000","message":"so, if you move the validation to after this line, you don\u0027t have to worry about \u0027username\u0027 in the reference, since it pops it out.\n\nhttps://github.com/openstack/keystone/blob/9f86cf8bbb8b93ba64d62916b49a5a6876c54478/keystone/common/controller.py#L290","commit_id":"22e8c3e20b2c8e33b94783a2716a44fb58d15b9b"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"f7d708bad81e7bb2feb60b0e3f7dd59f500f5bbc","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    def create_user(self, request, user):"},{"line_number":64,"context_line":"        validation.lazy_validate(schema.user_create_v2, user)"},{"line_number":65,"context_line":"        user \u003d self._normalize_OSKSADM_password_on_request(user)"},{"line_number":66,"context_line":"        user \u003d self.normalize_username_in_request(user)"},{"line_number":67,"context_line":"        user \u003d self._normalize_dict(user)"},{"line_number":68,"context_line":"        self.assert_admin(request)"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_85a7c8a5","line":66,"range":{"start_line":66,"start_character":8,"end_line":66,"end_character":55},"in_reply_to":"dada55a8_3198e669","updated":"2016-07-21 23:56:31.000000000","message":"Tried this with the schema: \u0027required\u0027: [\u0027name\u0027] for create_user_v2 and it still failed when the request only specified \u0027username\u0027.  Unless I\u0027m mistaken somewhere else?","commit_id":"22e8c3e20b2c8e33b94783a2716a44fb58d15b9b"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ee692fd86a84d67a33063d885d3d0ead20cdede8","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        user \u003d self._normalize_dict(user)"},{"line_number":68,"context_line":"        self.assert_admin(request)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        default_project_id \u003d user.pop(\u0027tenantId\u0027, None)"},{"line_number":71,"context_line":"        if default_project_id is not None:"},{"line_number":72,"context_line":"            # Check to see if the project is valid before moving on."},{"line_number":73,"context_line":"            self.resource_api.get_project(default_project_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_11116204","line":70,"range":{"start_line":70,"start_character":39,"end_line":70,"end_character":47},"updated":"2016-07-21 21:32:54.000000000","message":"in v2 we check for \"tenantId\" not \"tenant_id\" because we were silly in v2 and didn\u0027t conform on anything","commit_id":"22e8c3e20b2c8e33b94783a2716a44fb58d15b9b"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"b106331251dac5961b0fe233bc3919dbd41ad86d","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    # CRUD extension"},{"line_number":62,"context_line":"    @controller.v2_deprecated"},{"line_number":63,"context_line":"    def create_user(self, request, user):"},{"line_number":64,"context_line":"        validation.lazy_validate(schema.user_create_v2, user)"},{"line_number":65,"context_line":"        user \u003d self._normalize_OSKSADM_password_on_request(user)"},{"line_number":66,"context_line":"        user \u003d self.normalize_username_in_request(user)"},{"line_number":67,"context_line":"        user \u003d self._normalize_dict(user)"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_2aa18494","line":64,"updated":"2016-07-22 02:54:07.000000000","message":"checkout this comment, still valid.\nhttps://review.openstack.org/#/c/238160/3/keystone/identity/controllers.py","commit_id":"eafcb217eb7b437776fe0d385b6bb55fd5d4be47"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"a136e664d8e7e3f29030c493dde26eae776873e0","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    # CRUD extension"},{"line_number":62,"context_line":"    @controller.v2_deprecated"},{"line_number":63,"context_line":"    def create_user(self, request, user):"},{"line_number":64,"context_line":"        validation.lazy_validate(schema.user_create_v2, user)"},{"line_number":65,"context_line":"        user \u003d self._normalize_OSKSADM_password_on_request(user)"},{"line_number":66,"context_line":"        user \u003d self.normalize_username_in_request(user)"},{"line_number":67,"context_line":"        user \u003d self._normalize_dict(user)"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_68eb84dc","line":64,"in_reply_to":"dada55a8_2aa18494","updated":"2016-07-22 03:59:23.000000000","message":"So I should just remove the normalize_username... call since we are validating in the schema, right?","commit_id":"eafcb217eb7b437776fe0d385b6bb55fd5d4be47"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"3e4c776195c396a8252cc1392fd1c53b3435698f","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    # CRUD extension"},{"line_number":62,"context_line":"    @controller.v2_deprecated"},{"line_number":63,"context_line":"    def create_user(self, request, user):"},{"line_number":64,"context_line":"        validation.lazy_validate(schema.user_create_v2, user)"},{"line_number":65,"context_line":"        user \u003d self._normalize_OSKSADM_password_on_request(user)"},{"line_number":66,"context_line":"        user \u003d self.normalize_username_in_request(user)"},{"line_number":67,"context_line":"        user \u003d self._normalize_dict(user)"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_a9dbbd20","line":64,"in_reply_to":"dada55a8_68eb84dc","updated":"2016-07-22 06:54:53.000000000","message":"I think it meant remove the calling of method from clean.py since it becomes unnecessary after enable schema validation.\n\nsee the code here:\nhttps://github.com/openstack/keystone/blob/933e118eee3b494401123f3dc23d025b6c4d4803/keystone/identity/core.py#L812","commit_id":"eafcb217eb7b437776fe0d385b6bb55fd5d4be47"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"81339940f4db12bfc4c7ffa29a48faee1d304efa","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    # CRUD extension"},{"line_number":62,"context_line":"    @controller.v2_deprecated"},{"line_number":63,"context_line":"    def create_user(self, request, user):"},{"line_number":64,"context_line":"        validation.lazy_validate(schema.user_create_v2, user)"},{"line_number":65,"context_line":"        user \u003d self._normalize_OSKSADM_password_on_request(user)"},{"line_number":66,"context_line":"        user \u003d self.normalize_username_in_request(user)"},{"line_number":67,"context_line":"        user \u003d self._normalize_dict(user)"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_763b4b39","line":64,"in_reply_to":"dada55a8_a9dbbd20","updated":"2016-07-22 14:57:19.000000000","message":"ah ok, thanks!","commit_id":"eafcb217eb7b437776fe0d385b6bb55fd5d4be47"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"b106331251dac5961b0fe233bc3919dbd41ad86d","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    @controller.v2_deprecated"},{"line_number":90,"context_line":"    def update_user(self, request, user_id, user):"},{"line_number":91,"context_line":"        # NOTE(termie): this is really more of a patch than a put"},{"line_number":92,"context_line":"        validation.lazy_validate(schema.user_update_v2, user)"},{"line_number":93,"context_line":"        user \u003d self.normalize_username_in_request(user)"},{"line_number":94,"context_line":"        self.assert_admin(request)"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_0afda06d","line":92,"updated":"2016-07-22 02:54:07.000000000","message":"ditto.","commit_id":"eafcb217eb7b437776fe0d385b6bb55fd5d4be47"}],"keystone/identity/schema.py":[{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"05452762d260cf3d258307bf60c1c8ca588c3553","unresolved":false,"context_lines":[{"line_number":36,"context_line":"user_create \u003d {"},{"line_number":37,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":38,"context_line":"    \u0027properties\u0027: _user_properties,"},{"line_number":39,"context_line":"    \u0027required\u0027: [\u0027enabled\u0027],"},{"line_number":40,"context_line":"    \u0027anyOf\u0027: ["},{"line_number":41,"context_line":"        {"},{"line_number":42,"context_line":"            \u0027required\u0027: [\u0027username\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_e21875d5","line":39,"range":{"start_line":39,"start_character":4,"end_line":39,"end_character":28},"updated":"2016-07-21 02:12:25.000000000","message":"If `enabled` is in the body then it must be bool but it\u0027s not a required attribute.","commit_id":"0fd6d28d4faaf56e317bf8f46b86ca323c72fba8"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"f00539a7dd4ce01193dc9264d05671ad5dc55a5e","unresolved":false,"context_lines":[{"line_number":36,"context_line":"user_create \u003d {"},{"line_number":37,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":38,"context_line":"    \u0027properties\u0027: _user_properties,"},{"line_number":39,"context_line":"    \u0027required\u0027: [\u0027enabled\u0027],"},{"line_number":40,"context_line":"    \u0027anyOf\u0027: ["},{"line_number":41,"context_line":"        {"},{"line_number":42,"context_line":"            \u0027required\u0027: [\u0027username\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_a77e8667","line":39,"range":{"start_line":39,"start_character":4,"end_line":39,"end_character":28},"in_reply_to":"dada55a8_40fcd971","updated":"2016-07-21 07:11:34.000000000","message":"pls don\u0027t refer to that document, there are many work left to fix those parameters for V2 API, just try it you will see that `enabled` is an optional argument.","commit_id":"0fd6d28d4faaf56e317bf8f46b86ca323c72fba8"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"baa5ae3ac1494820191e65888f17214a2aca39f7","unresolved":false,"context_lines":[{"line_number":36,"context_line":"user_create \u003d {"},{"line_number":37,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":38,"context_line":"    \u0027properties\u0027: _user_properties,"},{"line_number":39,"context_line":"    \u0027required\u0027: [\u0027enabled\u0027],"},{"line_number":40,"context_line":"    \u0027anyOf\u0027: ["},{"line_number":41,"context_line":"        {"},{"line_number":42,"context_line":"            \u0027required\u0027: [\u0027username\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_40fcd971","line":39,"range":{"start_line":39,"start_character":4,"end_line":39,"end_character":28},"in_reply_to":"dada55a8_e21875d5","updated":"2016-07-21 03:33:49.000000000","message":"I was basing the required part from: http://developer.openstack.org/api-ref/identity/v2-admin/?expanded\u003dcreate-user-admin-endpoint-detail#create-user-admin-endpoint\n\nIs enabled optional then?","commit_id":"0fd6d28d4faaf56e317bf8f46b86ca323c72fba8"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"05452762d260cf3d258307bf60c1c8ca588c3553","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":38,"context_line":"    \u0027properties\u0027: _user_properties,"},{"line_number":39,"context_line":"    \u0027required\u0027: [\u0027enabled\u0027],"},{"line_number":40,"context_line":"    \u0027anyOf\u0027: ["},{"line_number":41,"context_line":"        {"},{"line_number":42,"context_line":"            \u0027required\u0027: [\u0027username\u0027]"},{"line_number":43,"context_line":"        },"},{"line_number":44,"context_line":"        {"},{"line_number":45,"context_line":"            \u0027required\u0027: [\u0027name\u0027]"},{"line_number":46,"context_line":"        }"},{"line_number":47,"context_line":"    ],"},{"line_number":48,"context_line":"    \u0027minProperties\u0027: 2,"},{"line_number":49,"context_line":"    \u0027additionalProperties\u0027: True"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_a28e7dcd","line":46,"range":{"start_line":40,"start_character":0,"end_line":46,"end_character":9},"updated":"2016-07-21 02:12:25.000000000","message":"Be careful here, I\u0027m afraid this will mess up V3 API, I\u0027d like to define another schema for v2 if necessary.","commit_id":"0fd6d28d4faaf56e317bf8f46b86ca323c72fba8"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"baa5ae3ac1494820191e65888f17214a2aca39f7","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":38,"context_line":"    \u0027properties\u0027: _user_properties,"},{"line_number":39,"context_line":"    \u0027required\u0027: [\u0027enabled\u0027],"},{"line_number":40,"context_line":"    \u0027anyOf\u0027: ["},{"line_number":41,"context_line":"        {"},{"line_number":42,"context_line":"            \u0027required\u0027: [\u0027username\u0027]"},{"line_number":43,"context_line":"        },"},{"line_number":44,"context_line":"        {"},{"line_number":45,"context_line":"            \u0027required\u0027: [\u0027name\u0027]"},{"line_number":46,"context_line":"        }"},{"line_number":47,"context_line":"    ],"},{"line_number":48,"context_line":"    \u0027minProperties\u0027: 2,"},{"line_number":49,"context_line":"    \u0027additionalProperties\u0027: True"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_a0edd5b8","line":46,"range":{"start_line":40,"start_character":0,"end_line":46,"end_character":9},"in_reply_to":"dada55a8_a28e7dcd","updated":"2016-07-21 03:33:49.000000000","message":"This is probably a safer thing to do, agreed","commit_id":"0fd6d28d4faaf56e317bf8f46b86ca323c72fba8"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"05452762d260cf3d258307bf60c1c8ca588c3553","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            \u0027required\u0027: [\u0027name\u0027]"},{"line_number":46,"context_line":"        }"},{"line_number":47,"context_line":"    ],"},{"line_number":48,"context_line":"    \u0027minProperties\u0027: 2,"},{"line_number":49,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":50,"context_line":"}"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_6225a507","line":48,"range":{"start_line":48,"start_character":4,"end_line":48,"end_character":23},"updated":"2016-07-21 02:12:25.000000000","message":"just 1 not 2.","commit_id":"0fd6d28d4faaf56e317bf8f46b86ca323c72fba8"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"308874aa9fa568e76c63a0661711d974b0de20eb","unresolved":false,"context_lines":[{"line_number":25,"context_line":"_user_properties \u003d {"},{"line_number":26,"context_line":"    \u0027default_project_id\u0027: validation.nullable(parameter_types.id_string),"},{"line_number":27,"context_line":"    \u0027description\u0027: validation.nullable(parameter_types.description),"},{"line_number":28,"context_line":"    \u0027domain_id\u0027: parameter_types.id_string,"},{"line_number":29,"context_line":"    \u0027enabled\u0027: parameter_types.boolean,"},{"line_number":30,"context_line":"    \u0027name\u0027: _identity_name,"},{"line_number":31,"context_line":"    \u0027password\u0027: {"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_0771520f","line":28,"range":{"start_line":28,"start_character":4,"end_line":28,"end_character":43},"updated":"2016-07-21 07:25:25.000000000","message":"this is for V3 only.","commit_id":"c3fdf2315a131c6bd54110a16bd069f4c7e16237"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"9646e4069ae285ef0daa6147dd88efad989ca88f","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"user_create_v2 \u003d {"},{"line_number":44,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":45,"context_line":"    \u0027properties\u0027: _user_properties,"},{"line_number":46,"context_line":"    \u0027anyOf\u0027: ["},{"line_number":47,"context_line":"        {"},{"line_number":48,"context_line":"            \u0027required\u0027: [\u0027username\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_ac164749","line":45,"range":{"start_line":45,"start_character":18,"end_line":45,"end_character":34},"updated":"2016-07-21 16:56:27.000000000","message":"you may want to create a _user_properties_v2 with: description, enabled, tenantId and passsword (domain_id) is not valid for v2.","commit_id":"c3fdf2315a131c6bd54110a16bd069f4c7e16237"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"de783fcd1235b3bf555f482b377286a186ac8d7f","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"user_create_v2 \u003d {"},{"line_number":44,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":45,"context_line":"    \u0027properties\u0027: _user_properties,"},{"line_number":46,"context_line":"    \u0027anyOf\u0027: ["},{"line_number":47,"context_line":"        {"},{"line_number":48,"context_line":"            \u0027required\u0027: [\u0027username\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_6bd9ccf2","line":45,"range":{"start_line":45,"start_character":18,"end_line":45,"end_character":34},"in_reply_to":"dada55a8_ac164749","updated":"2016-07-21 20:35:10.000000000","message":"will do!","commit_id":"c3fdf2315a131c6bd54110a16bd069f4c7e16237"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"8296a03e55e8728b52e21fa7faf98b8b496379d5","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        }"},{"line_number":53,"context_line":"    ],"},{"line_number":54,"context_line":"    \u0027minProperties\u0027: 1,"},{"line_number":55,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":56,"context_line":"}"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"user_update \u003d {"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_1b71ab0f","line":55,"updated":"2016-07-21 08:48:23.000000000","message":"\u0027tenantId\u0027 is only used in V2, there is a similar work here, you can take a look if you like.\n\nhttps://review.openstack.org/#/c/238160/","commit_id":"c3fdf2315a131c6bd54110a16bd069f4c7e16237"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"9646e4069ae285ef0daa6147dd88efad989ca88f","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":56,"context_line":"}"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"user_update \u003d {"},{"line_number":59,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":60,"context_line":"    \u0027properties\u0027: _user_properties,"},{"line_number":61,"context_line":"    \u0027minProperties\u0027: 1,"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_6ca44f07","line":58,"range":{"start_line":58,"start_character":0,"end_line":58,"end_character":11},"updated":"2016-07-21 16:56:27.000000000","message":"i think we need a separate update schema, since name is not required for update.","commit_id":"c3fdf2315a131c6bd54110a16bd069f4c7e16237"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ee692fd86a84d67a33063d885d3d0ead20cdede8","unresolved":false,"context_lines":[{"line_number":27,"context_line":"_user_properties_v2 \u003d {"},{"line_number":28,"context_line":"    \u0027description\u0027: validation.nullable(parameter_types.description),"},{"line_number":29,"context_line":"    \u0027enabled\u0027: parameter_types.boolean,"},{"line_number":30,"context_line":"    \u0027tenant_id\u0027: parameter_types.id_string,"},{"line_number":31,"context_line":"    \u0027name\u0027: _identity_name,"},{"line_number":32,"context_line":"    \u0027password\u0027: {"},{"line_number":33,"context_line":"        \u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_5170fa71","line":30,"range":{"start_line":30,"start_character":5,"end_line":30,"end_character":14},"updated":"2016-07-21 21:32:54.000000000","message":"tenantId wasn\u0027t a typo :)\n\nhttp://developer.openstack.org/api-ref/identity/v2-admin/index.html?expanded\u003dcreate-user-admin-endpoint-detail#create-user-admin-endpoint","commit_id":"22e8c3e20b2c8e33b94783a2716a44fb58d15b9b"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"b106331251dac5961b0fe233bc3919dbd41ad86d","unresolved":false,"context_lines":[{"line_number":27,"context_line":"_user_properties_v2 \u003d {"},{"line_number":28,"context_line":"    \u0027description\u0027: validation.nullable(parameter_types.description),"},{"line_number":29,"context_line":"    \u0027enabled\u0027: parameter_types.boolean,"},{"line_number":30,"context_line":"    \u0027tenantId\u0027: parameter_types.id_string,"},{"line_number":31,"context_line":"    \u0027name\u0027: _identity_name,"},{"line_number":32,"context_line":"    \u0027password\u0027: {"},{"line_number":33,"context_line":"        \u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_57574557","line":30,"range":{"start_line":30,"start_character":4,"end_line":30,"end_character":42},"updated":"2016-07-22 02:54:07.000000000","message":"this is nullable, change to:\n  validation.nullable(parameter_types.id_string)","commit_id":"eafcb217eb7b437776fe0d385b6bb55fd5d4be47"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"b106331251dac5961b0fe233bc3919dbd41ad86d","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    \u0027name\u0027: _identity_name,"},{"line_number":32,"context_line":"    \u0027password\u0027: {"},{"line_number":33,"context_line":"        \u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]"},{"line_number":34,"context_line":"    }"},{"line_number":35,"context_line":"}"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"user_create_v2 \u003d {"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_57fbc578","line":34,"updated":"2016-07-22 02:54:07.000000000","message":"as what api-ref said, email is a optional property, pls add it in the schema.","commit_id":"eafcb217eb7b437776fe0d385b6bb55fd5d4be47"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"a136e664d8e7e3f29030c493dde26eae776873e0","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    \u0027name\u0027: _identity_name,"},{"line_number":32,"context_line":"    \u0027password\u0027: {"},{"line_number":33,"context_line":"        \u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]"},{"line_number":34,"context_line":"    }"},{"line_number":35,"context_line":"}"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"user_create_v2 \u003d {"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_a8bf3cce","line":34,"in_reply_to":"dada55a8_57fbc578","updated":"2016-07-22 03:59:23.000000000","message":"will do!","commit_id":"eafcb217eb7b437776fe0d385b6bb55fd5d4be47"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"b106331251dac5961b0fe233bc3919dbd41ad86d","unresolved":false,"context_lines":[{"line_number":51,"context_line":"user_update_v2 \u003d {"},{"line_number":52,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":53,"context_line":"    \u0027properties\u0027: _user_properties_v2,"},{"line_number":54,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":55,"context_line":"}"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"# Schema for Identity v3 API"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_0a400006","line":54,"updated":"2016-07-22 02:54:07.000000000","message":"\u0027minProperties\u0027: 1","commit_id":"eafcb217eb7b437776fe0d385b6bb55fd5d4be47"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"a136e664d8e7e3f29030c493dde26eae776873e0","unresolved":false,"context_lines":[{"line_number":51,"context_line":"user_update_v2 \u003d {"},{"line_number":52,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":53,"context_line":"    \u0027properties\u0027: _user_properties_v2,"},{"line_number":54,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":55,"context_line":"}"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"# Schema for Identity v3 API"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_28498c31","line":54,"in_reply_to":"dada55a8_0a400006","updated":"2016-07-22 03:59:23.000000000","message":"I removed this because tempest was failing due to 2 of the tests passing {} for their update. I can put it back though if that\u0027s what it\u0027s supposed to be.","commit_id":"eafcb217eb7b437776fe0d385b6bb55fd5d4be47"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"81339940f4db12bfc4c7ffa29a48faee1d304efa","unresolved":false,"context_lines":[{"line_number":51,"context_line":"user_update_v2 \u003d {"},{"line_number":52,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":53,"context_line":"    \u0027properties\u0027: _user_properties_v2,"},{"line_number":54,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":55,"context_line":"}"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"# Schema for Identity v3 API"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_36027370","line":54,"in_reply_to":"dada55a8_0c693726","updated":"2016-07-22 14:57:19.000000000","message":"Interesting! I will take a look, thanks!","commit_id":"eafcb217eb7b437776fe0d385b6bb55fd5d4be47"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"a0b6dd4f41cfc91e0efc2c4def60b1c161f0a7b4","unresolved":false,"context_lines":[{"line_number":51,"context_line":"user_update_v2 \u003d {"},{"line_number":52,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":53,"context_line":"    \u0027properties\u0027: _user_properties_v2,"},{"line_number":54,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":55,"context_line":"}"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"# Schema for Identity v3 API"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_a8a61cbe","line":54,"in_reply_to":"dada55a8_28498c31","updated":"2016-07-22 04:00:34.000000000","message":"I mean two tempest tests for user_update were passing {} as the request and that was causing them to fail.","commit_id":"eafcb217eb7b437776fe0d385b6bb55fd5d4be47"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6cdd1b34f082812b33ed96f7a35e753aea089fbd","unresolved":false,"context_lines":[{"line_number":51,"context_line":"user_update_v2 \u003d {"},{"line_number":52,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":53,"context_line":"    \u0027properties\u0027: _user_properties_v2,"},{"line_number":54,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":55,"context_line":"}"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"# Schema for Identity v3 API"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_0c693726","line":54,"in_reply_to":"dada55a8_691f05b8","updated":"2016-07-22 07:33:19.000000000","message":"So, this is a weird situation. The old tempest tests were expecting a 401. They assume that calling update with an empty body will trigger an unauthorized error -- assuming it\u0027ll be raised from the backends, see [1] and [2]. \n\nHowever, before it gets a chance to do that we are now throwing up a 400 BadRequest.\n\nWe have two options here, both of which would mean changes to tempest. We could make keystone continue to behave the same, but let\u0027s make keystone *do the right thing*.\n\nOur two options for tempest are:\n\nA) Change the tests to assert a 400 Bad Request on an empty body.\n\nB) Change the tests by adding in a parameter to actually update, see any of the other tests in [1] or [2] where they pass in \"name\u003duser_name\".\n\nI think we should do B and add another test in tempest that an empty body comes back with a 400. \n\nSo Gage, what we typically do in this scenario is:\n\n  - Create a patch in tempest to skip those 2 tests\n  - Merge this patch\n  - Unskip the tests in tempest (and make the appropriate changes)\n\n[1] https://github.com/openstack/tempest/blob/1fafc756a069ceb0988179e9c16e8d863c1b5582/tempest/api/identity/admin/v2/test_users_negative.py#L125 \n\n[2] https://github.com/openstack/tempest/blob/1fafc756a069ceb0988179e9c16e8d863c1b5582/tempest/api/identity/admin/v2/test_users_negative.py#L141","commit_id":"eafcb217eb7b437776fe0d385b6bb55fd5d4be47"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"3e4c776195c396a8252cc1392fd1c53b3435698f","unresolved":false,"context_lines":[{"line_number":51,"context_line":"user_update_v2 \u003d {"},{"line_number":52,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":53,"context_line":"    \u0027properties\u0027: _user_properties_v2,"},{"line_number":54,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":55,"context_line":"}"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"# Schema for Identity v3 API"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_691f05b8","line":54,"in_reply_to":"dada55a8_a8a61cbe","updated":"2016-07-22 06:54:53.000000000","message":"I think it is not make sense to update a user with an empty body, I am okay to not mention \u0027minProperties\u0027 here.","commit_id":"eafcb217eb7b437776fe0d385b6bb55fd5d4be47"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d41bf80bcd226b4d9d9de74342cd17796465cb12","unresolved":false,"context_lines":[{"line_number":39,"context_line":"user_update_v2 \u003d {"},{"line_number":40,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":41,"context_line":"    \u0027properties\u0027: _user_properties_v2,"},{"line_number":42,"context_line":"    \u0027minProperties\u0027: 1,"},{"line_number":43,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":44,"context_line":"}"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_ed02c10a","line":42,"range":{"start_line":42,"start_character":4,"end_line":42,"end_character":23},"updated":"2016-08-02 23:27:55.000000000","message":"i guess remove this or set it to 0","commit_id":"c980851c59de6c3c2ac1be71fe9cd9b75b516ab3"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"f91f9348eef2291a0c38df4f4f877abc5d1782a1","unresolved":false,"context_lines":[{"line_number":39,"context_line":"user_update_v2 \u003d {"},{"line_number":40,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":41,"context_line":"    \u0027properties\u0027: _user_properties_v2,"},{"line_number":42,"context_line":"    \u0027minProperties\u0027: 1,"},{"line_number":43,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":44,"context_line":"}"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_5ec61117","line":42,"range":{"start_line":42,"start_character":4,"end_line":42,"end_character":23},"in_reply_to":"bacf61ea_ed02c10a","updated":"2016-08-03 01:41:32.000000000","message":"so, this place us in dilemmas. I agree to not mention it in the schema.","commit_id":"c980851c59de6c3c2ac1be71fe9cd9b75b516ab3"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"236d71cf46f77285cd41b51f5c9c86738d2909b8","unresolved":false,"context_lines":[{"line_number":38,"context_line":"user_update_v2 \u003d {"},{"line_number":39,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":40,"context_line":"    \u0027properties\u0027: _user_properties_v2,"},{"line_number":41,"context_line":"    \u0027minProperties\u0027: 0,"},{"line_number":42,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":43,"context_line":"}"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"bacf61ea_7b8be71e","line":41,"range":{"start_line":41,"start_character":4,"end_line":41,"end_character":23},"updated":"2016-08-04 02:04:53.000000000","message":"maybe some comments here to explain why this is \u00270\u0027 instead of \u00271\u0027, let\u0027s hope guys know what\u0027s behind this if they saw the schema defined as this :)","commit_id":"5eedeaa2c9ebb819f1f55d24fe8d30d47c8cff44"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"2e4ad1a9b1fa3168f20ec72dacc5117aaa0bc154","unresolved":false,"context_lines":[{"line_number":38,"context_line":"user_update_v2 \u003d {"},{"line_number":39,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":40,"context_line":"    \u0027properties\u0027: _user_properties_v2,"},{"line_number":41,"context_line":"    \u0027minProperties\u0027: 0,"},{"line_number":42,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":43,"context_line":"}"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"bacf61ea_92c77c97","line":41,"range":{"start_line":41,"start_character":4,"end_line":41,"end_character":23},"in_reply_to":"bacf61ea_7b8be71e","updated":"2016-08-04 14:24:06.000000000","message":"I\u0027ll do this in the create user schema while I rebase it","commit_id":"5eedeaa2c9ebb819f1f55d24fe8d30d47c8cff44"}],"keystone/tests/unit/identity/test_controllers.py":[{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"05452762d260cf3d258307bf60c1c8ca588c3553","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        # domain, it doesn\u0027t fail with can\u0027t find domain (a default domain is"},{"line_number":61,"context_line":"        # created)"},{"line_number":62,"context_line":"        user \u003d {\u0027name\u0027: uuid.uuid4().hex,"},{"line_number":63,"context_line":"                \u0027enabled\u0027: True}"},{"line_number":64,"context_line":"        self.user_controller.create_user(self.make_request(is_admin\u003dTrue),"},{"line_number":65,"context_line":"                                         user)"},{"line_number":66,"context_line":"        # If the above doesn\u0027t fail then this is successful."}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_82b25992","line":63,"range":{"start_line":63,"start_character":16,"end_line":63,"end_character":31},"updated":"2016-07-21 02:12:25.000000000","message":"this is not a required attribute.","commit_id":"0fd6d28d4faaf56e317bf8f46b86ca323c72fba8"}],"keystone/tests/unit/test_v2.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"9646e4069ae285ef0daa6147dd88efad989ca88f","unresolved":false,"context_lines":[{"line_number":940,"context_line":"            body\u003d{"},{"line_number":941,"context_line":"                \u0027user\u0027: {"},{"line_number":942,"context_line":"                    \u0027username\u0027: uuid.uuid4().hex,"},{"line_number":943,"context_line":"                    \u0027enabled\u0027: True"},{"line_number":944,"context_line":"                },"},{"line_number":945,"context_line":"            },"},{"line_number":946,"context_line":"            expected_status\u003dhttp_client.OK)"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_0c883370","line":943,"updated":"2016-07-21 16:56:27.000000000","message":"unnecessary change","commit_id":"c3fdf2315a131c6bd54110a16bd069f4c7e16237"}],"keystone/tests/unit/test_v2_validation.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"9646e4069ae285ef0daa6147dd88efad989ca88f","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                          self.create_validator.validate,"},{"line_number":57,"context_line":"                          request)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def test_validate_user_update_succeeds(self):"},{"line_number":60,"context_line":"        request \u003d {"},{"line_number":61,"context_line":"            \u0027username\u0027: \u0027ditto\u0027"},{"line_number":62,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_ace0072a","line":59,"range":{"start_line":59,"start_character":8,"end_line":59,"end_character":42},"updated":"2016-07-21 16:56:27.000000000","message":"add a test for user_update where just description or enabled is passed in, it should pass, but will currently fail based on this implementation","commit_id":"c3fdf2315a131c6bd54110a16bd069f4c7e16237"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ee692fd86a84d67a33063d885d3d0ead20cdede8","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from keystone.tests import unit"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class UserValidationTestCase(unit.BaseTestCase):"},{"line_number":21,"context_line":"    \"\"\"Test for V2 User API Validation.\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_b1c7b662","line":20,"range":{"start_line":20,"start_character":6,"end_line":20,"end_character":28},"updated":"2016-07-21 21:32:54.000000000","message":"we probably want a test that tries both username and name in a create\n\nsame with update","commit_id":"22e8c3e20b2c8e33b94783a2716a44fb58d15b9b"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ee692fd86a84d67a33063d885d3d0ead20cdede8","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def test_validate_user_create_succeeds(self):"},{"line_number":32,"context_line":"        request \u003d {"},{"line_number":33,"context_line":"            \u0027name\u0027: \u0027bob\u0027"},{"line_number":34,"context_line":"        }"},{"line_number":35,"context_line":"        self.create_validator.validate(request)"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_31dc6645","line":33,"range":{"start_line":33,"start_character":20,"end_line":33,"end_character":25},"updated":"2016-07-21 21:32:54.000000000","message":"suggest using uuid.uuid4().hex here","commit_id":"22e8c3e20b2c8e33b94783a2716a44fb58d15b9b"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ee692fd86a84d67a33063d885d3d0ead20cdede8","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def test_validate_user_create_fails_with_invalid_params(self):"},{"line_number":38,"context_line":"        request \u003d {"},{"line_number":39,"context_line":"            \u0027client\u0027: \u0027shakalaka\u0027"},{"line_number":40,"context_line":"        }"},{"line_number":41,"context_line":"        self.assertRaises(exception.SchemaValidationError,"},{"line_number":42,"context_line":"                          self.create_validator.validate,"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_11dfa23a","line":39,"range":{"start_line":39,"start_character":23,"end_line":39,"end_character":32},"updated":"2016-07-21 21:32:54.000000000","message":"suggest using uuid.uuid4().hex here","commit_id":"22e8c3e20b2c8e33b94783a2716a44fb58d15b9b"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"e0f14dfa092ce0a7a76fe9681e8a7b096fca24e7","unresolved":false,"context_lines":[{"line_number":320,"context_line":"            \u0027enabled\u0027: True"},{"line_number":321,"context_line":"        }"},{"line_number":322,"context_line":"        self.update_validator.validate(request)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    def test_validate_user_update_succeeds_with_username(self):"},{"line_number":325,"context_line":"        request \u003d {"},{"line_number":326,"context_line":"            \u0027name\u0027: uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_8e92189e","line":323,"updated":"2016-08-03 03:27:21.000000000","message":"pls also add a test for _INVALID_NAMES","commit_id":"c980851c59de6c3c2ac1be71fe9cd9b75b516ab3"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"e0f14dfa092ce0a7a76fe9681e8a7b096fca24e7","unresolved":false,"context_lines":[{"line_number":321,"context_line":"        }"},{"line_number":322,"context_line":"        self.update_validator.validate(request)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    def test_validate_user_update_succeeds_with_username(self):"},{"line_number":325,"context_line":"        request \u003d {"},{"line_number":326,"context_line":"            \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":327,"context_line":"            \u0027enabled\u0027: True"}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_0e2aa87e","line":324,"range":{"start_line":324,"start_character":48,"end_line":324,"end_character":56},"updated":"2016-08-03 03:27:21.000000000","message":"This testcase test `username`, pls update the request body below.","commit_id":"c980851c59de6c3c2ac1be71fe9cd9b75b516ab3"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"e0f14dfa092ce0a7a76fe9681e8a7b096fca24e7","unresolved":false,"context_lines":[{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    def test_validate_user_update_succeeds_with_username(self):"},{"line_number":325,"context_line":"        request \u003d {"},{"line_number":326,"context_line":"            \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":327,"context_line":"            \u0027enabled\u0027: True"},{"line_number":328,"context_line":"        }"},{"line_number":329,"context_line":"        self.update_validator.validate(request)"}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_ae39dcda","line":326,"range":{"start_line":326,"start_character":13,"end_line":326,"end_character":37},"updated":"2016-08-03 03:27:21.000000000","message":"here.","commit_id":"c980851c59de6c3c2ac1be71fe9cd9b75b516ab3"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"e0f14dfa092ce0a7a76fe9681e8a7b096fca24e7","unresolved":false,"context_lines":[{"line_number":328,"context_line":"        }"},{"line_number":329,"context_line":"        self.update_validator.validate(request)"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def test_validate_user_update_fails_with_no_params(self):"},{"line_number":332,"context_line":"        request \u003d {}"},{"line_number":333,"context_line":"        self.assertRaises(exception.SchemaValidationError,"},{"line_number":334,"context_line":"                          self.update_validator.validate,"},{"line_number":335,"context_line":"                          request)"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"    def test_validate_user_update_fails_with_invalid_params(self):"},{"line_number":338,"context_line":"        request \u003d {"}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_6e088429","line":335,"range":{"start_line":331,"start_character":0,"end_line":335,"end_character":34},"updated":"2016-08-03 03:27:21.000000000","message":"This will be removed in the next patchset.","commit_id":"c980851c59de6c3c2ac1be71fe9cd9b75b516ab3"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"e0f14dfa092ce0a7a76fe9681e8a7b096fca24e7","unresolved":false,"context_lines":[{"line_number":336,"context_line":""},{"line_number":337,"context_line":"    def test_validate_user_update_fails_with_invalid_params(self):"},{"line_number":338,"context_line":"        request \u003d {"},{"line_number":339,"context_line":"            \u0027enabled\u0027: \u0027maybe\u0027"},{"line_number":340,"context_line":"        }"},{"line_number":341,"context_line":"        self.assertRaises(exception.SchemaValidationError,"},{"line_number":342,"context_line":"                          self.update_validator.validate,"}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_ee4ab454","line":339,"range":{"start_line":339,"start_character":8,"end_line":339,"end_character":30},"updated":"2016-08-03 03:27:21.000000000","message":"test against _INVALID_ENABLED_FORMATS instead.","commit_id":"c980851c59de6c3c2ac1be71fe9cd9b75b516ab3"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"f3cc583fd1ff2e2fc03879e60e43caa8e992648f","unresolved":false,"context_lines":[{"line_number":336,"context_line":""},{"line_number":337,"context_line":"    def test_validate_user_update_fails_with_invalid_params(self):"},{"line_number":338,"context_line":"        request \u003d {"},{"line_number":339,"context_line":"            \u0027enabled\u0027: \u0027maybe\u0027"},{"line_number":340,"context_line":"        }"},{"line_number":341,"context_line":"        self.assertRaises(exception.SchemaValidationError,"},{"line_number":342,"context_line":"                          self.update_validator.validate,"}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_daf2ea99","line":339,"range":{"start_line":339,"start_character":8,"end_line":339,"end_character":30},"in_reply_to":"bacf61ea_ee4ab454","updated":"2016-08-03 14:47:42.000000000","message":"I think something wonky happened when I last rebase\u0027d, will fix","commit_id":"c980851c59de6c3c2ac1be71fe9cd9b75b516ab3"}],"keystone/tests/unit/test_v3_identity.py":[{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"05452762d260cf3d258307bf60c1c8ca588c3553","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        # create user with \u0027DEFaUlT\u0027 domain_id instead if \u0027default\u0027"},{"line_number":225,"context_line":"        # and verify it fails"},{"line_number":226,"context_line":"        self.post(\u0027/users\u0027,"},{"line_number":227,"context_line":"                  body\u003d{\u0027user\u0027: {\"name\": \"baddomain\","},{"line_number":228,"context_line":"                                 \"domain_id\": \"DEFaUlT\","},{"line_number":229,"context_line":"                                 \"enabled\": True}},"},{"line_number":230,"context_line":"                  expected_status\u003dhttp_client.NOT_FOUND)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    def test_list_head_users(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_423981f1","line":229,"range":{"start_line":227,"start_character":1,"end_line":229,"end_character":51},"updated":"2016-07-21 02:12:25.000000000","message":"no need to change this.","commit_id":"0fd6d28d4faaf56e317bf8f46b86ca323c72fba8"}],"keystone/tests/unit/test_validation.py":[{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"308874aa9fa568e76c63a0661711d974b0de20eb","unresolved":false,"context_lines":[{"line_number":1685,"context_line":"    def test_validate_user_create_request_succeeds(self):"},{"line_number":1686,"context_line":"        \"\"\"Test that validating a user create request succeeds.\"\"\""},{"line_number":1687,"context_line":"        request_to_validate \u003d {\u0027name\u0027: self.user_name,"},{"line_number":1688,"context_line":"                               \u0027enabled\u0027: True}"},{"line_number":1689,"context_line":"        self.create_user_validator.validate(request_to_validate)"},{"line_number":1690,"context_line":""},{"line_number":1691,"context_line":"    def test_validate_user_create_with_all_valid_parameters_succeeds(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_47db4a1b","line":1688,"range":{"start_line":1688,"start_character":31,"end_line":1688,"end_character":46},"updated":"2016-07-21 07:25:25.000000000","message":"remove those unnecessary change, it\u0027s optional for both v2.0 and v3.","commit_id":"c3fdf2315a131c6bd54110a16bd069f4c7e16237"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"d83446b856b34e90b1c6ff85860ef4c1acb5057a","unresolved":false,"context_lines":[{"line_number":1685,"context_line":"    def test_validate_user_create_request_succeeds(self):"},{"line_number":1686,"context_line":"        \"\"\"Test that validating a user create request succeeds.\"\"\""},{"line_number":1687,"context_line":"        request_to_validate \u003d {\u0027name\u0027: self.user_name,"},{"line_number":1688,"context_line":"                               \u0027enabled\u0027: True}"},{"line_number":1689,"context_line":"        self.create_user_validator.validate(request_to_validate)"},{"line_number":1690,"context_line":""},{"line_number":1691,"context_line":"    def test_validate_user_create_with_all_valid_parameters_succeeds(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_e728639c","line":1688,"range":{"start_line":1688,"start_character":31,"end_line":1688,"end_character":46},"in_reply_to":"dada55a8_47db4a1b","updated":"2016-07-21 15:12:31.000000000","message":"whoops thought I did this, will fix","commit_id":"c3fdf2315a131c6bd54110a16bd069f4c7e16237"}]}
