Esempio n. 1
0
    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)
Esempio n. 2
0
        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}')