Ejemplo n.º 1
0
def export_case_review_individuals(request, project_guid):
    """Export case review Individuals table.

    Args:
        project_guid (string): GUID of the project for which to export case review individual data
    """

    format = request.GET.get('file_format', 'tsv')

    project = Project.objects.filter(guid=project_guid)
    if not project:
        raise ValueError("Invalid project GUID: %s" % project_guid)
    project = project[0]

    individuals = Individual.objects.filter(
        family__project=project,
        case_review_status__regex="[\w].*").order_by('family__family_id',
                                                     'affected')

    filename_prefix = "%s_case_review_individuals" % _slugify(project.name)

    return export_individuals(filename_prefix,
                              individuals,
                              format,
                              include_case_review_columns=True,
                              include_phenotips_columns=True)
Ejemplo n.º 2
0
def export_project_individuals_handler(request, project_guid):
    """Export project Individuals table.

    Args:
        project_guid (string): GUID of the project for which to export individual data
    """

    format = request.GET.get('file_format', 'tsv')
    include_phenotypes = bool(request.GET.get('include_phenotypes'))

    project = get_project_and_check_permissions(project_guid, request.user)

    # get all individuals in this project
    individuals = Individual.objects.filter(family__project=project).order_by(
        'family__family_id', 'affected')

    filename_prefix = "%s_individuals" % _slugify(project.name)

    return export_individuals(
        filename_prefix,
        individuals,
        format,
        include_hpo_terms_present=include_phenotypes,
        include_hpo_terms_absent=include_phenotypes,
    )
Ejemplo n.º 3
0
def export_case_review_families(request, project_guid):
    """Export case review Families table.

    Args:
        project_guid (string): GUID of the project for which to export case review family data
    """
    format = request.GET.get('file_format', 'tsv')

    project = Project.objects.filter(guid=project_guid)
    if not project:
        raise ValueError("Invalid project GUID: %s" % project_guid)
    project = project[0]

    # get all families in this project that have at least 1 individual in case review.
    families = set()
    for i in Individual.objects.filter(
            family__project=project,
            case_review_status__regex="[\w].*").order_by('family__family_id'):
        families.add(i.family)

    filename_prefix = "%s_case_review_families" % _slugify(project.name)

    return export_families(filename_prefix,
                           families,
                           format,
                           include_case_review_columns=True)
Ejemplo n.º 4
0
def export_case_review_individuals_handler(request, project_guid):
    """Export case review Individuals table.

    Args:
        project_guid (string): GUID of the project for which to export case review individual data
    """

    format = request.GET.get('file_format', 'tsv')

    project = get_project_and_check_permissions(project_guid, request.user)

    individuals = Individual.objects.filter(
        family__project=project,
        case_review_status__regex="[\w].*").order_by('family__family_id',
                                                     'affected')

    filename_prefix = "%s_case_review_individuals" % _slugify(project.name)

    return export_individuals(
        filename_prefix,
        individuals,
        format,
        include_case_review_status=True,
        include_case_review_discussion=True,
        include_hpo_terms_present=True,
        include_hpo_terms_absent=True,
    )
Ejemplo n.º 5
0
def _deprecated_create_original_project(project):
    """DEPRECATED - create project in original xbrowse schema to keep things in sync.

    Args:
        project (object): new-style seqr project model
    """

    # keep new seqr.Project model in sync with existing xbrowse_server.base.models
    base_project, created = BaseProject.objects.get_or_create(
        project_id=_slugify(project.name))

    if created:
        logger.info("Created base project %s" % base_project)

    base_project.project_name = project.name
    base_project.description = project.description
    base_project.seqr_project = project
    base_project.save()

    for reference_population_id in [
            "gnomad-genomes2", "gnomad-exomes2", "topmed"
    ]:
        try:
            population = ReferencePopulation.objects.get(
                slug=reference_population_id)
            logger.info("Adding population " + reference_population_id +
                        " to project " + str(project))
            base_project.private_reference_populations.add(population)
        except Exception as e:
            logger.error("Unable to add reference population %s: %s" %
                         (reference_population_id, e))

    return base_project
Ejemplo n.º 6
0
def _deprecated_create_original_project(project):
    """DEPRECATED - create project in original xbrowse schema to keep things in sync.

    Args:
        project (object): new-style seqr project model
    """

    # keep new seqr.Project model in sync with existing xbrowse_server.base.models
    base_project, created = BaseProject.objects.get_or_create(
        project_id=_slugify(project.name)
    )

    if created:
        logger.info("Created base project %s" % base_project)

    base_project.project_name = project.name
    base_project.genome_version = project.genome_version
    base_project.description = project.description or ""
    base_project.seqr_project = project
    base_project.save()

    for reference_population_id in ["gnomad-genomes2", "gnomad-exomes2", "topmed"]:
        try:
            population = ReferencePopulation.objects.get(slug=reference_population_id)
            logger.info("Adding population " + reference_population_id + " to project " + str(project))
            base_project.private_reference_populations.add(population)
        except Exception as e:
            logger.error("Unable to add reference population %s: %s" % (reference_population_id, e))
            
    return base_project
Ejemplo n.º 7
0
    def __init__(self, cluster_id):
        """
        Args:
             cluster_id (string): unique id for the dataproc cluster.
        """

        # from gcloud error message: clusterName must be a match of regex '(?:[a-z](?:[-a-z0-9]{0,49}[a-z0-9])?).'
        self.cluster_id = "c" + _slugify(cluster_id).replace("_", "-").lower()
