# coding: utf-8

"""
    BIMData API

    BIMData API is a tool to interact with your models stored on BIMData’s servers.     Through the API, you can manage your projects, the clouds, upload your IFC files and manage them through endpoints.  # noqa: E501

    The version of the OpenAPI document: v1
    Contact: support@bimdata.io
    Generated by: https://openapi-generator.tech
"""


from __future__ import absolute_import

import re  # noqa: F401

# python 2 and python 3 compatibility library
import six

from bimdata_api_client.api_client import ApiClient
from bimdata_api_client.exceptions import (  # noqa: F401
    ApiTypeError,
    ApiValueError
)


class CollaborationApi(object):
    """NOTE: This class is auto generated by OpenAPI Generator
    Ref: https://openapi-generator.tech

    Do not edit the class manually.
    """

    def __init__(self, api_client=None):
        if api_client is None:
            api_client = ApiClient()
        self.api_client = api_client

    def accept_validation(self, cloud_pk, document_pk, id, project_pk, visa_pk, **kwargs):  # noqa: E501
        """Accept a validation  # noqa: E501

        Accept a validation Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.accept_validation(cloud_pk, document_pk, id, project_pk, visa_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param int id: A unique integer value identifying this visa validation. (required)
        :param str project_pk: (required)
        :param str visa_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.accept_validation_with_http_info(cloud_pk, document_pk, id, project_pk, visa_pk, **kwargs)  # noqa: E501

    def accept_validation_with_http_info(self, cloud_pk, document_pk, id, project_pk, visa_pk, **kwargs):  # noqa: E501
        """Accept a validation  # noqa: E501

        Accept a validation Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.accept_validation_with_http_info(cloud_pk, document_pk, id, project_pk, visa_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param int id: A unique integer value identifying this visa validation. (required)
        :param str project_pk: (required)
        :param str visa_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'document_pk',
            'id',
            'project_pk',
            'visa_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method accept_validation" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `accept_validation`")  # noqa: E501
        # verify the required parameter 'document_pk' is set
        if self.api_client.client_side_validation and ('document_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['document_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `document_pk` when calling `accept_validation`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `accept_validation`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `accept_validation`")  # noqa: E501
        # verify the required parameter 'visa_pk' is set
        if self.api_client.client_side_validation and ('visa_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['visa_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `visa_pk` when calling `accept_validation`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'document_pk' in local_var_params:
            path_params['document_pk'] = local_var_params['document_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501
        if 'visa_pk' in local_var_params:
            path_params['visa_pk'] = local_var_params['visa_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/document/{document_pk}/visa/{visa_pk}/validation/{id}/accept', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type=None,  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def add_group_member(self, cloud_pk, group_pk, project_pk, data, **kwargs):  # noqa: E501
        """Add a user to a group  # noqa: E501

        Add a userproject to a group. Must be an admin of the project Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.add_group_member(cloud_pk, group_pk, project_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str group_pk: (required)
        :param str project_pk: (required)
        :param UserProjectId data: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: UserProject
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.add_group_member_with_http_info(cloud_pk, group_pk, project_pk, data, **kwargs)  # noqa: E501

    def add_group_member_with_http_info(self, cloud_pk, group_pk, project_pk, data, **kwargs):  # noqa: E501
        """Add a user to a group  # noqa: E501

        Add a userproject to a group. Must be an admin of the project Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.add_group_member_with_http_info(cloud_pk, group_pk, project_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str group_pk: (required)
        :param str project_pk: (required)
        :param UserProjectId data: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(UserProject, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'group_pk',
            'project_pk',
            'data'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method add_group_member" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `add_group_member`")  # noqa: E501
        # verify the required parameter 'group_pk' is set
        if self.api_client.client_side_validation and ('group_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['group_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `group_pk` when calling `add_group_member`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `add_group_member`")  # noqa: E501
        # verify the required parameter 'data' is set
        if self.api_client.client_side_validation and ('data' not in local_var_params or  # noqa: E501
                                                        local_var_params['data'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `data` when calling `add_group_member`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'group_pk' in local_var_params:
            path_params['group_pk'] = local_var_params['group_pk']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'data' in local_var_params:
            body_params = local_var_params['data']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/group/{group_pk}/member', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='UserProject',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def cancel_cloud_user_invitation(self, cloud_pk, id, **kwargs):  # noqa: E501
        """Cancel a pending invitation  # noqa: E501

        Cancel a pending invitation Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.cancel_cloud_user_invitation(cloud_pk, id, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this invitation. (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.cancel_cloud_user_invitation_with_http_info(cloud_pk, id, **kwargs)  # noqa: E501

    def cancel_cloud_user_invitation_with_http_info(self, cloud_pk, id, **kwargs):  # noqa: E501
        """Cancel a pending invitation  # noqa: E501

        Cancel a pending invitation Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.cancel_cloud_user_invitation_with_http_info(cloud_pk, id, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this invitation. (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'id'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method cancel_cloud_user_invitation" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `cancel_cloud_user_invitation`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `cancel_cloud_user_invitation`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/invitation/{id}', 'DELETE',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type=None,  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def cancel_project_user_invitation(self, cloud_pk, id, project_pk, **kwargs):  # noqa: E501
        """Cancel a pending invitation  # noqa: E501

         Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.cancel_project_user_invitation(cloud_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this invitation. (required)
        :param str project_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.cancel_project_user_invitation_with_http_info(cloud_pk, id, project_pk, **kwargs)  # noqa: E501

    def cancel_project_user_invitation_with_http_info(self, cloud_pk, id, project_pk, **kwargs):  # noqa: E501
        """Cancel a pending invitation  # noqa: E501

         Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.cancel_project_user_invitation_with_http_info(cloud_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this invitation. (required)
        :param str project_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'id',
            'project_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method cancel_project_user_invitation" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `cancel_project_user_invitation`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `cancel_project_user_invitation`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `cancel_project_user_invitation`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/invitation/{id}', 'DELETE',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type=None,  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def check_access(self, id, **kwargs):  # noqa: E501
        """Check app access from cloud  # noqa: E501

        Return code 200 if the cloud has access to the marketplace app  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.check_access(id, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param int id: A unique integer value identifying this cloud. (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.check_access_with_http_info(id, **kwargs)  # noqa: E501

    def check_access_with_http_info(self, id, **kwargs):  # noqa: E501
        """Check app access from cloud  # noqa: E501

        Return code 200 if the cloud has access to the marketplace app  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.check_access_with_http_info(id, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param int id: A unique integer value identifying this cloud. (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'id'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method check_access" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `check_access`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{id}/check-access', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type=None,  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def close_visa(self, cloud_pk, document_pk, id, project_pk, **kwargs):  # noqa: E501
        """Close a visa of a document  # noqa: E501

        Close a visa of a document Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.close_visa(cloud_pk, document_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param int id: A unique integer value identifying this visa. (required)
        :param str project_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.close_visa_with_http_info(cloud_pk, document_pk, id, project_pk, **kwargs)  # noqa: E501

    def close_visa_with_http_info(self, cloud_pk, document_pk, id, project_pk, **kwargs):  # noqa: E501
        """Close a visa of a document  # noqa: E501

        Close a visa of a document Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.close_visa_with_http_info(cloud_pk, document_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param int id: A unique integer value identifying this visa. (required)
        :param str project_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'document_pk',
            'id',
            'project_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method close_visa" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `close_visa`")  # noqa: E501
        # verify the required parameter 'document_pk' is set
        if self.api_client.client_side_validation and ('document_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['document_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `document_pk` when calling `close_visa`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `close_visa`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `close_visa`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'document_pk' in local_var_params:
            path_params['document_pk'] = local_var_params['document_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/document/{document_pk}/visa/{id}/close', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type=None,  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def create_classification(self, cloud_pk, project_pk, data, **kwargs):  # noqa: E501
        """Create a classification  # noqa: E501

                 Bulk create available.         You can either post an object or a list of objects.         Is you post a list, the response will be a list (in the same order) of created objects or of errors if any         If at least one create succeeded, the status code will be 201. If every create failed, the status code we'll be 400 with the list of errors      If created classification already exists, it will not be duplicated and the previous one will be returned.     You also can add a 'classification' filter on this endpoint. By ex: /classification?name='untec'. The name is case sensitive  Required scopes: ifc:write, model:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.create_classification(cloud_pk, project_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param list[Classification] data: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: list[Classification]
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.create_classification_with_http_info(cloud_pk, project_pk, data, **kwargs)  # noqa: E501

    def create_classification_with_http_info(self, cloud_pk, project_pk, data, **kwargs):  # noqa: E501
        """Create a classification  # noqa: E501

                 Bulk create available.         You can either post an object or a list of objects.         Is you post a list, the response will be a list (in the same order) of created objects or of errors if any         If at least one create succeeded, the status code will be 201. If every create failed, the status code we'll be 400 with the list of errors      If created classification already exists, it will not be duplicated and the previous one will be returned.     You also can add a 'classification' filter on this endpoint. By ex: /classification?name='untec'. The name is case sensitive  Required scopes: ifc:write, model:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.create_classification_with_http_info(cloud_pk, project_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param list[Classification] data: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(list[Classification], status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'project_pk',
            'data'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method create_classification" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `create_classification`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `create_classification`")  # noqa: E501
        # verify the required parameter 'data' is set
        if self.api_client.client_side_validation and ('data' not in local_var_params or  # noqa: E501
                                                        local_var_params['data'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `data` when calling `create_classification`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'data' in local_var_params:
            body_params = local_var_params['data']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/classification', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='list[Classification]',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def create_cloud(self, data, **kwargs):  # noqa: E501
        """Create a cloud  # noqa: E501

         Required scopes: cloud:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.create_cloud(data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param Cloud data: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: Cloud
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.create_cloud_with_http_info(data, **kwargs)  # noqa: E501

    def create_cloud_with_http_info(self, data, **kwargs):  # noqa: E501
        """Create a cloud  # noqa: E501

         Required scopes: cloud:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.create_cloud_with_http_info(data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param Cloud data: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(Cloud, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'data'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method create_cloud" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'data' is set
        if self.api_client.client_side_validation and ('data' not in local_var_params or  # noqa: E501
                                                        local_var_params['data'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `data` when calling `create_cloud`")  # noqa: E501

        collection_formats = {}

        path_params = {}

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'data' in local_var_params:
            body_params = local_var_params['data']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='Cloud',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def create_demo(self, id, **kwargs):  # noqa: E501
        """Create a Demo project in a cloud  # noqa: E501

        Create a demo project with a pre-populated IFC and its data Required scopes: cloud:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.create_demo(id, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param int id: A unique integer value identifying this cloud. (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: Project
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.create_demo_with_http_info(id, **kwargs)  # noqa: E501

    def create_demo_with_http_info(self, id, **kwargs):  # noqa: E501
        """Create a Demo project in a cloud  # noqa: E501

        Create a demo project with a pre-populated IFC and its data Required scopes: cloud:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.create_demo_with_http_info(id, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param int id: A unique integer value identifying this cloud. (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(Project, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'id'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method create_demo" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `create_demo`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{id}/create-demo', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='Project',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def create_dms_tree(self, cloud_pk, id, data, **kwargs):  # noqa: E501
        """Create a complete DMS tree  # noqa: E501

                         Create a DMS structure of folder                 Format request :                     [{                         \"name\": :name:                         \"parent_id\": :parent_id:                      # optionnal                         \"default_permission\": :default_permission:    # optionnal                         \"children\": [{                                # optionnal                             \"name\": :name:,                             \"children\": []                         }]                     }],  Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.create_dms_tree(cloud_pk, id, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this project. (required)
        :param Folder data: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.create_dms_tree_with_http_info(cloud_pk, id, data, **kwargs)  # noqa: E501

    def create_dms_tree_with_http_info(self, cloud_pk, id, data, **kwargs):  # noqa: E501
        """Create a complete DMS tree  # noqa: E501

                         Create a DMS structure of folder                 Format request :                     [{                         \"name\": :name:                         \"parent_id\": :parent_id:                      # optionnal                         \"default_permission\": :default_permission:    # optionnal                         \"children\": [{                                # optionnal                             \"name\": :name:,                             \"children\": []                         }]                     }],  Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.create_dms_tree_with_http_info(cloud_pk, id, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this project. (required)
        :param Folder data: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'id',
            'data'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method create_dms_tree" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `create_dms_tree`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `create_dms_tree`")  # noqa: E501
        # verify the required parameter 'data' is set
        if self.api_client.client_side_validation and ('data' not in local_var_params or  # noqa: E501
                                                        local_var_params['data'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `data` when calling `create_dms_tree`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'data' in local_var_params:
            body_params = local_var_params['data']
        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{id}/dms-tree', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type=None,  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def create_document(self, cloud_pk, project_pk, name, file, **kwargs):  # noqa: E501
        """Create a document  # noqa: E501

        RCreate a document. If the document is an IFC, an IFC model will be created and attached to this document Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.create_document(cloud_pk, project_pk, name, file, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param str name: Shown name of the file (required)
        :param file file: (required)
        :param int parent:
        :param int parent_id:
        :param int creator:
        :param str file_name: Full name of the file
        :param str description: Description of the file
        :param int size: Size of the file.
        :param str model_source: Define the model.source field if the upload is a Model (IFC, PDF, DWG...)
        :param str ifc_source: DEPRECATED: Use 'model_source' instead. Define the model.source field if the upload is a Model (IFC, PDF, DWG...)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: Document
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.create_document_with_http_info(cloud_pk, project_pk, name, file, **kwargs)  # noqa: E501

    def create_document_with_http_info(self, cloud_pk, project_pk, name, file, **kwargs):  # noqa: E501
        """Create a document  # noqa: E501

        RCreate a document. If the document is an IFC, an IFC model will be created and attached to this document Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.create_document_with_http_info(cloud_pk, project_pk, name, file, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param str name: Shown name of the file (required)
        :param file file: (required)
        :param int parent:
        :param int parent_id:
        :param int creator:
        :param str file_name: Full name of the file
        :param str description: Description of the file
        :param int size: Size of the file.
        :param str model_source: Define the model.source field if the upload is a Model (IFC, PDF, DWG...)
        :param str ifc_source: DEPRECATED: Use 'model_source' instead. Define the model.source field if the upload is a Model (IFC, PDF, DWG...)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(Document, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'project_pk',
            'name',
            'file',
            'parent',
            'parent_id',
            'creator',
            'file_name',
            'description',
            'size',
            'model_source',
            'ifc_source'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method create_document" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `create_document`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `create_document`")  # noqa: E501
        # verify the required parameter 'name' is set
        if self.api_client.client_side_validation and ('name' not in local_var_params or  # noqa: E501
                                                        local_var_params['name'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `name` when calling `create_document`")  # noqa: E501
        # verify the required parameter 'file' is set
        if self.api_client.client_side_validation and ('file' not in local_var_params or  # noqa: E501
                                                        local_var_params['file'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `file` when calling `create_document`")  # noqa: E501

        if self.api_client.client_side_validation and ('name' in local_var_params and  # noqa: E501
                                                        len(local_var_params['name']) > 512):  # noqa: E501
            raise ApiValueError("Invalid value for parameter `name` when calling `create_document`, length must be less than or equal to `512`")  # noqa: E501
        if self.api_client.client_side_validation and ('name' in local_var_params and  # noqa: E501
                                                        len(local_var_params['name']) < 1):  # noqa: E501
            raise ApiValueError("Invalid value for parameter `name` when calling `create_document`, length must be greater than or equal to `1`")  # noqa: E501
        if self.api_client.client_side_validation and ('file_name' in local_var_params and  # noqa: E501
                                                        len(local_var_params['file_name']) > 512):  # noqa: E501
            raise ApiValueError("Invalid value for parameter `file_name` when calling `create_document`, length must be less than or equal to `512`")  # noqa: E501
        if self.api_client.client_side_validation and ('file_name' in local_var_params and  # noqa: E501
                                                        len(local_var_params['file_name']) < 1):  # noqa: E501
            raise ApiValueError("Invalid value for parameter `file_name` when calling `create_document`, length must be greater than or equal to `1`")  # noqa: E501
        if self.api_client.client_side_validation and 'size' in local_var_params and local_var_params['size'] > 9223372036854775807:  # noqa: E501
            raise ApiValueError("Invalid value for parameter `size` when calling `create_document`, must be a value less than or equal to `9223372036854775807`")  # noqa: E501
        if self.api_client.client_side_validation and 'size' in local_var_params and local_var_params['size'] < 0:  # noqa: E501
            raise ApiValueError("Invalid value for parameter `size` when calling `create_document`, must be a value greater than or equal to `0`")  # noqa: E501
        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}
        if 'parent' in local_var_params:
            form_params.append(('parent', local_var_params['parent']))  # noqa: E501
        if 'parent_id' in local_var_params:
            form_params.append(('parent_id', local_var_params['parent_id']))  # noqa: E501
        if 'creator' in local_var_params:
            form_params.append(('creator', local_var_params['creator']))  # noqa: E501
        if 'name' in local_var_params:
            form_params.append(('name', local_var_params['name']))  # noqa: E501
        if 'file_name' in local_var_params:
            form_params.append(('file_name', local_var_params['file_name']))  # noqa: E501
        if 'description' in local_var_params:
            form_params.append(('description', local_var_params['description']))  # noqa: E501
        if 'file' in local_var_params:
            local_var_files['file'] = local_var_params['file']  # noqa: E501
        if 'size' in local_var_params:
            form_params.append(('size', local_var_params['size']))  # noqa: E501
        if 'model_source' in local_var_params:
            form_params.append(('model_source', local_var_params['model_source']))  # noqa: E501
        if 'ifc_source' in local_var_params:
            form_params.append(('ifc_source', local_var_params['ifc_source']))  # noqa: E501

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['multipart/form-data', 'application/x-www-form-urlencoded'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/document', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='Document',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def create_folder(self, cloud_pk, project_pk, data, **kwargs):  # noqa: E501
        """Create a folder  # noqa: E501

        If the created folder have no parent, it will be put as a child of the default root folder of the project Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.create_folder(cloud_pk, project_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param InlineObject data: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: InlineResponse200
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.create_folder_with_http_info(cloud_pk, project_pk, data, **kwargs)  # noqa: E501

    def create_folder_with_http_info(self, cloud_pk, project_pk, data, **kwargs):  # noqa: E501
        """Create a folder  # noqa: E501

        If the created folder have no parent, it will be put as a child of the default root folder of the project Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.create_folder_with_http_info(cloud_pk, project_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param InlineObject data: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(InlineResponse200, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'project_pk',
            'data'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method create_folder" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `create_folder`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `create_folder`")  # noqa: E501
        # verify the required parameter 'data' is set
        if self.api_client.client_side_validation and ('data' not in local_var_params or  # noqa: E501
                                                        local_var_params['data'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `data` when calling `create_folder`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'data' in local_var_params:
            body_params = local_var_params['data']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/folder', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='InlineResponse200',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def create_manage_group(self, cloud_pk, project_pk, data, **kwargs):  # noqa: E501
        """Create a group  # noqa: E501

        Create a group. Must be an admin of the project Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.create_manage_group(cloud_pk, project_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param InlineObject2 data: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: InlineResponse2001
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.create_manage_group_with_http_info(cloud_pk, project_pk, data, **kwargs)  # noqa: E501

    def create_manage_group_with_http_info(self, cloud_pk, project_pk, data, **kwargs):  # noqa: E501
        """Create a group  # noqa: E501

        Create a group. Must be an admin of the project Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.create_manage_group_with_http_info(cloud_pk, project_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param InlineObject2 data: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(InlineResponse2001, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'project_pk',
            'data'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method create_manage_group" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `create_manage_group`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `create_manage_group`")  # noqa: E501
        # verify the required parameter 'data' is set
        if self.api_client.client_side_validation and ('data' not in local_var_params or  # noqa: E501
                                                        local_var_params['data'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `data` when calling `create_manage_group`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'data' in local_var_params:
            body_params = local_var_params['data']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/group', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='InlineResponse2001',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def create_project(self, cloud_pk, data, **kwargs):  # noqa: E501
        """Create a project  # noqa: E501

        Create a project Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.create_project(cloud_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param Project data: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: Project
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.create_project_with_http_info(cloud_pk, data, **kwargs)  # noqa: E501

    def create_project_with_http_info(self, cloud_pk, data, **kwargs):  # noqa: E501
        """Create a project  # noqa: E501

        Create a project Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.create_project_with_http_info(cloud_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param Project data: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(Project, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'data'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method create_project" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `create_project`")  # noqa: E501
        # verify the required parameter 'data' is set
        if self.api_client.client_side_validation and ('data' not in local_var_params or  # noqa: E501
                                                        local_var_params['data'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `data` when calling `create_project`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'data' in local_var_params:
            body_params = local_var_params['data']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='Project',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def create_project_access_token(self, cloud_pk, project_pk, data, **kwargs):  # noqa: E501
        """Create a token for this project  # noqa: E501

        Tokens are valid 1 day by default Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.create_project_access_token(cloud_pk, project_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param ProjectAccessToken data: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: ProjectAccessToken
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.create_project_access_token_with_http_info(cloud_pk, project_pk, data, **kwargs)  # noqa: E501

    def create_project_access_token_with_http_info(self, cloud_pk, project_pk, data, **kwargs):  # noqa: E501
        """Create a token for this project  # noqa: E501

        Tokens are valid 1 day by default Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.create_project_access_token_with_http_info(cloud_pk, project_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param ProjectAccessToken data: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(ProjectAccessToken, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'project_pk',
            'data'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method create_project_access_token" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `create_project_access_token`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `create_project_access_token`")  # noqa: E501
        # verify the required parameter 'data' is set
        if self.api_client.client_side_validation and ('data' not in local_var_params or  # noqa: E501
                                                        local_var_params['data'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `data` when calling `create_project_access_token`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'data' in local_var_params:
            body_params = local_var_params['data']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/access-token', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='ProjectAccessToken',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def create_validation(self, cloud_pk, document_pk, project_pk, visa_pk, data, **kwargs):  # noqa: E501
        """Add a validation to a visa  # noqa: E501

        Add a validation to a visa Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.create_validation(cloud_pk, document_pk, project_pk, visa_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param str project_pk: (required)
        :param str visa_pk: (required)
        :param VisaValidation data: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: VisaValidation
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.create_validation_with_http_info(cloud_pk, document_pk, project_pk, visa_pk, data, **kwargs)  # noqa: E501

    def create_validation_with_http_info(self, cloud_pk, document_pk, project_pk, visa_pk, data, **kwargs):  # noqa: E501
        """Add a validation to a visa  # noqa: E501

        Add a validation to a visa Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.create_validation_with_http_info(cloud_pk, document_pk, project_pk, visa_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param str project_pk: (required)
        :param str visa_pk: (required)
        :param VisaValidation data: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(VisaValidation, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'document_pk',
            'project_pk',
            'visa_pk',
            'data'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method create_validation" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `create_validation`")  # noqa: E501
        # verify the required parameter 'document_pk' is set
        if self.api_client.client_side_validation and ('document_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['document_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `document_pk` when calling `create_validation`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `create_validation`")  # noqa: E501
        # verify the required parameter 'visa_pk' is set
        if self.api_client.client_side_validation and ('visa_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['visa_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `visa_pk` when calling `create_validation`")  # noqa: E501
        # verify the required parameter 'data' is set
        if self.api_client.client_side_validation and ('data' not in local_var_params or  # noqa: E501
                                                        local_var_params['data'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `data` when calling `create_validation`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'document_pk' in local_var_params:
            path_params['document_pk'] = local_var_params['document_pk']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501
        if 'visa_pk' in local_var_params:
            path_params['visa_pk'] = local_var_params['visa_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'data' in local_var_params:
            body_params = local_var_params['data']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/document/{document_pk}/visa/{visa_pk}/validation', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='VisaValidation',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def create_visa(self, cloud_pk, document_pk, project_pk, data, **kwargs):  # noqa: E501
        """Create a visa  # noqa: E501

        Create a visa Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.create_visa(cloud_pk, document_pk, project_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param str project_pk: (required)
        :param Visa data: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: Visa
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.create_visa_with_http_info(cloud_pk, document_pk, project_pk, data, **kwargs)  # noqa: E501

    def create_visa_with_http_info(self, cloud_pk, document_pk, project_pk, data, **kwargs):  # noqa: E501
        """Create a visa  # noqa: E501

        Create a visa Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.create_visa_with_http_info(cloud_pk, document_pk, project_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param str project_pk: (required)
        :param Visa data: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(Visa, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'document_pk',
            'project_pk',
            'data'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method create_visa" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `create_visa`")  # noqa: E501
        # verify the required parameter 'document_pk' is set
        if self.api_client.client_side_validation and ('document_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['document_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `document_pk` when calling `create_visa`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `create_visa`")  # noqa: E501
        # verify the required parameter 'data' is set
        if self.api_client.client_side_validation and ('data' not in local_var_params or  # noqa: E501
                                                        local_var_params['data'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `data` when calling `create_visa`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'document_pk' in local_var_params:
            path_params['document_pk'] = local_var_params['document_pk']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'data' in local_var_params:
            body_params = local_var_params['data']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/document/{document_pk}/visa', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='Visa',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def create_visa_comment(self, cloud_pk, document_pk, project_pk, visa_pk, data, **kwargs):  # noqa: E501
        """Add a comment  # noqa: E501

        Add a comment Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.create_visa_comment(cloud_pk, document_pk, project_pk, visa_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param str project_pk: (required)
        :param str visa_pk: (required)
        :param VisaComment data: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: VisaComment
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.create_visa_comment_with_http_info(cloud_pk, document_pk, project_pk, visa_pk, data, **kwargs)  # noqa: E501

    def create_visa_comment_with_http_info(self, cloud_pk, document_pk, project_pk, visa_pk, data, **kwargs):  # noqa: E501
        """Add a comment  # noqa: E501

        Add a comment Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.create_visa_comment_with_http_info(cloud_pk, document_pk, project_pk, visa_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param str project_pk: (required)
        :param str visa_pk: (required)
        :param VisaComment data: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(VisaComment, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'document_pk',
            'project_pk',
            'visa_pk',
            'data'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method create_visa_comment" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `create_visa_comment`")  # noqa: E501
        # verify the required parameter 'document_pk' is set
        if self.api_client.client_side_validation and ('document_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['document_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `document_pk` when calling `create_visa_comment`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `create_visa_comment`")  # noqa: E501
        # verify the required parameter 'visa_pk' is set
        if self.api_client.client_side_validation and ('visa_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['visa_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `visa_pk` when calling `create_visa_comment`")  # noqa: E501
        # verify the required parameter 'data' is set
        if self.api_client.client_side_validation and ('data' not in local_var_params or  # noqa: E501
                                                        local_var_params['data'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `data` when calling `create_visa_comment`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'document_pk' in local_var_params:
            path_params['document_pk'] = local_var_params['document_pk']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501
        if 'visa_pk' in local_var_params:
            path_params['visa_pk'] = local_var_params['visa_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'data' in local_var_params:
            body_params = local_var_params['data']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/document/{document_pk}/visa/{visa_pk}/comment', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='VisaComment',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def delete_classification(self, cloud_pk, id, project_pk, **kwargs):  # noqa: E501
        """Delete a classification  # noqa: E501

        All elements having this classification will lose it Required scopes: ifc:write, model:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.delete_classification(cloud_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this classification. (required)
        :param str project_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.delete_classification_with_http_info(cloud_pk, id, project_pk, **kwargs)  # noqa: E501

    def delete_classification_with_http_info(self, cloud_pk, id, project_pk, **kwargs):  # noqa: E501
        """Delete a classification  # noqa: E501

        All elements having this classification will lose it Required scopes: ifc:write, model:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.delete_classification_with_http_info(cloud_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this classification. (required)
        :param str project_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'id',
            'project_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method delete_classification" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `delete_classification`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `delete_classification`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `delete_classification`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/classification/{id}', 'DELETE',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type=None,  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def delete_cloud(self, id, **kwargs):  # noqa: E501
        """Delete a cloud  # noqa: E501

         Required scopes: cloud:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.delete_cloud(id, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param int id: A unique integer value identifying this cloud. (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.delete_cloud_with_http_info(id, **kwargs)  # noqa: E501

    def delete_cloud_with_http_info(self, id, **kwargs):  # noqa: E501
        """Delete a cloud  # noqa: E501

         Required scopes: cloud:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.delete_cloud_with_http_info(id, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param int id: A unique integer value identifying this cloud. (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'id'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method delete_cloud" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `delete_cloud`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{id}', 'DELETE',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type=None,  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def delete_cloud_user(self, cloud_pk, id, **kwargs):  # noqa: E501
        """Remove a user from a cloud  # noqa: E501

        The user will also be removed from all the projects of the cloud Required scopes: cloud:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.delete_cloud_user(cloud_pk, id, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this fos user. (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.delete_cloud_user_with_http_info(cloud_pk, id, **kwargs)  # noqa: E501

    def delete_cloud_user_with_http_info(self, cloud_pk, id, **kwargs):  # noqa: E501
        """Remove a user from a cloud  # noqa: E501

        The user will also be removed from all the projects of the cloud Required scopes: cloud:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.delete_cloud_user_with_http_info(cloud_pk, id, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this fos user. (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'id'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method delete_cloud_user" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `delete_cloud_user`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `delete_cloud_user`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/user/{id}', 'DELETE',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type=None,  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def delete_document(self, cloud_pk, id, project_pk, **kwargs):  # noqa: E501
        """Delete the document  # noqa: E501

        Delete the document Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.delete_document(cloud_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this document. (required)
        :param str project_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.delete_document_with_http_info(cloud_pk, id, project_pk, **kwargs)  # noqa: E501

    def delete_document_with_http_info(self, cloud_pk, id, project_pk, **kwargs):  # noqa: E501
        """Delete the document  # noqa: E501

        Delete the document Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.delete_document_with_http_info(cloud_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this document. (required)
        :param str project_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'id',
            'project_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method delete_document" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `delete_document`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `delete_document`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `delete_document`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/document/{id}', 'DELETE',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type=None,  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def delete_folder(self, cloud_pk, id, project_pk, **kwargs):  # noqa: E501
        """Delete a folder  # noqa: E501

        All files and subfolders will be deleted too. If folder is a project's root folder, only children are deleted Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.delete_folder(cloud_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this folder. (required)
        :param str project_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.delete_folder_with_http_info(cloud_pk, id, project_pk, **kwargs)  # noqa: E501

    def delete_folder_with_http_info(self, cloud_pk, id, project_pk, **kwargs):  # noqa: E501
        """Delete a folder  # noqa: E501

        All files and subfolders will be deleted too. If folder is a project's root folder, only children are deleted Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.delete_folder_with_http_info(cloud_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this folder. (required)
        :param str project_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'id',
            'project_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method delete_folder" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `delete_folder`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `delete_folder`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `delete_folder`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/folder/{id}', 'DELETE',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type=None,  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def delete_group_member(self, cloud_pk, group_pk, id, project_pk, **kwargs):  # noqa: E501
        """Delete a user from a group  # noqa: E501

        Delete a userproject from a group. Id is the userproject_id. Must be an admin of the project. Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.delete_group_member(cloud_pk, group_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str group_pk: (required)
        :param str id: (required)
        :param str project_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.delete_group_member_with_http_info(cloud_pk, group_pk, id, project_pk, **kwargs)  # noqa: E501

    def delete_group_member_with_http_info(self, cloud_pk, group_pk, id, project_pk, **kwargs):  # noqa: E501
        """Delete a user from a group  # noqa: E501

        Delete a userproject from a group. Id is the userproject_id. Must be an admin of the project. Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.delete_group_member_with_http_info(cloud_pk, group_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str group_pk: (required)
        :param str id: (required)
        :param str project_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'group_pk',
            'id',
            'project_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method delete_group_member" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `delete_group_member`")  # noqa: E501
        # verify the required parameter 'group_pk' is set
        if self.api_client.client_side_validation and ('group_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['group_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `group_pk` when calling `delete_group_member`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `delete_group_member`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `delete_group_member`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'group_pk' in local_var_params:
            path_params['group_pk'] = local_var_params['group_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/group/{group_pk}/member/{id}', 'DELETE',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type=None,  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def delete_manage_group(self, cloud_pk, id, project_pk, **kwargs):  # noqa: E501
        """Delete a group  # noqa: E501

        Delete a group. Must be an admin of the project Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.delete_manage_group(cloud_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this group. (required)
        :param str project_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.delete_manage_group_with_http_info(cloud_pk, id, project_pk, **kwargs)  # noqa: E501

    def delete_manage_group_with_http_info(self, cloud_pk, id, project_pk, **kwargs):  # noqa: E501
        """Delete a group  # noqa: E501

        Delete a group. Must be an admin of the project Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.delete_manage_group_with_http_info(cloud_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this group. (required)
        :param str project_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'id',
            'project_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method delete_manage_group" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `delete_manage_group`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `delete_manage_group`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `delete_manage_group`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/group/{id}', 'DELETE',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type=None,  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def delete_project(self, cloud_pk, id, **kwargs):  # noqa: E501
        """Delete a project  # noqa: E501

        It can take a long time to respond because we may need to delete all properties of all elements of all models in the project Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.delete_project(cloud_pk, id, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this project. (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.delete_project_with_http_info(cloud_pk, id, **kwargs)  # noqa: E501

    def delete_project_with_http_info(self, cloud_pk, id, **kwargs):  # noqa: E501
        """Delete a project  # noqa: E501

        It can take a long time to respond because we may need to delete all properties of all elements of all models in the project Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.delete_project_with_http_info(cloud_pk, id, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this project. (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'id'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method delete_project" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `delete_project`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `delete_project`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{id}', 'DELETE',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type=None,  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def delete_project_access_token(self, cloud_pk, project_pk, token, **kwargs):  # noqa: E501
        """Delete a token  # noqa: E501

        Deleting a token will revoke it Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.delete_project_access_token(cloud_pk, project_pk, token, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param str token: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.delete_project_access_token_with_http_info(cloud_pk, project_pk, token, **kwargs)  # noqa: E501

    def delete_project_access_token_with_http_info(self, cloud_pk, project_pk, token, **kwargs):  # noqa: E501
        """Delete a token  # noqa: E501

        Deleting a token will revoke it Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.delete_project_access_token_with_http_info(cloud_pk, project_pk, token, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param str token: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'project_pk',
            'token'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method delete_project_access_token" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `delete_project_access_token`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `delete_project_access_token`")  # noqa: E501
        # verify the required parameter 'token' is set
        if self.api_client.client_side_validation and ('token' not in local_var_params or  # noqa: E501
                                                        local_var_params['token'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `token` when calling `delete_project_access_token`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501
        if 'token' in local_var_params:
            path_params['token'] = local_var_params['token']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/access-token/{token}', 'DELETE',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type=None,  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def delete_project_user(self, cloud_pk, id, project_pk, **kwargs):  # noqa: E501
        """Remove a user from a project  # noqa: E501

        Remove a user from a project Required scopes: cloud:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.delete_project_user(cloud_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str id: (required)
        :param str project_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.delete_project_user_with_http_info(cloud_pk, id, project_pk, **kwargs)  # noqa: E501

    def delete_project_user_with_http_info(self, cloud_pk, id, project_pk, **kwargs):  # noqa: E501
        """Remove a user from a project  # noqa: E501

        Remove a user from a project Required scopes: cloud:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.delete_project_user_with_http_info(cloud_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str id: (required)
        :param str project_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'id',
            'project_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method delete_project_user" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `delete_project_user`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `delete_project_user`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `delete_project_user`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/user/{id}', 'DELETE',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type=None,  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def delete_validation(self, cloud_pk, document_pk, id, project_pk, visa_pk, **kwargs):  # noqa: E501
        """Remove a validation  # noqa: E501

        Remove a validation Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.delete_validation(cloud_pk, document_pk, id, project_pk, visa_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param int id: A unique integer value identifying this visa validation. (required)
        :param str project_pk: (required)
        :param str visa_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.delete_validation_with_http_info(cloud_pk, document_pk, id, project_pk, visa_pk, **kwargs)  # noqa: E501

    def delete_validation_with_http_info(self, cloud_pk, document_pk, id, project_pk, visa_pk, **kwargs):  # noqa: E501
        """Remove a validation  # noqa: E501

        Remove a validation Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.delete_validation_with_http_info(cloud_pk, document_pk, id, project_pk, visa_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param int id: A unique integer value identifying this visa validation. (required)
        :param str project_pk: (required)
        :param str visa_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'document_pk',
            'id',
            'project_pk',
            'visa_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method delete_validation" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `delete_validation`")  # noqa: E501
        # verify the required parameter 'document_pk' is set
        if self.api_client.client_side_validation and ('document_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['document_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `document_pk` when calling `delete_validation`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `delete_validation`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `delete_validation`")  # noqa: E501
        # verify the required parameter 'visa_pk' is set
        if self.api_client.client_side_validation and ('visa_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['visa_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `visa_pk` when calling `delete_validation`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'document_pk' in local_var_params:
            path_params['document_pk'] = local_var_params['document_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501
        if 'visa_pk' in local_var_params:
            path_params['visa_pk'] = local_var_params['visa_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/document/{document_pk}/visa/{visa_pk}/validation/{id}', 'DELETE',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type=None,  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def delete_visa(self, cloud_pk, document_pk, id, project_pk, **kwargs):  # noqa: E501
        """Remove a visa  # noqa: E501

        Remove a visa Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.delete_visa(cloud_pk, document_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param int id: A unique integer value identifying this visa. (required)
        :param str project_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.delete_visa_with_http_info(cloud_pk, document_pk, id, project_pk, **kwargs)  # noqa: E501

    def delete_visa_with_http_info(self, cloud_pk, document_pk, id, project_pk, **kwargs):  # noqa: E501
        """Remove a visa  # noqa: E501

        Remove a visa Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.delete_visa_with_http_info(cloud_pk, document_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param int id: A unique integer value identifying this visa. (required)
        :param str project_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'document_pk',
            'id',
            'project_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method delete_visa" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `delete_visa`")  # noqa: E501
        # verify the required parameter 'document_pk' is set
        if self.api_client.client_side_validation and ('document_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['document_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `document_pk` when calling `delete_visa`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `delete_visa`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `delete_visa`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'document_pk' in local_var_params:
            path_params['document_pk'] = local_var_params['document_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/document/{document_pk}/visa/{id}', 'DELETE',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type=None,  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def delete_visa_comment(self, cloud_pk, document_pk, id, project_pk, visa_pk, **kwargs):  # noqa: E501
        """Remove a comment  # noqa: E501

        Remove a comment Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.delete_visa_comment(cloud_pk, document_pk, id, project_pk, visa_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param int id: A unique integer value identifying this visa comment. (required)
        :param str project_pk: (required)
        :param str visa_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.delete_visa_comment_with_http_info(cloud_pk, document_pk, id, project_pk, visa_pk, **kwargs)  # noqa: E501

    def delete_visa_comment_with_http_info(self, cloud_pk, document_pk, id, project_pk, visa_pk, **kwargs):  # noqa: E501
        """Remove a comment  # noqa: E501

        Remove a comment Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.delete_visa_comment_with_http_info(cloud_pk, document_pk, id, project_pk, visa_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param int id: A unique integer value identifying this visa comment. (required)
        :param str project_pk: (required)
        :param str visa_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'document_pk',
            'id',
            'project_pk',
            'visa_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method delete_visa_comment" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `delete_visa_comment`")  # noqa: E501
        # verify the required parameter 'document_pk' is set
        if self.api_client.client_side_validation and ('document_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['document_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `document_pk` when calling `delete_visa_comment`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `delete_visa_comment`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `delete_visa_comment`")  # noqa: E501
        # verify the required parameter 'visa_pk' is set
        if self.api_client.client_side_validation and ('visa_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['visa_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `visa_pk` when calling `delete_visa_comment`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'document_pk' in local_var_params:
            path_params['document_pk'] = local_var_params['document_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501
        if 'visa_pk' in local_var_params:
            path_params['visa_pk'] = local_var_params['visa_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/document/{document_pk}/visa/{visa_pk}/comment/{id}', 'DELETE',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type=None,  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def deny_validation(self, cloud_pk, document_pk, id, project_pk, visa_pk, **kwargs):  # noqa: E501
        """Deny a validation  # noqa: E501

        Deny a validation Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.deny_validation(cloud_pk, document_pk, id, project_pk, visa_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param int id: A unique integer value identifying this visa validation. (required)
        :param str project_pk: (required)
        :param str visa_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.deny_validation_with_http_info(cloud_pk, document_pk, id, project_pk, visa_pk, **kwargs)  # noqa: E501

    def deny_validation_with_http_info(self, cloud_pk, document_pk, id, project_pk, visa_pk, **kwargs):  # noqa: E501
        """Deny a validation  # noqa: E501

        Deny a validation Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.deny_validation_with_http_info(cloud_pk, document_pk, id, project_pk, visa_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param int id: A unique integer value identifying this visa validation. (required)
        :param str project_pk: (required)
        :param str visa_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'document_pk',
            'id',
            'project_pk',
            'visa_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method deny_validation" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `deny_validation`")  # noqa: E501
        # verify the required parameter 'document_pk' is set
        if self.api_client.client_side_validation and ('document_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['document_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `document_pk` when calling `deny_validation`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `deny_validation`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `deny_validation`")  # noqa: E501
        # verify the required parameter 'visa_pk' is set
        if self.api_client.client_side_validation and ('visa_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['visa_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `visa_pk` when calling `deny_validation`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'document_pk' in local_var_params:
            path_params['document_pk'] = local_var_params['document_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501
        if 'visa_pk' in local_var_params:
            path_params['visa_pk'] = local_var_params['visa_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/document/{document_pk}/visa/{visa_pk}/validation/{id}/deny', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type=None,  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_classification(self, cloud_pk, id, project_pk, **kwargs):  # noqa: E501
        """Retrieve a classification  # noqa: E501

        Retrieve a classification Required scopes: ifc:read, model:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_classification(cloud_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this classification. (required)
        :param str project_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: Classification
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_classification_with_http_info(cloud_pk, id, project_pk, **kwargs)  # noqa: E501

    def get_classification_with_http_info(self, cloud_pk, id, project_pk, **kwargs):  # noqa: E501
        """Retrieve a classification  # noqa: E501

        Retrieve a classification Required scopes: ifc:read, model:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_classification_with_http_info(cloud_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this classification. (required)
        :param str project_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(Classification, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'id',
            'project_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_classification" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_classification`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `get_classification`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `get_classification`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/classification/{id}', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='Classification',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_classifications(self, cloud_pk, project_pk, **kwargs):  # noqa: E501
        """Retrieve all classifications  # noqa: E501

        Retrieve all classifications of all models in the project Required scopes: ifc:read, model:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_classifications(cloud_pk, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: list[Classification]
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_classifications_with_http_info(cloud_pk, project_pk, **kwargs)  # noqa: E501

    def get_classifications_with_http_info(self, cloud_pk, project_pk, **kwargs):  # noqa: E501
        """Retrieve all classifications  # noqa: E501

        Retrieve all classifications of all models in the project Required scopes: ifc:read, model:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_classifications_with_http_info(cloud_pk, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(list[Classification], status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'project_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_classifications" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_classifications`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `get_classifications`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/classification', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='list[Classification]',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_cloud(self, id, **kwargs):  # noqa: E501
        """Retrieve one cloud  # noqa: E501

        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_cloud(id, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param int id: A unique integer value identifying this cloud. (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: Cloud
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_cloud_with_http_info(id, **kwargs)  # noqa: E501

    def get_cloud_with_http_info(self, id, **kwargs):  # noqa: E501
        """Retrieve one cloud  # noqa: E501

        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_cloud_with_http_info(id, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param int id: A unique integer value identifying this cloud. (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(Cloud, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'id'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_cloud" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `get_cloud`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{id}', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='Cloud',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_cloud_invitations(self, cloud_pk, **kwargs):  # noqa: E501
        """Retrieve all pending invitations in the cloud  # noqa: E501

        Returns app's invitations only Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_cloud_invitations(cloud_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: list[CloudInvitation]
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_cloud_invitations_with_http_info(cloud_pk, **kwargs)  # noqa: E501

    def get_cloud_invitations_with_http_info(self, cloud_pk, **kwargs):  # noqa: E501
        """Retrieve all pending invitations in the cloud  # noqa: E501

        Returns app's invitations only Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_cloud_invitations_with_http_info(cloud_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(list[CloudInvitation], status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_cloud_invitations" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_cloud_invitations`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/invitation', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='list[CloudInvitation]',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_cloud_size(self, id, **kwargs):  # noqa: E501
        """summary  # noqa: E501

         Returns the sizes of the cloud in Bytes. The response fields depends on the role of the user. If the user is an admin, all field will be returned. If the user is a standard user, only `remaining_total_size` and `remaining_smart_data_size` will be set. If the call is made from an API access, role admin (100) will be returned and all fields will be set. The fields `managed by` indicate if the subscription for this cloud is an API subscription or a BIMData Platform subscription. If the cloud is managed by an API plan, the remaining sizes will take others organizations's clouds size into account   # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_cloud_size(id, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param int id: A unique integer value identifying this cloud. (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: Size
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_cloud_size_with_http_info(id, **kwargs)  # noqa: E501

    def get_cloud_size_with_http_info(self, id, **kwargs):  # noqa: E501
        """summary  # noqa: E501

         Returns the sizes of the cloud in Bytes. The response fields depends on the role of the user. If the user is an admin, all field will be returned. If the user is a standard user, only `remaining_total_size` and `remaining_smart_data_size` will be set. If the call is made from an API access, role admin (100) will be returned and all fields will be set. The fields `managed by` indicate if the subscription for this cloud is an API subscription or a BIMData Platform subscription. If the cloud is managed by an API plan, the remaining sizes will take others organizations's clouds size into account   # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_cloud_size_with_http_info(id, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param int id: A unique integer value identifying this cloud. (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(Size, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'id'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_cloud_size" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `get_cloud_size`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{id}/size', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='Size',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_cloud_user(self, cloud_pk, id, **kwargs):  # noqa: E501
        """Retrieve a user in a cloud  # noqa: E501

        Only administrators can see a cloud member Required scopes: cloud:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_cloud_user(cloud_pk, id, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this fos user. (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: User
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_cloud_user_with_http_info(cloud_pk, id, **kwargs)  # noqa: E501

    def get_cloud_user_with_http_info(self, cloud_pk, id, **kwargs):  # noqa: E501
        """Retrieve a user in a cloud  # noqa: E501

        Only administrators can see a cloud member Required scopes: cloud:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_cloud_user_with_http_info(cloud_pk, id, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this fos user. (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(User, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'id'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_cloud_user" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_cloud_user`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `get_cloud_user`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/user/{id}', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='User',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_cloud_users(self, cloud_pk, **kwargs):  # noqa: E501
        """Retrieve all users in a cloud, or a list with a filter by email  # noqa: E501

        Only administrators can see cloud members. Required scopes: cloud:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_cloud_users(cloud_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str email: Filter the returned list by email
        :param str email__contains: Filter the returned list by email__contains
        :param str email__startswith: Filter the returned list by email__startswith
        :param str email__endswith: Filter the returned list by email__endswith
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: list[User]
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_cloud_users_with_http_info(cloud_pk, **kwargs)  # noqa: E501

    def get_cloud_users_with_http_info(self, cloud_pk, **kwargs):  # noqa: E501
        """Retrieve all users in a cloud, or a list with a filter by email  # noqa: E501

        Only administrators can see cloud members. Required scopes: cloud:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_cloud_users_with_http_info(cloud_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str email: Filter the returned list by email
        :param str email__contains: Filter the returned list by email__contains
        :param str email__startswith: Filter the returned list by email__startswith
        :param str email__endswith: Filter the returned list by email__endswith
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(list[User], status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'email',
            'email__contains',
            'email__startswith',
            'email__endswith'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_cloud_users" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_cloud_users`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501

        query_params = []
        if 'email' in local_var_params and local_var_params['email'] is not None:  # noqa: E501
            query_params.append(('email', local_var_params['email']))  # noqa: E501
        if 'email__contains' in local_var_params and local_var_params['email__contains'] is not None:  # noqa: E501
            query_params.append(('email__contains', local_var_params['email__contains']))  # noqa: E501
        if 'email__startswith' in local_var_params and local_var_params['email__startswith'] is not None:  # noqa: E501
            query_params.append(('email__startswith', local_var_params['email__startswith']))  # noqa: E501
        if 'email__endswith' in local_var_params and local_var_params['email__endswith'] is not None:  # noqa: E501
            query_params.append(('email__endswith', local_var_params['email__endswith']))  # noqa: E501

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/user', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='list[User]',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_clouds(self, **kwargs):  # noqa: E501
        """Retrieve all clouds  # noqa: E501

        Returns user's (or app's) clouds only  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_clouds(async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: list[Cloud]
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_clouds_with_http_info(**kwargs)  # noqa: E501

    def get_clouds_with_http_info(self, **kwargs):  # noqa: E501
        """Retrieve all clouds  # noqa: E501

        Returns user's (or app's) clouds only  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_clouds_with_http_info(async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(list[Cloud], status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_clouds" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']

        collection_formats = {}

        path_params = {}

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='list[Cloud]',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_document(self, cloud_pk, id, project_pk, **kwargs):  # noqa: E501
        """Retrieve a document  # noqa: E501

        Retrieve a document in the project Required scopes: document:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_document(cloud_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this document. (required)
        :param str project_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: Document
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_document_with_http_info(cloud_pk, id, project_pk, **kwargs)  # noqa: E501

    def get_document_with_http_info(self, cloud_pk, id, project_pk, **kwargs):  # noqa: E501
        """Retrieve a document  # noqa: E501

        Retrieve a document in the project Required scopes: document:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_document_with_http_info(cloud_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this document. (required)
        :param str project_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(Document, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'id',
            'project_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_document" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_document`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `get_document`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `get_document`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/document/{id}', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='Document',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_documents(self, cloud_pk, project_pk, **kwargs):  # noqa: E501
        """Retrieve all documents  # noqa: E501

        Retrieve all documents in the project Required scopes: document:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_documents(cloud_pk, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: list[Document]
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_documents_with_http_info(cloud_pk, project_pk, **kwargs)  # noqa: E501

    def get_documents_with_http_info(self, cloud_pk, project_pk, **kwargs):  # noqa: E501
        """Retrieve all documents  # noqa: E501

        Retrieve all documents in the project Required scopes: document:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_documents_with_http_info(cloud_pk, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(list[Document], status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'project_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_documents" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_documents`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `get_documents`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/document', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='list[Document]',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_folder(self, cloud_pk, id, project_pk, **kwargs):  # noqa: E501
        """Retrieve a folder  # noqa: E501

        Retrieve a folder Required scopes: document:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_folder(cloud_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this folder. (required)
        :param str project_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: InlineResponse200
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_folder_with_http_info(cloud_pk, id, project_pk, **kwargs)  # noqa: E501

    def get_folder_with_http_info(self, cloud_pk, id, project_pk, **kwargs):  # noqa: E501
        """Retrieve a folder  # noqa: E501

        Retrieve a folder Required scopes: document:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_folder_with_http_info(cloud_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this folder. (required)
        :param str project_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(InlineResponse200, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'id',
            'project_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_folder" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_folder`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `get_folder`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `get_folder`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/folder/{id}', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='InlineResponse200',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_folder_project_users(self, cloud_pk, folder_pk, project_pk, **kwargs):  # noqa: E501
        """Retrieve all users in a project with the permission on the folder  # noqa: E501

        Retrieve all users in a project with the permission on the folder Required scopes: document:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_folder_project_users(cloud_pk, folder_pk, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str folder_pk: (required)
        :param str project_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: list[FolderUserProject]
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_folder_project_users_with_http_info(cloud_pk, folder_pk, project_pk, **kwargs)  # noqa: E501

    def get_folder_project_users_with_http_info(self, cloud_pk, folder_pk, project_pk, **kwargs):  # noqa: E501
        """Retrieve all users in a project with the permission on the folder  # noqa: E501

        Retrieve all users in a project with the permission on the folder Required scopes: document:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_folder_project_users_with_http_info(cloud_pk, folder_pk, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str folder_pk: (required)
        :param str project_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(list[FolderUserProject], status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'folder_pk',
            'project_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_folder_project_users" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_folder_project_users`")  # noqa: E501
        # verify the required parameter 'folder_pk' is set
        if self.api_client.client_side_validation and ('folder_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['folder_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `folder_pk` when calling `get_folder_project_users`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `get_folder_project_users`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'folder_pk' in local_var_params:
            path_params['folder_pk'] = local_var_params['folder_pk']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/folder/{folder_pk}/user', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='list[FolderUserProject]',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_folders(self, cloud_pk, project_pk, **kwargs):  # noqa: E501
        """Retrieve all folders  # noqa: E501

        Retrieve all folders in the project. This is an array of folder. If you want to get the tree of all folders, see getProjectTree Required scopes: document:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_folders(cloud_pk, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: list[InlineResponse200]
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_folders_with_http_info(cloud_pk, project_pk, **kwargs)  # noqa: E501

    def get_folders_with_http_info(self, cloud_pk, project_pk, **kwargs):  # noqa: E501
        """Retrieve all folders  # noqa: E501

        Retrieve all folders in the project. This is an array of folder. If you want to get the tree of all folders, see getProjectTree Required scopes: document:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_folders_with_http_info(cloud_pk, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(list[InlineResponse200], status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'project_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_folders" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_folders`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `get_folders`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/folder', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='list[InlineResponse200]',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_group(self, cloud_pk, id, project_pk, **kwargs):  # noqa: E501
        """Retrieve a group  # noqa: E501

        Retrieve a group to which the user belongs Required scopes: document:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_group(cloud_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this group. (required)
        :param str project_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: InlineResponse2001
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_group_with_http_info(cloud_pk, id, project_pk, **kwargs)  # noqa: E501

    def get_group_with_http_info(self, cloud_pk, id, project_pk, **kwargs):  # noqa: E501
        """Retrieve a group  # noqa: E501

        Retrieve a group to which the user belongs Required scopes: document:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_group_with_http_info(cloud_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this group. (required)
        :param str project_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(InlineResponse2001, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'id',
            'project_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_group" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_group`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `get_group`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `get_group`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/me/group/{id}', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='InlineResponse2001',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_groups(self, cloud_pk, project_pk, **kwargs):  # noqa: E501
        """Retrieve all groups  # noqa: E501

        Retrieves all groups to which the user belongs Required scopes: document:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_groups(cloud_pk, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: list[InlineResponse2001]
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_groups_with_http_info(cloud_pk, project_pk, **kwargs)  # noqa: E501

    def get_groups_with_http_info(self, cloud_pk, project_pk, **kwargs):  # noqa: E501
        """Retrieve all groups  # noqa: E501

        Retrieves all groups to which the user belongs Required scopes: document:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_groups_with_http_info(cloud_pk, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(list[InlineResponse2001], status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'project_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_groups" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_groups`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `get_groups`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/me/group', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='list[InlineResponse2001]',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_manage_group(self, cloud_pk, id, project_pk, **kwargs):  # noqa: E501
        """Retrieve a group  # noqa: E501

        Retrieve a group. Must be an admin of the project Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_manage_group(cloud_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this group. (required)
        :param str project_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: InlineResponse2001
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_manage_group_with_http_info(cloud_pk, id, project_pk, **kwargs)  # noqa: E501

    def get_manage_group_with_http_info(self, cloud_pk, id, project_pk, **kwargs):  # noqa: E501
        """Retrieve a group  # noqa: E501

        Retrieve a group. Must be an admin of the project Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_manage_group_with_http_info(cloud_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this group. (required)
        :param str project_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(InlineResponse2001, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'id',
            'project_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_manage_group" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_manage_group`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `get_manage_group`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `get_manage_group`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/group/{id}', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='InlineResponse2001',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_manage_groups(self, cloud_pk, project_pk, **kwargs):  # noqa: E501
        """Retrieve all groups  # noqa: E501

        Retrieve all groups in the project. Must be an admin of the project Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_manage_groups(cloud_pk, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: list[InlineResponse2001]
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_manage_groups_with_http_info(cloud_pk, project_pk, **kwargs)  # noqa: E501

    def get_manage_groups_with_http_info(self, cloud_pk, project_pk, **kwargs):  # noqa: E501
        """Retrieve all groups  # noqa: E501

        Retrieve all groups in the project. Must be an admin of the project Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_manage_groups_with_http_info(cloud_pk, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(list[InlineResponse2001], status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'project_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_manage_groups" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_manage_groups`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `get_manage_groups`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/group', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='list[InlineResponse2001]',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_project(self, cloud_pk, id, **kwargs):  # noqa: E501
        """Retrieve a project  # noqa: E501

        Retrieve a project  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_project(cloud_pk, id, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this project. (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: ProjectWithChildren
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_project_with_http_info(cloud_pk, id, **kwargs)  # noqa: E501

    def get_project_with_http_info(self, cloud_pk, id, **kwargs):  # noqa: E501
        """Retrieve a project  # noqa: E501

        Retrieve a project  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_project_with_http_info(cloud_pk, id, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this project. (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(ProjectWithChildren, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'id'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_project" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_project`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `get_project`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{id}', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='ProjectWithChildren',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_project_access_token(self, cloud_pk, project_pk, token, **kwargs):  # noqa: E501
        """Retrieve one token created for this project  # noqa: E501

        Retrieve one token created for this project Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_project_access_token(cloud_pk, project_pk, token, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param str token: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: ProjectAccessToken
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_project_access_token_with_http_info(cloud_pk, project_pk, token, **kwargs)  # noqa: E501

    def get_project_access_token_with_http_info(self, cloud_pk, project_pk, token, **kwargs):  # noqa: E501
        """Retrieve one token created for this project  # noqa: E501

        Retrieve one token created for this project Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_project_access_token_with_http_info(cloud_pk, project_pk, token, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param str token: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(ProjectAccessToken, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'project_pk',
            'token'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_project_access_token" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_project_access_token`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `get_project_access_token`")  # noqa: E501
        # verify the required parameter 'token' is set
        if self.api_client.client_side_validation and ('token' not in local_var_params or  # noqa: E501
                                                        local_var_params['token'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `token` when calling `get_project_access_token`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501
        if 'token' in local_var_params:
            path_params['token'] = local_var_params['token']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/access-token/{token}', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='ProjectAccessToken',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_project_access_tokens(self, cloud_pk, project_pk, **kwargs):  # noqa: E501
        """Retrieve all tokens created for this project  # noqa: E501

        Retrieve all tokens created for this project Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_project_access_tokens(cloud_pk, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: list[ProjectAccessToken]
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_project_access_tokens_with_http_info(cloud_pk, project_pk, **kwargs)  # noqa: E501

    def get_project_access_tokens_with_http_info(self, cloud_pk, project_pk, **kwargs):  # noqa: E501
        """Retrieve all tokens created for this project  # noqa: E501

        Retrieve all tokens created for this project Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_project_access_tokens_with_http_info(cloud_pk, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(list[ProjectAccessToken], status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'project_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_project_access_tokens" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_project_access_tokens`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `get_project_access_tokens`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/access-token', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='list[ProjectAccessToken]',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_project_creator_visas(self, cloud_pk, project_pk, **kwargs):  # noqa: E501
        """List visas created by user  # noqa: E501

        List visas created by user in a project Required scopes: document:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_project_creator_visas(cloud_pk, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: list[Visa]
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_project_creator_visas_with_http_info(cloud_pk, project_pk, **kwargs)  # noqa: E501

    def get_project_creator_visas_with_http_info(self, cloud_pk, project_pk, **kwargs):  # noqa: E501
        """List visas created by user  # noqa: E501

        List visas created by user in a project Required scopes: document:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_project_creator_visas_with_http_info(cloud_pk, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(list[Visa], status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'project_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_project_creator_visas" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_project_creator_visas`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `get_project_creator_visas`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/me/visa/creator', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='list[Visa]',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_project_dms_tree(self, cloud_pk, id, **kwargs):  # noqa: E501
        """Retrieve the complete DMS tree  # noqa: E501

        Retrieve the complete DMS tree (all folders and all documents in the project)  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_project_dms_tree(cloud_pk, id, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this project. (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: Folder
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_project_dms_tree_with_http_info(cloud_pk, id, **kwargs)  # noqa: E501

    def get_project_dms_tree_with_http_info(self, cloud_pk, id, **kwargs):  # noqa: E501
        """Retrieve the complete DMS tree  # noqa: E501

        Retrieve the complete DMS tree (all folders and all documents in the project)  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_project_dms_tree_with_http_info(cloud_pk, id, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this project. (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(Folder, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'id'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_project_dms_tree" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_project_dms_tree`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `get_project_dms_tree`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{id}/dms-tree', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='Folder',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_project_invitations(self, cloud_pk, project_pk, **kwargs):  # noqa: E501
        """Retrieve all pending invitations in the project  # noqa: E501

        Returns app's invitations only Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_project_invitations(cloud_pk, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: list[ProjectInvitation]
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_project_invitations_with_http_info(cloud_pk, project_pk, **kwargs)  # noqa: E501

    def get_project_invitations_with_http_info(self, cloud_pk, project_pk, **kwargs):  # noqa: E501
        """Retrieve all pending invitations in the project  # noqa: E501

        Returns app's invitations only Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_project_invitations_with_http_info(cloud_pk, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(list[ProjectInvitation], status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'project_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_project_invitations" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_project_invitations`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `get_project_invitations`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/invitation', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='list[ProjectInvitation]',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_project_size(self, cloud_pk, id, **kwargs):  # noqa: E501
        """Get size of all model files in the project  # noqa: E501

        Returns the size of the project in Bytes  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_project_size(cloud_pk, id, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this project. (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: ProjectSize
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_project_size_with_http_info(cloud_pk, id, **kwargs)  # noqa: E501

    def get_project_size_with_http_info(self, cloud_pk, id, **kwargs):  # noqa: E501
        """Get size of all model files in the project  # noqa: E501

        Returns the size of the project in Bytes  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_project_size_with_http_info(cloud_pk, id, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this project. (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(ProjectSize, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'id'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_project_size" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_project_size`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `get_project_size`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{id}/size', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='ProjectSize',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_project_sub_tree(self, cloud_pk, **kwargs):  # noqa: E501
        """Retrieve the complete projects tree of the cloud  # noqa: E501

        Retrieve the complete projects tree of the cloud  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_project_sub_tree(cloud_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: list[ProjectWithChildren]
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_project_sub_tree_with_http_info(cloud_pk, **kwargs)  # noqa: E501

    def get_project_sub_tree_with_http_info(self, cloud_pk, **kwargs):  # noqa: E501
        """Retrieve the complete projects tree of the cloud  # noqa: E501

        Retrieve the complete projects tree of the cloud  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_project_sub_tree_with_http_info(cloud_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(list[ProjectWithChildren], status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_project_sub_tree" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_project_sub_tree`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/subtree', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='list[ProjectWithChildren]',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_project_tree(self, cloud_pk, id, **kwargs):  # noqa: E501
        """Retrieve the complete DMS tree  # noqa: E501

        Retrieve the complete DMS tree (all folders and all documents in the project). DEPRECATED: renamed to getProjectDMSTree  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_project_tree(cloud_pk, id, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this project. (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: Folder
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_project_tree_with_http_info(cloud_pk, id, **kwargs)  # noqa: E501

    def get_project_tree_with_http_info(self, cloud_pk, id, **kwargs):  # noqa: E501
        """Retrieve the complete DMS tree  # noqa: E501

        Retrieve the complete DMS tree (all folders and all documents in the project). DEPRECATED: renamed to getProjectDMSTree  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_project_tree_with_http_info(cloud_pk, id, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this project. (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(Folder, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'id'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_project_tree" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_project_tree`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `get_project_tree`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{id}/tree', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='Folder',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_project_users(self, cloud_pk, project_pk, **kwargs):  # noqa: E501
        """Retrieve all users in a project, or a list with a filter by email  # noqa: E501

        Each member of a project can see other members of the project Required scopes: cloud:read, bcf:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_project_users(cloud_pk, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param str email: Filter the returned list by email
        :param str email__contains: Filter the returned list by email__contains
        :param str email__startswith: Filter the returned list by email__startswith
        :param str email__endswith: Filter the returned list by email__endswith
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: list[UserProject]
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_project_users_with_http_info(cloud_pk, project_pk, **kwargs)  # noqa: E501

    def get_project_users_with_http_info(self, cloud_pk, project_pk, **kwargs):  # noqa: E501
        """Retrieve all users in a project, or a list with a filter by email  # noqa: E501

        Each member of a project can see other members of the project Required scopes: cloud:read, bcf:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_project_users_with_http_info(cloud_pk, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param str email: Filter the returned list by email
        :param str email__contains: Filter the returned list by email__contains
        :param str email__startswith: Filter the returned list by email__startswith
        :param str email__endswith: Filter the returned list by email__endswith
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(list[UserProject], status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'project_pk',
            'email',
            'email__contains',
            'email__startswith',
            'email__endswith'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_project_users" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_project_users`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `get_project_users`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []
        if 'email' in local_var_params and local_var_params['email'] is not None:  # noqa: E501
            query_params.append(('email', local_var_params['email']))  # noqa: E501
        if 'email__contains' in local_var_params and local_var_params['email__contains'] is not None:  # noqa: E501
            query_params.append(('email__contains', local_var_params['email__contains']))  # noqa: E501
        if 'email__startswith' in local_var_params and local_var_params['email__startswith'] is not None:  # noqa: E501
            query_params.append(('email__startswith', local_var_params['email__startswith']))  # noqa: E501
        if 'email__endswith' in local_var_params and local_var_params['email__endswith'] is not None:  # noqa: E501
            query_params.append(('email__endswith', local_var_params['email__endswith']))  # noqa: E501

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/user', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='list[UserProject]',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_project_validator_visas(self, cloud_pk, project_pk, **kwargs):  # noqa: E501
        """List visas where user is a validator  # noqa: E501

        List visas where user is a validator in a project Required scopes: document:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_project_validator_visas(cloud_pk, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: list[Visa]
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_project_validator_visas_with_http_info(cloud_pk, project_pk, **kwargs)  # noqa: E501

    def get_project_validator_visas_with_http_info(self, cloud_pk, project_pk, **kwargs):  # noqa: E501
        """List visas where user is a validator  # noqa: E501

        List visas where user is a validator in a project Required scopes: document:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_project_validator_visas_with_http_info(cloud_pk, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(list[Visa], status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'project_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_project_validator_visas" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_project_validator_visas`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `get_project_validator_visas`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/me/visa/validator', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='list[Visa]',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_projects(self, cloud_pk, **kwargs):  # noqa: E501
        """Retrieve all projects  # noqa: E501

        Retrieve all projects of the cloud. All project are shown at the same level. see #getProjectSubTree  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_projects(cloud_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: list[Project]
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_projects_with_http_info(cloud_pk, **kwargs)  # noqa: E501

    def get_projects_with_http_info(self, cloud_pk, **kwargs):  # noqa: E501
        """Retrieve all projects  # noqa: E501

        Retrieve all projects of the cloud. All project are shown at the same level. see #getProjectSubTree  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_projects_with_http_info(cloud_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(list[Project], status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_projects" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_projects`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='list[Project]',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_self_projects(self, **kwargs):  # noqa: E501
        """List current user's projects  # noqa: E501

        List user's projects of all clouds Required scopes: user:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_self_projects(async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: list[Project]
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_self_projects_with_http_info(**kwargs)  # noqa: E501

    def get_self_projects_with_http_info(self, **kwargs):  # noqa: E501
        """List current user's projects  # noqa: E501

        List user's projects of all clouds Required scopes: user:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_self_projects_with_http_info(async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(list[Project], status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_self_projects" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']

        collection_formats = {}

        path_params = {}

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/user/projects', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='list[Project]',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_self_user(self, **kwargs):  # noqa: E501
        """Get info about the current user  # noqa: E501

        Get info about the current user  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_self_user(async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: SelfUser
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_self_user_with_http_info(**kwargs)  # noqa: E501

    def get_self_user_with_http_info(self, **kwargs):  # noqa: E501
        """Get info about the current user  # noqa: E501

        Get info about the current user  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_self_user_with_http_info(async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(SelfUser, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_self_user" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']

        collection_formats = {}

        path_params = {}

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/user', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='SelfUser',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_validation(self, cloud_pk, document_pk, id, project_pk, visa_pk, **kwargs):  # noqa: E501
        """Retrieve a validation to a visa  # noqa: E501

        Retrieve a validation to a visa Required scopes: document:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_validation(cloud_pk, document_pk, id, project_pk, visa_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param int id: A unique integer value identifying this visa validation. (required)
        :param str project_pk: (required)
        :param str visa_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: VisaValidation
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_validation_with_http_info(cloud_pk, document_pk, id, project_pk, visa_pk, **kwargs)  # noqa: E501

    def get_validation_with_http_info(self, cloud_pk, document_pk, id, project_pk, visa_pk, **kwargs):  # noqa: E501
        """Retrieve a validation to a visa  # noqa: E501

        Retrieve a validation to a visa Required scopes: document:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_validation_with_http_info(cloud_pk, document_pk, id, project_pk, visa_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param int id: A unique integer value identifying this visa validation. (required)
        :param str project_pk: (required)
        :param str visa_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(VisaValidation, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'document_pk',
            'id',
            'project_pk',
            'visa_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_validation" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_validation`")  # noqa: E501
        # verify the required parameter 'document_pk' is set
        if self.api_client.client_side_validation and ('document_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['document_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `document_pk` when calling `get_validation`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `get_validation`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `get_validation`")  # noqa: E501
        # verify the required parameter 'visa_pk' is set
        if self.api_client.client_side_validation and ('visa_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['visa_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `visa_pk` when calling `get_validation`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'document_pk' in local_var_params:
            path_params['document_pk'] = local_var_params['document_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501
        if 'visa_pk' in local_var_params:
            path_params['visa_pk'] = local_var_params['visa_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/document/{document_pk}/visa/{visa_pk}/validation/{id}', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='VisaValidation',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_validations(self, cloud_pk, document_pk, project_pk, visa_pk, **kwargs):  # noqa: E501
        """List all validations to a visa  # noqa: E501

        List all validations to a visa Required scopes: document:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_validations(cloud_pk, document_pk, project_pk, visa_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param str project_pk: (required)
        :param str visa_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: list[VisaValidation]
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_validations_with_http_info(cloud_pk, document_pk, project_pk, visa_pk, **kwargs)  # noqa: E501

    def get_validations_with_http_info(self, cloud_pk, document_pk, project_pk, visa_pk, **kwargs):  # noqa: E501
        """List all validations to a visa  # noqa: E501

        List all validations to a visa Required scopes: document:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_validations_with_http_info(cloud_pk, document_pk, project_pk, visa_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param str project_pk: (required)
        :param str visa_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(list[VisaValidation], status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'document_pk',
            'project_pk',
            'visa_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_validations" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_validations`")  # noqa: E501
        # verify the required parameter 'document_pk' is set
        if self.api_client.client_side_validation and ('document_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['document_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `document_pk` when calling `get_validations`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `get_validations`")  # noqa: E501
        # verify the required parameter 'visa_pk' is set
        if self.api_client.client_side_validation and ('visa_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['visa_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `visa_pk` when calling `get_validations`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'document_pk' in local_var_params:
            path_params['document_pk'] = local_var_params['document_pk']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501
        if 'visa_pk' in local_var_params:
            path_params['visa_pk'] = local_var_params['visa_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/document/{document_pk}/visa/{visa_pk}/validation', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='list[VisaValidation]',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_visa(self, cloud_pk, document_pk, id, project_pk, **kwargs):  # noqa: E501
        """Retrieve a visa of a document  # noqa: E501

        Retrieve a unique visa of a document Required scopes: document:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_visa(cloud_pk, document_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param int id: A unique integer value identifying this visa. (required)
        :param str project_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: Visa
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_visa_with_http_info(cloud_pk, document_pk, id, project_pk, **kwargs)  # noqa: E501

    def get_visa_with_http_info(self, cloud_pk, document_pk, id, project_pk, **kwargs):  # noqa: E501
        """Retrieve a visa of a document  # noqa: E501

        Retrieve a unique visa of a document Required scopes: document:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_visa_with_http_info(cloud_pk, document_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param int id: A unique integer value identifying this visa. (required)
        :param str project_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(Visa, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'document_pk',
            'id',
            'project_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_visa" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_visa`")  # noqa: E501
        # verify the required parameter 'document_pk' is set
        if self.api_client.client_side_validation and ('document_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['document_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `document_pk` when calling `get_visa`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `get_visa`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `get_visa`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'document_pk' in local_var_params:
            path_params['document_pk'] = local_var_params['document_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/document/{document_pk}/visa/{id}', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='Visa',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_visa_comment(self, cloud_pk, document_pk, id, project_pk, visa_pk, **kwargs):  # noqa: E501
        """Retrieve a comment  # noqa: E501

        Retrieve a comment Required scopes: document:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_visa_comment(cloud_pk, document_pk, id, project_pk, visa_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param int id: A unique integer value identifying this visa comment. (required)
        :param str project_pk: (required)
        :param str visa_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: VisaComment
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_visa_comment_with_http_info(cloud_pk, document_pk, id, project_pk, visa_pk, **kwargs)  # noqa: E501

    def get_visa_comment_with_http_info(self, cloud_pk, document_pk, id, project_pk, visa_pk, **kwargs):  # noqa: E501
        """Retrieve a comment  # noqa: E501

        Retrieve a comment Required scopes: document:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_visa_comment_with_http_info(cloud_pk, document_pk, id, project_pk, visa_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param int id: A unique integer value identifying this visa comment. (required)
        :param str project_pk: (required)
        :param str visa_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(VisaComment, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'document_pk',
            'id',
            'project_pk',
            'visa_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_visa_comment" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_visa_comment`")  # noqa: E501
        # verify the required parameter 'document_pk' is set
        if self.api_client.client_side_validation and ('document_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['document_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `document_pk` when calling `get_visa_comment`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `get_visa_comment`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `get_visa_comment`")  # noqa: E501
        # verify the required parameter 'visa_pk' is set
        if self.api_client.client_side_validation and ('visa_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['visa_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `visa_pk` when calling `get_visa_comment`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'document_pk' in local_var_params:
            path_params['document_pk'] = local_var_params['document_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501
        if 'visa_pk' in local_var_params:
            path_params['visa_pk'] = local_var_params['visa_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/document/{document_pk}/visa/{visa_pk}/comment/{id}', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='VisaComment',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_visa_comments(self, cloud_pk, document_pk, project_pk, visa_pk, **kwargs):  # noqa: E501
        """List all comment of a visa  # noqa: E501

        List all comment of a visa Required scopes: document:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_visa_comments(cloud_pk, document_pk, project_pk, visa_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param str project_pk: (required)
        :param str visa_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: list[VisaComment]
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_visa_comments_with_http_info(cloud_pk, document_pk, project_pk, visa_pk, **kwargs)  # noqa: E501

    def get_visa_comments_with_http_info(self, cloud_pk, document_pk, project_pk, visa_pk, **kwargs):  # noqa: E501
        """List all comment of a visa  # noqa: E501

        List all comment of a visa Required scopes: document:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_visa_comments_with_http_info(cloud_pk, document_pk, project_pk, visa_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param str project_pk: (required)
        :param str visa_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(list[VisaComment], status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'document_pk',
            'project_pk',
            'visa_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_visa_comments" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_visa_comments`")  # noqa: E501
        # verify the required parameter 'document_pk' is set
        if self.api_client.client_side_validation and ('document_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['document_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `document_pk` when calling `get_visa_comments`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `get_visa_comments`")  # noqa: E501
        # verify the required parameter 'visa_pk' is set
        if self.api_client.client_side_validation and ('visa_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['visa_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `visa_pk` when calling `get_visa_comments`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'document_pk' in local_var_params:
            path_params['document_pk'] = local_var_params['document_pk']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501
        if 'visa_pk' in local_var_params:
            path_params['visa_pk'] = local_var_params['visa_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/document/{document_pk}/visa/{visa_pk}/comment', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='list[VisaComment]',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def get_visas(self, cloud_pk, document_pk, project_pk, **kwargs):  # noqa: E501
        """List all visas of a document  # noqa: E501

        List all visas of a document Required scopes: document:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_visas(cloud_pk, document_pk, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param str project_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: list[Visa]
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.get_visas_with_http_info(cloud_pk, document_pk, project_pk, **kwargs)  # noqa: E501

    def get_visas_with_http_info(self, cloud_pk, document_pk, project_pk, **kwargs):  # noqa: E501
        """List all visas of a document  # noqa: E501

        List all visas of a document Required scopes: document:read  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.get_visas_with_http_info(cloud_pk, document_pk, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param str project_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(list[Visa], status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'document_pk',
            'project_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_visas" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `get_visas`")  # noqa: E501
        # verify the required parameter 'document_pk' is set
        if self.api_client.client_side_validation and ('document_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['document_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `document_pk` when calling `get_visas`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `get_visas`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'document_pk' in local_var_params:
            path_params['document_pk'] = local_var_params['document_pk']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/document/{document_pk}/visa', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='list[Visa]',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def invite_cloud_user(self, cloud_pk, data, **kwargs):  # noqa: E501
        """Invite a cloud administrator  # noqa: E501

        Invite cloud administrators only. To invite in a project, see inviteProjectUser. You can't invite a user already in the cloud. Create multiple invitations of the same email in the same cloud will generate multiple invitation emails but not multiple invitation object Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.invite_cloud_user(cloud_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param CloudInvitation data: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: CloudInvitation
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.invite_cloud_user_with_http_info(cloud_pk, data, **kwargs)  # noqa: E501

    def invite_cloud_user_with_http_info(self, cloud_pk, data, **kwargs):  # noqa: E501
        """Invite a cloud administrator  # noqa: E501

        Invite cloud administrators only. To invite in a project, see inviteProjectUser. You can't invite a user already in the cloud. Create multiple invitations of the same email in the same cloud will generate multiple invitation emails but not multiple invitation object Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.invite_cloud_user_with_http_info(cloud_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param CloudInvitation data: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(CloudInvitation, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'data'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method invite_cloud_user" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `invite_cloud_user`")  # noqa: E501
        # verify the required parameter 'data' is set
        if self.api_client.client_side_validation and ('data' not in local_var_params or  # noqa: E501
                                                        local_var_params['data'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `data` when calling `invite_cloud_user`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'data' in local_var_params:
            body_params = local_var_params['data']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/invitation', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='CloudInvitation',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def invite_project_user(self, cloud_pk, project_pk, data, **kwargs):  # noqa: E501
        """Invite a project member  # noqa: E501

        Invite a project member. If the user is not already a cloud member, they will also be invited in the cloud with USER role. Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.invite_project_user(cloud_pk, project_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param ProjectInvitation data: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: ProjectInvitation
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.invite_project_user_with_http_info(cloud_pk, project_pk, data, **kwargs)  # noqa: E501

    def invite_project_user_with_http_info(self, cloud_pk, project_pk, data, **kwargs):  # noqa: E501
        """Invite a project member  # noqa: E501

        Invite a project member. If the user is not already a cloud member, they will also be invited in the cloud with USER role. Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.invite_project_user_with_http_info(cloud_pk, project_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param ProjectInvitation data: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(ProjectInvitation, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'project_pk',
            'data'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method invite_project_user" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `invite_project_user`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `invite_project_user`")  # noqa: E501
        # verify the required parameter 'data' is set
        if self.api_client.client_side_validation and ('data' not in local_var_params or  # noqa: E501
                                                        local_var_params['data'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `data` when calling `invite_project_user`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'data' in local_var_params:
            body_params = local_var_params['data']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/invitation', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='ProjectInvitation',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def leave_project(self, cloud_pk, id, **kwargs):  # noqa: E501
        """Leave the project  # noqa: E501

        Leave the project. Only authenticated users (no app) can call this route. Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.leave_project(cloud_pk, id, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this project. (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.leave_project_with_http_info(cloud_pk, id, **kwargs)  # noqa: E501

    def leave_project_with_http_info(self, cloud_pk, id, **kwargs):  # noqa: E501
        """Leave the project  # noqa: E501

        Leave the project. Only authenticated users (no app) can call this route. Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.leave_project_with_http_info(cloud_pk, id, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this project. (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'id'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method leave_project" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `leave_project`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `leave_project`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{id}/leave', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type=None,  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def pause_visa(self, cloud_pk, document_pk, id, project_pk, **kwargs):  # noqa: E501
        """Pause a visa of a document  # noqa: E501

        Pause a visa of a document Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.pause_visa(cloud_pk, document_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param int id: A unique integer value identifying this visa. (required)
        :param str project_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.pause_visa_with_http_info(cloud_pk, document_pk, id, project_pk, **kwargs)  # noqa: E501

    def pause_visa_with_http_info(self, cloud_pk, document_pk, id, project_pk, **kwargs):  # noqa: E501
        """Pause a visa of a document  # noqa: E501

        Pause a visa of a document Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.pause_visa_with_http_info(cloud_pk, document_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param int id: A unique integer value identifying this visa. (required)
        :param str project_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'document_pk',
            'id',
            'project_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method pause_visa" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `pause_visa`")  # noqa: E501
        # verify the required parameter 'document_pk' is set
        if self.api_client.client_side_validation and ('document_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['document_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `document_pk` when calling `pause_visa`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `pause_visa`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `pause_visa`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'document_pk' in local_var_params:
            path_params['document_pk'] = local_var_params['document_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/document/{document_pk}/visa/{id}/pause', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type=None,  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def reset_validation(self, cloud_pk, document_pk, id, project_pk, visa_pk, **kwargs):  # noqa: E501
        """Reset a validation  # noqa: E501

        Reset a validation if the validation has been accepted or rejected Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.reset_validation(cloud_pk, document_pk, id, project_pk, visa_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param int id: A unique integer value identifying this visa validation. (required)
        :param str project_pk: (required)
        :param str visa_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.reset_validation_with_http_info(cloud_pk, document_pk, id, project_pk, visa_pk, **kwargs)  # noqa: E501

    def reset_validation_with_http_info(self, cloud_pk, document_pk, id, project_pk, visa_pk, **kwargs):  # noqa: E501
        """Reset a validation  # noqa: E501

        Reset a validation if the validation has been accepted or rejected Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.reset_validation_with_http_info(cloud_pk, document_pk, id, project_pk, visa_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param int id: A unique integer value identifying this visa validation. (required)
        :param str project_pk: (required)
        :param str visa_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'document_pk',
            'id',
            'project_pk',
            'visa_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method reset_validation" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `reset_validation`")  # noqa: E501
        # verify the required parameter 'document_pk' is set
        if self.api_client.client_side_validation and ('document_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['document_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `document_pk` when calling `reset_validation`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `reset_validation`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `reset_validation`")  # noqa: E501
        # verify the required parameter 'visa_pk' is set
        if self.api_client.client_side_validation and ('visa_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['visa_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `visa_pk` when calling `reset_validation`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'document_pk' in local_var_params:
            path_params['document_pk'] = local_var_params['document_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501
        if 'visa_pk' in local_var_params:
            path_params['visa_pk'] = local_var_params['visa_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/document/{document_pk}/visa/{visa_pk}/validation/{id}/reset', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type=None,  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def resume_visa(self, cloud_pk, document_pk, id, project_pk, **kwargs):  # noqa: E501
        """Resume a visa of a document  # noqa: E501

        Resume a visa of a document after a pause Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.resume_visa(cloud_pk, document_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param int id: A unique integer value identifying this visa. (required)
        :param str project_pk: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.resume_visa_with_http_info(cloud_pk, document_pk, id, project_pk, **kwargs)  # noqa: E501

    def resume_visa_with_http_info(self, cloud_pk, document_pk, id, project_pk, **kwargs):  # noqa: E501
        """Resume a visa of a document  # noqa: E501

        Resume a visa of a document after a pause Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.resume_visa_with_http_info(cloud_pk, document_pk, id, project_pk, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param int id: A unique integer value identifying this visa. (required)
        :param str project_pk: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'document_pk',
            'id',
            'project_pk'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method resume_visa" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `resume_visa`")  # noqa: E501
        # verify the required parameter 'document_pk' is set
        if self.api_client.client_side_validation and ('document_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['document_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `document_pk` when calling `resume_visa`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `resume_visa`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `resume_visa`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'document_pk' in local_var_params:
            path_params['document_pk'] = local_var_params['document_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/document/{document_pk}/visa/{id}/resume', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type=None,  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def update_classification(self, cloud_pk, id, project_pk, data, **kwargs):  # noqa: E501
        """Update some fields of a classification  # noqa: E501

        Update some fields of a classification Required scopes: ifc:write, model:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.update_classification(cloud_pk, id, project_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this classification. (required)
        :param str project_pk: (required)
        :param Classification data: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: Classification
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.update_classification_with_http_info(cloud_pk, id, project_pk, data, **kwargs)  # noqa: E501

    def update_classification_with_http_info(self, cloud_pk, id, project_pk, data, **kwargs):  # noqa: E501
        """Update some fields of a classification  # noqa: E501

        Update some fields of a classification Required scopes: ifc:write, model:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.update_classification_with_http_info(cloud_pk, id, project_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this classification. (required)
        :param str project_pk: (required)
        :param Classification data: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(Classification, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'id',
            'project_pk',
            'data'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method update_classification" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `update_classification`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `update_classification`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `update_classification`")  # noqa: E501
        # verify the required parameter 'data' is set
        if self.api_client.client_side_validation and ('data' not in local_var_params or  # noqa: E501
                                                        local_var_params['data'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `data` when calling `update_classification`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'data' in local_var_params:
            body_params = local_var_params['data']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/classification/{id}', 'PATCH',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='Classification',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def update_cloud(self, id, data, **kwargs):  # noqa: E501
        """Update some fields of a cloud  # noqa: E501

        Update some fields of a cloud Required scopes: cloud:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.update_cloud(id, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param int id: A unique integer value identifying this cloud. (required)
        :param Cloud data: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: Cloud
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.update_cloud_with_http_info(id, data, **kwargs)  # noqa: E501

    def update_cloud_with_http_info(self, id, data, **kwargs):  # noqa: E501
        """Update some fields of a cloud  # noqa: E501

        Update some fields of a cloud Required scopes: cloud:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.update_cloud_with_http_info(id, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param int id: A unique integer value identifying this cloud. (required)
        :param Cloud data: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(Cloud, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'id',
            'data'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method update_cloud" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `update_cloud`")  # noqa: E501
        # verify the required parameter 'data' is set
        if self.api_client.client_side_validation and ('data' not in local_var_params or  # noqa: E501
                                                        local_var_params['data'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `data` when calling `update_cloud`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'data' in local_var_params:
            body_params = local_var_params['data']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{id}', 'PATCH',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='Cloud',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def update_cloud_user(self, cloud_pk, id, data, **kwargs):  # noqa: E501
        """Update some fields of a cloud user  # noqa: E501

        Change the user role in the cloud Required scopes: cloud:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.update_cloud_user(cloud_pk, id, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this fos user. (required)
        :param UserCloudUpdate data: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: User
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.update_cloud_user_with_http_info(cloud_pk, id, data, **kwargs)  # noqa: E501

    def update_cloud_user_with_http_info(self, cloud_pk, id, data, **kwargs):  # noqa: E501
        """Update some fields of a cloud user  # noqa: E501

        Change the user role in the cloud Required scopes: cloud:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.update_cloud_user_with_http_info(cloud_pk, id, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this fos user. (required)
        :param UserCloudUpdate data: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(User, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'id',
            'data'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method update_cloud_user" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `update_cloud_user`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `update_cloud_user`")  # noqa: E501
        # verify the required parameter 'data' is set
        if self.api_client.client_side_validation and ('data' not in local_var_params or  # noqa: E501
                                                        local_var_params['data'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `data` when calling `update_cloud_user`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'data' in local_var_params:
            body_params = local_var_params['data']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/user/{id}', 'PATCH',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='User',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def update_document(self, cloud_pk, id, project_pk, data, **kwargs):  # noqa: E501
        """Update some fields of the document  # noqa: E501

        Update some fields of the document Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.update_document(cloud_pk, id, project_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this document. (required)
        :param str project_pk: (required)
        :param Document data: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: Document
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.update_document_with_http_info(cloud_pk, id, project_pk, data, **kwargs)  # noqa: E501

    def update_document_with_http_info(self, cloud_pk, id, project_pk, data, **kwargs):  # noqa: E501
        """Update some fields of the document  # noqa: E501

        Update some fields of the document Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.update_document_with_http_info(cloud_pk, id, project_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this document. (required)
        :param str project_pk: (required)
        :param Document data: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(Document, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'id',
            'project_pk',
            'data'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method update_document" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `update_document`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `update_document`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `update_document`")  # noqa: E501
        # verify the required parameter 'data' is set
        if self.api_client.client_side_validation and ('data' not in local_var_params or  # noqa: E501
                                                        local_var_params['data'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `data` when calling `update_document`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'data' in local_var_params:
            body_params = local_var_params['data']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/document/{id}', 'PATCH',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='Document',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def update_folder(self, cloud_pk, id, project_pk, data, **kwargs):  # noqa: E501
        """Update some fields of a folder  # noqa: E501

        Update some fields of a folder. Only project admins can update the `default_permission` field Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.update_folder(cloud_pk, id, project_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this folder. (required)
        :param str project_pk: (required)
        :param InlineObject1 data: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: InlineResponse200
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.update_folder_with_http_info(cloud_pk, id, project_pk, data, **kwargs)  # noqa: E501

    def update_folder_with_http_info(self, cloud_pk, id, project_pk, data, **kwargs):  # noqa: E501
        """Update some fields of a folder  # noqa: E501

        Update some fields of a folder. Only project admins can update the `default_permission` field Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.update_folder_with_http_info(cloud_pk, id, project_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this folder. (required)
        :param str project_pk: (required)
        :param InlineObject1 data: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(InlineResponse200, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'id',
            'project_pk',
            'data'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method update_folder" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `update_folder`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `update_folder`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `update_folder`")  # noqa: E501
        # verify the required parameter 'data' is set
        if self.api_client.client_side_validation and ('data' not in local_var_params or  # noqa: E501
                                                        local_var_params['data'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `data` when calling `update_folder`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'data' in local_var_params:
            body_params = local_var_params['data']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/folder/{id}', 'PATCH',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='InlineResponse200',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def update_group_folder(self, cloud_pk, folder_pk, id, project_pk, data, **kwargs):  # noqa: E501
        """Update the permission of a group on a folder  # noqa: E501

        Update the permission of a group on a folder.             0: ACCESS_DENIED,             50: READ_ONLY,             100: READ_WRTIE  Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.update_group_folder(cloud_pk, folder_pk, id, project_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str folder_pk: (required)
        :param int id: A unique integer value identifying this group folder. (required)
        :param str project_pk: (required)
        :param GroupFolder data: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: GroupFolder
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.update_group_folder_with_http_info(cloud_pk, folder_pk, id, project_pk, data, **kwargs)  # noqa: E501

    def update_group_folder_with_http_info(self, cloud_pk, folder_pk, id, project_pk, data, **kwargs):  # noqa: E501
        """Update the permission of a group on a folder  # noqa: E501

        Update the permission of a group on a folder.             0: ACCESS_DENIED,             50: READ_ONLY,             100: READ_WRTIE  Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.update_group_folder_with_http_info(cloud_pk, folder_pk, id, project_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str folder_pk: (required)
        :param int id: A unique integer value identifying this group folder. (required)
        :param str project_pk: (required)
        :param GroupFolder data: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(GroupFolder, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'folder_pk',
            'id',
            'project_pk',
            'data'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method update_group_folder" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `update_group_folder`")  # noqa: E501
        # verify the required parameter 'folder_pk' is set
        if self.api_client.client_side_validation and ('folder_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['folder_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `folder_pk` when calling `update_group_folder`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `update_group_folder`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `update_group_folder`")  # noqa: E501
        # verify the required parameter 'data' is set
        if self.api_client.client_side_validation and ('data' not in local_var_params or  # noqa: E501
                                                        local_var_params['data'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `data` when calling `update_group_folder`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'folder_pk' in local_var_params:
            path_params['folder_pk'] = local_var_params['folder_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'data' in local_var_params:
            body_params = local_var_params['data']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/folder/{folder_pk}/group/{id}', 'PATCH',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='GroupFolder',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def update_manage_group(self, cloud_pk, id, project_pk, data, **kwargs):  # noqa: E501
        """Update some fields of a group  # noqa: E501

        Update some fields of a group. Must be an admin of the project Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.update_manage_group(cloud_pk, id, project_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this group. (required)
        :param str project_pk: (required)
        :param InlineObject3 data: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: InlineResponse2001
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.update_manage_group_with_http_info(cloud_pk, id, project_pk, data, **kwargs)  # noqa: E501

    def update_manage_group_with_http_info(self, cloud_pk, id, project_pk, data, **kwargs):  # noqa: E501
        """Update some fields of a group  # noqa: E501

        Update some fields of a group. Must be an admin of the project Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.update_manage_group_with_http_info(cloud_pk, id, project_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this group. (required)
        :param str project_pk: (required)
        :param InlineObject3 data: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(InlineResponse2001, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'id',
            'project_pk',
            'data'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method update_manage_group" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `update_manage_group`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `update_manage_group`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `update_manage_group`")  # noqa: E501
        # verify the required parameter 'data' is set
        if self.api_client.client_side_validation and ('data' not in local_var_params or  # noqa: E501
                                                        local_var_params['data'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `data` when calling `update_manage_group`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'data' in local_var_params:
            body_params = local_var_params['data']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/group/{id}', 'PATCH',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='InlineResponse2001',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def update_project(self, cloud_pk, id, data, **kwargs):  # noqa: E501
        """Update some fields of a project  # noqa: E501

        Update some fields of a project Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.update_project(cloud_pk, id, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this project. (required)
        :param Project data: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: Project
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.update_project_with_http_info(cloud_pk, id, data, **kwargs)  # noqa: E501

    def update_project_with_http_info(self, cloud_pk, id, data, **kwargs):  # noqa: E501
        """Update some fields of a project  # noqa: E501

        Update some fields of a project Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.update_project_with_http_info(cloud_pk, id, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param int id: A unique integer value identifying this project. (required)
        :param Project data: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(Project, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'id',
            'data'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method update_project" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `update_project`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `update_project`")  # noqa: E501
        # verify the required parameter 'data' is set
        if self.api_client.client_side_validation and ('data' not in local_var_params or  # noqa: E501
                                                        local_var_params['data'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `data` when calling `update_project`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'data' in local_var_params:
            body_params = local_var_params['data']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{id}', 'PATCH',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='Project',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def update_project_access_token(self, cloud_pk, project_pk, token, data, **kwargs):  # noqa: E501
        """Update some fields of a token  # noqa: E501

        You can update the expiration date field Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.update_project_access_token(cloud_pk, project_pk, token, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param str token: (required)
        :param ProjectAccessToken data: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: ProjectAccessToken
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.update_project_access_token_with_http_info(cloud_pk, project_pk, token, data, **kwargs)  # noqa: E501

    def update_project_access_token_with_http_info(self, cloud_pk, project_pk, token, data, **kwargs):  # noqa: E501
        """Update some fields of a token  # noqa: E501

        You can update the expiration date field Required scopes: org:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.update_project_access_token_with_http_info(cloud_pk, project_pk, token, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str project_pk: (required)
        :param str token: (required)
        :param ProjectAccessToken data: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(ProjectAccessToken, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'project_pk',
            'token',
            'data'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method update_project_access_token" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `update_project_access_token`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `update_project_access_token`")  # noqa: E501
        # verify the required parameter 'token' is set
        if self.api_client.client_side_validation and ('token' not in local_var_params or  # noqa: E501
                                                        local_var_params['token'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `token` when calling `update_project_access_token`")  # noqa: E501
        # verify the required parameter 'data' is set
        if self.api_client.client_side_validation and ('data' not in local_var_params or  # noqa: E501
                                                        local_var_params['data'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `data` when calling `update_project_access_token`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501
        if 'token' in local_var_params:
            path_params['token'] = local_var_params['token']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'data' in local_var_params:
            body_params = local_var_params['data']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/access-token/{token}', 'PATCH',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='ProjectAccessToken',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def update_project_user(self, cloud_pk, id, project_pk, data, **kwargs):  # noqa: E501
        """Change the user role in the cloud  # noqa: E501

        Change the user role in the cloud Required scopes: cloud:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.update_project_user(cloud_pk, id, project_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str id: (required)
        :param str project_pk: (required)
        :param UserProjectUpdate data: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: UserProject
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.update_project_user_with_http_info(cloud_pk, id, project_pk, data, **kwargs)  # noqa: E501

    def update_project_user_with_http_info(self, cloud_pk, id, project_pk, data, **kwargs):  # noqa: E501
        """Change the user role in the cloud  # noqa: E501

        Change the user role in the cloud Required scopes: cloud:manage  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.update_project_user_with_http_info(cloud_pk, id, project_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str id: (required)
        :param str project_pk: (required)
        :param UserProjectUpdate data: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(UserProject, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'id',
            'project_pk',
            'data'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method update_project_user" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `update_project_user`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `update_project_user`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `update_project_user`")  # noqa: E501
        # verify the required parameter 'data' is set
        if self.api_client.client_side_validation and ('data' not in local_var_params or  # noqa: E501
                                                        local_var_params['data'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `data` when calling `update_project_user`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'data' in local_var_params:
            body_params = local_var_params['data']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/user/{id}', 'PATCH',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='UserProject',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def update_validation(self, cloud_pk, document_pk, id, project_pk, visa_pk, data, **kwargs):  # noqa: E501
        """Update the validator of validation  # noqa: E501

        Update the validator of validation. This route is only useful for an App Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.update_validation(cloud_pk, document_pk, id, project_pk, visa_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param int id: A unique integer value identifying this visa validation. (required)
        :param str project_pk: (required)
        :param str visa_pk: (required)
        :param VisaValidation data: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: VisaValidation
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.update_validation_with_http_info(cloud_pk, document_pk, id, project_pk, visa_pk, data, **kwargs)  # noqa: E501

    def update_validation_with_http_info(self, cloud_pk, document_pk, id, project_pk, visa_pk, data, **kwargs):  # noqa: E501
        """Update the validator of validation  # noqa: E501

        Update the validator of validation. This route is only useful for an App Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.update_validation_with_http_info(cloud_pk, document_pk, id, project_pk, visa_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param int id: A unique integer value identifying this visa validation. (required)
        :param str project_pk: (required)
        :param str visa_pk: (required)
        :param VisaValidation data: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(VisaValidation, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'document_pk',
            'id',
            'project_pk',
            'visa_pk',
            'data'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method update_validation" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `update_validation`")  # noqa: E501
        # verify the required parameter 'document_pk' is set
        if self.api_client.client_side_validation and ('document_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['document_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `document_pk` when calling `update_validation`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `update_validation`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `update_validation`")  # noqa: E501
        # verify the required parameter 'visa_pk' is set
        if self.api_client.client_side_validation and ('visa_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['visa_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `visa_pk` when calling `update_validation`")  # noqa: E501
        # verify the required parameter 'data' is set
        if self.api_client.client_side_validation and ('data' not in local_var_params or  # noqa: E501
                                                        local_var_params['data'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `data` when calling `update_validation`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'document_pk' in local_var_params:
            path_params['document_pk'] = local_var_params['document_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501
        if 'visa_pk' in local_var_params:
            path_params['visa_pk'] = local_var_params['visa_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'data' in local_var_params:
            body_params = local_var_params['data']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/document/{document_pk}/visa/{visa_pk}/validation/{id}', 'PATCH',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='VisaValidation',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def update_visa(self, cloud_pk, document_pk, id, project_pk, data, **kwargs):  # noqa: E501
        """Update some fields of a visa  # noqa: E501

        Update some fields of a visa Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.update_visa(cloud_pk, document_pk, id, project_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param int id: A unique integer value identifying this visa. (required)
        :param str project_pk: (required)
        :param Visa data: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: Visa
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.update_visa_with_http_info(cloud_pk, document_pk, id, project_pk, data, **kwargs)  # noqa: E501

    def update_visa_with_http_info(self, cloud_pk, document_pk, id, project_pk, data, **kwargs):  # noqa: E501
        """Update some fields of a visa  # noqa: E501

        Update some fields of a visa Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.update_visa_with_http_info(cloud_pk, document_pk, id, project_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param int id: A unique integer value identifying this visa. (required)
        :param str project_pk: (required)
        :param Visa data: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(Visa, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'document_pk',
            'id',
            'project_pk',
            'data'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method update_visa" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `update_visa`")  # noqa: E501
        # verify the required parameter 'document_pk' is set
        if self.api_client.client_side_validation and ('document_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['document_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `document_pk` when calling `update_visa`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `update_visa`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `update_visa`")  # noqa: E501
        # verify the required parameter 'data' is set
        if self.api_client.client_side_validation and ('data' not in local_var_params or  # noqa: E501
                                                        local_var_params['data'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `data` when calling `update_visa`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'document_pk' in local_var_params:
            path_params['document_pk'] = local_var_params['document_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'data' in local_var_params:
            body_params = local_var_params['data']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/document/{document_pk}/visa/{id}', 'PATCH',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='Visa',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)

    def update_visa_comment(self, cloud_pk, document_pk, id, project_pk, visa_pk, data, **kwargs):  # noqa: E501
        """Update some fields of a comment  # noqa: E501

        Update some fields of a comment Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.update_visa_comment(cloud_pk, document_pk, id, project_pk, visa_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param int id: A unique integer value identifying this visa comment. (required)
        :param str project_pk: (required)
        :param str visa_pk: (required)
        :param VisaComment data: (required)
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: VisaComment
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        return self.update_visa_comment_with_http_info(cloud_pk, document_pk, id, project_pk, visa_pk, data, **kwargs)  # noqa: E501

    def update_visa_comment_with_http_info(self, cloud_pk, document_pk, id, project_pk, visa_pk, data, **kwargs):  # noqa: E501
        """Update some fields of a comment  # noqa: E501

        Update some fields of a comment Required scopes: document:write  # noqa: E501
        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.update_visa_comment_with_http_info(cloud_pk, document_pk, id, project_pk, visa_pk, data, async_req=True)
        >>> result = thread.get()

        :param async_req bool: execute request asynchronously
        :param str cloud_pk: (required)
        :param str document_pk: (required)
        :param int id: A unique integer value identifying this visa comment. (required)
        :param str project_pk: (required)
        :param str visa_pk: (required)
        :param VisaComment data: (required)
        :param _return_http_data_only: response data without head status code
                                       and headers
        :param _preload_content: if False, the urllib3.HTTPResponse object will
                                 be returned without reading/decoding response
                                 data. Default is True.
        :param _request_timeout: timeout setting for this request. If one
                                 number provided, it will be total request
                                 timeout. It can also be a pair (tuple) of
                                 (connection, read) timeouts.
        :return: tuple(VisaComment, status_code(int), headers(HTTPHeaderDict))
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = [
            'cloud_pk',
            'document_pk',
            'id',
            'project_pk',
            'visa_pk',
            'data'
        ]
        all_params.extend(
            [
                'async_req',
                '_return_http_data_only',
                '_preload_content',
                '_request_timeout'
            ]
        )

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise ApiTypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method update_visa_comment" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'cloud_pk' is set
        if self.api_client.client_side_validation and ('cloud_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['cloud_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `cloud_pk` when calling `update_visa_comment`")  # noqa: E501
        # verify the required parameter 'document_pk' is set
        if self.api_client.client_side_validation and ('document_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['document_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `document_pk` when calling `update_visa_comment`")  # noqa: E501
        # verify the required parameter 'id' is set
        if self.api_client.client_side_validation and ('id' not in local_var_params or  # noqa: E501
                                                        local_var_params['id'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `id` when calling `update_visa_comment`")  # noqa: E501
        # verify the required parameter 'project_pk' is set
        if self.api_client.client_side_validation and ('project_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['project_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `project_pk` when calling `update_visa_comment`")  # noqa: E501
        # verify the required parameter 'visa_pk' is set
        if self.api_client.client_side_validation and ('visa_pk' not in local_var_params or  # noqa: E501
                                                        local_var_params['visa_pk'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `visa_pk` when calling `update_visa_comment`")  # noqa: E501
        # verify the required parameter 'data' is set
        if self.api_client.client_side_validation and ('data' not in local_var_params or  # noqa: E501
                                                        local_var_params['data'] is None):  # noqa: E501
            raise ApiValueError("Missing the required parameter `data` when calling `update_visa_comment`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'cloud_pk' in local_var_params:
            path_params['cloud_pk'] = local_var_params['cloud_pk']  # noqa: E501
        if 'document_pk' in local_var_params:
            path_params['document_pk'] = local_var_params['document_pk']  # noqa: E501
        if 'id' in local_var_params:
            path_params['id'] = local_var_params['id']  # noqa: E501
        if 'project_pk' in local_var_params:
            path_params['project_pk'] = local_var_params['project_pk']  # noqa: E501
        if 'visa_pk' in local_var_params:
            path_params['visa_pk'] = local_var_params['visa_pk']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'data' in local_var_params:
            body_params = local_var_params['data']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/json'])  # noqa: E501

        # HTTP header `Content-Type`
        header_params['Content-Type'] = self.api_client.select_header_content_type(  # noqa: E501
            ['application/json'])  # noqa: E501

        # Authentication setting
        auth_settings = ['Bearer', 'bimdata_connect', 'client_credentials']  # noqa: E501

        return self.api_client.call_api(
            '/cloud/{cloud_pk}/project/{project_pk}/document/{document_pk}/visa/{visa_pk}/comment/{id}', 'PATCH',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='VisaComment',  # noqa: E501
            auth_settings=auth_settings,
            async_req=local_var_params.get('async_req'),
            _return_http_data_only=local_var_params.get('_return_http_data_only'),  # noqa: E501
            _preload_content=local_var_params.get('_preload_content', True),
            _request_timeout=local_var_params.get('_request_timeout'),
            collection_formats=collection_formats)
