Source code for integrateddatalake.clients.object_operations_client

# coding: utf-8

"""
    Data Lake API

    Service for storing Objects, download objects, add extended metadata tags,  subscribe for notifications, import tenant specific MindSphere Time Series data, and enable data access using cross account access and STS in Integrated MindSphere Data Lake. - Objects reside in user specified path like below example. Extension in object name is optional. Root path can be denoted as \"/\"       /basefolder/subfolder/objectname.objectext   - The following generic error codes might occur at any of the specified operations. Generic errors are prefixed with 'mdsp.core.generic.'.    - missingParameter   - invalidParameter   - missingRequestBodyProperty   - invalidRequestBodyProperty   - unauthorized   - forbidden   - noMatch   - unsupportedMediaType   - tooManyRequests   - internalServerError  # noqa: E501
"""


from __future__ import absolute_import

from mindsphere_core.mindsphere_core import logger
from mindsphere_core import mindsphere_core, exceptions, token_service
from mindsphere_core.token_service import init_credentials


[docs]class ObjectOperationsClient: __base_path__ = "/api/datalake/v3" __model_package__ = __name__.split(".")[0] def __init__(self, rest_client_config=None, mindsphere_credentials=None): self.rest_client_config = rest_client_config self.mindsphere_credentials = init_credentials(mindsphere_credentials)
[docs] def create_delete_objects_job(self, request_object): """Delete multiple objects in bulk. Create asynchronous job to delete multiple objects for the specified paths. If any of the given paths doesn't exist then job will return status as COMPLETED_WITH_ERRORS. <br/><br/>Jobs which are completed with or without errors would be deleted periodically. <br/><br/>Data once deleted cannot be recovered. :param CreateDeleteObjectsJobRequest request_object: It contains the below parameters --> |br| ( DeleteObjectsJob* - Delete Objects Job ) :return: DeleteObjectsJobResponse """ logger.info("ObjectOperationsClient.create_delete_objects_job() invoked.") if request_object is None: raise exceptions.MindsphereClientError( "`request_object` is not passed when calling `create_delete_objects_job`" ) if request_object.delete_objects_job is None: raise exceptions.MindsphereClientError( "The required parameter `DeleteObjectsJob` is missing from `request_object`, when calling `create_delete_objects_job`" ) end_point_url = "/deleteObjectsJobs" end_point_url = end_point_url.format() token = token_service.fetch_token( self.rest_client_config, self.mindsphere_credentials ) api_url = mindsphere_core.build_url( self.__base_path__, end_point_url, self.rest_client_config ) headers = { "Accept": "application/json", "Authorization": "Bearer " + str(token), } query_params = {} form_params, local_var_files, body_params = ( {}, {}, request_object.delete_objects_job, ) logger.info( "ObjectOperationsClient.create_delete_objects_job() --> Proceeding for API Invoker." ) return mindsphere_core.invoke_service( self.rest_client_config, api_url, headers, "POST", query_params, form_params, body_params, local_var_files, "DeleteObjectsJobResponse", self.__model_package__, )
[docs] def delete_object(self, request_object): """delete an object. Delete the object for the specified path. :param DeleteObjectRequest request_object: It contains the below parameters --> |br| ( path* - path of an object denoting folders and object name. e.g. basefolder/subfolder/objectname.objectext ), |br| ( subtenantId - Only to be used by tenants, to address a subtenant's object. If not provided by a tenant, its own object is addressed. Subtenants are not allowed to use this parameter and can only address their own object. ) :return: None """ logger.info("ObjectOperationsClient.delete_object() invoked.") if request_object is None: raise exceptions.MindsphereClientError( "`request_object` is not passed when calling `delete_object`" ) if request_object.path is None: raise exceptions.MindsphereClientError( "The required parameter `path` is missing from `request_object`, when calling `delete_object`" ) end_point_url = "/objects/{path}" end_point_url = end_point_url.format(path=request_object.path) token = token_service.fetch_token( self.rest_client_config, self.mindsphere_credentials ) api_url = mindsphere_core.build_url( self.__base_path__, end_point_url, self.rest_client_config ) headers = { "Accept": "application/json", "Authorization": "Bearer " + str(token), } query_params = {"subtenantId": request_object.subtenant_id} form_params, local_var_files, body_params = {}, {}, None logger.info( "ObjectOperationsClient.delete_object() --> Proceeding for API Invoker." ) return mindsphere_core.invoke_service( self.rest_client_config, api_url, headers, "DELETE", query_params, form_params, body_params, local_var_files, None, self.__model_package__, )
[docs] def get_all_delete_objects_job(self, request_object): """Fetch details of all the Delete Objects Jobs. Retrieve list of all the Delete Objects Jobs. :param GetAllDeleteObjectsJobRequest request_object: It contains the below parameters --> |br| ( page - Specifies the requested page index ), |br| ( size - Specifies the number of elements in a page ), |br| ( filter - JSON-based filter expression. Supported values: 'subtenantId' and 'status'. Supported operations: 'eq'. Decoded example for exact match: { \"subtenantId\": \"204a896c-a23a-11e9-a2a3-2a2ae2dbcce4\", \"status\": \"IN_PROGRESS\" } ) :return: DeleteObjectsJobList """ logger.info("ObjectOperationsClient.get_all_delete_objects_job() invoked.") end_point_url = "/deleteObjectsJobs" end_point_url = end_point_url.format() token = token_service.fetch_token( self.rest_client_config, self.mindsphere_credentials ) api_url = mindsphere_core.build_url( self.__base_path__, end_point_url, self.rest_client_config ) headers = { "Accept": "application/json", "Authorization": "Bearer " + str(token), } query_params = { "page": request_object.page, "size": request_object.size, "filter": request_object.filter, } form_params, local_var_files, body_params = {}, {}, None logger.info( "ObjectOperationsClient.get_all_delete_objects_job() --> Proceeding for API Invoker." ) return mindsphere_core.invoke_service( self.rest_client_config, api_url, headers, "GET", query_params, form_params, body_params, local_var_files, "DeleteObjectsJobList", self.__model_package__, )
[docs] def get_delete_objects_job(self, request_object): """Fetch status and details of Delete Objects Job. Retrieve information of given Delete Objects Job. <br/> Only the objects of one tenant or subtenant are returned. In case a tenant wants to retrieve information on a subtenant's objects, the subtenantId query parameter must be used. :param GetDeleteObjectsJobRequest request_object: It contains the below parameters --> |br| ( id* - Unique identifier of the Delete Objects Job ), |br| ( subtenantId - * Only to be used by tenants, to address delete objects jobs on subtenant's paths. * If not provided by a tenant, then delete objects jobs created for tenant's will be returned. * Subtenants are not allowed to use this parameter and they can only get delete objects jobs created for them. * e.g. subtenantId \"204a896c-a23a-11e9-a2a3-2a2ae2dbcce4\". ) :return: DeleteObjectsJobResponse """ logger.info("ObjectOperationsClient.get_delete_objects_job() invoked.") if request_object is None: raise exceptions.MindsphereClientError( "`request_object` is not passed when calling `get_delete_objects_job`" ) if request_object.id is None: raise exceptions.MindsphereClientError( "The required parameter `id` is missing from `request_object`, when calling `get_delete_objects_job`" ) end_point_url = "/deleteObjectsJobs/{id}" end_point_url = end_point_url.format(id=request_object.id) token = token_service.fetch_token( self.rest_client_config, self.mindsphere_credentials ) api_url = mindsphere_core.build_url( self.__base_path__, end_point_url, self.rest_client_config ) headers = { "Accept": "application/json", "Authorization": "Bearer " + str(token), } query_params = {"subtenantId": request_object.subtenant_id} form_params, local_var_files, body_params = {}, {}, None logger.info( "ObjectOperationsClient.get_delete_objects_job() --> Proceeding for API Invoker." ) return mindsphere_core.invoke_service( self.rest_client_config, api_url, headers, "GET", query_params, form_params, body_params, local_var_files, "DeleteObjectsJobResponse", self.__model_package__, )
[docs] def get_delete_objects_job_errors(self, request_object): """Fetch errors of Delete Objects Job. Retrieve errors of given Delete Objects Job. This endpoint should be called only when /deleteObjectsJobs/{id} returns status as COMPLETED_WITH_ERRORS<br/> Only the objects of one tenant or subtenant are returned. In case a tenant wants to retrieve information on a subtenant's objects, the subtenantId query parameter must be used. :param GetDeleteObjectsJobErrorsRequest request_object: It contains the below parameters --> |br| ( id* - Unique identifier of the Delete Objects Job ), |br| ( subtenantId - * Only to be used by tenants, to address delete objects jobs on subtenant's paths. * If not provided by a tenant, then delete objects jobs created for tenant's will be returned. * Subtenants are not allowed to use this parameter and they can only get delete objects jobs created for them. * e.g. subtenantId \"204a896c-a23a-11e9-a2a3-2a2ae2dbcce4\". ) :return: DeleteObjectsJobErrorDetailsResponse """ logger.info("ObjectOperationsClient.get_delete_objects_job_errors() invoked.") if request_object is None: raise exceptions.MindsphereClientError( "`request_object` is not passed when calling `get_delete_objects_job_errors`" ) if request_object.id is None: raise exceptions.MindsphereClientError( "The required parameter `id` is missing from `request_object`, when calling `get_delete_objects_job_errors`" ) end_point_url = "/deleteObjectsJobs/{id}/errors" end_point_url = end_point_url.format(id=request_object.id) token = token_service.fetch_token( self.rest_client_config, self.mindsphere_credentials ) api_url = mindsphere_core.build_url( self.__base_path__, end_point_url, self.rest_client_config ) headers = { "Accept": "application/json", "Authorization": "Bearer " + str(token), } query_params = {"subtenantId": request_object.subtenant_id} form_params, local_var_files, body_params = {}, {}, None logger.info( "ObjectOperationsClient.get_delete_objects_job_errors() --> Proceeding for API Invoker." ) return mindsphere_core.invoke_service( self.rest_client_config, api_url, headers, "GET", query_params, form_params, body_params, local_var_files, "DeleteObjectsJobErrorDetailsResponse", self.__model_package__, )
[docs] def query_objects(self, request_object): """Query objects. Retrieve information on existing objects. In case a folder is specified as input path, all child objects within the folder are returned. Objects in sub-folders of the given folder are not returned. In case a file is specified as input path, only the file is returned. Only the objects of one tenant or subtenant are returned. In case a tenant wants to retrieve information on a subtenant's objects, the subtenantId query parameter must be used. :param QueryObjectsRequest request_object: It contains the below parameters --> |br| ( path - Path to folder or file object. In case of folder, all child objects are returned. In case of file, only the corresponding object is returned. ), |br| ( subtenantId - Only to be used by tenants, to address a subtenant's object. If not provided by a tenant, its own object is addressed. Subtenants are not allowed to use this parameter and can only address their own object. ), |br| ( pageToken - Selects next page. Value must be taken rom response body property 'page.nextToken'. If omitted, first page is returned. ) :return: ObjectListResponse """ logger.info("ObjectOperationsClient.query_objects() invoked.") end_point_url = "/objects" end_point_url = end_point_url.format() token = token_service.fetch_token( self.rest_client_config, self.mindsphere_credentials ) api_url = mindsphere_core.build_url( self.__base_path__, end_point_url, self.rest_client_config ) headers = { "Accept": "application/json", "Authorization": "Bearer " + str(token), } query_params = { "path": request_object.path, "subtenantId": request_object.subtenant_id, "pageToken": request_object.page_token, } form_params, local_var_files, body_params = {}, {}, None logger.info( "ObjectOperationsClient.query_objects() --> Proceeding for API Invoker." ) return mindsphere_core.invoke_service( self.rest_client_config, api_url, headers, "GET", query_params, form_params, body_params, local_var_files, "ObjectListResponse", self.__model_package__, )