)]}'
{"rally/plugins/openstack/scenarios/keystone/basic.py":[{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"79c72d1eb48038d3b20b53256dd3cfae720fe2f0","unresolved":false,"context_lines":[{"line_number":94,"context_line":"@validation.required_openstack(admin\u003dTrue)"},{"line_number":95,"context_line":"@scenario.configure(context\u003d{\"admin_cleanup\": [\"keystone\"]},"},{"line_number":96,"context_line":"                    name\u003d\"KeystoneBasic.create_tenant\")"},{"line_number":97,"context_line":"class CreateTenant(KeystoneBasic):"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    @logging.log_deprecated_args("},{"line_number":100,"context_line":"        \"The \u0027name_length\u0027 argument to create_tenant is ignored\","}],"source_content_type":"text/x-python","patch_set":25,"id":"5a74a57a_efa91d92","line":97,"range":{"start_line":97,"start_character":6,"end_line":97,"end_character":18},"updated":"2016-11-29 17:33:41.000000000","message":"In UnifiedKeystoneV2Service class, tenant operation function name is replaced by project operation function name.Is it suitable for using the old class name?","commit_id":"fc8939aaa46e883758dfb10273a78645b9d0c526"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"99c8866407f8897e41b9acd84aea693d07c69e76","unresolved":false,"context_lines":[{"line_number":94,"context_line":"@validation.required_openstack(admin\u003dTrue)"},{"line_number":95,"context_line":"@scenario.configure(context\u003d{\"admin_cleanup\": [\"keystone\"]},"},{"line_number":96,"context_line":"                    name\u003d\"KeystoneBasic.create_tenant\")"},{"line_number":97,"context_line":"class CreateTenant(KeystoneBasic):"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    @logging.log_deprecated_args("},{"line_number":100,"context_line":"        \"The \u0027name_length\u0027 argument to create_tenant is ignored\","}],"source_content_type":"text/x-python","patch_set":25,"id":"3a71b18c_ea950187","line":97,"range":{"start_line":97,"start_character":6,"end_line":97,"end_character":18},"in_reply_to":"5a74a57a_efa91d92","updated":"2016-12-05 12:03:54.000000000","message":"Yeah, we need to rename scenarios too(since we switched to keystone v3 terms), but I prefer to do it in separate patches.","commit_id":"fc8939aaa46e883758dfb10273a78645b9d0c526"}],"rally/plugins/openstack/services/identity/identity.py":[{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"1c7098ee28b0b4c0c02a64aed93e610beb8aa211","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        \"\"\"List all users.\"\"\""},{"line_number":108,"context_line":"        return self._impl.list_users()"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def update_user(self, user_id, enabled\u003dNone, name\u003dNone, email\u003dNone,"},{"line_number":111,"context_line":"                    password\u003dNone):"},{"line_number":112,"context_line":"        return self._impl.update_user(user_id, enabled\u003denabled, name\u003dname,"},{"line_number":113,"context_line":"                                      email\u003demail, password\u003dpassword)"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a77a97e_94066b1b","line":110,"range":{"start_line":110,"start_character":60,"end_line":110,"end_character":70},"updated":"2016-11-17 13:32:19.000000000","message":"we don\u0027t have field email, lets not advertise it","commit_id":"632a1ab806e7c320287e4980f5a17c9d55efa29c"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"9c32cd607929aa80a5c0925aaaffa3dba3d73a75","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        \"\"\"List all users.\"\"\""},{"line_number":108,"context_line":"        return self._impl.list_users()"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def update_user(self, user_id, enabled\u003dNone, name\u003dNone, email\u003dNone,"},{"line_number":111,"context_line":"                    password\u003dNone):"},{"line_number":112,"context_line":"        return self._impl.update_user(user_id, enabled\u003denabled, name\u003dname,"},{"line_number":113,"context_line":"                                      email\u003demail, password\u003dpassword)"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a77a97e_caa9a57d","line":110,"range":{"start_line":110,"start_character":60,"end_line":110,"end_character":70},"in_reply_to":"7a77a97e_94066b1b","updated":"2016-11-21 13:50:47.000000000","message":"Done","commit_id":"632a1ab806e7c320287e4980f5a17c9d55efa29c"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"1c7098ee28b0b4c0c02a64aed93e610beb8aa211","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    def update_user(self, user_id, enabled\u003dNone, name\u003dNone, email\u003dNone,"},{"line_number":111,"context_line":"                    password\u003dNone):"},{"line_number":112,"context_line":"        return self._impl.update_user(user_id, enabled\u003denabled, name\u003dname,"},{"line_number":113,"context_line":"                                      email\u003demail, password\u003dpassword)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def get_user(self, user_id):"},{"line_number":116,"context_line":"        \"\"\"Get user.\"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"7a77a97e_14133b5c","line":113,"range":{"start_line":113,"start_character":38,"end_line":113,"end_character":49},"updated":"2016-11-17 13:32:19.000000000","message":"same here","commit_id":"632a1ab806e7c320287e4980f5a17c9d55efa29c"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"9c32cd607929aa80a5c0925aaaffa3dba3d73a75","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    def update_user(self, user_id, enabled\u003dNone, name\u003dNone, email\u003dNone,"},{"line_number":111,"context_line":"                    password\u003dNone):"},{"line_number":112,"context_line":"        return self._impl.update_user(user_id, enabled\u003denabled, name\u003dname,"},{"line_number":113,"context_line":"                                      email\u003demail, password\u003dpassword)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def get_user(self, user_id):"},{"line_number":116,"context_line":"        \"\"\"Get user.\"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"7a77a97e_8a9fad4f","line":113,"range":{"start_line":113,"start_character":38,"end_line":113,"end_character":49},"in_reply_to":"7a77a97e_14133b5c","updated":"2016-11-21 13:50:47.000000000","message":"Done","commit_id":"632a1ab806e7c320287e4980f5a17c9d55efa29c"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"1c7098ee28b0b4c0c02a64aed93e610beb8aa211","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        \"\"\"Get user.\"\"\""},{"line_number":117,"context_line":"        return self._impl.get_user(user_id)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def create_service(self, name\u003dNone, service_type\u003dNone, description\u003dNone):"},{"line_number":120,"context_line":"        \"\"\"Creates keystone service with random name."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        :param name: name of service to create"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a77a97e_94bd8bb9","line":119,"range":{"start_line":119,"start_character":40,"end_line":119,"end_character":58},"updated":"2016-11-17 13:32:19.000000000","message":"ok, i figured out why you do this. Lets have it as it is here :(","commit_id":"632a1ab806e7c320287e4980f5a17c9d55efa29c"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"1c7098ee28b0b4c0c02a64aed93e610beb8aa211","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        \"\"\"Get user.\"\"\""},{"line_number":117,"context_line":"        return self._impl.get_user(user_id)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def create_service(self, name\u003dNone, service_type\u003dNone, description\u003dNone):"},{"line_number":120,"context_line":"        \"\"\"Creates keystone service with random name."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        :param name: name of service to create"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a77a97e_344af755","line":119,"range":{"start_line":119,"start_character":40,"end_line":119,"end_character":57},"updated":"2016-11-17 13:32:19.000000000","message":"type is required argument. Service cannot be created without a type. All other arguments are optional.","commit_id":"632a1ab806e7c320287e4980f5a17c9d55efa29c"},{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"6a2eb75d5c39d3e86da8ff531948c82a026572e8","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        :param enabled: enabled status of project"},{"line_number":53,"context_line":"        :param description: project description to be set"},{"line_number":54,"context_line":"        \"\"\""},{"line_number":55,"context_line":"        self._impl.update_project(project_id, name\u003dname, enabled\u003denabled,"},{"line_number":56,"context_line":"                                  description\u003ddescription)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @service.should_be_overridden"}],"source_content_type":"text/x-python","patch_set":27,"id":"3a71b18c_0d15b79a","line":55,"range":{"start_line":55,"start_character":12,"end_line":55,"end_character":18},"updated":"2016-12-06 15:47:32.000000000","message":"If _impl is KeystoneV2Service, the _impl have don\u0027t have update_project","commit_id":"21f6f7984a03e3acc3a8741863e2de39b4cebbb4"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"c87421c08ba15a7bcd91fa8c9584e168efddc3bc","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        :param enabled: enabled status of project"},{"line_number":53,"context_line":"        :param description: project description to be set"},{"line_number":54,"context_line":"        \"\"\""},{"line_number":55,"context_line":"        self._impl.update_project(project_id, name\u003dname, enabled\u003denabled,"},{"line_number":56,"context_line":"                                  description\u003ddescription)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @service.should_be_overridden"}],"source_content_type":"text/x-python","patch_set":27,"id":"3a71b18c_e5708f74","line":55,"range":{"start_line":55,"start_character":12,"end_line":55,"end_character":18},"in_reply_to":"3a71b18c_0d15b79a","updated":"2016-12-06 16:47:30.000000000","message":"class Identity doesn\u0027t use KeystoneV2Service. It uses UnifiedKeystoneV2Service. Since UnifiedKeystoneV2Service is a subclass of Identity, automatic check is applied - https://github.com/openstack/rally/blob/master/rally/task/service.py#L164-L182 . It is something like abstractclasses \u0026\u0026 abstractmethods.","commit_id":"21f6f7984a03e3acc3a8741863e2de39b4cebbb4"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"97d458a676f435cd6e3515030af5eed205162d03","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        :param enabled: enabled status of project"},{"line_number":53,"context_line":"        :param description: project description to be set"},{"line_number":54,"context_line":"        \"\"\""},{"line_number":55,"context_line":"        self._impl.update_project(project_id, name\u003dname, enabled\u003denabled,"},{"line_number":56,"context_line":"                                  description\u003ddescription)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @service.should_be_overridden"}],"source_content_type":"text/x-python","patch_set":27,"id":"3a71b18c_eaf8fac6","line":55,"range":{"start_line":55,"start_character":12,"end_line":55,"end_character":18},"in_reply_to":"3a71b18c_c9bd41d9","updated":"2016-12-08 13:23:57.000000000","message":"Identity class doesn\u0027t use KeystoneV2Service directly, it should not know how partial method is implemented there. It should care only about subclasses UnifiedKeystoneV*Service. \nI mean Identity(..)._impl.foo doesn\u0027t mean that UnifiedKeystoneV*Service will call the same method foo on KeystoneV*Service.\n\nIn case of Identity-\u003e UnifiedKeystoneV*Service relation, we have special metaclass which checks that all inheritors implements all required methods, so we are sure that self._impl has all needed methods.\n\nIf we are talking about UnifiedKeystoneV*Service, each of these classes was designed for specific version. When compat layer is designed to cover only one class, it should be not a hard task to check that the right self._impl.foo_method is exist and which methods it has.","commit_id":"21f6f7984a03e3acc3a8741863e2de39b4cebbb4"},{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"20941c71df1c29dd188d90e251e3655ed4014b9e","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        :param enabled: enabled status of project"},{"line_number":53,"context_line":"        :param description: project description to be set"},{"line_number":54,"context_line":"        \"\"\""},{"line_number":55,"context_line":"        self._impl.update_project(project_id, name\u003dname, enabled\u003denabled,"},{"line_number":56,"context_line":"                                  description\u003ddescription)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @service.should_be_overridden"}],"source_content_type":"text/x-python","patch_set":27,"id":"3a71b18c_c9bd41d9","line":55,"range":{"start_line":55,"start_character":12,"end_line":55,"end_character":18},"in_reply_to":"3a71b18c_e5708f74","updated":"2016-12-07 14:22:55.000000000","message":"@service.compat_layer(KeystoneV2Service)\nin compat_layer function:\ndef compat_layer(original_impl):\n    def wrapper(cls):\n        cls._meta_init()\n        cls._meta_set(\"impl\", original_impl)\n        return cls\n    return wrapper\nand in UnifiedService.__init__():\n    self._impl \u003d impl_cls(self._clients, self._name_generator,\n                                  self._atomic_actions)\n_impl --\u003eKeystoneV2Service, is it wrong?","commit_id":"21f6f7984a03e3acc3a8741863e2de39b4cebbb4"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"d5c350950728ee4fe0647fdfb919ab614194afc4","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        :param enabled: enabled status of project"},{"line_number":53,"context_line":"        :param description: project description to be set"},{"line_number":54,"context_line":"        \"\"\""},{"line_number":55,"context_line":"        self._impl.update_project(project_id, name\u003dname, enabled\u003denabled,"},{"line_number":56,"context_line":"                                  description\u003ddescription)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @service.should_be_overridden"}],"source_content_type":"text/x-python","patch_set":27,"id":"3a71b18c_6a5f8a75","line":55,"range":{"start_line":55,"start_character":12,"end_line":55,"end_character":18},"in_reply_to":"3a71b18c_eaf8fac6","updated":"2016-12-08 13:29:39.000000000","message":"Also, I thing, in future we will replace all these base classes like Identity by somekind of specs like below, since they do not nothing just describes the interface.\n\n    Identity \u003d describe_service(\n        description\u003d\"Identity Service\",\n        methods\u003d{\n            \"create_project\": {\"spec\": (format like inspect.getargspec has), \"description\": \"Description of method\"}}\n    )","commit_id":"21f6f7984a03e3acc3a8741863e2de39b4cebbb4"}],"rally/plugins/openstack/services/identity/keystone_v2.py":[{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"9b2a133fad710a38121b72b16302939a1268b32d","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        name \u003d name or self.generate_random_name()"},{"line_number":115,"context_line":"        service_type \u003d service_type or \"rally_test_type\""},{"line_number":116,"context_line":"        description \u003d description or self.generate_random_name()"},{"line_number":117,"context_line":"        return self._clients.keystone(\"2\").services.create("},{"line_number":118,"context_line":"            name,"},{"line_number":119,"context_line":"            service_type\u003dservice_type,"},{"line_number":120,"context_line":"            description\u003ddescription)"}],"source_content_type":"text/x-python","patch_set":27,"id":"3a71b18c_c2382140","line":117,"range":{"start_line":117,"start_character":38,"end_line":117,"end_character":41},"updated":"2016-12-05 16:01:50.000000000","message":"I\u0027m just confused that in where the version parameter would be worked?","commit_id":"21f6f7984a03e3acc3a8741863e2de39b4cebbb4"},{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"b7d388a4d5750e0b0cbbc52f6ce532b21fa06775","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        name \u003d name or self.generate_random_name()"},{"line_number":115,"context_line":"        service_type \u003d service_type or \"rally_test_type\""},{"line_number":116,"context_line":"        description \u003d description or self.generate_random_name()"},{"line_number":117,"context_line":"        return self._clients.keystone(\"2\").services.create("},{"line_number":118,"context_line":"            name,"},{"line_number":119,"context_line":"            service_type\u003dservice_type,"},{"line_number":120,"context_line":"            description\u003ddescription)"}],"source_content_type":"text/x-python","patch_set":27,"id":"3a71b18c_43f590c9","line":117,"range":{"start_line":117,"start_character":38,"end_line":117,"end_character":41},"in_reply_to":"3a71b18c_45ece329","updated":"2016-12-07 13:59:55.000000000","message":"Thank for your answer. my question is #2 and I got it:)","commit_id":"21f6f7984a03e3acc3a8741863e2de39b4cebbb4"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"c87421c08ba15a7bcd91fa8c9584e168efddc3bc","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        name \u003d name or self.generate_random_name()"},{"line_number":115,"context_line":"        service_type \u003d service_type or \"rally_test_type\""},{"line_number":116,"context_line":"        description \u003d description or self.generate_random_name()"},{"line_number":117,"context_line":"        return self._clients.keystone(\"2\").services.create("},{"line_number":118,"context_line":"            name,"},{"line_number":119,"context_line":"            service_type\u003dservice_type,"},{"line_number":120,"context_line":"            description\u003ddescription)"}],"source_content_type":"text/x-python","patch_set":27,"id":"3a71b18c_45ece329","line":117,"range":{"start_line":117,"start_character":38,"end_line":117,"end_character":41},"in_reply_to":"3a71b18c_c2382140","updated":"2016-12-06 16:47:30.000000000","message":"Do you mean \"why not self.version?\" or \"who this \u00272\u0027 works\" ?)\n\nAnswer for question #1: I want make transmission version apparent.\n\nAnswer for question #2: we do not use keystoneclient here directly, we use wrapper \"rally.osclients.Keystone\" for it. This wrapper has create_client method( https://github.com/openstack/rally/blob/master/rally/osclients.py#L294 ) which accepts \"version\"","commit_id":"21f6f7984a03e3acc3a8741863e2de39b4cebbb4"}],"rally/plugins/openstack/services/identity/keystone_v3.py":[{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"1c7098ee28b0b4c0c02a64aed93e610beb8aa211","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        return self._clients.keystone(\"3\").projects.get(project_id)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    @atomic.action_timer(\"keystone_v3.create_user\")"},{"line_number":86,"context_line":"    def create_user(self, username\u003dNone, password\u003dNone, email\u003dNone,"},{"line_number":87,"context_line":"                    project_id\u003dNone, domain_name\u003d\"Default\", enabled\u003dTrue,"},{"line_number":88,"context_line":"                    default_role\u003d\"member\"):"},{"line_number":89,"context_line":"        \"\"\"Create user."}],"source_content_type":"text/x-python","patch_set":17,"id":"7a77a97e_54e3f332","line":86,"range":{"start_line":86,"start_character":56,"end_line":86,"end_character":67},"updated":"2016-11-17 13:32:19.000000000","message":"lets drop email","commit_id":"632a1ab806e7c320287e4980f5a17c9d55efa29c"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"9c32cd607929aa80a5c0925aaaffa3dba3d73a75","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        return self._clients.keystone(\"3\").projects.get(project_id)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    @atomic.action_timer(\"keystone_v3.create_user\")"},{"line_number":86,"context_line":"    def create_user(self, username\u003dNone, password\u003dNone, email\u003dNone,"},{"line_number":87,"context_line":"                    project_id\u003dNone, domain_name\u003d\"Default\", enabled\u003dTrue,"},{"line_number":88,"context_line":"                    default_role\u003d\"member\"):"},{"line_number":89,"context_line":"        \"\"\"Create user."}],"source_content_type":"text/x-python","patch_set":17,"id":"7a77a97e_aae62942","line":86,"range":{"start_line":86,"start_character":56,"end_line":86,"end_character":67},"in_reply_to":"7a77a97e_54e3f332","updated":"2016-11-21 13:50:47.000000000","message":"Done","commit_id":"632a1ab806e7c320287e4980f5a17c9d55efa29c"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"1c7098ee28b0b4c0c02a64aed93e610beb8aa211","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        name \u003d name or self.generate_random_name()"},{"line_number":152,"context_line":"        service_type \u003d service_type or \"rally_test_type\""},{"line_number":153,"context_line":"        description \u003d description or self.generate_random_name()"},{"line_number":154,"context_line":"        return self._clients.keystone(\"3\").services.create("},{"line_number":155,"context_line":"            name, type\u003dservice_type, description\u003ddescription, enabled\u003denabled)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    @atomic.action_timer(\"keystone_v3.create_role\")"},{"line_number":158,"context_line":"    def create_role(self, name\u003dNone, domain_name\u003d\"Default\"):"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a77a97e_74a38fb2","line":155,"range":{"start_line":154,"start_character":43,"end_line":155,"end_character":78},"updated":"2016-11-17 13:32:19.000000000","message":"why does keystoneclient require name to be present and doesn\u0027t require type? This is so sad :(","commit_id":"632a1ab806e7c320287e4980f5a17c9d55efa29c"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"1c7098ee28b0b4c0c02a64aed93e610beb8aa211","unresolved":false,"context_lines":[{"line_number":285,"context_line":"    def update_user(self, user_id, enabled\u003dNone, name\u003dNone, email\u003dNone,"},{"line_number":286,"context_line":"                    password\u003dNone):"},{"line_number":287,"context_line":"        return self._impl.update_user(user_id, enabled\u003denabled, name\u003dname,"},{"line_number":288,"context_line":"                                      email\u003demail, password\u003dpassword)"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    def create_service(self, name\u003dNone, service_type\u003dNone, description\u003dNone):"},{"line_number":291,"context_line":"        \"\"\"Creates keystone service.\"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"7a77a97e_d4854307","line":288,"range":{"start_line":288,"start_character":38,"end_line":288,"end_character":49},"updated":"2016-11-17 13:32:19.000000000","message":"email will not be updated here due to a bug in keystone","commit_id":"632a1ab806e7c320287e4980f5a17c9d55efa29c"}]}
