def _get_site_id(name, token): site_client = SiteClient() site_client.set_token(token) sitelist = site_client.get_sites() site_id = [ elem['site_id'] for elem in sitelist if elem['site_name'] == name ] if site_id: return site_client, site_id[0] return site_client, None
class TransferClient(object): """ Transfer management client API. To list, copy and remove files from remote site. """ def __init__(self, user_token): """ Constructor initialises all service clients involved in the transfer management: EndpointService, CredService and finally the WorkqueueService. :param user_token: user token """ self.__user_token = user_token # endpoint self.__site_client = SiteClient() self.__site_client.set_token(user_token) self.__sitelist = self.__site_client.get_sites() # get user id self.__user_id = HRService.get_token_userid(user_token) # work queue client self.__wq_client = WorkqueueClient() self.__wq_client.set_token(user_token) def list(self, src_site, src_filepath, **kwargs): """ List a given path. As for all client calls it need a user token set in a request beforehand. Args: src_site (string): The name of the site containing the path to be listed. src_filepath (str): The path to list. kwargs: keyword arguments containing: protocol, max_tries and priority Returns: dict: The Python dictionary representing the list of files. """ # sort out the site ID first: src_siteid = [ elem['site_id'] for elem in self.__sitelist if elem['site_name'] == src_site ] if src_siteid: response = self.__wq_client.list(src_siteid[0], src_filepath, **kwargs) # max_tries, priority, protocol=JobProtocol.GRIDFTP) return response return src_siteid # an empty list def output(self, job_id, element_id=None, attempt=None): """ Get job output. :param job_id: job id :return: output as specified by workqueue client """ response = self.__wq_client.output(job_id, element_id=element_id, attempt=attempt) return response def status(self, job_id, element_id=None): """ Return status of a job. :param job_id: job id to get the status of. :return: forward response from :func:`pdm.workqueue.WorkqueueClient.WorkqueueClient.status`. """ response = self.__wq_client.status(job_id, element_id) return response def list_sites(self): """ Get list of sites. :return: list of dictionaries with all keys but 'site_id'. """ filtered_sites = deepcopy(self.__sitelist) for elem in filtered_sites: elem.pop('site_id', None) return filtered_sites def copy( self, src_site, src_filepath, dst_site, # pylint: disable=too-many-arguments dst_filepath, **kwargs): """ Copy files between sites. :param src_site: source site :param src_filepath: source site path :param dst_site: destination site :param dst_filepath: destination site path :param kwargs: * max_tries: maximum number of attempts * priority: priority * protocol: protocol used, see: :func:`pdm.workqueue.WorkqueueClient.WorkqueueClient.copy` :return: forward response from :func:`pdm.workqueue.WorkqueueClient.WorkqueueClient.copy` or *None* if either of the sites exists. """ src_siteid = [ elem['site_id'] for elem in self.__sitelist if elem['site_name'] == src_site ] dst_siteid = [ elem['site_id'] for elem in self.__sitelist if elem['site_name'] == dst_site ] if not (src_siteid and dst_siteid): return None response = self.__wq_client.copy( src_siteid[0], src_filepath, dst_siteid[0], # pylint: disable=too-many-arguments dst_filepath, **kwargs) return response def remove(self, src_site, src_filepath, **kwargs): """ Remove files from a given site. :param src_site: the site to contact :param src_filepath: the path to be removed :param kwargs: * max_tries: maximum number of attempts * priority: priority * protocol: protocol used :return: forward response from :func:`pdm.workqueue.WorkqueueClient.WorkqueueClient.remove` or *None* if the source site does not exist. """ src_siteid = [ elem['site_id'] for elem in self.__sitelist if elem['site_name'] == src_site ] if not src_siteid: return None response = self.__wq_client.remove( src_siteid[0], src_filepath, # pylint: disable=too-many-arguments **kwargs) return response def mkdir(self, site, dirpath, **kwargs): """ Create a new directory at a site. :param site: site name :param dirpath: directory path :param kwargs: * max_tries: maximum number of attempts * priority: priority * protocol: protocol used,\ see: :func:`pdm.workqueue.WorkqueueClient.WorkqueueClient.copy` :return: forward response from :func:`pdm.workqueue.WorkqueueClient.WorkqueueClient.mkdir` or *None* if the site does not exist. """ src_siteid = [ elem['site_id'] for elem in self.__sitelist if elem['site_name'] == site ] if not src_siteid: return None response = self.__wq_client.mkdir( src_siteid[0], dirpath, # pylint: disable=too-many-arguments **kwargs) return response def rename(self, site, oldname, newname, **kwargs): """ Rename a file or directory within site. :param site: site name :param oldname: old file name :param newname: new file name :param kwargs: * max_tries: maximum number of attempts * priority: priority * protocol: protocol used :return: forward response from :func:`pdm.workqueue.WorkqueueClient.WorkqueueClient.rename` or *None* if the site does not exist. """ src_siteid = [ elem['site_id'] for elem in self.__sitelist if elem['site_name'] == site ] if not src_siteid: return None response = self.__wq_client.rename(src_siteid[0], oldname, newname, **kwargs) return response def jobs(self): """ Get user jobs' info. :return: forwarded response from \ :func:`WorkqueueClient.jobs() <pdm.workqueue.WorkqueueClient.WorkqueueClient.jobs>`. """ response = self.__wq_client.jobs() return response def elements(self, job_id): """ Get job elements information. :param job_id: job id :return: forwarded response from \ :func:`WorkqueueClient.jobs() <pdm.workqueue.WorkqueueClient.WorkqueueClient.jobs>`. """ response = self.__wq_client.elements(job_id) return response