Skip to content

Commit ebae199

Browse files
committed
move load data func
1 parent 55e4d5f commit ebae199

File tree

2 files changed

+37
-37
lines changed

2 files changed

+37
-37
lines changed

seqr/views/apis/data_manager_api.py

Lines changed: 3 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import base64
22
from collections import defaultdict
3-
from datetime import datetime
43
import json
54
import os
65
import requests
@@ -17,22 +16,19 @@
1716
from seqr.utils.search.add_data_utils import trigger_data_loading, get_missing_family_samples, get_loaded_individual_ids, trigger_delete_families_search
1817
from seqr.utils.search.elasticsearch.es_utils import get_elasticsearch_status, delete_es_index
1918
from seqr.utils.search.utils import clickhouse_only, es_only, InvalidSearchException
20-
from seqr.utils.file_utils import file_iter
2119
from seqr.utils.logging_utils import SeqrLogger
2220
from seqr.utils.middleware import ErrorsWarningsException
2321
from seqr.utils.vcf_utils import validate_vcf_and_get_samples, get_vcf_list
2422

2523
from seqr.views.utils.airtable_utils import AirtableSession, LOADABLE_PDO_STATUSES, AVAILABLE_PDO_STATUS
26-
from seqr.views.utils.dataset_utils import load_rna_seq, load_phenotype_prioritization_data_file, RNA_DATA_TYPE_CONFIGS, \
27-
post_process_rna_data, convert_django_meta_to_http_headers
28-
from seqr.views.utils.file_utils import get_temp_file_path, load_uploaded_file
24+
from seqr.views.utils.dataset_utils import load_rna_seq, load_phenotype_prioritization_data_file, convert_django_meta_to_http_headers
25+
from seqr.views.utils.file_utils import load_uploaded_file
2926
from seqr.views.utils.json_utils import create_json_response
30-
from seqr.views.utils.json_to_orm_utils import update_model_from_json
3127
from seqr.views.utils.pedigree_info_utils import get_validated_related_individuals, JsonConstants
3228
from seqr.views.utils.permissions_utils import data_manager_required, pm_or_data_manager_required, get_internal_projects
3329
from seqr.views.utils.terra_api_utils import anvil_enabled
3430

35-
from seqr.models import Sample, RnaSample, Individual, Project, PhenotypePrioritization
31+
from seqr.models import Sample, Individual, Project, PhenotypePrioritization
3632

3733
from settings import KIBANA_SERVER, KIBANA_ELASTICSEARCH_PASSWORD, KIBANA_ELASTICSEARCH_USER, \
3834
LOADING_DATASETS_DIR, LUIGI_UI_SERVICE_HOSTNAME, LUIGI_UI_SERVICE_PORT
@@ -92,33 +88,6 @@ def _get_sample_file_path(file_dir, sample_guid):
9288
return os.path.join(file_dir, f'{sample_guid}.json.gz')
9389

9490

