)]}'
{"rally-jobs/rally.yaml":[{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"1674eb5f2f336ab458ebf5af4e04fa43883ca12c","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"  KeystoneBasic.create_and_update_user:"},{"line_number":175,"context_line":"    -"},{"line_number":176,"context_line":"      args: {}"},{"line_number":177,"context_line":"      runner:"},{"line_number":178,"context_line":"        type: \"constant\""},{"line_number":179,"context_line":"        times: 10"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"fa6399be_fc61d3a9","line":176,"updated":"2016-10-17 21:12:49.000000000","message":"args: \n  create_user_kwargs: {}\n  update_user_kwargs: {}","commit_id":"4b023d91eb502c57b14de32c72b809f380f48543"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"fd0ec4881508bc8581516e790219bc3eb6f786e2","unresolved":false,"context_lines":[{"line_number":189,"context_line":"  KeystoneBasic.create_and_update_user:"},{"line_number":190,"context_line":"    -"},{"line_number":191,"context_line":"      args:"},{"line_number":192,"context_line":"        create_user_kwargs: {}"},{"line_number":193,"context_line":"        update_user_kwargs:"},{"line_number":194,"context_line":"          email: \"newemail@rally.me\""},{"line_number":195,"context_line":"      runner:"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"1a6eadb0_9edb411b","line":192,"range":{"start_line":192,"start_character":8,"end_line":192,"end_character":30},"updated":"2016-12-20 00:47:23.000000000","message":"it is redundant","commit_id":"ab828fa8eb487b80feda0ed487dbd33a3f8e2c6f"}],"rally/plugins/openstack/scenarios/keystone/basic.py":[{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"1ebaef32ad3f0d78591c61b477950f565b31c757","unresolved":false,"context_lines":[{"line_number":324,"context_line":"    @logging.log_deprecated_args("},{"line_number":325,"context_line":"        \"The \u0027name_length\u0027 and \u0027password_length\u0027 arguments to \""},{"line_number":326,"context_line":"        \"create_user_update_password are ignored\","},{"line_number":327,"context_line":"        \"0.1.2\", [\"name_length\", \"password_length\"], once\u003dTrue)"},{"line_number":328,"context_line":"    def run(self, name_length\u003dNone, password_length\u003dNone):"},{"line_number":329,"context_line":"        \"\"\"Create user and update for that user.\"\"\""},{"line_number":330,"context_line":"        user \u003d self._user_create()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a98d1f4_f2dd5771","line":327,"updated":"2016-09-29 10:20:58.000000000","message":"don\u0027t add this parameters. they are deprecated!","commit_id":"5d4cc773af8b08ebc8c4fbc1875bd50369cb62d6"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"1ebaef32ad3f0d78591c61b477950f565b31c757","unresolved":false,"context_lines":[{"line_number":327,"context_line":"        \"0.1.2\", [\"name_length\", \"password_length\"], once\u003dTrue)"},{"line_number":328,"context_line":"    def run(self, name_length\u003dNone, password_length\u003dNone):"},{"line_number":329,"context_line":"        \"\"\"Create user and update for that user.\"\"\""},{"line_number":330,"context_line":"        user \u003d self._user_create()"},{"line_number":331,"context_line":"        self._update_user(user.id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a98d1f4_d2b05bf7","line":330,"updated":"2016-09-29 10:20:58.000000000","message":"there is more parameters https://github.com/openstack/python-keystoneclient/blob/master/keystoneclient/v2_0/users.py#L94","commit_id":"5d4cc773af8b08ebc8c4fbc1875bd50369cb62d6"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"1ebaef32ad3f0d78591c61b477950f565b31c757","unresolved":false,"context_lines":[{"line_number":328,"context_line":"    def run(self, name_length\u003dNone, password_length\u003dNone):"},{"line_number":329,"context_line":"        \"\"\"Create user and update for that user.\"\"\""},{"line_number":330,"context_line":"        user \u003d self._user_create()"},{"line_number":331,"context_line":"        self._update_user(user.id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a98d1f4_f2e71710","line":331,"updated":"2016-09-29 10:20:58.000000000","message":"there is more parameters. https://github.com/openstack/python-keystoneclient/blob/master/keystoneclient/v2_0/users.py#L48\n\nand don\u0027t forget to document them","commit_id":"5d4cc773af8b08ebc8c4fbc1875bd50369cb62d6"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"8765d585a831fd32990fb7c6d560f444cc4c8e22","unresolved":false,"context_lines":[{"line_number":339,"context_line":"                    name\u003d\"KeystoneBasic.create_and_update_user\")"},{"line_number":340,"context_line":"class CreateAndUpdateUser(kutils.KeystoneScenario):"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"    def run(self, **kwargs):"},{"line_number":343,"context_line":"        \"\"\"Create user and update the user.\"\"\""},{"line_number":344,"context_line":"        user \u003d self._user_create()"},{"line_number":345,"context_line":"        self._update_user(user.id, **kwargs)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa6399be_63438c13","line":342,"updated":"2016-10-16 22:18:29.000000000","message":"for user create and user update should be different kwargs\ncreate_user_kwargs, update_user_kwargs","commit_id":"3642ae9e8ce97fea01b1eec59e87b292a83e0bb4"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"8765d585a831fd32990fb7c6d560f444cc4c8e22","unresolved":false,"context_lines":[{"line_number":341,"context_line":""},{"line_number":342,"context_line":"    def run(self, **kwargs):"},{"line_number":343,"context_line":"        \"\"\"Create user and update the user.\"\"\""},{"line_number":344,"context_line":"        user \u003d self._user_create()"},{"line_number":345,"context_line":"        self._update_user(user.id, **kwargs)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa6399be_43404807","line":344,"updated":"2016-10-16 22:18:29.000000000","message":"here also should be passed kwargs","commit_id":"3642ae9e8ce97fea01b1eec59e87b292a83e0bb4"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"1674eb5f2f336ab458ebf5af4e04fa43883ca12c","unresolved":false,"context_lines":[{"line_number":339,"context_line":"                    name\u003d\"KeystoneBasic.create_and_update_user\")"},{"line_number":340,"context_line":"class CreateAndUpdateUser(kutils.KeystoneScenario):"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"    def run(self, create_user_kwargs, update_user_kwargs):"},{"line_number":343,"context_line":"        \"\"\"Create user and update the user."},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        :param create_user_kwargs: Optional additional arguments for user"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_dc808f4c","line":342,"range":{"start_line":342,"start_character":33,"end_line":342,"end_character":34},"updated":"2016-10-17 21:12:49.000000000","message":"they should have default values","commit_id":"4b023d91eb502c57b14de32c72b809f380f48543"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"89dbfd87b8d1d1ac58f73c73b89267bef9c07790","unresolved":false,"context_lines":[{"line_number":60,"context_line":"@validation.required_openstack(admin\u003dTrue)"},{"line_number":61,"context_line":"@scenario.configure(context\u003d{\"admin_cleanup\": [\"keystone\"]},"},{"line_number":62,"context_line":"                    name\u003d\"KeystoneBasic.create_user_set_enabled_and_delete\")"},{"line_number":63,"context_line":"class CreateUserSetEnabledAndDelete(kutils.KeystoneScenario):"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def run(self, enabled\u003dTrue, **kwargs):"},{"line_number":66,"context_line":"        \"\"\"Create a keystone user, enable or disable it, and delete it."}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5da102_c5818b91","line":63,"updated":"2016-10-27 08:27:24.000000000","message":"We should deprecate this scenario, since your scenario can be used to do this already.","commit_id":"98d3a4d7354e516b49fbb23d54d0ebb4da7ba033"},{"author":{"_account_id":23435,"name":"zhangzhihui","email":"zhangzh.fnst@cn.fujitsu.com","username":"zhangzhang"},"change_message_id":"540c32ffd5942c00a582993c9ae6f9479862a07c","unresolved":false,"context_lines":[{"line_number":60,"context_line":"@validation.required_openstack(admin\u003dTrue)"},{"line_number":61,"context_line":"@scenario.configure(context\u003d{\"admin_cleanup\": [\"keystone\"]},"},{"line_number":62,"context_line":"                    name\u003d\"KeystoneBasic.create_user_set_enabled_and_delete\")"},{"line_number":63,"context_line":"class CreateUserSetEnabledAndDelete(kutils.KeystoneScenario):"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def run(self, enabled\u003dTrue, **kwargs):"},{"line_number":66,"context_line":"        \"\"\"Create a keystone user, enable or disable it, and delete it."}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5da102_0be1262d","line":63,"in_reply_to":"ba5da102_c5818b91","updated":"2016-11-03 02:37:15.000000000","message":"I\u0027ll do it in another patch","commit_id":"98d3a4d7354e516b49fbb23d54d0ebb4da7ba033"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"170ddddfe57689c7740751da1d58808eb0222ae6","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        self._resource_delete(user)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"@validation.required_openstack(admin\u003dTrue)"},{"line_number":61,"context_line":"@validation.required_api_versions(component\u003d\"keystone\", versions\u003d[2.0])"},{"line_number":62,"context_line":"@scenario.configure(context\u003d{\"admin_cleanup\": [\"keystone\"]},"},{"line_number":63,"context_line":"                    name\u003d\"KeystoneBasic.create_tenant\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba5da102_020e2be5","line":60,"updated":"2016-11-04 10:43:50.000000000","message":"We can\u0027t just delete create_user_set_enabled_and_delete -- people are using it. It needs to be deprecated first.","commit_id":"72a4b77f78387f013d0f5f04d4a28d551b1787bf"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"170ddddfe57689c7740751da1d58808eb0222ae6","unresolved":false,"context_lines":[{"line_number":256,"context_line":"        tenant \u003d self._tenant_create(**kwargs)"},{"line_number":257,"context_line":"        self._update_tenant(tenant)"},{"line_number":258,"context_line":"        self._resource_delete(tenant)"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"@validation.required_openstack(admin\u003dTrue)"},{"line_number":262,"context_line":"@scenario.configure(context\u003d{\"admin_cleanup\": [\"keystone\"]},"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba5da102_62f527ca","line":259,"updated":"2016-11-04 10:43:50.000000000","message":"create_user_update_password needs to be deprecated, too, not removed.","commit_id":"72a4b77f78387f013d0f5f04d4a28d551b1787bf"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"fd0ec4881508bc8581516e790219bc3eb6f786e2","unresolved":false,"context_lines":[{"line_number":382,"context_line":"        update_user_kwargs \u003d update_user_kwargs or {}"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"        user \u003d self.admin_keystone.create_user(**create_user_kwargs)"},{"line_number":385,"context_line":"        self.admin_keystone.update_user(user.id, **update_user_kwargs)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a6eadb0_1e357145","line":385,"range":{"start_line":385,"start_character":8,"end_line":385,"end_character":70},"updated":"2016-12-20 00:47:23.000000000","message":"One of keystone cores left a comment that updating email is broken in keystone v3 now (https://review.openstack.org/#/c/394583/17/rally/plugins/openstack/services/identity/keystone_v3.py). So actually, we should fail scenario, but update method of keystone doesn\u0027t raise an error.\n\nLet\u0027s extend your scenario with additional get_user call and check that obtained object has updated fields.","commit_id":"ab828fa8eb487b80feda0ed487dbd33a3f8e2c6f"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"c8d0f7f4769130d4a9234d5f2a88da12ca6268a5","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"@validation.required_openstack(admin\u003dTrue)"},{"line_number":111,"context_line":"@validation.required_api_versions(component\u003d\"keystone\", versions\u003d[2.0])"},{"line_number":112,"context_line":"@scenario.configure(context\u003d{\"admin_cleanup\": [\"keystone\"]},"},{"line_number":113,"context_line":"                    name\u003d\"KeystoneBasic.authenticate_user_and_validate_token\")"},{"line_number":114,"context_line":"class AuthenticateUserAndValidateToken(KeystoneBasic):"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba5201f7_b3d02ccb","line":111,"range":{"start_line":111,"start_character":0,"end_line":111,"end_character":71},"updated":"2017-01-10 10:00:45.000000000","message":"KeystoneBasic.authenticate_user_and_validate_token scenario should support keystone v3.","commit_id":"829b988d66ce2fe09285a3313a8c487169b3f710"}],"rally/plugins/openstack/scenarios/keystone/utils.py":[{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"1ebaef32ad3f0d78591c61b477950f565b31c757","unresolved":false,"context_lines":[{"line_number":221,"context_line":"            admin_clients.users.update_password(user_id, password)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    @atomic.action_timer(\"keystone.update_user\")"},{"line_number":224,"context_line":"    def _update_user(self, user_id):"},{"line_number":225,"context_line":"        \"\"\"Update user name."},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"        :param user_id: id of the user"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a98d1f4_5201abad","line":224,"updated":"2016-09-29 10:20:58.000000000","message":"you should allow to pass all parameters https://github.com/openstack/python-keystoneclient/blob/master/keystoneclient/v2_0/users.py#L48","commit_id":"5d4cc773af8b08ebc8c4fbc1875bd50369cb62d6"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"6e77ce50c53f074e8a4de9a02718e3d6536cc5ee","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        else:"},{"line_number":221,"context_line":"            admin_clients.users.update_password(user_id, password)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    @atomic.action_timer(\"keystone.update_user_name\")"},{"line_number":224,"context_line":"    def _update_user_name(self, user_id):"},{"line_number":225,"context_line":"        \"\"\"Update user name."},{"line_number":226,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a98d1f4_0a55ee1b","line":223,"updated":"2016-09-30 09:55:46.000000000","message":"Keystone client doesn\u0027t have such action. It has update_user but not update_user_name. We\u0027ve created separate atomic action for keystone action with specific parameter but its wrong. Better to create in utils update_user and pass there all update arguments. And If you need to test only update with specific parameter then you may pass specific parameter here from scenario.\n\nName field in _update_user arguments should be patched by self.generate_random_name() as its now.","commit_id":"218a4c8ad41d0f6fbb2940184f39cc6b595f90bf"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"9fe1aa76f83d054d2a3205b078ab3d95f55a4f3f","unresolved":false,"context_lines":[{"line_number":253,"context_line":"        :param user_id: id of the user"},{"line_number":254,"context_line":"        \"\"\""},{"line_number":255,"context_line":"        name \u003d self.generate_random_name()"},{"line_number":256,"context_line":"        password \u003d self.generate_random_name()"},{"line_number":257,"context_line":"        email \u003d name + \"@rally.me\""},{"line_number":258,"context_line":"        enabled \u003d False"},{"line_number":259,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa6399be_2fc65248","line":256,"updated":"2016-10-12 22:46:38.000000000","message":"password \u003d kwargs.pop(\"password\", str(uuid.uuid4()))","commit_id":"d330e6a015468811cd6b4eae77d45dee098c728d"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"9fe1aa76f83d054d2a3205b078ab3d95f55a4f3f","unresolved":false,"context_lines":[{"line_number":254,"context_line":"        \"\"\""},{"line_number":255,"context_line":"        name \u003d self.generate_random_name()"},{"line_number":256,"context_line":"        password \u003d self.generate_random_name()"},{"line_number":257,"context_line":"        email \u003d name + \"@rally.me\""},{"line_number":258,"context_line":"        enabled \u003d False"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"        admin_clients \u003d self.admin_clients(\"keystone\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa6399be_0ac17c80","line":257,"updated":"2016-10-12 22:46:38.000000000","message":"email \u003d email or (name + \"@rally.me\")","commit_id":"d330e6a015468811cd6b4eae77d45dee098c728d"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"9fe1aa76f83d054d2a3205b078ab3d95f55a4f3f","unresolved":false,"context_lines":[{"line_number":255,"context_line":"        name \u003d self.generate_random_name()"},{"line_number":256,"context_line":"        password \u003d self.generate_random_name()"},{"line_number":257,"context_line":"        email \u003d name + \"@rally.me\""},{"line_number":258,"context_line":"        enabled \u003d False"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"        admin_clients \u003d self.admin_clients(\"keystone\")"},{"line_number":261,"context_line":"        admin_clients.users.update(user_id, name\u003dname, email\u003demail,"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa6399be_eade086c","line":258,"updated":"2016-10-12 22:46:38.000000000","message":"Why you\u0027ve override it? It should be passed to keystoneclient","commit_id":"d330e6a015468811cd6b4eae77d45dee098c728d"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"9fe1aa76f83d054d2a3205b078ab3d95f55a4f3f","unresolved":false,"context_lines":[{"line_number":260,"context_line":"        admin_clients \u003d self.admin_clients(\"keystone\")"},{"line_number":261,"context_line":"        admin_clients.users.update(user_id, name\u003dname, email\u003demail,"},{"line_number":262,"context_line":"                                   enabled\u003denabled, **kwargs)"},{"line_number":263,"context_line":"        self._update_user_password(user_id, password)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    @atomic.action_timer(\"keystone.create_ec2creds\")"},{"line_number":266,"context_line":"    def _create_ec2credentials(self, user_id, tenant_id):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa6399be_0a109c4d","line":263,"updated":"2016-10-12 22:46:38.000000000","message":"don\u0027t use one atomic inside other, You should call direct keystoneclient methods. Also update_user method differ in v2 and v3. So... You need to add it to keystone wrapper","commit_id":"d330e6a015468811cd6b4eae77d45dee098c728d"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"89dbfd87b8d1d1ac58f73c73b89267bef9c07790","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        :param enabled: Boolean indicating if the user should be"},{"line_number":49,"context_line":"                        enabled (True) or disabled (False)"},{"line_number":50,"context_line":"        \"\"\""},{"line_number":51,"context_line":"        self.admin_clients(\"keystone\").users.update_enabled(user, enabled)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    @atomic.action_timer(\"keystone.validate_token\")"},{"line_number":54,"context_line":"    def _token_validate(self, token):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5da102_e5a76f4d","line":51,"updated":"2016-10-27 08:27:24.000000000","message":"Let\u0027s replace this with your new functions.","commit_id":"98d3a4d7354e516b49fbb23d54d0ebb4da7ba033"},{"author":{"_account_id":23435,"name":"zhangzhihui","email":"zhangzh.fnst@cn.fujitsu.com","username":"zhangzhang"},"change_message_id":"540c32ffd5942c00a582993c9ae6f9479862a07c","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        :param enabled: Boolean indicating if the user should be"},{"line_number":49,"context_line":"                        enabled (True) or disabled (False)"},{"line_number":50,"context_line":"        \"\"\""},{"line_number":51,"context_line":"        self.admin_clients(\"keystone\").users.update_enabled(user, enabled)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    @atomic.action_timer(\"keystone.validate_token\")"},{"line_number":54,"context_line":"    def _token_validate(self, token):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5da102_95d5e844","line":51,"in_reply_to":"ba5da102_e5a76f4d","updated":"2016-11-03 02:37:15.000000000","message":"I will do it in another patch","commit_id":"98d3a4d7354e516b49fbb23d54d0ebb4da7ba033"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"89dbfd87b8d1d1ac58f73c73b89267bef9c07790","unresolved":false,"context_lines":[{"line_number":235,"context_line":"                                                      name, description)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    @atomic.action_timer(\"keystone.update_user_password\")"},{"line_number":238,"context_line":"    def _update_user_password(self, user_id, password):"},{"line_number":239,"context_line":"        \"\"\"Update user password."},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        :param user_id: id of the user"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5da102_a55bb753","line":238,"updated":"2016-10-27 08:27:24.000000000","message":"Let\u0027s replace this with your new functions.","commit_id":"98d3a4d7354e516b49fbb23d54d0ebb4da7ba033"},{"author":{"_account_id":23435,"name":"zhangzhihui","email":"zhangzh.fnst@cn.fujitsu.com","username":"zhangzhang"},"change_message_id":"540c32ffd5942c00a582993c9ae6f9479862a07c","unresolved":false,"context_lines":[{"line_number":235,"context_line":"                                                      name, description)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    @atomic.action_timer(\"keystone.update_user_password\")"},{"line_number":238,"context_line":"    def _update_user_password(self, user_id, password):"},{"line_number":239,"context_line":"        \"\"\"Update user password."},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        :param user_id: id of the user"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5da102_75d05454","line":238,"in_reply_to":"ba5da102_a55bb753","updated":"2016-11-03 02:37:15.000000000","message":"I will do it in another patch","commit_id":"98d3a4d7354e516b49fbb23d54d0ebb4da7ba033"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"a6a6d83946cdf5ecc0cee2e594587cef73fed813","unresolved":false,"context_lines":[{"line_number":251,"context_line":"    def _update_user(self, user_id, **kwargs):"},{"line_number":252,"context_line":"        \"\"\"Update user."},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        :param user_id: id of the user"},{"line_number":255,"context_line":"        \"\"\""},{"line_number":256,"context_line":"        name \u003d self.generate_random_name()"},{"line_number":257,"context_line":"        password \u003d kwargs.pop(\"password\", str(uuid.uuid4()))"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa6399be_001d23bd","line":254,"updated":"2016-10-18 11:20:23.000000000","message":"kwargs not documented","commit_id":"98d3a4d7354e516b49fbb23d54d0ebb4da7ba033"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"89dbfd87b8d1d1ac58f73c73b89267bef9c07790","unresolved":false,"context_lines":[{"line_number":255,"context_line":"        \"\"\""},{"line_number":256,"context_line":"        name \u003d self.generate_random_name()"},{"line_number":257,"context_line":"        password \u003d kwargs.pop(\"password\", str(uuid.uuid4()))"},{"line_number":258,"context_line":"        email \u003d name + \"@rally.me\""},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"        admin_clients \u003d keystone_wrapper.wrap(self.admin_clients(\"keystone\"))"},{"line_number":261,"context_line":"        admin_clients.update_user(user_id, name\u003dname, email\u003demail,"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5da102_e0483d5e","line":258,"updated":"2016-10-27 08:27:24.000000000","message":"Why are we always updating these things? That seems like a really surprising side effect. Why don\u0027t we just update what the user tells us to update?\n\nHow will this act when someone tries to update the name or email?","commit_id":"98d3a4d7354e516b49fbb23d54d0ebb4da7ba033"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"d57ef24edbffad87b29ab5ffabfef11ee7f754e9","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        :param enabled: Boolean indicating if the user should be"},{"line_number":49,"context_line":"                        enabled (True) or disabled (False)"},{"line_number":50,"context_line":"        \"\"\""},{"line_number":51,"context_line":"        self.admin_clients(\"keystone\").users.update_enabled(user, enabled)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    @atomic.action_timer(\"keystone.validate_token\")"},{"line_number":54,"context_line":"    def _token_validate(self, token):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5da102_bfa6a6ab","line":51,"updated":"2016-11-03 11:19:27.000000000","message":"Let\u0027s replace this with your new functions. There\u0027s no value in waiting to do it in another patch (and accruing tech debt in the mean time) -- the refactoring I suggested in PS6 is fairly minimal and should be done now. As it stands, this patch doesn\u0027t justify the tech debt that it incurs.\n\n(The same goes for my other comments on PS6.)","commit_id":"4c7d3f8ecdf629853b5988a087f36db2e3028b8f"},{"author":{"_account_id":23435,"name":"zhangzhihui","email":"zhangzh.fnst@cn.fujitsu.com","username":"zhangzhang"},"change_message_id":"20913d52629ceba6119b6f4c2d54b234a11530da","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        :param enabled: Boolean indicating if the user should be"},{"line_number":49,"context_line":"                        enabled (True) or disabled (False)"},{"line_number":50,"context_line":"        \"\"\""},{"line_number":51,"context_line":"        self.admin_clients(\"keystone\").users.update_enabled(user, enabled)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    @atomic.action_timer(\"keystone.validate_token\")"},{"line_number":54,"context_line":"    def _token_validate(self, token):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5da102_6c4a8357","line":51,"in_reply_to":"ba5da102_bfa6a6ab","updated":"2016-11-04 08:36:22.000000000","message":"I will delete the atomic action","commit_id":"4c7d3f8ecdf629853b5988a087f36db2e3028b8f"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"d57ef24edbffad87b29ab5ffabfef11ee7f754e9","unresolved":false,"context_lines":[{"line_number":256,"context_line":"        \"\"\""},{"line_number":257,"context_line":"        name \u003d self.generate_random_name()"},{"line_number":258,"context_line":"        password \u003d kwargs.pop(\"password\", str(uuid.uuid4()))"},{"line_number":259,"context_line":"        email \u003d name + \"@rally.me\""},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        admin_clients \u003d keystone_wrapper.wrap(self.admin_clients(\"keystone\"))"},{"line_number":262,"context_line":"        admin_clients.update_user(user_id, name\u003dname, email\u003demail,"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5da102_3f3a9699","line":259,"updated":"2016-11-03 11:19:27.000000000","message":"Why are we always updating these things? That seems like a really surprising side effect. Why don\u0027t we just update what the user tells us to update?\n\nHow will this act when someone tries to update the name or email?","commit_id":"4c7d3f8ecdf629853b5988a087f36db2e3028b8f"},{"author":{"_account_id":23435,"name":"zhangzhihui","email":"zhangzh.fnst@cn.fujitsu.com","username":"zhangzhang"},"change_message_id":"20913d52629ceba6119b6f4c2d54b234a11530da","unresolved":false,"context_lines":[{"line_number":256,"context_line":"        \"\"\""},{"line_number":257,"context_line":"        name \u003d self.generate_random_name()"},{"line_number":258,"context_line":"        password \u003d kwargs.pop(\"password\", str(uuid.uuid4()))"},{"line_number":259,"context_line":"        email \u003d name + \"@rally.me\""},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        admin_clients \u003d keystone_wrapper.wrap(self.admin_clients(\"keystone\"))"},{"line_number":262,"context_line":"        admin_clients.update_user(user_id, name\u003dname, email\u003demail,"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5da102_ac4bbb5e","line":259,"in_reply_to":"ba5da102_3f3a9699","updated":"2016-11-04 08:36:22.000000000","message":"In addition to name, the other will be updated what the user tells us to update","commit_id":"4c7d3f8ecdf629853b5988a087f36db2e3028b8f"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"5bf151cceec60ced16214a85d3910d2ba3ca4d87","unresolved":false,"context_lines":[{"line_number":256,"context_line":"        \"\"\""},{"line_number":257,"context_line":"        name \u003d self.generate_random_name()"},{"line_number":258,"context_line":"        password \u003d kwargs.pop(\"password\", str(uuid.uuid4()))"},{"line_number":259,"context_line":"        email \u003d name + \"@rally.me\""},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        admin_clients \u003d keystone_wrapper.wrap(self.admin_clients(\"keystone\"))"},{"line_number":262,"context_line":"        admin_clients.update_user(user_id, name\u003dname, email\u003demail,"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5da102_0240eb06","line":259,"in_reply_to":"ba5da102_ac4bbb5e","updated":"2016-11-04 10:40:45.000000000","message":"Name, password, and email are always updated. Why?\n\nWhen the user tries to update the name, password, or email explicitly, their input will be silently ignored.\n\nNeither of these seem like sane or intuitive defaults. Why don\u0027t we only update what the user tells us to update? Why do we silently ignore user input, and instead change three things, unconditionally, without documenting that fact?","commit_id":"4c7d3f8ecdf629853b5988a087f36db2e3028b8f"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"170ddddfe57689c7740751da1d58808eb0222ae6","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        :param user_id: id of the user"},{"line_number":232,"context_line":"        :kwargs: Optional additional arguments for user updation"},{"line_number":233,"context_line":"        \"\"\""},{"line_number":234,"context_line":"        name \u003d self.generate_random_name()"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        admin_clients \u003d keystone_wrapper.wrap(self.admin_clients(\"keystone\"))"},{"line_number":237,"context_line":"        admin_clients.update_user(user_id, name\u003dname, **kwargs)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba5da102_826b1b85","line":234,"updated":"2016-11-04 10:43:50.000000000","message":"Sorry, didn\u0027t see your new patchset, but the same question (albeit slightly narrower) still applies. We should update exactly what the user tells us to update, not try to be smarter than the user (in an undocumented fashion).","commit_id":"72a4b77f78387f013d0f5f04d4a28d551b1787bf"}],"rally/plugins/openstack/wrappers/keystone.py":[{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"a6a6d83946cdf5ecc0cee2e594587cef73fed813","unresolved":false,"context_lines":[{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def update_user(self, user_id, name\u003dNone, domain_name\u003d\"Default\","},{"line_number":223,"context_line":"                    project\u003dNone, password\u003dNone, email\u003dNone, description\u003dNone,"},{"line_number":224,"context_line":"                    enabled\u003dNone, default_project\u003dNone, **kwargs):"},{"line_number":225,"context_line":"        domain_id \u003d self._get_domain_id(domain_name)"},{"line_number":226,"context_line":"        user \u003d self.client.users.update(user_id, name\u003dname, domain\u003ddomain_id,"},{"line_number":227,"context_line":"                                        project\u003dproject, password\u003dpassword,"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa6399be_20178755","line":224,"updated":"2016-10-18 11:20:23.000000000","message":"\"\"\"Update a user.\n        :param user: the user to be updated on the server.\n        :type user: str or :class:`keystoneclient.v3.users.User`\n        :param str name: the new name of the user.\n        :param domain: the new domain of the user.\n        :type domain: str or :class:`keystoneclient.v3.domains.Domain`\n        :param project: the new default project of the user.\n                        (deprecated, see warning below)\n        :type project: str or :class:`keystoneclient.v3.projects.Project`\n        :param str password: the new password of the user.\n        :param str email: the new email of the user.\n        :param str description: the newdescription of the user.\n        :param bool enabled: whether the user is enabled.\n        :param default_project: the new default project of the user.\n        :type default_project: str or\n                               :class:`keystoneclient.v3.projects.Project`\n        :param kwargs: any other attribute provided will be passed to server.\n        :returns: the updated user returned from server.\n\nYou may add it in another patch","commit_id":"98d3a4d7354e516b49fbb23d54d0ebb4da7ba033"},{"author":{"_account_id":23435,"name":"zhangzhihui","email":"zhangzh.fnst@cn.fujitsu.com","username":"zhangzhang"},"change_message_id":"540c32ffd5942c00a582993c9ae6f9479862a07c","unresolved":false,"context_lines":[{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def update_user(self, user_id, name\u003dNone, domain_name\u003d\"Default\","},{"line_number":223,"context_line":"                    project\u003dNone, password\u003dNone, email\u003dNone, description\u003dNone,"},{"line_number":224,"context_line":"                    enabled\u003dNone, default_project\u003dNone, **kwargs):"},{"line_number":225,"context_line":"        domain_id \u003d self._get_domain_id(domain_name)"},{"line_number":226,"context_line":"        user \u003d self.client.users.update(user_id, name\u003dname, domain\u003ddomain_id,"},{"line_number":227,"context_line":"                                        project\u003dproject, password\u003dpassword,"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5da102_da5f8f70","line":224,"in_reply_to":"ba5da102_251de773","updated":"2016-11-03 02:37:15.000000000","message":"We should keep in line with clients\u0027s function.","commit_id":"98d3a4d7354e516b49fbb23d54d0ebb4da7ba033"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"89dbfd87b8d1d1ac58f73c73b89267bef9c07790","unresolved":false,"context_lines":[{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def update_user(self, user_id, name\u003dNone, domain_name\u003d\"Default\","},{"line_number":223,"context_line":"                    project\u003dNone, password\u003dNone, email\u003dNone, description\u003dNone,"},{"line_number":224,"context_line":"                    enabled\u003dNone, default_project\u003dNone, **kwargs):"},{"line_number":225,"context_line":"        domain_id \u003d self._get_domain_id(domain_name)"},{"line_number":226,"context_line":"        user \u003d self.client.users.update(user_id, name\u003dname, domain\u003ddomain_id,"},{"line_number":227,"context_line":"                                        project\u003dproject, password\u003dpassword,"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5da102_251de773","line":224,"in_reply_to":"fa6399be_20178755","updated":"2016-10-27 08:27:24.000000000","message":"Why do you need to specify all of these kwargs by name? Can\u0027t you just do:\n\n    def update_user(self, user_id, domain_name\u003d\"Default\", **kwargs):\n        domain_id \u003d ...\n\nYou don\u0027t do anything special with anything but domain_name, so it looks to me like you can just pass all of the kwargs through, and simplify the docstring as a result.","commit_id":"98d3a4d7354e516b49fbb23d54d0ebb4da7ba033"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"d57ef24edbffad87b29ab5ffabfef11ee7f754e9","unresolved":false,"context_lines":[{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def update_user(self, user_id, name\u003dNone, domain_name\u003d\"Default\","},{"line_number":223,"context_line":"                    project\u003dNone, password\u003dNone, email\u003dNone, description\u003dNone,"},{"line_number":224,"context_line":"                    enabled\u003dNone, default_project\u003dNone, **kwargs):"},{"line_number":225,"context_line":"        \"\"\"Update a user."},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"        :param user: the user to be updated on the server."}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5da102_dff7dad0","line":224,"updated":"2016-11-03 11:19:27.000000000","message":"There is absolutely no value -- and probably negative value -- in keeping consistency with the client functions here. Please don\u0027t, unless there\u0027s an actual functional need to do so. It looks to me that you can just do:\n\n    def update_user(self, user_id, domain_name\u003d\"Default\", **kwargs):\n        domain_id \u003d ...\n\nWhich is much more readable and understandable for users of Rally.","commit_id":"4c7d3f8ecdf629853b5988a087f36db2e3028b8f"},{"author":{"_account_id":23435,"name":"zhangzhihui","email":"zhangzh.fnst@cn.fujitsu.com","username":"zhangzhang"},"change_message_id":"20913d52629ceba6119b6f4c2d54b234a11530da","unresolved":false,"context_lines":[{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def update_user(self, user_id, name\u003dNone, domain_name\u003d\"Default\","},{"line_number":223,"context_line":"                    project\u003dNone, password\u003dNone, email\u003dNone, description\u003dNone,"},{"line_number":224,"context_line":"                    enabled\u003dNone, default_project\u003dNone, **kwargs):"},{"line_number":225,"context_line":"        \"\"\"Update a user."},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"        :param user: the user to be updated on the server."}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5da102_41690825","line":224,"in_reply_to":"ba5da102_dff7dad0","updated":"2016-11-04 08:36:22.000000000","message":"ok","commit_id":"4c7d3f8ecdf629853b5988a087f36db2e3028b8f"}],"tests/unit/plugins/openstack/scenarios/keystone/test_utils.py":[{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"89dbfd87b8d1d1ac58f73c73b89267bef9c07790","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        scenario \u003d utils.KeystoneScenario(self.context)"},{"line_number":305,"context_line":"        scenario.generate_random_name \u003d mock.MagicMock("},{"line_number":306,"context_line":"            return_value\u003d\"random_name\")"},{"line_number":307,"context_line":"        fake_email \u003d \"random_name\" + \"@rally.me\""},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        scenario._update_user(user.id, fakeargs\u003d\"fakeargs\")"},{"line_number":310,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5da102_600eed35","line":307,"updated":"2016-10-27 08:27:24.000000000","message":"String concatenation of two constants?","commit_id":"98d3a4d7354e516b49fbb23d54d0ebb4da7ba033"},{"author":{"_account_id":23435,"name":"zhangzhihui","email":"zhangzh.fnst@cn.fujitsu.com","username":"zhangzhang"},"change_message_id":"540c32ffd5942c00a582993c9ae6f9479862a07c","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        scenario \u003d utils.KeystoneScenario(self.context)"},{"line_number":305,"context_line":"        scenario.generate_random_name \u003d mock.MagicMock("},{"line_number":306,"context_line":"            return_value\u003d\"random_name\")"},{"line_number":307,"context_line":"        fake_email \u003d \"random_name\" + \"@rally.me\""},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        scenario._update_user(user.id, fakeargs\u003d\"fakeargs\")"},{"line_number":310,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5da102_5a753ff7","line":307,"in_reply_to":"ba5da102_600eed35","updated":"2016-11-03 02:37:15.000000000","message":"actually this equivalent to that \nfake_email \u003d scenario.generate_random_name.return_value + \"@rally.me\"","commit_id":"98d3a4d7354e516b49fbb23d54d0ebb4da7ba033"}]}
