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)
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, )
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)
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, )
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
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
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()
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, })
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'])
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()
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)
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
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)
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)