def generate_entity_redaction(project_uuid: str, ingest_url: str) -> 'EntityRedaction': ingest_client = IngestApi(ingest_url) project = ingest_client.get_project_by_uuid(project_uuid) submission_for_project = list( ingest_client.get_related_entities("submissionEnvelopes", project, "submissionEnvelopes"))[0] submissions_for_project = EntityMap.from_list([submission_for_project]) files = list( ingest_client.get_related_entities("files", submission_for_project, "files")) supplementary_files = EntityMap.from_list([ f for f in files if "supplementary_file" in f["content"]["describedBy"] ]) sequence_files = EntityMap.from_list([ f for f in files if "sequence_file" in f["content"]["describedBy"] ]) assert len(supplementary_files) + len(sequence_files) == len(files) biomaterials = EntityMap.from_list( ingest_client.get_related_entities("biomaterials", submission_for_project, "biomaterials")) processes = EntityMap.from_list( ingest_client.get_related_entities("processes", submission_for_project, "processes")) protocols = EntityMap.from_list( ingest_client.get_related_entities("protocols", submission_for_project, "protocols")) projects = EntityMap.from_list( ingest_client.get_related_entities("projects", submission_for_project, "projects")) primary_bundle_manifests = EntityMap.from_list( ingest_client.get_related_entities("bundleManifests", submission_for_project, "bundleManifests"), ["bundleUuid"]) analysis_processes = EntityMap() analysis_protocols = EntityMap() analysis_files = EntityMap() analysis_submissions = EntityMap() analysis_bundle_manifests = EntityMap() for file in sequence_files: input_to_processes = ingest_client.get_related_entities( "inputToProcesses", file, "processes") for analysis_process in input_to_processes: analysis_processes.add([analysis_process]) analysis_protocols.add( ingest_client.get_related_entities("protocols", analysis_process, "protocols")) analysis_files.add( ingest_client.get_related_entities("derivedFiles", analysis_process, "files")) analysis_submission = list( ingest_client.get_related_entities( "submissionEnvelopes", analysis_process, "submissionEnvelopes"))[0] analysis_submissions.add([analysis_submission]) analysis_bundle_manifests.add( ingest_client.get_related_entities("bundleManifests", analysis_submission, "bundleManifests"), ["bundleUuid"]) assert len(projects.uuids()) == 1 return EntityRedaction(sequence_files, supplementary_files, biomaterials, processes, protocols, projects, primary_bundle_manifests, submissions_for_project, analysis_processes, analysis_protocols, analysis_files, analysis_bundle_manifests, analysis_submissions)
description='Generates a bundle fqid list given a project uuid') parser.add_argument('env', choices=['dev', 'integration', 'staging', 'prod'], help='environment') parser.add_argument('project_uuid', metavar='project-uuid', type=str, help='Project uuid') parser.add_argument('--filename', type=str, help='Output filename') args = parser.parse_args() project_uuid = args.project_uuid filename = args.filename or f'{args.project_uuid}.json' env = args.env infix = f'.{env}' if env != 'prod' else '' url = f'https://api.ingest{infix}.data.humancellatlas.org' ingest_api = IngestApi(url) project = ingest_api.get_project_by_uuid(project_uuid) bundle_manifests = ingest_api.get_related_entities("bundleManifests", project, "bundleManifests") bundle_fqids = [BundleManifest(obj).fqid for obj in bundle_manifests] with open(filename, 'w') as outfile: json.dump(bundle_fqids, outfile, indent=4) print(f'Total bundle count: {len(bundle_fqids)}') print(f'Saved into file: {filename}')