)]}'
{"config_tempest/clients.py":[{"author":{"_account_id":8367,"name":"Arx Cruz","email":"arxcruz@redhat.com","username":"arxcruz"},"change_message_id":"46f399a5c0f6f67c88c8f05f1ef02b17c9a4d0d1","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    from tempest.lib.services.volume.v2 import services_client"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"class ProjectsClient(object):"},{"line_number":42,"context_line":"    \"\"\"The class is a wrapper for managing projects/tenants."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    It instantiates tempest projects_client and provides methods for creating"},{"line_number":45,"context_line":"    and finding projects (identity version v3)/tenants (identity version v2)."},{"line_number":46,"context_line":"    \"\"\""},{"line_number":47,"context_line":"    def __init__(self, auth, catalog_type, identity_region, endpoint_type,"},{"line_number":48,"context_line":"                 identity_version, **default_params):"},{"line_number":49,"context_line":"        self.identity_version \u003d identity_version"},{"line_number":50,"context_line":"        if self.identity_version \u003d\u003d \"v2\":"},{"line_number":51,"context_line":"            self.project_class \u003d tenants_client.TenantsClient"},{"line_number":52,"context_line":"        else:"},{"line_number":53,"context_line":"            self.project_class \u003d projects_client.ProjectsClient"},{"line_number":54,"context_line":"        self.client \u003d self.project_class(auth, catalog_type, identity_region,"},{"line_number":55,"context_line":"                                         endpoint_type, **default_params)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def get_project_by_name(self, project_name):"},{"line_number":58,"context_line":"        if self.identity_version \u003d\u003d \"v2\":"},{"line_number":59,"context_line":"            projects \u003d self.client.list_tenants()[\u0027tenants\u0027]"},{"line_number":60,"context_line":"        else:"},{"line_number":61,"context_line":"            projects \u003d self.client.list_projects()[\u0027projects\u0027]"},{"line_number":62,"context_line":"        for project in projects:"},{"line_number":63,"context_line":"            if project[\u0027name\u0027] \u003d\u003d project_name:"},{"line_number":64,"context_line":"                return project"},{"line_number":65,"context_line":"        raise exceptions.NotFound("},{"line_number":66,"context_line":"            \u0027No such project/tenant (%s) in %s\u0027 % (project_name, projects))"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def create_project(self, name, description):"},{"line_number":69,"context_line":"        if self.identity_version \u003d\u003d \"v2\":"},{"line_number":70,"context_line":"            self.client.create_tenant(name\u003dname, description\u003ddescription)"},{"line_number":71,"context_line":"        else:"},{"line_number":72,"context_line":"            self.client.create_project(name\u003dname, description\u003ddescription)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"class ClientManager(object):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_1a4339b2","line":72,"range":{"start_line":41,"start_character":0,"end_line":72,"end_character":74},"updated":"2018-06-21 07:11:53.000000000","message":"Then this is no longer needed, this was just a class to return TenantsClient or ProjectsClient, we can set it directly to ProjectsClient from tempest.lib","commit_id":"621e760fb86c70ca704624c9bd95ad76cba770e5"},{"author":{"_account_id":22873,"name":"Martin Kopec","email":"mkopec@redhat.com","username":"mkopec"},"change_message_id":"42ecd7c4388b9a8ad0fbae74fed5d7aaa9cca148","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    from tempest.lib.services.volume.v2 import services_client"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"class ProjectsClient(object):"},{"line_number":42,"context_line":"    \"\"\"The class is a wrapper for managing projects/tenants."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    It instantiates tempest projects_client and provides methods for creating"},{"line_number":45,"context_line":"    and finding projects (identity version v3)/tenants (identity version v2)."},{"line_number":46,"context_line":"    \"\"\""},{"line_number":47,"context_line":"    def __init__(self, auth, catalog_type, identity_region, endpoint_type,"},{"line_number":48,"context_line":"                 identity_version, **default_params):"},{"line_number":49,"context_line":"        self.identity_version \u003d identity_version"},{"line_number":50,"context_line":"        if self.identity_version \u003d\u003d \"v2\":"},{"line_number":51,"context_line":"            self.project_class \u003d tenants_client.TenantsClient"},{"line_number":52,"context_line":"        else:"},{"line_number":53,"context_line":"            self.project_class \u003d projects_client.ProjectsClient"},{"line_number":54,"context_line":"        self.client \u003d self.project_class(auth, catalog_type, identity_region,"},{"line_number":55,"context_line":"                                         endpoint_type, **default_params)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def get_project_by_name(self, project_name):"},{"line_number":58,"context_line":"        if self.identity_version \u003d\u003d \"v2\":"},{"line_number":59,"context_line":"            projects \u003d self.client.list_tenants()[\u0027tenants\u0027]"},{"line_number":60,"context_line":"        else:"},{"line_number":61,"context_line":"            projects \u003d self.client.list_projects()[\u0027projects\u0027]"},{"line_number":62,"context_line":"        for project in projects:"},{"line_number":63,"context_line":"            if project[\u0027name\u0027] \u003d\u003d project_name:"},{"line_number":64,"context_line":"                return project"},{"line_number":65,"context_line":"        raise exceptions.NotFound("},{"line_number":66,"context_line":"            \u0027No such project/tenant (%s) in %s\u0027 % (project_name, projects))"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def create_project(self, name, description):"},{"line_number":69,"context_line":"        if self.identity_version \u003d\u003d \"v2\":"},{"line_number":70,"context_line":"            self.client.create_tenant(name\u003dname, description\u003ddescription)"},{"line_number":71,"context_line":"        else:"},{"line_number":72,"context_line":"            self.client.create_project(name\u003dname, description\u003ddescription)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"class ClientManager(object):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_7a726de5","line":72,"range":{"start_line":41,"start_character":0,"end_line":72,"end_character":74},"in_reply_to":"5f7c97a3_1a4339b2","updated":"2018-06-21 07:25:08.000000000","message":"This is about v2 and v3 client, v2 is TenantsClient and v3 is ProjectsClient. When I checked last time, v2 client is removed since Queens:\nhttps://github.com/openstack/python-tempestconf/blob/4912283b0344c9bfe96b9ae47fa2b7b343fcd9b0/config_tempest/constants.py#L72\n\nI understand that only terminology was changed, so Tempest no longer uses \"tenant\" but \"project\" instead. But the name of the class was not renamed, it was just deprecated since Queens. However we need to be able to run tempestconf on Ocata and Pike as well.","commit_id":"621e760fb86c70ca704624c9bd95ad76cba770e5"}]}
