class DataStoreAgent: DSS_SWAGGER_URL_TEMPLATE = "https://dss.{deployment}.data.humancellatlas.org/v1/swagger.json" DSS_PROD_SWAGGER_URL = "https://dss.data.humancellatlas.org/v1/swagger.json" def __init__(self, deployment): self.deployment = deployment if self.deployment == "prod": swagger_url = self.DSS_PROD_SWAGGER_URL else: swagger_url = self.DSS_SWAGGER_URL_TEMPLATE.format( deployment=deployment) self.client = DSSClient(swagger_url=swagger_url) def search(self, query, replica='aws'): try: response = self.client.post_search(replica=replica, es_query=query) return response['results'] except SwaggerAPIException: return [] def search_iterate(self, query, replica='aws'): for hit in self.client.post_search.iterate(replica=replica, es_query=query): yield hit def download_bundle(self, bundle_uuid, target_folder): Progress.report(f"Downloading bundle {bundle_uuid}:\n") manifest = self.bundle_manifest(bundle_uuid) bundle_folder = os.path.join(target_folder, bundle_uuid) try: os.makedirs(bundle_folder) except FileExistsError: pass for f in manifest['bundle']['files']: self.download_file(f['uuid'], save_as=os.path.join(bundle_folder, f['name'])) return bundle_folder def bundle_manifest(self, bundle_uuid, replica='aws'): return self.client.get_bundle(replica=replica, uuid=bundle_uuid) def download_file(self, file_uuid, save_as, replica='aws'): Progress.report(f"Downloading file {file_uuid} to {save_as}\n") with self.client.get_file.stream(replica=replica, uuid=file_uuid) as fh: with open(save_as, "wb") as f: while True: chunk = fh.raw.read(1024) if chunk: f.write(chunk) else: break def tombstone_bundle(self, bundle_uuid, replica='aws'): self.client.delete_bundle(replica=replica, uuid=bundle_uuid, reason="DCP-wide integration test")
from hca import HCAConfig from hca.dss import DSSClient hca_config = HCAConfig() hca_config["DSSClient"].swagger_url = f"https://dss.dev.data.humancellatlas.org/v1/swagger.json" dss = DSSClient(config=hca_config) print(dss.delete_bundle(reason='test', uuid='98f6c379-cb78-4a61-9310-f8cc0341c0ea', version='2019-08-02T202456.025543Z', replica='aws'))