# coding: utf-8

"""
    Onshape REST API

    The Onshape REST API consumed by all clients.  # noqa: E501

    OpenAPI spec version: 1.96
    Contact: api-support@onshape.zendesk.com
    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 onshape_client.api_client import ApiClient


class PartStudiosApi(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 add_feature1(self, did, wvm, wvmid, eid, **kwargs):  # noqa: E501
        """Add Feature  # 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_feature1(did, wvm, wvmid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wvm: One of w or v or m corresponding to whether a workspace or version or microversion was entered. (required)
        :param str wvmid: Workspace (w), Version (v) or Microversion (m) ID. (required)
        :param str eid: Element ID. (required)
        :param str body: feature The serialized feature definition
        :return: BTFeatureDefinitionResponse
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.add_feature1_with_http_info(did, wvm, wvmid, eid, **kwargs)  # noqa: E501
        else:
            (data) = self.add_feature1_with_http_info(did, wvm, wvmid, eid, **kwargs)  # noqa: E501
            return data

    def add_feature1_with_http_info(self, did, wvm, wvmid, eid, **kwargs):  # noqa: E501
        """Add Feature  # 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_feature1_with_http_info(did, wvm, wvmid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wvm: One of w or v or m corresponding to whether a workspace or version or microversion was entered. (required)
        :param str wvmid: Workspace (w), Version (v) or Microversion (m) ID. (required)
        :param str eid: Element ID. (required)
        :param str body: feature The serialized feature definition
        :return: BTFeatureDefinitionResponse
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = ['did', 'wvm', 'wvmid', 'eid', 'body']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method add_feature1" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'did' is set
        if ('did' not in local_var_params or
                local_var_params['did'] is None):
            raise ValueError("Missing the required parameter `did` when calling `add_feature1`")  # noqa: E501
        # verify the required parameter 'wvm' is set
        if ('wvm' not in local_var_params or
                local_var_params['wvm'] is None):
            raise ValueError("Missing the required parameter `wvm` when calling `add_feature1`")  # noqa: E501
        # verify the required parameter 'wvmid' is set
        if ('wvmid' not in local_var_params or
                local_var_params['wvmid'] is None):
            raise ValueError("Missing the required parameter `wvmid` when calling `add_feature1`")  # noqa: E501
        # verify the required parameter 'eid' is set
        if ('eid' not in local_var_params or
                local_var_params['eid'] is None):
            raise ValueError("Missing the required parameter `eid` when calling `add_feature1`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'did' in local_var_params:
            path_params['did'] = local_var_params['did']  # noqa: E501
        if 'wvm' in local_var_params:
            path_params['wvm'] = local_var_params['wvm']  # noqa: E501
        if 'wvmid' in local_var_params:
            path_params['wvmid'] = local_var_params['wvmid']  # noqa: E501
        if 'eid' in local_var_params:
            path_params['eid'] = local_var_params['eid']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'body' in local_var_params:
            body_params = local_var_params['body']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/vnd.onshape.v2+json;charset=UTF-8; qs=0.2'])  # noqa: E501

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

        # Authentication setting
        auth_settings = ['OAuth2']  # noqa: E501

        return self.api_client.call_api(
            '/api/partstudios/d/{did}/{wvm}/{wvmid}/e/{eid}/features', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='BTFeatureDefinitionResponse',  # 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 compare_part_studios1(self, did, wvm, wvmid, eid, **kwargs):  # noqa: E501
        """Compare Part Studios  # noqa: E501

        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.compare_part_studios1(did, wvm, wvmid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wvm: One of w or v or m corresponding to whether a workspace or version or microversion was entered. (required)
        :param str wvmid: Workspace (w), Version (v) or Microversion (m) ID. (required)
        :param str eid: Element ID. (required)
        :param str workspace_id:
        :param str version_id:
        :param str microversion_id:
        :param str source_configuration:
        :param str target_configuration:
        :param str link_document_id:
        :return: BTRootDiffInfo
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.compare_part_studios1_with_http_info(did, wvm, wvmid, eid, **kwargs)  # noqa: E501
        else:
            (data) = self.compare_part_studios1_with_http_info(did, wvm, wvmid, eid, **kwargs)  # noqa: E501
            return data

    def compare_part_studios1_with_http_info(self, did, wvm, wvmid, eid, **kwargs):  # noqa: E501
        """Compare Part Studios  # noqa: E501

        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.compare_part_studios1_with_http_info(did, wvm, wvmid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wvm: One of w or v or m corresponding to whether a workspace or version or microversion was entered. (required)
        :param str wvmid: Workspace (w), Version (v) or Microversion (m) ID. (required)
        :param str eid: Element ID. (required)
        :param str workspace_id:
        :param str version_id:
        :param str microversion_id:
        :param str source_configuration:
        :param str target_configuration:
        :param str link_document_id:
        :return: BTRootDiffInfo
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = ['did', 'wvm', 'wvmid', 'eid', 'workspace_id', 'version_id', 'microversion_id', 'source_configuration', 'target_configuration', 'link_document_id']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method compare_part_studios1" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'did' is set
        if ('did' not in local_var_params or
                local_var_params['did'] is None):
            raise ValueError("Missing the required parameter `did` when calling `compare_part_studios1`")  # noqa: E501
        # verify the required parameter 'wvm' is set
        if ('wvm' not in local_var_params or
                local_var_params['wvm'] is None):
            raise ValueError("Missing the required parameter `wvm` when calling `compare_part_studios1`")  # noqa: E501
        # verify the required parameter 'wvmid' is set
        if ('wvmid' not in local_var_params or
                local_var_params['wvmid'] is None):
            raise ValueError("Missing the required parameter `wvmid` when calling `compare_part_studios1`")  # noqa: E501
        # verify the required parameter 'eid' is set
        if ('eid' not in local_var_params or
                local_var_params['eid'] is None):
            raise ValueError("Missing the required parameter `eid` when calling `compare_part_studios1`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'did' in local_var_params:
            path_params['did'] = local_var_params['did']  # noqa: E501
        if 'wvm' in local_var_params:
            path_params['wvm'] = local_var_params['wvm']  # noqa: E501
        if 'wvmid' in local_var_params:
            path_params['wvmid'] = local_var_params['wvmid']  # noqa: E501
        if 'eid' in local_var_params:
            path_params['eid'] = local_var_params['eid']  # noqa: E501

        query_params = []
        if 'workspace_id' in local_var_params:
            query_params.append(('workspaceId', local_var_params['workspace_id']))  # noqa: E501
        if 'version_id' in local_var_params:
            query_params.append(('versionId', local_var_params['version_id']))  # noqa: E501
        if 'microversion_id' in local_var_params:
            query_params.append(('microversionId', local_var_params['microversion_id']))  # noqa: E501
        if 'source_configuration' in local_var_params:
            query_params.append(('sourceConfiguration', local_var_params['source_configuration']))  # noqa: E501
        if 'target_configuration' in local_var_params:
            query_params.append(('targetConfiguration', local_var_params['target_configuration']))  # noqa: E501
        if 'link_document_id' in local_var_params:
            query_params.append(('linkDocumentId', local_var_params['link_document_id']))  # 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/vnd.onshape.v1+json;charset=UTF-8; qs=0.1', 'application/json;charset=UTF-8; qs=0.9'])  # noqa: E501

        # Authentication setting
        auth_settings = ['OAuth2']  # noqa: E501

        return self.api_client.call_api(
            '/api/partstudios/d/{did}/{wvm}/{wvmid}/e/{eid}/compare', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='BTRootDiffInfo',  # 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_part_studio(self, did, wid, bt_model_element_params, **kwargs):  # noqa: E501
        """Create Part Studio  # 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_part_studio(did, wid, bt_model_element_params, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wid: Workspace ID. (required)
        :param BTModelElementParams bt_model_element_params: (required)
        :return: BTDocumentElementInfo
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.create_part_studio_with_http_info(did, wid, bt_model_element_params, **kwargs)  # noqa: E501
        else:
            (data) = self.create_part_studio_with_http_info(did, wid, bt_model_element_params, **kwargs)  # noqa: E501
            return data

    def create_part_studio_with_http_info(self, did, wid, bt_model_element_params, **kwargs):  # noqa: E501
        """Create Part Studio  # 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_part_studio_with_http_info(did, wid, bt_model_element_params, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wid: Workspace ID. (required)
        :param BTModelElementParams bt_model_element_params: (required)
        :return: BTDocumentElementInfo
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = ['did', 'wid', 'bt_model_element_params']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method create_part_studio" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'did' is set
        if ('did' not in local_var_params or
                local_var_params['did'] is None):
            raise ValueError("Missing the required parameter `did` when calling `create_part_studio`")  # noqa: E501
        # verify the required parameter 'wid' is set
        if ('wid' not in local_var_params or
                local_var_params['wid'] is None):
            raise ValueError("Missing the required parameter `wid` when calling `create_part_studio`")  # noqa: E501
        # verify the required parameter 'bt_model_element_params' is set
        if ('bt_model_element_params' not in local_var_params or
                local_var_params['bt_model_element_params'] is None):
            raise ValueError("Missing the required parameter `bt_model_element_params` when calling `create_part_studio`")  # noqa: E501

        collection_formats = {}

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

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'bt_model_element_params' in local_var_params:
            body_params = local_var_params['bt_model_element_params']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/vnd.onshape.v1+json;charset=UTF-8; qs=0.1', 'application/json;charset=UTF-8; qs=0.9'])  # noqa: E501

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

        # Authentication setting
        auth_settings = ['OAuth2']  # noqa: E501

        return self.api_client.call_api(
            '/api/partstudios/d/{did}/w/{wid}', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='BTDocumentElementInfo',  # 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_feature(self, did, wid, eid, fid, **kwargs):  # noqa: E501
        """Delete Feature  # 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_feature(did, wid, eid, fid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wid: Workspace ID. (required)
        :param str eid: Element ID. (required)
        :param str fid: The id of the feature being updated.  This id should be URL encoded and must match the featureId found in the serialized structure (required)
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.delete_feature_with_http_info(did, wid, eid, fid, **kwargs)  # noqa: E501
        else:
            (data) = self.delete_feature_with_http_info(did, wid, eid, fid, **kwargs)  # noqa: E501
            return data

    def delete_feature_with_http_info(self, did, wid, eid, fid, **kwargs):  # noqa: E501
        """Delete Feature  # 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_feature_with_http_info(did, wid, eid, fid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wid: Workspace ID. (required)
        :param str eid: Element ID. (required)
        :param str fid: The id of the feature being updated.  This id should be URL encoded and must match the featureId found in the serialized structure (required)
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = ['did', 'wid', 'eid', 'fid']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method delete_feature" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'did' is set
        if ('did' not in local_var_params or
                local_var_params['did'] is None):
            raise ValueError("Missing the required parameter `did` when calling `delete_feature`")  # noqa: E501
        # verify the required parameter 'wid' is set
        if ('wid' not in local_var_params or
                local_var_params['wid'] is None):
            raise ValueError("Missing the required parameter `wid` when calling `delete_feature`")  # noqa: E501
        # verify the required parameter 'eid' is set
        if ('eid' not in local_var_params or
                local_var_params['eid'] is None):
            raise ValueError("Missing the required parameter `eid` when calling `delete_feature`")  # noqa: E501
        # verify the required parameter 'fid' is set
        if ('fid' not in local_var_params or
                local_var_params['fid'] is None):
            raise ValueError("Missing the required parameter `fid` when calling `delete_feature`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'did' in local_var_params:
            path_params['did'] = local_var_params['did']  # noqa: E501
        if 'wid' in local_var_params:
            path_params['wid'] = local_var_params['wid']  # noqa: E501
        if 'eid' in local_var_params:
            path_params['eid'] = local_var_params['eid']  # noqa: E501
        if 'fid' in local_var_params:
            path_params['fid'] = local_var_params['fid']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['OAuth2']  # noqa: E501

        return self.api_client.call_api(
            '/api/partstudios/d/{did}/w/{wid}/e/{eid}/features/featureid/{fid}', '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 eval_feature_script(self, did, wvm, wvmid, eid, **kwargs):  # noqa: E501
        """Evaluate FeatureScript  # noqa: E501

        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.eval_feature_script(did, wvm, wvmid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wvm: One of w or v or m corresponding to whether a workspace or version or microversion was entered. (required)
        :param str wvmid: Workspace (w), Version (v) or Microversion (m) ID. (required)
        :param str eid: Element ID. (required)
        :param str configuration: Configuration string.
        :param BTFeatureScriptEvalCall bt_feature_script_eval_call:
        :return: BTFeatureScriptEvalResponse
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.eval_feature_script_with_http_info(did, wvm, wvmid, eid, **kwargs)  # noqa: E501
        else:
            (data) = self.eval_feature_script_with_http_info(did, wvm, wvmid, eid, **kwargs)  # noqa: E501
            return data

    def eval_feature_script_with_http_info(self, did, wvm, wvmid, eid, **kwargs):  # noqa: E501
        """Evaluate FeatureScript  # noqa: E501

        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.eval_feature_script_with_http_info(did, wvm, wvmid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wvm: One of w or v or m corresponding to whether a workspace or version or microversion was entered. (required)
        :param str wvmid: Workspace (w), Version (v) or Microversion (m) ID. (required)
        :param str eid: Element ID. (required)
        :param str configuration: Configuration string.
        :param BTFeatureScriptEvalCall bt_feature_script_eval_call:
        :return: BTFeatureScriptEvalResponse
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = ['did', 'wvm', 'wvmid', 'eid', 'configuration', 'bt_feature_script_eval_call']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method eval_feature_script" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'did' is set
        if ('did' not in local_var_params or
                local_var_params['did'] is None):
            raise ValueError("Missing the required parameter `did` when calling `eval_feature_script`")  # noqa: E501
        # verify the required parameter 'wvm' is set
        if ('wvm' not in local_var_params or
                local_var_params['wvm'] is None):
            raise ValueError("Missing the required parameter `wvm` when calling `eval_feature_script`")  # noqa: E501
        # verify the required parameter 'wvmid' is set
        if ('wvmid' not in local_var_params or
                local_var_params['wvmid'] is None):
            raise ValueError("Missing the required parameter `wvmid` when calling `eval_feature_script`")  # noqa: E501
        # verify the required parameter 'eid' is set
        if ('eid' not in local_var_params or
                local_var_params['eid'] is None):
            raise ValueError("Missing the required parameter `eid` when calling `eval_feature_script`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'did' in local_var_params:
            path_params['did'] = local_var_params['did']  # noqa: E501
        if 'wvm' in local_var_params:
            path_params['wvm'] = local_var_params['wvm']  # noqa: E501
        if 'wvmid' in local_var_params:
            path_params['wvmid'] = local_var_params['wvmid']  # noqa: E501
        if 'eid' in local_var_params:
            path_params['eid'] = local_var_params['eid']  # noqa: E501

        query_params = []
        if 'configuration' in local_var_params:
            query_params.append(('configuration', local_var_params['configuration']))  # noqa: E501

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'bt_feature_script_eval_call' in local_var_params:
            body_params = local_var_params['bt_feature_script_eval_call']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/vnd.onshape.v1+json;charset=UTF-8; qs=0.1', 'application/json;charset=UTF-8; qs=0.9'])  # noqa: E501

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

        # Authentication setting
        auth_settings = ['OAuth2']  # noqa: E501

        return self.api_client.call_api(
            '/api/partstudios/d/{did}/{wvm}/{wvmid}/e/{eid}/featurescript', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='BTFeatureScriptEvalResponse',  # 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 export_ps1(self, did, wvm, wvmid, eid, **kwargs):  # noqa: E501
        """Export Part Studio to Parasolid  # noqa: E501

        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.export_ps1(did, wvm, wvmid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wvm: One of w or v or m corresponding to whether a workspace or version or microversion was entered. (required)
        :param str wvmid: Workspace (w), Version (v) or Microversion (m) ID. (required)
        :param str eid: Element ID. (required)
        :param str part_ids: IDs of the parts to retrieve. Repeat query param to add more than one, i.e. partId=JHK&partId=JHD). May not be combined with other ID filters
        :param str version: Parasolid version
        :param bool include_export_ids: Whether topolgy ids should be exported as parasolid attributes
        :param str configuration: Configuration string.
        :param str link_document_id: Id of document that links to the document being accessed. This may provide additional access rights to the document. Allowed only with version (v) path parameter.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.export_ps1_with_http_info(did, wvm, wvmid, eid, **kwargs)  # noqa: E501
        else:
            (data) = self.export_ps1_with_http_info(did, wvm, wvmid, eid, **kwargs)  # noqa: E501
            return data

    def export_ps1_with_http_info(self, did, wvm, wvmid, eid, **kwargs):  # noqa: E501
        """Export Part Studio to Parasolid  # noqa: E501

        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.export_ps1_with_http_info(did, wvm, wvmid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wvm: One of w or v or m corresponding to whether a workspace or version or microversion was entered. (required)
        :param str wvmid: Workspace (w), Version (v) or Microversion (m) ID. (required)
        :param str eid: Element ID. (required)
        :param str part_ids: IDs of the parts to retrieve. Repeat query param to add more than one, i.e. partId=JHK&partId=JHD). May not be combined with other ID filters
        :param str version: Parasolid version
        :param bool include_export_ids: Whether topolgy ids should be exported as parasolid attributes
        :param str configuration: Configuration string.
        :param str link_document_id: Id of document that links to the document being accessed. This may provide additional access rights to the document. Allowed only with version (v) path parameter.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = ['did', 'wvm', 'wvmid', 'eid', 'part_ids', 'version', 'include_export_ids', 'configuration', 'link_document_id']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method export_ps1" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'did' is set
        if ('did' not in local_var_params or
                local_var_params['did'] is None):
            raise ValueError("Missing the required parameter `did` when calling `export_ps1`")  # noqa: E501
        # verify the required parameter 'wvm' is set
        if ('wvm' not in local_var_params or
                local_var_params['wvm'] is None):
            raise ValueError("Missing the required parameter `wvm` when calling `export_ps1`")  # noqa: E501
        # verify the required parameter 'wvmid' is set
        if ('wvmid' not in local_var_params or
                local_var_params['wvmid'] is None):
            raise ValueError("Missing the required parameter `wvmid` when calling `export_ps1`")  # noqa: E501
        # verify the required parameter 'eid' is set
        if ('eid' not in local_var_params or
                local_var_params['eid'] is None):
            raise ValueError("Missing the required parameter `eid` when calling `export_ps1`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'did' in local_var_params:
            path_params['did'] = local_var_params['did']  # noqa: E501
        if 'wvm' in local_var_params:
            path_params['wvm'] = local_var_params['wvm']  # noqa: E501
        if 'wvmid' in local_var_params:
            path_params['wvmid'] = local_var_params['wvmid']  # noqa: E501
        if 'eid' in local_var_params:
            path_params['eid'] = local_var_params['eid']  # noqa: E501

        query_params = []
        if 'part_ids' in local_var_params:
            query_params.append(('partIds', local_var_params['part_ids']))  # noqa: E501
        if 'version' in local_var_params:
            query_params.append(('version', local_var_params['version']))  # noqa: E501
        if 'include_export_ids' in local_var_params:
            query_params.append(('includeExportIds', local_var_params['include_export_ids']))  # noqa: E501
        if 'configuration' in local_var_params:
            query_params.append(('configuration', local_var_params['configuration']))  # noqa: E501
        if 'link_document_id' in local_var_params:
            query_params.append(('linkDocumentId', local_var_params['link_document_id']))  # noqa: E501

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['OAuth2']  # noqa: E501

        return self.api_client.call_api(
            '/api/partstudios/d/{did}/{wvm}/{wvmid}/e/{eid}/parasolid', '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 export_stl1(self, did, wvm, wvmid, eid, **kwargs):  # noqa: E501
        """Export Part Studio to STL  # noqa: E501

        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.export_stl1(did, wvm, wvmid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wvm: One of w or v or m corresponding to whether a workspace or version or microversion was entered. (required)
        :param str wvmid: Workspace (w), Version (v) or Microversion (m) ID. (required)
        :param str eid: Element ID. (required)
        :param str part_ids: IDs of the parts to retrieve. Repeat query param to add more than one, i.e. partId=JHK&partId=JHD). May not be combined with other ID filters
        :param str mode: Type of file: text, binary
        :param bool grouping: Whether parts should be exported as a group or individually in a .zip file
        :param float scale: Scale for measurements.
        :param str units: Name of base unit (meter, centimeter, millimeter, inch, foot, or yard)
        :param float angle_tolerance: Angle tolerance (in radians). This specifies the limit on the sum of the angular deviations of a tessellation chord from the tangent vectors at two chord endpoints. The specified value must be less than PI/2. This parameter currently has a default value chosen based on the complexity of the parts being tessellated.
        :param float chord_tolerance: Chord tolerance (in meters). This specifies the limit on the maximum deviation of a tessellation chord from the true surface/edge. This parameter currently has a default value chosen based on the size and complexity of the parts being tessellated.
        :param float max_facet_width: Max facet width. This specifies the limit on the size of any side of a tessellation facet.
        :param float min_facet_width: Max facet width. This specifies the limit on the size of any side of a tessellation facet.
        :param str configuration: Configuration string.
        :param str link_document_id: Id of document that links to the document being accessed. This may provide additional access rights to the document. Allowed only with version (v) path parameter.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.export_stl1_with_http_info(did, wvm, wvmid, eid, **kwargs)  # noqa: E501
        else:
            (data) = self.export_stl1_with_http_info(did, wvm, wvmid, eid, **kwargs)  # noqa: E501
            return data

    def export_stl1_with_http_info(self, did, wvm, wvmid, eid, **kwargs):  # noqa: E501
        """Export Part Studio to STL  # noqa: E501

        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.export_stl1_with_http_info(did, wvm, wvmid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wvm: One of w or v or m corresponding to whether a workspace or version or microversion was entered. (required)
        :param str wvmid: Workspace (w), Version (v) or Microversion (m) ID. (required)
        :param str eid: Element ID. (required)
        :param str part_ids: IDs of the parts to retrieve. Repeat query param to add more than one, i.e. partId=JHK&partId=JHD). May not be combined with other ID filters
        :param str mode: Type of file: text, binary
        :param bool grouping: Whether parts should be exported as a group or individually in a .zip file
        :param float scale: Scale for measurements.
        :param str units: Name of base unit (meter, centimeter, millimeter, inch, foot, or yard)
        :param float angle_tolerance: Angle tolerance (in radians). This specifies the limit on the sum of the angular deviations of a tessellation chord from the tangent vectors at two chord endpoints. The specified value must be less than PI/2. This parameter currently has a default value chosen based on the complexity of the parts being tessellated.
        :param float chord_tolerance: Chord tolerance (in meters). This specifies the limit on the maximum deviation of a tessellation chord from the true surface/edge. This parameter currently has a default value chosen based on the size and complexity of the parts being tessellated.
        :param float max_facet_width: Max facet width. This specifies the limit on the size of any side of a tessellation facet.
        :param float min_facet_width: Max facet width. This specifies the limit on the size of any side of a tessellation facet.
        :param str configuration: Configuration string.
        :param str link_document_id: Id of document that links to the document being accessed. This may provide additional access rights to the document. Allowed only with version (v) path parameter.
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = ['did', 'wvm', 'wvmid', 'eid', 'part_ids', 'mode', 'grouping', 'scale', 'units', 'angle_tolerance', 'chord_tolerance', 'max_facet_width', 'min_facet_width', 'configuration', 'link_document_id']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method export_stl1" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'did' is set
        if ('did' not in local_var_params or
                local_var_params['did'] is None):
            raise ValueError("Missing the required parameter `did` when calling `export_stl1`")  # noqa: E501
        # verify the required parameter 'wvm' is set
        if ('wvm' not in local_var_params or
                local_var_params['wvm'] is None):
            raise ValueError("Missing the required parameter `wvm` when calling `export_stl1`")  # noqa: E501
        # verify the required parameter 'wvmid' is set
        if ('wvmid' not in local_var_params or
                local_var_params['wvmid'] is None):
            raise ValueError("Missing the required parameter `wvmid` when calling `export_stl1`")  # noqa: E501
        # verify the required parameter 'eid' is set
        if ('eid' not in local_var_params or
                local_var_params['eid'] is None):
            raise ValueError("Missing the required parameter `eid` when calling `export_stl1`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'did' in local_var_params:
            path_params['did'] = local_var_params['did']  # noqa: E501
        if 'wvm' in local_var_params:
            path_params['wvm'] = local_var_params['wvm']  # noqa: E501
        if 'wvmid' in local_var_params:
            path_params['wvmid'] = local_var_params['wvmid']  # noqa: E501
        if 'eid' in local_var_params:
            path_params['eid'] = local_var_params['eid']  # noqa: E501

        query_params = []
        if 'part_ids' in local_var_params:
            query_params.append(('partIds', local_var_params['part_ids']))  # noqa: E501
        if 'mode' in local_var_params:
            query_params.append(('mode', local_var_params['mode']))  # noqa: E501
        if 'grouping' in local_var_params:
            query_params.append(('grouping', local_var_params['grouping']))  # noqa: E501
        if 'scale' in local_var_params:
            query_params.append(('scale', local_var_params['scale']))  # noqa: E501
        if 'units' in local_var_params:
            query_params.append(('units', local_var_params['units']))  # noqa: E501
        if 'angle_tolerance' in local_var_params:
            query_params.append(('angleTolerance', local_var_params['angle_tolerance']))  # noqa: E501
        if 'chord_tolerance' in local_var_params:
            query_params.append(('chordTolerance', local_var_params['chord_tolerance']))  # noqa: E501
        if 'max_facet_width' in local_var_params:
            query_params.append(('maxFacetWidth', local_var_params['max_facet_width']))  # noqa: E501
        if 'min_facet_width' in local_var_params:
            query_params.append(('minFacetWidth', local_var_params['min_facet_width']))  # noqa: E501
        if 'configuration' in local_var_params:
            query_params.append(('configuration', local_var_params['configuration']))  # noqa: E501
        if 'link_document_id' in local_var_params:
            query_params.append(('linkDocumentId', local_var_params['link_document_id']))  # noqa: E501

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['OAuth2']  # noqa: E501

        return self.api_client.call_api(
            '/api/partstudios/d/{did}/{wvm}/{wvmid}/e/{eid}/stl', '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 get_body_details2(self, did, wvm, wvmid, eid, **kwargs):  # noqa: E501
        """Array of body information  # 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_body_details2(did, wvm, wvmid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wvm: One of w or v or m corresponding to whether a workspace or version or microversion was entered. (required)
        :param str wvmid: Workspace (w), Version (v) or Microversion (m) ID. (required)
        :param str eid: Element ID. (required)
        :param str configuration: Configuration string.
        :param str link_document_id: Id of document that links to the document being accessed. This may provide additional access rights to the document. Allowed only with version (v) path parameter.
        :return: list[BTExportModelBodiesResponse]
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.get_body_details2_with_http_info(did, wvm, wvmid, eid, **kwargs)  # noqa: E501
        else:
            (data) = self.get_body_details2_with_http_info(did, wvm, wvmid, eid, **kwargs)  # noqa: E501
            return data

    def get_body_details2_with_http_info(self, did, wvm, wvmid, eid, **kwargs):  # noqa: E501
        """Array of body information  # 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_body_details2_with_http_info(did, wvm, wvmid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wvm: One of w or v or m corresponding to whether a workspace or version or microversion was entered. (required)
        :param str wvmid: Workspace (w), Version (v) or Microversion (m) ID. (required)
        :param str eid: Element ID. (required)
        :param str configuration: Configuration string.
        :param str link_document_id: Id of document that links to the document being accessed. This may provide additional access rights to the document. Allowed only with version (v) path parameter.
        :return: list[BTExportModelBodiesResponse]
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = ['did', 'wvm', 'wvmid', 'eid', 'configuration', 'link_document_id']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_body_details2" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'did' is set
        if ('did' not in local_var_params or
                local_var_params['did'] is None):
            raise ValueError("Missing the required parameter `did` when calling `get_body_details2`")  # noqa: E501
        # verify the required parameter 'wvm' is set
        if ('wvm' not in local_var_params or
                local_var_params['wvm'] is None):
            raise ValueError("Missing the required parameter `wvm` when calling `get_body_details2`")  # noqa: E501
        # verify the required parameter 'wvmid' is set
        if ('wvmid' not in local_var_params or
                local_var_params['wvmid'] is None):
            raise ValueError("Missing the required parameter `wvmid` when calling `get_body_details2`")  # noqa: E501
        # verify the required parameter 'eid' is set
        if ('eid' not in local_var_params or
                local_var_params['eid'] is None):
            raise ValueError("Missing the required parameter `eid` when calling `get_body_details2`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'did' in local_var_params:
            path_params['did'] = local_var_params['did']  # noqa: E501
        if 'wvm' in local_var_params:
            path_params['wvm'] = local_var_params['wvm']  # noqa: E501
        if 'wvmid' in local_var_params:
            path_params['wvmid'] = local_var_params['wvmid']  # noqa: E501
        if 'eid' in local_var_params:
            path_params['eid'] = local_var_params['eid']  # noqa: E501

        query_params = []
        if 'configuration' in local_var_params:
            query_params.append(('configuration', local_var_params['configuration']))  # noqa: E501
        if 'link_document_id' in local_var_params:
            query_params.append(('linkDocumentId', local_var_params['link_document_id']))  # 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/vnd.onshape.v1+json;charset=UTF-8; qs=0.1', 'application/json;charset=UTF-8; qs=0.9'])  # noqa: E501

        # Authentication setting
        auth_settings = ['OAuth2']  # noqa: E501

        return self.api_client.call_api(
            '/api/partstudios/d/{did}/{wvm}/{wvmid}/e/{eid}/bodydetails', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='list[BTExportModelBodiesResponse]',  # 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_bounding_boxes2(self, did, wvm, wvmid, eid, **kwargs):  # noqa: E501
        """Mass properties of parts or a PartStudio.  # 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_bounding_boxes2(did, wvm, wvmid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wvm: One of w or v or m corresponding to whether a workspace or version or microversion was entered. (required)
        :param str wvmid: Workspace (w), Version (v) or Microversion (m) ID. (required)
        :param str eid: Element ID. (required)
        :param bool include_hidden: Whether or not to include bounding boxes for hidden parts.
        :param bool include_wire_bodies: Whether to include wire bodies in the bounding box.
        :param str configuration: Configuration string.
        :param str link_document_id: Id of document that links to the document being accessed. This may provide additional access rights to the document. Allowed only with version (v) path parameter.
        :return: BTBoundingBox
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.get_bounding_boxes2_with_http_info(did, wvm, wvmid, eid, **kwargs)  # noqa: E501
        else:
            (data) = self.get_bounding_boxes2_with_http_info(did, wvm, wvmid, eid, **kwargs)  # noqa: E501
            return data

    def get_bounding_boxes2_with_http_info(self, did, wvm, wvmid, eid, **kwargs):  # noqa: E501
        """Mass properties of parts or a PartStudio.  # 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_bounding_boxes2_with_http_info(did, wvm, wvmid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wvm: One of w or v or m corresponding to whether a workspace or version or microversion was entered. (required)
        :param str wvmid: Workspace (w), Version (v) or Microversion (m) ID. (required)
        :param str eid: Element ID. (required)
        :param bool include_hidden: Whether or not to include bounding boxes for hidden parts.
        :param bool include_wire_bodies: Whether to include wire bodies in the bounding box.
        :param str configuration: Configuration string.
        :param str link_document_id: Id of document that links to the document being accessed. This may provide additional access rights to the document. Allowed only with version (v) path parameter.
        :return: BTBoundingBox
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = ['did', 'wvm', 'wvmid', 'eid', 'include_hidden', 'include_wire_bodies', 'configuration', 'link_document_id']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_bounding_boxes2" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'did' is set
        if ('did' not in local_var_params or
                local_var_params['did'] is None):
            raise ValueError("Missing the required parameter `did` when calling `get_bounding_boxes2`")  # noqa: E501
        # verify the required parameter 'wvm' is set
        if ('wvm' not in local_var_params or
                local_var_params['wvm'] is None):
            raise ValueError("Missing the required parameter `wvm` when calling `get_bounding_boxes2`")  # noqa: E501
        # verify the required parameter 'wvmid' is set
        if ('wvmid' not in local_var_params or
                local_var_params['wvmid'] is None):
            raise ValueError("Missing the required parameter `wvmid` when calling `get_bounding_boxes2`")  # noqa: E501
        # verify the required parameter 'eid' is set
        if ('eid' not in local_var_params or
                local_var_params['eid'] is None):
            raise ValueError("Missing the required parameter `eid` when calling `get_bounding_boxes2`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'did' in local_var_params:
            path_params['did'] = local_var_params['did']  # noqa: E501
        if 'wvm' in local_var_params:
            path_params['wvm'] = local_var_params['wvm']  # noqa: E501
        if 'wvmid' in local_var_params:
            path_params['wvmid'] = local_var_params['wvmid']  # noqa: E501
        if 'eid' in local_var_params:
            path_params['eid'] = local_var_params['eid']  # noqa: E501

        query_params = []
        if 'include_hidden' in local_var_params:
            query_params.append(('includeHidden', local_var_params['include_hidden']))  # noqa: E501
        if 'include_wire_bodies' in local_var_params:
            query_params.append(('includeWireBodies', local_var_params['include_wire_bodies']))  # noqa: E501
        if 'configuration' in local_var_params:
            query_params.append(('configuration', local_var_params['configuration']))  # noqa: E501
        if 'link_document_id' in local_var_params:
            query_params.append(('linkDocumentId', local_var_params['link_document_id']))  # 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/vnd.onshape.v1+json;charset=UTF-8; qs=0.1', 'application/json;charset=UTF-8; qs=0.9'])  # noqa: E501

        # Authentication setting
        auth_settings = ['OAuth2']  # noqa: E501

        return self.api_client.call_api(
            '/api/partstudios/d/{did}/{wvm}/{wvmid}/e/{eid}/boundingboxes', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='BTBoundingBox',  # 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_configuration4(self, did, wvm, wvmid, eid, **kwargs):  # noqa: E501
        """Get Configuration  # 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_configuration4(did, wvm, wvmid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: (required)
        :param str wvm: (required)
        :param str wvmid: (required)
        :param str eid: (required)
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.get_configuration4_with_http_info(did, wvm, wvmid, eid, **kwargs)  # noqa: E501
        else:
            (data) = self.get_configuration4_with_http_info(did, wvm, wvmid, eid, **kwargs)  # noqa: E501
            return data

    def get_configuration4_with_http_info(self, did, wvm, wvmid, eid, **kwargs):  # noqa: E501
        """Get Configuration  # 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_configuration4_with_http_info(did, wvm, wvmid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: (required)
        :param str wvm: (required)
        :param str wvmid: (required)
        :param str eid: (required)
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = ['did', 'wvm', 'wvmid', 'eid']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_configuration4" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'did' is set
        if ('did' not in local_var_params or
                local_var_params['did'] is None):
            raise ValueError("Missing the required parameter `did` when calling `get_configuration4`")  # noqa: E501
        # verify the required parameter 'wvm' is set
        if ('wvm' not in local_var_params or
                local_var_params['wvm'] is None):
            raise ValueError("Missing the required parameter `wvm` when calling `get_configuration4`")  # noqa: E501
        # verify the required parameter 'wvmid' is set
        if ('wvmid' not in local_var_params or
                local_var_params['wvmid'] is None):
            raise ValueError("Missing the required parameter `wvmid` when calling `get_configuration4`")  # noqa: E501
        # verify the required parameter 'eid' is set
        if ('eid' not in local_var_params or
                local_var_params['eid'] is None):
            raise ValueError("Missing the required parameter `eid` when calling `get_configuration4`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'did' in local_var_params:
            path_params['did'] = local_var_params['did']  # noqa: E501
        if 'wvm' in local_var_params:
            path_params['wvm'] = local_var_params['wvm']  # noqa: E501
        if 'wvmid' in local_var_params:
            path_params['wvmid'] = local_var_params['wvmid']  # noqa: E501
        if 'eid' in local_var_params:
            path_params['eid'] = local_var_params['eid']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['OAuth2']  # noqa: E501

        return self.api_client.call_api(
            '/api/partstudios/d/{did}/{wvm}/{wvmid}/e/{eid}/configuration', '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 get_edges2(self, did, wvm, wvmid, eid, **kwargs):  # noqa: E501
        """Tesselated edges from a PartStudio.  # 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_edges2(did, wvm, wvmid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: (required)
        :param str wvm: (required)
        :param str wvmid: (required)
        :param str eid: (required)
        :param float angle_tolerance:
        :param float chord_tolerance:
        :param list[str] part_id:
        :param list[str] edge_id:
        :param str configuration:
        :param str link_document_id:
        :return: BTExportTessellatedEdgesResponse
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.get_edges2_with_http_info(did, wvm, wvmid, eid, **kwargs)  # noqa: E501
        else:
            (data) = self.get_edges2_with_http_info(did, wvm, wvmid, eid, **kwargs)  # noqa: E501
            return data

    def get_edges2_with_http_info(self, did, wvm, wvmid, eid, **kwargs):  # noqa: E501
        """Tesselated edges from a PartStudio.  # 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_edges2_with_http_info(did, wvm, wvmid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: (required)
        :param str wvm: (required)
        :param str wvmid: (required)
        :param str eid: (required)
        :param float angle_tolerance:
        :param float chord_tolerance:
        :param list[str] part_id:
        :param list[str] edge_id:
        :param str configuration:
        :param str link_document_id:
        :return: BTExportTessellatedEdgesResponse
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = ['did', 'wvm', 'wvmid', 'eid', 'angle_tolerance', 'chord_tolerance', 'part_id', 'edge_id', 'configuration', 'link_document_id']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_edges2" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'did' is set
        if ('did' not in local_var_params or
                local_var_params['did'] is None):
            raise ValueError("Missing the required parameter `did` when calling `get_edges2`")  # noqa: E501
        # verify the required parameter 'wvm' is set
        if ('wvm' not in local_var_params or
                local_var_params['wvm'] is None):
            raise ValueError("Missing the required parameter `wvm` when calling `get_edges2`")  # noqa: E501
        # verify the required parameter 'wvmid' is set
        if ('wvmid' not in local_var_params or
                local_var_params['wvmid'] is None):
            raise ValueError("Missing the required parameter `wvmid` when calling `get_edges2`")  # noqa: E501
        # verify the required parameter 'eid' is set
        if ('eid' not in local_var_params or
                local_var_params['eid'] is None):
            raise ValueError("Missing the required parameter `eid` when calling `get_edges2`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'did' in local_var_params:
            path_params['did'] = local_var_params['did']  # noqa: E501
        if 'wvm' in local_var_params:
            path_params['wvm'] = local_var_params['wvm']  # noqa: E501
        if 'wvmid' in local_var_params:
            path_params['wvmid'] = local_var_params['wvmid']  # noqa: E501
        if 'eid' in local_var_params:
            path_params['eid'] = local_var_params['eid']  # noqa: E501

        query_params = []
        if 'angle_tolerance' in local_var_params:
            query_params.append(('angleTolerance', local_var_params['angle_tolerance']))  # noqa: E501
        if 'chord_tolerance' in local_var_params:
            query_params.append(('chordTolerance', local_var_params['chord_tolerance']))  # noqa: E501
        if 'part_id' in local_var_params:
            query_params.append(('partId', local_var_params['part_id']))  # noqa: E501
            collection_formats['partId'] = 'multi'  # noqa: E501
        if 'edge_id' in local_var_params:
            query_params.append(('edgeId', local_var_params['edge_id']))  # noqa: E501
            collection_formats['edgeId'] = 'multi'  # noqa: E501
        if 'configuration' in local_var_params:
            query_params.append(('configuration', local_var_params['configuration']))  # noqa: E501
        if 'link_document_id' in local_var_params:
            query_params.append(('linkDocumentId', local_var_params['link_document_id']))  # 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 = ['OAuth2']  # noqa: E501

        return self.api_client.call_api(
            '/api/partstudios/d/{did}/{wvm}/{wvmid}/e/{eid}/tessellatededges', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='BTExportTessellatedEdgesResponse',  # 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_faces2(self, did, wvm, wvmid, eid, **kwargs):  # noqa: E501
        """Tesselated faces of the parts in the Part Studio.  # 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_faces2(did, wvm, wvmid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wvm: One of w or v or m corresponding to whether a workspace or version or microversion was entered. (required)
        :param str wvmid: Workspace (w), Version (v) or Microversion (m) ID. (required)
        :param str eid: Element ID. (required)
        :param float angle_tolerance: Angle tolerance (in radians). This specifies the limit on the sum of the angular deviations of a tessellation chord from the tangent vectors at two chord endpoints. The specified value must be less than PI/2. This parameter currently has a default value chosen based on the complexity of the parts being tessellated.
        :param float chord_tolerance: Chord tolerance (in meters). This specifies the limit on the maximum deviation of a tessellation chord from the true surface/edge. This parameter currently has a default value chosen based on the size and complexity of the parts being tessellated.
        :param float max_facet_width: Max facet width. This specifies the limit on the size of any side of a tessellation facet.
        :param bool output_vertex_normals: If true, output vertex normals corresponding to surface normals at facet vertex points.
        :param bool output_facet_normals: Output facet normals.
        :param bool output_texture_coordinates: Output texture coordinates.
        :param bool output_index_table: Output index table.
        :param list[str] part_id: IDs of the parts to retrieve. Repeat query param to add more than one, i.e. partId=JHK&partId=JHD). May not be combined with other ID filters
        :param list[str] face_id: IDs of the faces to tessellate (repeat query param to add more than one, i.e. faceId=JHK&faceId=JHD)
        :param bool output_error_faces: Whether or not to output faces that cause an error
        :param str configuration: Configuration string.
        :param str link_document_id: Id of document that links to the document being accessed. This may provide additional access rights to the document. Allowed only with version (v) path parameter.
        :return: BTExportTessellatedFacesResponse
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.get_faces2_with_http_info(did, wvm, wvmid, eid, **kwargs)  # noqa: E501
        else:
            (data) = self.get_faces2_with_http_info(did, wvm, wvmid, eid, **kwargs)  # noqa: E501
            return data

    def get_faces2_with_http_info(self, did, wvm, wvmid, eid, **kwargs):  # noqa: E501
        """Tesselated faces of the parts in the Part Studio.  # 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_faces2_with_http_info(did, wvm, wvmid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wvm: One of w or v or m corresponding to whether a workspace or version or microversion was entered. (required)
        :param str wvmid: Workspace (w), Version (v) or Microversion (m) ID. (required)
        :param str eid: Element ID. (required)
        :param float angle_tolerance: Angle tolerance (in radians). This specifies the limit on the sum of the angular deviations of a tessellation chord from the tangent vectors at two chord endpoints. The specified value must be less than PI/2. This parameter currently has a default value chosen based on the complexity of the parts being tessellated.
        :param float chord_tolerance: Chord tolerance (in meters). This specifies the limit on the maximum deviation of a tessellation chord from the true surface/edge. This parameter currently has a default value chosen based on the size and complexity of the parts being tessellated.
        :param float max_facet_width: Max facet width. This specifies the limit on the size of any side of a tessellation facet.
        :param bool output_vertex_normals: If true, output vertex normals corresponding to surface normals at facet vertex points.
        :param bool output_facet_normals: Output facet normals.
        :param bool output_texture_coordinates: Output texture coordinates.
        :param bool output_index_table: Output index table.
        :param list[str] part_id: IDs of the parts to retrieve. Repeat query param to add more than one, i.e. partId=JHK&partId=JHD). May not be combined with other ID filters
        :param list[str] face_id: IDs of the faces to tessellate (repeat query param to add more than one, i.e. faceId=JHK&faceId=JHD)
        :param bool output_error_faces: Whether or not to output faces that cause an error
        :param str configuration: Configuration string.
        :param str link_document_id: Id of document that links to the document being accessed. This may provide additional access rights to the document. Allowed only with version (v) path parameter.
        :return: BTExportTessellatedFacesResponse
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = ['did', 'wvm', 'wvmid', 'eid', 'angle_tolerance', 'chord_tolerance', 'max_facet_width', 'output_vertex_normals', 'output_facet_normals', 'output_texture_coordinates', 'output_index_table', 'part_id', 'face_id', 'output_error_faces', 'configuration', 'link_document_id']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_faces2" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'did' is set
        if ('did' not in local_var_params or
                local_var_params['did'] is None):
            raise ValueError("Missing the required parameter `did` when calling `get_faces2`")  # noqa: E501
        # verify the required parameter 'wvm' is set
        if ('wvm' not in local_var_params or
                local_var_params['wvm'] is None):
            raise ValueError("Missing the required parameter `wvm` when calling `get_faces2`")  # noqa: E501
        # verify the required parameter 'wvmid' is set
        if ('wvmid' not in local_var_params or
                local_var_params['wvmid'] is None):
            raise ValueError("Missing the required parameter `wvmid` when calling `get_faces2`")  # noqa: E501
        # verify the required parameter 'eid' is set
        if ('eid' not in local_var_params or
                local_var_params['eid'] is None):
            raise ValueError("Missing the required parameter `eid` when calling `get_faces2`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'did' in local_var_params:
            path_params['did'] = local_var_params['did']  # noqa: E501
        if 'wvm' in local_var_params:
            path_params['wvm'] = local_var_params['wvm']  # noqa: E501
        if 'wvmid' in local_var_params:
            path_params['wvmid'] = local_var_params['wvmid']  # noqa: E501
        if 'eid' in local_var_params:
            path_params['eid'] = local_var_params['eid']  # noqa: E501

        query_params = []
        if 'angle_tolerance' in local_var_params:
            query_params.append(('angleTolerance', local_var_params['angle_tolerance']))  # noqa: E501
        if 'chord_tolerance' in local_var_params:
            query_params.append(('chordTolerance', local_var_params['chord_tolerance']))  # noqa: E501
        if 'max_facet_width' in local_var_params:
            query_params.append(('maxFacetWidth', local_var_params['max_facet_width']))  # noqa: E501
        if 'output_vertex_normals' in local_var_params:
            query_params.append(('outputVertexNormals', local_var_params['output_vertex_normals']))  # noqa: E501
        if 'output_facet_normals' in local_var_params:
            query_params.append(('outputFacetNormals', local_var_params['output_facet_normals']))  # noqa: E501
        if 'output_texture_coordinates' in local_var_params:
            query_params.append(('outputTextureCoordinates', local_var_params['output_texture_coordinates']))  # noqa: E501
        if 'output_index_table' in local_var_params:
            query_params.append(('outputIndexTable', local_var_params['output_index_table']))  # noqa: E501
        if 'part_id' in local_var_params:
            query_params.append(('partId', local_var_params['part_id']))  # noqa: E501
            collection_formats['partId'] = 'multi'  # noqa: E501
        if 'face_id' in local_var_params:
            query_params.append(('faceId', local_var_params['face_id']))  # noqa: E501
            collection_formats['faceId'] = 'multi'  # noqa: E501
        if 'output_error_faces' in local_var_params:
            query_params.append(('outputErrorFaces', local_var_params['output_error_faces']))  # noqa: E501
        if 'configuration' in local_var_params:
            query_params.append(('configuration', local_var_params['configuration']))  # noqa: E501
        if 'link_document_id' in local_var_params:
            query_params.append(('linkDocumentId', local_var_params['link_document_id']))  # 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 = ['OAuth2']  # noqa: E501

        return self.api_client.call_api(
            '/api/partstudios/d/{did}/{wvm}/{wvmid}/e/{eid}/tessellatedfaces', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='BTExportTessellatedFacesResponse',  # 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_feature_specs(self, did, wvm, wvmid, eid, **kwargs):  # noqa: E501
        """Get Feature Specs  # 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_feature_specs(did, wvm, wvmid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wvm: One of w or v or m corresponding to whether a workspace or version or microversion was entered. (required)
        :param str wvmid: Workspace (w), Version (v) or Microversion (m) ID. (required)
        :param str eid: Element ID. (required)
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.get_feature_specs_with_http_info(did, wvm, wvmid, eid, **kwargs)  # noqa: E501
        else:
            (data) = self.get_feature_specs_with_http_info(did, wvm, wvmid, eid, **kwargs)  # noqa: E501
            return data

    def get_feature_specs_with_http_info(self, did, wvm, wvmid, eid, **kwargs):  # noqa: E501
        """Get Feature Specs  # 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_feature_specs_with_http_info(did, wvm, wvmid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wvm: One of w or v or m corresponding to whether a workspace or version or microversion was entered. (required)
        :param str wvmid: Workspace (w), Version (v) or Microversion (m) ID. (required)
        :param str eid: Element ID. (required)
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = ['did', 'wvm', 'wvmid', 'eid']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_feature_specs" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'did' is set
        if ('did' not in local_var_params or
                local_var_params['did'] is None):
            raise ValueError("Missing the required parameter `did` when calling `get_feature_specs`")  # noqa: E501
        # verify the required parameter 'wvm' is set
        if ('wvm' not in local_var_params or
                local_var_params['wvm'] is None):
            raise ValueError("Missing the required parameter `wvm` when calling `get_feature_specs`")  # noqa: E501
        # verify the required parameter 'wvmid' is set
        if ('wvmid' not in local_var_params or
                local_var_params['wvmid'] is None):
            raise ValueError("Missing the required parameter `wvmid` when calling `get_feature_specs`")  # noqa: E501
        # verify the required parameter 'eid' is set
        if ('eid' not in local_var_params or
                local_var_params['eid'] is None):
            raise ValueError("Missing the required parameter `eid` when calling `get_feature_specs`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'did' in local_var_params:
            path_params['did'] = local_var_params['did']  # noqa: E501
        if 'wvm' in local_var_params:
            path_params['wvm'] = local_var_params['wvm']  # noqa: E501
        if 'wvmid' in local_var_params:
            path_params['wvmid'] = local_var_params['wvmid']  # noqa: E501
        if 'eid' in local_var_params:
            path_params['eid'] = local_var_params['eid']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        # Authentication setting
        auth_settings = ['OAuth2']  # noqa: E501

        return self.api_client.call_api(
            '/api/partstudios/d/{did}/{wvm}/{wvmid}/e/{eid}/featurespecs', '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 get_features(self, did, wvm, wvmid, eid, **kwargs):  # noqa: E501
        """Get Feature List  # 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_features(did, wvm, wvmid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wvm: One of w or v or m corresponding to whether a workspace or version or microversion was entered. (required)
        :param str wvmid: Workspace (w), Version (v) or Microversion (m) ID. (required)
        :param str eid: Element ID. (required)
        :param list[str] feature_id: ID of a feature; repeat query param to add more than one
        :param str link_document_id: Id of document that links to the document being accessed. This may provide additional access rights to the document. Allowed only with version (v) path parameter.
        :param bool no_sketch_geometry: Whether or not to output simple sketch info without geometry
        :return: BTFeatureListResponse
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.get_features_with_http_info(did, wvm, wvmid, eid, **kwargs)  # noqa: E501
        else:
            (data) = self.get_features_with_http_info(did, wvm, wvmid, eid, **kwargs)  # noqa: E501
            return data

    def get_features_with_http_info(self, did, wvm, wvmid, eid, **kwargs):  # noqa: E501
        """Get Feature List  # 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_features_with_http_info(did, wvm, wvmid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wvm: One of w or v or m corresponding to whether a workspace or version or microversion was entered. (required)
        :param str wvmid: Workspace (w), Version (v) or Microversion (m) ID. (required)
        :param str eid: Element ID. (required)
        :param list[str] feature_id: ID of a feature; repeat query param to add more than one
        :param str link_document_id: Id of document that links to the document being accessed. This may provide additional access rights to the document. Allowed only with version (v) path parameter.
        :param bool no_sketch_geometry: Whether or not to output simple sketch info without geometry
        :return: BTFeatureListResponse
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = ['did', 'wvm', 'wvmid', 'eid', 'feature_id', 'link_document_id', 'no_sketch_geometry']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_features" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'did' is set
        if ('did' not in local_var_params or
                local_var_params['did'] is None):
            raise ValueError("Missing the required parameter `did` when calling `get_features`")  # noqa: E501
        # verify the required parameter 'wvm' is set
        if ('wvm' not in local_var_params or
                local_var_params['wvm'] is None):
            raise ValueError("Missing the required parameter `wvm` when calling `get_features`")  # noqa: E501
        # verify the required parameter 'wvmid' is set
        if ('wvmid' not in local_var_params or
                local_var_params['wvmid'] is None):
            raise ValueError("Missing the required parameter `wvmid` when calling `get_features`")  # noqa: E501
        # verify the required parameter 'eid' is set
        if ('eid' not in local_var_params or
                local_var_params['eid'] is None):
            raise ValueError("Missing the required parameter `eid` when calling `get_features`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'did' in local_var_params:
            path_params['did'] = local_var_params['did']  # noqa: E501
        if 'wvm' in local_var_params:
            path_params['wvm'] = local_var_params['wvm']  # noqa: E501
        if 'wvmid' in local_var_params:
            path_params['wvmid'] = local_var_params['wvmid']  # noqa: E501
        if 'eid' in local_var_params:
            path_params['eid'] = local_var_params['eid']  # noqa: E501

        query_params = []
        if 'feature_id' in local_var_params:
            query_params.append(('featureId', local_var_params['feature_id']))  # noqa: E501
            collection_formats['featureId'] = 'multi'  # noqa: E501
        if 'link_document_id' in local_var_params:
            query_params.append(('linkDocumentId', local_var_params['link_document_id']))  # noqa: E501
        if 'no_sketch_geometry' in local_var_params:
            query_params.append(('noSketchGeometry', local_var_params['no_sketch_geometry']))  # 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/vnd.onshape.v2+json;charset=UTF-8; qs=0.2'])  # noqa: E501

        # Authentication setting
        auth_settings = ['OAuth2']  # noqa: E501

        return self.api_client.call_api(
            '/api/partstudios/d/{did}/{wvm}/{wvmid}/e/{eid}/features', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='BTFeatureListResponse',  # 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_mass_properties(self, did, wvm, wvmid, eid, **kwargs):  # noqa: E501
        """Mass properties of parts or a PartStudio.  # 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_mass_properties(did, wvm, wvmid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wvm: One of w or v or m corresponding to whether a workspace or version or microversion was entered. (required)
        :param str wvmid: Workspace (w), Version (v) or Microversion (m) ID. (required)
        :param str eid: Element ID. (required)
        :param list[str] part_id: IDs of the parts to retrieve. Repeat query param to add more than one, i.e. partId=JHK&partId=JHD). May not be combined with other ID filters
        :param bool mass_as_group: If true, specified parts will be evaluated as a single object instead of individually
        :param str configuration: Configuration string.
        :param str link_document_id: Id of document that links to the document being accessed. This may provide additional access rights to the document. Allowed only with version (v) path parameter.
        :return: BTMassPropResponse
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.get_mass_properties_with_http_info(did, wvm, wvmid, eid, **kwargs)  # noqa: E501
        else:
            (data) = self.get_mass_properties_with_http_info(did, wvm, wvmid, eid, **kwargs)  # noqa: E501
            return data

    def get_mass_properties_with_http_info(self, did, wvm, wvmid, eid, **kwargs):  # noqa: E501
        """Mass properties of parts or a PartStudio.  # 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_mass_properties_with_http_info(did, wvm, wvmid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wvm: One of w or v or m corresponding to whether a workspace or version or microversion was entered. (required)
        :param str wvmid: Workspace (w), Version (v) or Microversion (m) ID. (required)
        :param str eid: Element ID. (required)
        :param list[str] part_id: IDs of the parts to retrieve. Repeat query param to add more than one, i.e. partId=JHK&partId=JHD). May not be combined with other ID filters
        :param bool mass_as_group: If true, specified parts will be evaluated as a single object instead of individually
        :param str configuration: Configuration string.
        :param str link_document_id: Id of document that links to the document being accessed. This may provide additional access rights to the document. Allowed only with version (v) path parameter.
        :return: BTMassPropResponse
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = ['did', 'wvm', 'wvmid', 'eid', 'part_id', 'mass_as_group', 'configuration', 'link_document_id']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_mass_properties" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'did' is set
        if ('did' not in local_var_params or
                local_var_params['did'] is None):
            raise ValueError("Missing the required parameter `did` when calling `get_mass_properties`")  # noqa: E501
        # verify the required parameter 'wvm' is set
        if ('wvm' not in local_var_params or
                local_var_params['wvm'] is None):
            raise ValueError("Missing the required parameter `wvm` when calling `get_mass_properties`")  # noqa: E501
        # verify the required parameter 'wvmid' is set
        if ('wvmid' not in local_var_params or
                local_var_params['wvmid'] is None):
            raise ValueError("Missing the required parameter `wvmid` when calling `get_mass_properties`")  # noqa: E501
        # verify the required parameter 'eid' is set
        if ('eid' not in local_var_params or
                local_var_params['eid'] is None):
            raise ValueError("Missing the required parameter `eid` when calling `get_mass_properties`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'did' in local_var_params:
            path_params['did'] = local_var_params['did']  # noqa: E501
        if 'wvm' in local_var_params:
            path_params['wvm'] = local_var_params['wvm']  # noqa: E501
        if 'wvmid' in local_var_params:
            path_params['wvmid'] = local_var_params['wvmid']  # noqa: E501
        if 'eid' in local_var_params:
            path_params['eid'] = local_var_params['eid']  # noqa: E501

        query_params = []
        if 'part_id' in local_var_params:
            query_params.append(('partId', local_var_params['part_id']))  # noqa: E501
            collection_formats['partId'] = 'multi'  # noqa: E501
        if 'mass_as_group' in local_var_params:
            query_params.append(('massAsGroup', local_var_params['mass_as_group']))  # noqa: E501
        if 'configuration' in local_var_params:
            query_params.append(('configuration', local_var_params['configuration']))  # noqa: E501
        if 'link_document_id' in local_var_params:
            query_params.append(('linkDocumentId', local_var_params['link_document_id']))  # 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/vnd.onshape.v1+json;charset=UTF-8; qs=0.1', 'application/json;charset=UTF-8; qs=0.9'])  # noqa: E501

        # Authentication setting
        auth_settings = ['OAuth2']  # noqa: E501

        return self.api_client.call_api(
            '/api/partstudios/d/{did}/{wvm}/{wvmid}/e/{eid}/massproperties', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='BTMassPropResponse',  # 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_named_views2(self, did, eid, **kwargs):  # noqa: E501
        """Get Named Views  # 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_named_views2(did, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str eid: Element ID. (required)
        :param bool skip_perspective: Whether views with a perspective projection should be omitted.
        :return: BTNamedViewsInfo
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.get_named_views2_with_http_info(did, eid, **kwargs)  # noqa: E501
        else:
            (data) = self.get_named_views2_with_http_info(did, eid, **kwargs)  # noqa: E501
            return data

    def get_named_views2_with_http_info(self, did, eid, **kwargs):  # noqa: E501
        """Get Named Views  # 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_named_views2_with_http_info(did, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str eid: Element ID. (required)
        :param bool skip_perspective: Whether views with a perspective projection should be omitted.
        :return: BTNamedViewsInfo
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = ['did', 'eid', 'skip_perspective']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_named_views2" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'did' is set
        if ('did' not in local_var_params or
                local_var_params['did'] is None):
            raise ValueError("Missing the required parameter `did` when calling `get_named_views2`")  # noqa: E501
        # verify the required parameter 'eid' is set
        if ('eid' not in local_var_params or
                local_var_params['eid'] is None):
            raise ValueError("Missing the required parameter `eid` when calling `get_named_views2`")  # noqa: E501

        collection_formats = {}

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

        query_params = []
        if 'skip_perspective' in local_var_params:
            query_params.append(('skipPerspective', local_var_params['skip_perspective']))  # 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/vnd.onshape.v1+json;charset=UTF-8; qs=0.1', 'application/json;charset=UTF-8; qs=0.9'])  # noqa: E501

        # Authentication setting
        auth_settings = ['OAuth2']  # noqa: E501

        return self.api_client.call_api(
            '/api/partstudios/d/{did}/e/{eid}/namedViews', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='BTNamedViewsInfo',  # 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_shaded_views1(self, did, wvm, wvmid, eid, **kwargs):  # noqa: E501
        """Get Shaded Views  # 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_shaded_views1(did, wvm, wvmid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wvm: One of w or v or m corresponding to whether a workspace or version or microversion was entered. (required)
        :param str wvmid: Workspace (w), Version (v) or Microversion (m) ID. (required)
        :param str eid: Element ID. (required)
        :param str view_matrix: 12-number view matrix (comma-separated), or one of the following named views: top, bottom, front, back, left, right The 12 entries in the view matrix form three rows and four columns, which is a linear transformation applied to the model itself. The matrix's first three columns maps the coordinate axes of the model to the coordinate axes of the view, and the fourth column translates the origin (in meters). The view coordinates have x pointing right, y pointing up, and z pointing towards the viewer, while a front view of the model has x pointing right, y pointing away from the viewer, and z pointing up. For example, the identity matrix viewMatrix=1,0,0,0,0,1,0,0,0,0,1,0 corresponds to the top view, and viewMatrix=0.612,0.612,0,0,-0.354,0.354,0.707,0,0.707,-0.707,0.707,0 corresponds (approximately) to the isometric view. The first three columns of the view matrix should be orthonormal and have a positive determinant.  If this is not the case, view behavior may be undefined.
        :param int output_height: Output image height (in pixels)
        :param int output_width: Output image width (in pixels)
        :param float pixel_size: Height and width represented by each pixel (in meters). If the value is 0, the display will be sized to fit the output image dimensions.
        :param str edges: The treatment to be applied to edges in the display. Options are show: show visible edges, hide: hide visible edges.
        :param bool show_all_parts: Whether or not all parts should be shown in the element, regardless of user setting. If false, the visibility setting made by the user will be reflected in the image. If true, all parts will be shown.
        :param bool include_surfaces: Whether or not surfaces should be shown in the element. It is applicable only when showAllParts is true. If false, surfaces will be excluded. If true, all surfaces will be shown.
        :param bool use_anti_aliasing: If true, an anti-aliasing factor will be used to smooth model boundaries in the final image result. If false, the image will be rasterized at the given resolution. Setting to true can have negative performance implications with respect to rendering time and memory usage. If a high-resolution image is requested and anti-aliasing is turned on, the server may not be able to fulfill the request.
        :param str configuration: Configuration string.
        :param str link_document_id: Id of document that links to the document being accessed. This may provide additional access rights to the document. Allowed only with version (v) path parameter.
        :return: BTShadedRenderDocumentResponse
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.get_shaded_views1_with_http_info(did, wvm, wvmid, eid, **kwargs)  # noqa: E501
        else:
            (data) = self.get_shaded_views1_with_http_info(did, wvm, wvmid, eid, **kwargs)  # noqa: E501
            return data

    def get_shaded_views1_with_http_info(self, did, wvm, wvmid, eid, **kwargs):  # noqa: E501
        """Get Shaded Views  # 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_shaded_views1_with_http_info(did, wvm, wvmid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wvm: One of w or v or m corresponding to whether a workspace or version or microversion was entered. (required)
        :param str wvmid: Workspace (w), Version (v) or Microversion (m) ID. (required)
        :param str eid: Element ID. (required)
        :param str view_matrix: 12-number view matrix (comma-separated), or one of the following named views: top, bottom, front, back, left, right The 12 entries in the view matrix form three rows and four columns, which is a linear transformation applied to the model itself. The matrix's first three columns maps the coordinate axes of the model to the coordinate axes of the view, and the fourth column translates the origin (in meters). The view coordinates have x pointing right, y pointing up, and z pointing towards the viewer, while a front view of the model has x pointing right, y pointing away from the viewer, and z pointing up. For example, the identity matrix viewMatrix=1,0,0,0,0,1,0,0,0,0,1,0 corresponds to the top view, and viewMatrix=0.612,0.612,0,0,-0.354,0.354,0.707,0,0.707,-0.707,0.707,0 corresponds (approximately) to the isometric view. The first three columns of the view matrix should be orthonormal and have a positive determinant.  If this is not the case, view behavior may be undefined.
        :param int output_height: Output image height (in pixels)
        :param int output_width: Output image width (in pixels)
        :param float pixel_size: Height and width represented by each pixel (in meters). If the value is 0, the display will be sized to fit the output image dimensions.
        :param str edges: The treatment to be applied to edges in the display. Options are show: show visible edges, hide: hide visible edges.
        :param bool show_all_parts: Whether or not all parts should be shown in the element, regardless of user setting. If false, the visibility setting made by the user will be reflected in the image. If true, all parts will be shown.
        :param bool include_surfaces: Whether or not surfaces should be shown in the element. It is applicable only when showAllParts is true. If false, surfaces will be excluded. If true, all surfaces will be shown.
        :param bool use_anti_aliasing: If true, an anti-aliasing factor will be used to smooth model boundaries in the final image result. If false, the image will be rasterized at the given resolution. Setting to true can have negative performance implications with respect to rendering time and memory usage. If a high-resolution image is requested and anti-aliasing is turned on, the server may not be able to fulfill the request.
        :param str configuration: Configuration string.
        :param str link_document_id: Id of document that links to the document being accessed. This may provide additional access rights to the document. Allowed only with version (v) path parameter.
        :return: BTShadedRenderDocumentResponse
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = ['did', 'wvm', 'wvmid', 'eid', 'view_matrix', 'output_height', 'output_width', 'pixel_size', 'edges', 'show_all_parts', 'include_surfaces', 'use_anti_aliasing', 'configuration', 'link_document_id']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_shaded_views1" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'did' is set
        if ('did' not in local_var_params or
                local_var_params['did'] is None):
            raise ValueError("Missing the required parameter `did` when calling `get_shaded_views1`")  # noqa: E501
        # verify the required parameter 'wvm' is set
        if ('wvm' not in local_var_params or
                local_var_params['wvm'] is None):
            raise ValueError("Missing the required parameter `wvm` when calling `get_shaded_views1`")  # noqa: E501
        # verify the required parameter 'wvmid' is set
        if ('wvmid' not in local_var_params or
                local_var_params['wvmid'] is None):
            raise ValueError("Missing the required parameter `wvmid` when calling `get_shaded_views1`")  # noqa: E501
        # verify the required parameter 'eid' is set
        if ('eid' not in local_var_params or
                local_var_params['eid'] is None):
            raise ValueError("Missing the required parameter `eid` when calling `get_shaded_views1`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'did' in local_var_params:
            path_params['did'] = local_var_params['did']  # noqa: E501
        if 'wvm' in local_var_params:
            path_params['wvm'] = local_var_params['wvm']  # noqa: E501
        if 'wvmid' in local_var_params:
            path_params['wvmid'] = local_var_params['wvmid']  # noqa: E501
        if 'eid' in local_var_params:
            path_params['eid'] = local_var_params['eid']  # noqa: E501

        query_params = []
        if 'view_matrix' in local_var_params:
            query_params.append(('viewMatrix', local_var_params['view_matrix']))  # noqa: E501
        if 'output_height' in local_var_params:
            query_params.append(('outputHeight', local_var_params['output_height']))  # noqa: E501
        if 'output_width' in local_var_params:
            query_params.append(('outputWidth', local_var_params['output_width']))  # noqa: E501
        if 'pixel_size' in local_var_params:
            query_params.append(('pixelSize', local_var_params['pixel_size']))  # noqa: E501
        if 'edges' in local_var_params:
            query_params.append(('edges', local_var_params['edges']))  # noqa: E501
        if 'show_all_parts' in local_var_params:
            query_params.append(('showAllParts', local_var_params['show_all_parts']))  # noqa: E501
        if 'include_surfaces' in local_var_params:
            query_params.append(('includeSurfaces', local_var_params['include_surfaces']))  # noqa: E501
        if 'use_anti_aliasing' in local_var_params:
            query_params.append(('useAntiAliasing', local_var_params['use_anti_aliasing']))  # noqa: E501
        if 'configuration' in local_var_params:
            query_params.append(('configuration', local_var_params['configuration']))  # noqa: E501
        if 'link_document_id' in local_var_params:
            query_params.append(('linkDocumentId', local_var_params['link_document_id']))  # 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/vnd.onshape.v1+json;charset=UTF-8; qs=0.1', 'application/json;charset=UTF-8; qs=0.9'])  # noqa: E501

        # Authentication setting
        auth_settings = ['OAuth2']  # noqa: E501

        return self.api_client.call_api(
            '/api/partstudios/d/{did}/{wvm}/{wvmid}/e/{eid}/shadedviews', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='BTShadedRenderDocumentResponse',  # 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_translator_formats4(self, did, wid, eid, **kwargs):  # noqa: E501
        """Get Translation Formats  # 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_translator_formats4(did, wid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wid: Workspace ID. (required)
        :param str eid: Element ID. (required)
        :param bool check_content:     Whether the current content or lack thereof should be considered when determining the available formats. Empty part studios cannot be translated into any format.
        :return: list[BTModelFormatInfo]
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.get_translator_formats4_with_http_info(did, wid, eid, **kwargs)  # noqa: E501
        else:
            (data) = self.get_translator_formats4_with_http_info(did, wid, eid, **kwargs)  # noqa: E501
            return data

    def get_translator_formats4_with_http_info(self, did, wid, eid, **kwargs):  # noqa: E501
        """Get Translation Formats  # 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_translator_formats4_with_http_info(did, wid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wid: Workspace ID. (required)
        :param str eid: Element ID. (required)
        :param bool check_content:     Whether the current content or lack thereof should be considered when determining the available formats. Empty part studios cannot be translated into any format.
        :return: list[BTModelFormatInfo]
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = ['did', 'wid', 'eid', 'check_content']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method get_translator_formats4" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'did' is set
        if ('did' not in local_var_params or
                local_var_params['did'] is None):
            raise ValueError("Missing the required parameter `did` when calling `get_translator_formats4`")  # noqa: E501
        # verify the required parameter 'wid' is set
        if ('wid' not in local_var_params or
                local_var_params['wid'] is None):
            raise ValueError("Missing the required parameter `wid` when calling `get_translator_formats4`")  # noqa: E501
        # verify the required parameter 'eid' is set
        if ('eid' not in local_var_params or
                local_var_params['eid'] is None):
            raise ValueError("Missing the required parameter `eid` when calling `get_translator_formats4`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'did' in local_var_params:
            path_params['did'] = local_var_params['did']  # noqa: E501
        if 'wid' in local_var_params:
            path_params['wid'] = local_var_params['wid']  # noqa: E501
        if 'eid' in local_var_params:
            path_params['eid'] = local_var_params['eid']  # noqa: E501

        query_params = []
        if 'check_content' in local_var_params:
            query_params.append(('checkContent', local_var_params['check_content']))  # 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/vnd.onshape.v1+json;charset=UTF-8; qs=0.1', 'application/json;charset=UTF-8; qs=0.9'])  # noqa: E501

        # Authentication setting
        auth_settings = []  # noqa: E501

        return self.api_client.call_api(
            '/api/partstudios/d/{did}/w/{wid}/e/{eid}/translationformats', 'GET',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='list[BTModelFormatInfo]',  # 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 translate_format5(self, did, wv, wvid, eid, bt_translate_format_params, **kwargs):  # noqa: E501
        """Create Part Studio translation  # noqa: E501

        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.translate_format5(did, wv, wvid, eid, bt_translate_format_params, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wv: One of w or v corresponding to whether a workspace or version was entered. (required)
        :param str wvid: Workspace (w) or Version (v). (required)
        :param str eid: Element ID. (required)
        :param BTTranslateFormatParams bt_translate_format_params: (required)
        :return: BTTranslationRequestInfo
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.translate_format5_with_http_info(did, wv, wvid, eid, bt_translate_format_params, **kwargs)  # noqa: E501
        else:
            (data) = self.translate_format5_with_http_info(did, wv, wvid, eid, bt_translate_format_params, **kwargs)  # noqa: E501
            return data

    def translate_format5_with_http_info(self, did, wv, wvid, eid, bt_translate_format_params, **kwargs):  # noqa: E501
        """Create Part Studio translation  # noqa: E501

        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.translate_format5_with_http_info(did, wv, wvid, eid, bt_translate_format_params, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wv: One of w or v corresponding to whether a workspace or version was entered. (required)
        :param str wvid: Workspace (w) or Version (v). (required)
        :param str eid: Element ID. (required)
        :param BTTranslateFormatParams bt_translate_format_params: (required)
        :return: BTTranslationRequestInfo
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = ['did', 'wv', 'wvid', 'eid', 'bt_translate_format_params']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method translate_format5" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'did' is set
        if ('did' not in local_var_params or
                local_var_params['did'] is None):
            raise ValueError("Missing the required parameter `did` when calling `translate_format5`")  # noqa: E501
        # verify the required parameter 'wv' is set
        if ('wv' not in local_var_params or
                local_var_params['wv'] is None):
            raise ValueError("Missing the required parameter `wv` when calling `translate_format5`")  # noqa: E501
        # verify the required parameter 'wvid' is set
        if ('wvid' not in local_var_params or
                local_var_params['wvid'] is None):
            raise ValueError("Missing the required parameter `wvid` when calling `translate_format5`")  # noqa: E501
        # verify the required parameter 'eid' is set
        if ('eid' not in local_var_params or
                local_var_params['eid'] is None):
            raise ValueError("Missing the required parameter `eid` when calling `translate_format5`")  # noqa: E501
        # verify the required parameter 'bt_translate_format_params' is set
        if ('bt_translate_format_params' not in local_var_params or
                local_var_params['bt_translate_format_params'] is None):
            raise ValueError("Missing the required parameter `bt_translate_format_params` when calling `translate_format5`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'did' in local_var_params:
            path_params['did'] = local_var_params['did']  # noqa: E501
        if 'wv' in local_var_params:
            path_params['wv'] = local_var_params['wv']  # noqa: E501
        if 'wvid' in local_var_params:
            path_params['wvid'] = local_var_params['wvid']  # noqa: E501
        if 'eid' in local_var_params:
            path_params['eid'] = local_var_params['eid']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'bt_translate_format_params' in local_var_params:
            body_params = local_var_params['bt_translate_format_params']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/vnd.onshape.v1+json;charset=UTF-8; qs=0.1', 'application/json;charset=UTF-8; qs=0.9'])  # noqa: E501

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

        # Authentication setting
        auth_settings = ['OAuth2']  # noqa: E501

        return self.api_client.call_api(
            '/api/partstudios/d/{did}/{wv}/{wvid}/e/{eid}/translations', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='BTTranslationRequestInfo',  # 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 translate_ids1(self, did, wvm, wvmid, eid, bt_id_translation_params, **kwargs):  # noqa: E501
        """Id Translations  # noqa: E501

        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.translate_ids1(did, wvm, wvmid, eid, bt_id_translation_params, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wvm: One of w or v or m corresponding to whether a workspace or version or microversion was entered. (required)
        :param str wvmid: Workspace (w), Version (v) or Microversion (m) ID. (required)
        :param str eid: Element ID. (required)
        :param BTIdTranslationParams bt_id_translation_params: (required)
        :return: BTIdTranslationInfo
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.translate_ids1_with_http_info(did, wvm, wvmid, eid, bt_id_translation_params, **kwargs)  # noqa: E501
        else:
            (data) = self.translate_ids1_with_http_info(did, wvm, wvmid, eid, bt_id_translation_params, **kwargs)  # noqa: E501
            return data

    def translate_ids1_with_http_info(self, did, wvm, wvmid, eid, bt_id_translation_params, **kwargs):  # noqa: E501
        """Id Translations  # noqa: E501

        This method makes a synchronous HTTP request by default. To make an
        asynchronous HTTP request, please pass async_req=True
        >>> thread = api.translate_ids1_with_http_info(did, wvm, wvmid, eid, bt_id_translation_params, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wvm: One of w or v or m corresponding to whether a workspace or version or microversion was entered. (required)
        :param str wvmid: Workspace (w), Version (v) or Microversion (m) ID. (required)
        :param str eid: Element ID. (required)
        :param BTIdTranslationParams bt_id_translation_params: (required)
        :return: BTIdTranslationInfo
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = ['did', 'wvm', 'wvmid', 'eid', 'bt_id_translation_params']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method translate_ids1" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'did' is set
        if ('did' not in local_var_params or
                local_var_params['did'] is None):
            raise ValueError("Missing the required parameter `did` when calling `translate_ids1`")  # noqa: E501
        # verify the required parameter 'wvm' is set
        if ('wvm' not in local_var_params or
                local_var_params['wvm'] is None):
            raise ValueError("Missing the required parameter `wvm` when calling `translate_ids1`")  # noqa: E501
        # verify the required parameter 'wvmid' is set
        if ('wvmid' not in local_var_params or
                local_var_params['wvmid'] is None):
            raise ValueError("Missing the required parameter `wvmid` when calling `translate_ids1`")  # noqa: E501
        # verify the required parameter 'eid' is set
        if ('eid' not in local_var_params or
                local_var_params['eid'] is None):
            raise ValueError("Missing the required parameter `eid` when calling `translate_ids1`")  # noqa: E501
        # verify the required parameter 'bt_id_translation_params' is set
        if ('bt_id_translation_params' not in local_var_params or
                local_var_params['bt_id_translation_params'] is None):
            raise ValueError("Missing the required parameter `bt_id_translation_params` when calling `translate_ids1`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'did' in local_var_params:
            path_params['did'] = local_var_params['did']  # noqa: E501
        if 'wvm' in local_var_params:
            path_params['wvm'] = local_var_params['wvm']  # noqa: E501
        if 'wvmid' in local_var_params:
            path_params['wvmid'] = local_var_params['wvmid']  # noqa: E501
        if 'eid' in local_var_params:
            path_params['eid'] = local_var_params['eid']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

        body_params = None
        if 'bt_id_translation_params' in local_var_params:
            body_params = local_var_params['bt_id_translation_params']
        # HTTP header `Accept`
        header_params['Accept'] = self.api_client.select_header_accept(
            ['application/vnd.onshape.v1+json;charset=UTF-8; qs=0.1', 'application/json;charset=UTF-8; qs=0.9'])  # noqa: E501

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

        # Authentication setting
        auth_settings = ['OAuth2']  # noqa: E501

        return self.api_client.call_api(
            '/api/partstudios/d/{did}/{wvm}/{wvmid}/e/{eid}/idtranslations', 'POST',
            path_params,
            query_params,
            header_params,
            body=body_params,
            post_params=form_params,
            files=local_var_files,
            response_type='BTIdTranslationInfo',  # 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_configuration3(self, did, wvm, wvmid, eid, **kwargs):  # noqa: E501
        """Update Configuration  # 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_configuration3(did, wvm, wvmid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: (required)
        :param str wvm: (required)
        :param str wvmid: (required)
        :param str eid: (required)
        :param str body:
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.update_configuration3_with_http_info(did, wvm, wvmid, eid, **kwargs)  # noqa: E501
        else:
            (data) = self.update_configuration3_with_http_info(did, wvm, wvmid, eid, **kwargs)  # noqa: E501
            return data

    def update_configuration3_with_http_info(self, did, wvm, wvmid, eid, **kwargs):  # noqa: E501
        """Update Configuration  # 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_configuration3_with_http_info(did, wvm, wvmid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: (required)
        :param str wvm: (required)
        :param str wvmid: (required)
        :param str eid: (required)
        :param str body:
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = ['did', 'wvm', 'wvmid', 'eid', 'body']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method update_configuration3" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'did' is set
        if ('did' not in local_var_params or
                local_var_params['did'] is None):
            raise ValueError("Missing the required parameter `did` when calling `update_configuration3`")  # noqa: E501
        # verify the required parameter 'wvm' is set
        if ('wvm' not in local_var_params or
                local_var_params['wvm'] is None):
            raise ValueError("Missing the required parameter `wvm` when calling `update_configuration3`")  # noqa: E501
        # verify the required parameter 'wvmid' is set
        if ('wvmid' not in local_var_params or
                local_var_params['wvmid'] is None):
            raise ValueError("Missing the required parameter `wvmid` when calling `update_configuration3`")  # noqa: E501
        # verify the required parameter 'eid' is set
        if ('eid' not in local_var_params or
                local_var_params['eid'] is None):
            raise ValueError("Missing the required parameter `eid` when calling `update_configuration3`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'did' in local_var_params:
            path_params['did'] = local_var_params['did']  # noqa: E501
        if 'wvm' in local_var_params:
            path_params['wvm'] = local_var_params['wvm']  # noqa: E501
        if 'wvmid' in local_var_params:
            path_params['wvmid'] = local_var_params['wvmid']  # noqa: E501
        if 'eid' in local_var_params:
            path_params['eid'] = local_var_params['eid']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

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

        # Authentication setting
        auth_settings = ['OAuth2']  # noqa: E501

        return self.api_client.call_api(
            '/api/partstudios/d/{did}/{wvm}/{wvmid}/e/{eid}/configuration', '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_feature(self, did, wid, eid, fid, **kwargs):  # noqa: E501
        """Update Feature  # 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_feature(did, wid, eid, fid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wid: Workspace ID. (required)
        :param str eid: Element ID. (required)
        :param str fid: The id of the feature being updated.  This id should be URL encoded and must match the featureId found in the serialized structure (required)
        :param str body: feature The serialized feature definition
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.update_feature_with_http_info(did, wid, eid, fid, **kwargs)  # noqa: E501
        else:
            (data) = self.update_feature_with_http_info(did, wid, eid, fid, **kwargs)  # noqa: E501
            return data

    def update_feature_with_http_info(self, did, wid, eid, fid, **kwargs):  # noqa: E501
        """Update Feature  # 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_feature_with_http_info(did, wid, eid, fid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wid: Workspace ID. (required)
        :param str eid: Element ID. (required)
        :param str fid: The id of the feature being updated.  This id should be URL encoded and must match the featureId found in the serialized structure (required)
        :param str body: feature The serialized feature definition
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = ['did', 'wid', 'eid', 'fid', 'body']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method update_feature" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'did' is set
        if ('did' not in local_var_params or
                local_var_params['did'] is None):
            raise ValueError("Missing the required parameter `did` when calling `update_feature`")  # noqa: E501
        # verify the required parameter 'wid' is set
        if ('wid' not in local_var_params or
                local_var_params['wid'] is None):
            raise ValueError("Missing the required parameter `wid` when calling `update_feature`")  # noqa: E501
        # verify the required parameter 'eid' is set
        if ('eid' not in local_var_params or
                local_var_params['eid'] is None):
            raise ValueError("Missing the required parameter `eid` when calling `update_feature`")  # noqa: E501
        # verify the required parameter 'fid' is set
        if ('fid' not in local_var_params or
                local_var_params['fid'] is None):
            raise ValueError("Missing the required parameter `fid` when calling `update_feature`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'did' in local_var_params:
            path_params['did'] = local_var_params['did']  # noqa: E501
        if 'wid' in local_var_params:
            path_params['wid'] = local_var_params['wid']  # noqa: E501
        if 'eid' in local_var_params:
            path_params['eid'] = local_var_params['eid']  # noqa: E501
        if 'fid' in local_var_params:
            path_params['fid'] = local_var_params['fid']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

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

        # Authentication setting
        auth_settings = ['OAuth2']  # noqa: E501

        return self.api_client.call_api(
            '/api/partstudios/d/{did}/w/{wid}/e/{eid}/features/featureid/{fid}', '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_features1(self, did, wid, eid, **kwargs):  # noqa: E501
        """Update Features  # 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_features1(did, wid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wid: Workspace ID. (required)
        :param str eid: Element ID. (required)
        :param str body: feature The serialized feature definition
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.update_features1_with_http_info(did, wid, eid, **kwargs)  # noqa: E501
        else:
            (data) = self.update_features1_with_http_info(did, wid, eid, **kwargs)  # noqa: E501
            return data

    def update_features1_with_http_info(self, did, wid, eid, **kwargs):  # noqa: E501
        """Update Features  # 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_features1_with_http_info(did, wid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wid: Workspace ID. (required)
        :param str eid: Element ID. (required)
        :param str body: feature The serialized feature definition
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = ['did', 'wid', 'eid', 'body']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method update_features1" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'did' is set
        if ('did' not in local_var_params or
                local_var_params['did'] is None):
            raise ValueError("Missing the required parameter `did` when calling `update_features1`")  # noqa: E501
        # verify the required parameter 'wid' is set
        if ('wid' not in local_var_params or
                local_var_params['wid'] is None):
            raise ValueError("Missing the required parameter `wid` when calling `update_features1`")  # noqa: E501
        # verify the required parameter 'eid' is set
        if ('eid' not in local_var_params or
                local_var_params['eid'] is None):
            raise ValueError("Missing the required parameter `eid` when calling `update_features1`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'did' in local_var_params:
            path_params['did'] = local_var_params['did']  # noqa: E501
        if 'wid' in local_var_params:
            path_params['wid'] = local_var_params['wid']  # noqa: E501
        if 'eid' in local_var_params:
            path_params['eid'] = local_var_params['eid']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

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

        # Authentication setting
        auth_settings = ['OAuth2']  # noqa: E501

        return self.api_client.call_api(
            '/api/partstudios/d/{did}/w/{wid}/e/{eid}/features/updates', '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_rollback(self, did, wid, eid, **kwargs):  # noqa: E501
        """Update Feature Rollback  # 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_rollback(did, wid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wid: Workspace ID. (required)
        :param str eid: Element ID. (required)
        :param str body: The index at which the rollback index should be placed. Features      *   with entry index (0-based) higher than or equal to this value are rolled back.  The value -1 is treated      *   as an alias for \"end of feature list\".  Otherwise the value must be in the range 0 to the number of      *   entries in the feature list
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """
        kwargs['_return_http_data_only'] = True
        if kwargs.get('async_req'):
            return self.update_rollback_with_http_info(did, wid, eid, **kwargs)  # noqa: E501
        else:
            (data) = self.update_rollback_with_http_info(did, wid, eid, **kwargs)  # noqa: E501
            return data

    def update_rollback_with_http_info(self, did, wid, eid, **kwargs):  # noqa: E501
        """Update Feature Rollback  # 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_rollback_with_http_info(did, wid, eid, async_req=True)
        >>> result = thread.get()

        :param async_req bool
        :param str did: Document ID. (required)
        :param str wid: Workspace ID. (required)
        :param str eid: Element ID. (required)
        :param str body: The index at which the rollback index should be placed. Features      *   with entry index (0-based) higher than or equal to this value are rolled back.  The value -1 is treated      *   as an alias for \"end of feature list\".  Otherwise the value must be in the range 0 to the number of      *   entries in the feature list
        :return: None
                 If the method is called asynchronously,
                 returns the request thread.
        """

        local_var_params = locals()

        all_params = ['did', 'wid', 'eid', 'body']  # noqa: E501
        all_params.append('async_req')
        all_params.append('_return_http_data_only')
        all_params.append('_preload_content')
        all_params.append('_request_timeout')

        for key, val in six.iteritems(local_var_params['kwargs']):
            if key not in all_params:
                raise TypeError(
                    "Got an unexpected keyword argument '%s'"
                    " to method update_rollback" % key
                )
            local_var_params[key] = val
        del local_var_params['kwargs']
        # verify the required parameter 'did' is set
        if ('did' not in local_var_params or
                local_var_params['did'] is None):
            raise ValueError("Missing the required parameter `did` when calling `update_rollback`")  # noqa: E501
        # verify the required parameter 'wid' is set
        if ('wid' not in local_var_params or
                local_var_params['wid'] is None):
            raise ValueError("Missing the required parameter `wid` when calling `update_rollback`")  # noqa: E501
        # verify the required parameter 'eid' is set
        if ('eid' not in local_var_params or
                local_var_params['eid'] is None):
            raise ValueError("Missing the required parameter `eid` when calling `update_rollback`")  # noqa: E501

        collection_formats = {}

        path_params = {}
        if 'did' in local_var_params:
            path_params['did'] = local_var_params['did']  # noqa: E501
        if 'wid' in local_var_params:
            path_params['wid'] = local_var_params['wid']  # noqa: E501
        if 'eid' in local_var_params:
            path_params['eid'] = local_var_params['eid']  # noqa: E501

        query_params = []

        header_params = {}

        form_params = []
        local_var_files = {}

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

        # Authentication setting
        auth_settings = ['OAuth2']  # noqa: E501

        return self.api_client.call_api(
            '/api/partstudios/d/{did}/w/{wid}/e/{eid}/features/rollback', '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)