95-
@pm_or_data_manager_required
96-
def load_rna_seq_sample_data(request, sample_guid):
97-
sample = RnaSample.objects.get(guid=sample_guid)
98-
logger.info(f'Loading outlier data for {sample.individual.individual_id}', request.user)
99-
100-
request_json = json.loads(request.body)
101-
file_name = request_json['fileName']
102-
data_type = request_json['dataType']
103-
config = RNA_DATA_TYPE_CONFIGS[data_type]
104-
105-
file_path = get_temp_file_path(f'{file_name}/{sample_guid}.json.gz')
106-
try:
107-
data_rows = [json.loads(line) for line in file_iter(file_path, user=request.user)]
108-
data_rows, error = post_process_rna_data(sample_guid, data_rows, **config.get('post_process_kwargs', {}))
109-
except FileNotFoundError:
110-
logger.error(f'No saved temp data found for {sample_guid} with file prefix {file_name}', request.user)
111-
error = 'Data for this sample was not properly parsed. Please re-upload the data'
112-
if error:
113-
return create_json_response({'error': error}, status=400)
114-
115-
model_cls = config['model_class']
116-
model_cls.bulk_create(request.user, [model_cls(sample=sample, **data) for data in data_rows], batch_size=1000)
117-
update_model_from_json(sample, {'is_active': True}, user=request.user)
118-
119-
return create_json_response({'success': True})
120-
121-
12291
def _notify_phenotype_prioritization_loaded(project, tool, num_samples):
12392
send_project_notification(
12493
project,

seqr/views/apis/individual_api.py

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,16 @@
99
from django.db.models import prefetch_related_objects
1010

1111
from reference_data.models import HumanPhenotypeOntology
12-
from seqr.models import Individual, Family, CAN_VIEW
12+
from seqr.models import Individual, Family, RnaSample, CAN_VIEW
1313
from seqr.utils.file_utils import file_iter
1414
from seqr.utils.gene_utils import get_genes, get_gene_ids_for_gene_symbols
15+
from seqr.utils.logging_utils import SeqrLogger
16+
1517
from seqr.views.utils.anvil_metadata_utils import PARTICIPANT_TABLE, PHENOTYPE_TABLE, EXPERIMENT_TABLE, \
1618
EXPERIMENT_LOOKUP_TABLE, FINDINGS_TABLE, FINDING_METADATA_COLUMNS, TRANSCRIPT_FIELDS, GENE_COLUMN, parse_population
17-
from seqr.views.utils.file_utils import save_uploaded_file, load_uploaded_file, parse_file
18-
from seqr.views.utils.json_to_orm_utils import update_individual_from_json
19+
from seqr.views.utils.dataset_utils import post_process_rna_data, RNA_DATA_TYPE_CONFIGS
20+
from seqr.views.utils.file_utils import save_uploaded_file, load_uploaded_file, parse_file, get_temp_file_path
21+
from seqr.views.utils.json_to_orm_utils import update_individual_from_json, update_model_from_json
1922
from seqr.views.utils.json_utils import create_json_response, _to_snake_case, _to_camel_case
2023
from seqr.views.utils.orm_to_json_utils import _get_json_for_model, _get_json_for_individuals, add_individual_hpo_details, \
2124
_get_json_for_families, get_json_for_rna_seq_outliers, get_project_collaborators_by_username, INDIVIDUAL_DISPLAY_NAME_EXPR, \
@@ -29,6 +32,7 @@
2932
from seqr.views.utils.individual_utils import delete_individuals, add_or_update_individuals_and_families
3033
from seqr.views.utils.variant_utils import bulk_create_tagged_variants
3134

35+
logger = SeqrLogger(__name__)
3236

3337
@login_and_policies_required
3438
def update_individual_handler(request, individual_guid):
@@ -944,3 +948,30 @@ def get_hpo_terms(request, hpo_parent_id):
944948
for hpo in HumanPhenotypeOntology.objects.filter(parent_id=hpo_parent_id)
945949
}
946950
})
951+
952+
953+
@pm_or_data_manager_required
954+
def load_rna_seq_sample_data(request, sample_guid):
955+
sample = RnaSample.objects.get(guid=sample_guid)
956+
logger.info(f'Loading outlier data for {sample.individual.individual_id}', request.user)
957+
958+
request_json = json.loads(request.body)
959+
file_name = request_json['fileName']
960+
data_type = request_json['dataType']
961+
config = RNA_DATA_TYPE_CONFIGS[data_type]
962+
963+
file_path = get_temp_file_path(f'{file_name}/{sample_guid}.json.gz')
964+
try:
965+
data_rows = [json.loads(line) for line in file_iter(file_path, user=request.user)]
966+
data_rows, error = post_process_rna_data(sample_guid, data_rows, **config.get('post_process_kwargs', {}))
967+
except FileNotFoundError:
968+
logger.error(f'No saved temp data found for {sample_guid} with file prefix {file_name}', request.user)
969+
error = 'Data for this sample was not properly parsed. Please re-upload the data'
970+
if error:
971+
return create_json_response({'error': error}, status=400)
972+
973+
model_cls = config['model_class']
974+
model_cls.bulk_create(request.user, [model_cls(sample=sample, **data) for data in data_rows], batch_size=1000)
975+
update_model_from_json(sample, {'is_active': True}, user=request.user)
976+
977+
return create_json_response({'success': True})

0 commit comments

Comments
 (0)