Coverage for rest_api/data_entry/sample_job.py: 26%
34 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-10 03:22 +0000
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-10 03:22 +0000
1from rest_api.data_entry.sequence_job import clean_unused_sequences
2from rest_api.models import Alignment
3from rest_api.models import Sample
4from rest_api.models import Sample2Property
5from rest_api.models import Sequence
6from sonar_backend.settings import DEBUG
7from sonar_backend.settings import LOGGER
10def delete_sequences(sequence_list: list):
11 """
12 Delete sequences by name and cascade-delete all related samples,
13 alignments, properties, annotations, etc.
14 """
15 data = {}
16 sequences_qs = Sequence.objects.filter(name__in=sequence_list)
18 if not sequences_qs.exists():
19 LOGGER.warning(f"No sequences found for deletion: {sequence_list}")
20 return {"deleted_sequences_count": 0}
22 deleted_info = (
23 sequences_qs.delete()
24 ) # cascade deletion, returns (num_deleted, dict_of_models)
25 LOGGER.info(f"Deleted sequence: {deleted_info}")
27 # Filter sequences without associated samples
28 clean_unused_sequences()
30 data["deleted_sequences_count"] = deleted_info[1].get("rest_api.Sequence", 0)
31 return data
34def delete_samples(sample_list: list):
35 """
36 delte samples and all related sequences, alignments, properties
37 """
38 data = {}
39 samples_qs = Sample.objects.filter(name__in=sample_list)
41 if not samples_qs.exists():
42 LOGGER.warning(f"No samples found for deletion: {sample_list}")
43 return {"deleted_samples_count": 0}
45 sample_ids = list(samples_qs.values_list("id", flat=True))
46 sequence_ids = list(samples_qs.values_list("sequences__id", flat=True))
47 LOGGER.info(f"Deleting samples with IDs: {sample_ids}")
48 if DEBUG:
49 LOGGER.info("\nAssociated sequence IDs", sequence_ids)
51 deleted_info = samples_qs.delete() # returns (num_deleted, dict_of_models)
52 LOGGER.info(f"Deleted samples: {deleted_info}")
54 # Filter sequences without associated samples
55 clean_unused_sequences()
57 data["deleted_samples_count"] = deleted_info[1].get("rest_api.Sample", 0)
58 return data