Ejemplo n.º 8
0
def create_project(request):
    """Create a new project.

    HTTP POST
        Request body - should contain json params:
            name: Project name
            description: Project description

        Response body - will be json with the following structure, representing the created project:
            {
                'projectsByGuid':  { <projectGuid1> : { ... <project key-value pairs> ... } }
            }

    """

    request_json = json.loads(request.body)
    if 'form' not in request_json:
        return create_json_response(
            {},
            status=400,
            reason="Invalid request: 'form' not in request_json")

    form_data = request_json['form']

    name = form_data.get('name')
    if not name:
        return create_json_response({},
                                    status=400,
                                    reason="'Name' cannot be blank")

    description = form_data.get('description')

    project = Project.objects.create(created_by=request.user,
                                     name=name,
                                     description=description)

    # keep new seqr.Project model in sync with existing xbrowse_server.base.models - TODO remove this code after transition to new schema is finished
    try:
        base_project, created = BaseProject.objects.get_or_create(
            project_id=_slugify(name))
        if created:
            print("Created project %s" % base_project)
        base_project.project_name = name
        base_project.description = description
        base_project.save()

        project.deprecated_project_id = base_project.project_id
        project.save()
    except:
        raise

    projects_by_guid = {
        project.guid: _get_json_for_project(project, request.user)
    }

    return create_json_response({
        'projectsByGuid': projects_by_guid,
    })
Ejemplo n.º 9
0
def _get_json_for_locus_lists(project):
    result = []

    for locus_list in get_objects_for_group(project.can_view_group, CAN_VIEW, LocusList):
        result.append({
            'locusListGuid': locus_list.guid,
            'createdDate': locus_list.created_date,
            'name': locus_list.name,
            'deprecatedGeneListId': _slugify(locus_list.name),
            'description': locus_list.description,
            'numEntries': LocusListEntry.objects.filter(parent=locus_list).count(),
        })

    return sorted(result, key=lambda locus_list: locus_list['createdDate'])
Ejemplo n.º 10
0
def _enable_phenotips_for_project(project):
    """Creates 2 users in PhenoTips for this project (one that will be view-only and one that'll
    have edit permissions for patients in the project).
    """
    project.is_phenotips_enabled = True
    project.phenotips_user_id = _slugify(project.name)

    # view-only user
    username, password = _get_phenotips_uname_and_pwd_for_project(project.phenotips_user_id, read_only=True)
    create_phenotips_user(username, password)

    # user with edit permissions
    username, password = _get_phenotips_uname_and_pwd_for_project(project.phenotips_user_id, read_only=False)
    create_phenotips_user(username, password)
    project.save()
Ejemplo n.º 11
0
def export_project_families_handler(request, project_guid):
    """Export project Families table.

    Args:
        project_guid (string): GUID of the project for which to export family data
    """
    format = request.GET.get('file_format', 'tsv')

    project = _get_project_and_check_permissions(project_guid, request.user)

    # get all families in this project
    families = Family.objects.filter(project=project).order_by('family_id')

    filename_prefix = "%s_families" % _slugify(project.name)

    return export_families(filename_prefix, families, format, include_case_review_columns=False)
Ejemplo n.º 12
0
def _deprecated_create_original_project(project):
    """DEPRECATED - create project in original xbrowse schema to keep things in sync.

    Args:
        project (object): new-style seqr project model
    """

    # keep new seqr.Project model in sync with existing xbrowse_server.base.models
    base_project, created = BaseProject.objects.get_or_create(
        project_id=_slugify(project.name))

    if created:
        logger.info("Created base project %s" % base_project)

    base_project.project_name = project.name
    base_project.description = project.description
    base_project.save()

    return base_project
Ejemplo n.º 13
0
def export_case_review_families(request, project_guid):
    """Export case review Families table.

    Args:
        project_guid (string): GUID of the project for which to export case review family data
    """
    format = request.GET.get('file_format', 'tsv')

    project = _get_project_and_check_permissions(project_guid, request.user)

    # get all families in this project that have at least 1 individual in case review.
    families = set()
    for i in Individual.objects.filter(
            family__project=project,
            case_review_status__regex="[\w].*").order_by('family__family_id'):
        families.add(i.family)

    filename_prefix = "%s_case_review_families" % _slugify(project.name)

    return export_families(filename_prefix,
                           families,
                           format,
                           include_case_review_columns=True)
Ejemplo n.º 14
0
    def export_to_elasticsearch(self, vds_path, dataset_id, dataset_type,
                                genome_version):
        """Export the dataset to elasticsearch. Assumes the dataproc cluster already exists.

        Args:
            vds_path (string):
            dataset_id (string):
            dataset_type (string):
            genome_version (string): "37" or "38"
        """

        #elasticsearch_host_ip = self._get_k8s_resource_name("pods", labels={'name': 'elasticsearch'}, json_path=".items[0].status.hostIP")
        #solr_node_name = self._get_k8s_resource_name("pods", labels={'name': 'solr'}, json_path=".items[0].spec.nodeName")

        ELASTICSEARCH_NODE_IP = subprocess.check_output(
            "kubectl get pods -l name=elasticsearch -o jsonpath='{.items[0].status.hostIP}'",
            shell=True)

        index_name = _slugify(dataset_id).lower()
        script_path = os.path.join(
            BASE_DIR, "seqr/pipelines/hail/export_variants_to_ES.py")
        script_args = [
            "--host",
            ELASTICSEARCH_NODE_IP,
            "--port",
            ELASTICSEARCH_PORT,
            "--genome-version",
            genome_version,
            "--index",
            index_name,
            "--index-type",
            dataset_type,
            vds_path,
        ]

        self.hail_runner.run_hail(script_path, *script_args)