cg 83.16.4__py3-none-any.whl → 83.17.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
cg/__init__.py CHANGED
@@ -1,2 +1,2 @@
1
1
  __title__ = "cg"
2
- __version__ = "83.16.4"
2
+ __version__ = "83.17.1"
@@ -6,7 +6,7 @@ import rich_click as click
6
6
 
7
7
  from cg.cli.post_process.utils import (
8
8
  UnprocessedRunInfo,
9
- get_post_processing_service_from_run_name,
9
+ get_post_processing_service_from_run_full_name,
10
10
  get_unprocessed_runs_info,
11
11
  )
12
12
  from cg.cli.utils import CLICK_CONTEXT_SETTINGS
@@ -25,18 +25,18 @@ def post_process_group():
25
25
 
26
26
  @post_process_group.command(name="run")
27
27
  @DRY_RUN
28
- @click.argument("run-name")
28
+ @click.argument("run-full-name")
29
29
  @click.pass_obj
30
- def post_process_run(context: CGConfig, run_name: str, dry_run: bool) -> None:
30
+ def post_process_run(context: CGConfig, run_full_name: str, dry_run: bool) -> None:
31
31
  """Post-process a sequencing run from the PacBio instrument.
32
32
 
33
- run-name is the full name of the sequencing unit of run. For example:
33
+ run-full-name is the full name of the sequencing unit of run. For example:
34
34
  PacBio: 'r84202_20240522_133539/1_A01'
35
35
  """
36
- post_processing_service: PostProcessingService = get_post_processing_service_from_run_name(
37
- context=context, run_name=run_name
36
+ post_processing_service: PostProcessingService = get_post_processing_service_from_run_full_name(
37
+ context=context, run_full_name=run_full_name
38
38
  )
39
- post_processing_service.post_process(run_name=run_name, dry_run=dry_run)
39
+ post_processing_service.post_process(run_full_name=run_full_name, dry_run=dry_run)
40
40
 
41
41
 
42
42
  @post_process_group.command(name="all")
@@ -58,7 +58,7 @@ def post_process_all_runs(context: CGConfig, instrument: str, dry_run: bool) ->
58
58
  )
59
59
  for run in unprocessed_runs:
60
60
  try:
61
- run.post_processing_service.post_process(run_name=run.name, dry_run=dry_run)
61
+ run.post_processing_service.post_process(run_full_name=run.name, dry_run=dry_run)
62
62
  except Exception as error:
63
63
  LOG.error(f"Could not post-process {run.instrument} run {run.name}: {error}")
64
64
  exit_success = False
@@ -25,17 +25,17 @@ class UnprocessedRunInfo(BaseModel):
25
25
  model_config = ConfigDict(arbitrary_types_allowed=True)
26
26
 
27
27
 
28
- def get_post_processing_service_from_run_name(
29
- context: CGConfig, run_name: str
28
+ def get_post_processing_service_from_run_full_name(
29
+ context: CGConfig, run_full_name: str
30
30
  ) -> PacBioPostProcessingService:
31
- """Get the correct post-processing service based on the run name."""
31
+ """Get the correct post-processing service based on the run full name."""
32
32
  try:
33
33
  device: str = get_item_by_pattern_in_source(
34
- source=run_name, pattern_map=PATTERN_TO_DEVICE_MAP
34
+ source=run_full_name, pattern_map=PATTERN_TO_DEVICE_MAP
35
35
  )
36
36
  except CgError as error:
37
37
  raise NameError(
38
- f"Run name {run_name} does not match with any known sequencing run name pattern"
38
+ f"Run name {run_full_name} does not match with any known sequencing run name pattern"
39
39
  ) from error
40
40
  return getattr(context.post_processing_services, device)
41
41
 
@@ -48,7 +48,7 @@ def get_unprocessed_runs_info(context: CGConfig, instrument: str) -> list[Unproc
48
48
  run_names_service: RunNamesService = getattr(context.run_names_services, instrument_name)
49
49
  runs.extend(
50
50
  _get_unprocessed_runs_from_run_names(
51
- run_names=run_names_service.get_run_names(),
51
+ run_full_names=run_names_service.get_run_full_names(),
52
52
  post_processing_service=getattr(context.post_processing_services, instrument_name),
53
53
  instrument_name=instrument_name,
54
54
  )
@@ -63,18 +63,18 @@ def _instruments_to_check(instrument: str) -> list[str]:
63
63
 
64
64
 
65
65
  def _get_unprocessed_runs_from_run_names(
66
- run_names: list[str], post_processing_service: PostProcessingService, instrument_name
66
+ run_full_names: list[str], post_processing_service: PostProcessingService, instrument_name
67
67
  ) -> list[UnprocessedRunInfo]:
68
68
  LOG.debug(f"Adding {instrument_name} run names to the post-processing list")
69
69
  runs: list[UnprocessedRunInfo] = []
70
- for name in run_names:
71
- if post_processing_service.is_run_processed(name):
72
- LOG.debug(f"Run {name} has already been post-processed. Skipping")
70
+ for full_name in run_full_names:
71
+ if post_processing_service.is_run_processed(full_name):
72
+ LOG.debug(f"Run {full_name} has already been post-processed. Skipping")
73
73
  continue
74
- if post_processing_service.can_post_processing_start(name):
74
+ if post_processing_service.can_post_processing_start(full_name):
75
75
  runs.append(
76
76
  UnprocessedRunInfo(
77
- name=name,
77
+ name=full_name,
78
78
  post_processing_service=post_processing_service,
79
79
  instrument=instrument_name,
80
80
  )
@@ -282,32 +282,67 @@
282
282
  id: SAMPLEID
283
283
  path: PATHTOCASE/methylation/pileup/SAMPLEID/SAMPLEID_modkit_pileup_1.bed.gz
284
284
  step: methylation_pileup
285
- tag: hap1
285
+ tag: modkit_hap1
286
286
  - format: bed
287
287
  id: SAMPLEID
288
288
  path: PATHTOCASE/methylation/pileup/SAMPLEID/SAMPLEID_modkit_pileup_1.bed.gz.tbi
289
289
  step: methylation_pileup
290
- tag: hap1_index
290
+ tag: modkit_hap1_index
291
291
  - format: bed
292
292
  id: SAMPLEID
293
293
  path: PATHTOCASE/methylation/pileup/SAMPLEID/SAMPLEID_modkit_pileup_2.bed.gz
294
294
  step: methylation_pileup
295
- tag: hap2
295
+ tag: modkit_hap2
296
296
  - format: bed
297
297
  id: SAMPLEID
298
298
  path: PATHTOCASE/methylation/pileup/SAMPLEID/SAMPLEID_modkit_pileup_2.bed.gz.tbi
299
299
  step: methylation_pileup
300
- tag: hap2_index
300
+ tag: modkit_hap2_index
301
301
  - format: bed
302
302
  id: SAMPLEID
303
303
  path: PATHTOCASE/methylation/pileup/SAMPLEID/SAMPLEID_modkit_pileup_ungrouped.bed.gz
304
304
  step: methylation_pileup
305
- tag: ungrouped
305
+ tag: modkit_ungrouped
306
306
  - format: bed
307
307
  id: SAMPLEID
308
308
  path: PATHTOCASE/methylation/pileup/SAMPLEID/SAMPLEID_modkit_pileup_ungrouped.bed.gz.tbi
309
309
  step: methylation_pileup
310
- tag: ungrouped_index
310
+ tag: modkit_ungrouped_index
311
+ - format: bed
312
+ id: SAMPLEID
313
+ path: PATHTOCASE/methylation/pileup/SAMPLEID/SAMPLEID_pbcpgtools.hap1.bed.gz
314
+ step: methylation_pileup
315
+ tag: methbat_hap1
316
+ - format: bed
317
+ id: SAMPLEID
318
+ path: PATHTOCASE/methylation/pileup/SAMPLEID/SAMPLEID_pbcpgtools.hap1.bed.gz.tbi
319
+ step: methylation_pileup
320
+ tag: methbat_hap1_index
321
+ - format: bed
322
+ id: SAMPLEID
323
+ path: PATHTOCASE/methylation/pileup/SAMPLEID/SAMPLEID_pbcpgtools.hap2.bed.gz
324
+ step: methylation_pileup
325
+ tag: methbat_hap2
326
+ - format: bed
327
+ id: SAMPLEID
328
+ path: PATHTOCASE/methylation/pileup/SAMPLEID/SAMPLEID_pbcpgtools.hap2.bed.gz.tbi
329
+ step: methylation_pileup
330
+ tag: methbat_hap2_index
331
+ - format: bed
332
+ id: SAMPLEID
333
+ path: PATHTOCASE/methylation/pileup/SAMPLEID/SAMPLEID_pbcpgtools.combined.bed.gz
334
+ step: methylation_pileup
335
+ tag: methbat_combined
336
+ - format: bed
337
+ id: SAMPLEID
338
+ path: PATHTOCASE/methylation/pileup/SAMPLEID/SAMPLEID_pbcpgtools.combined.bed.gz.tbi
339
+ step: methylation_pileup
340
+ tag: methbat_combined_index
341
+ - format: tsv
342
+ id: SAMPLEID
343
+ path: PATHTOCASE/methylation/profile/SAMPLEID/SAMPLEID_methbat_profile.tsv
344
+ step: methylation_calling
345
+ tag: methbat_profile
311
346
  - format: meta
312
347
  id: SAMPLEID
313
348
  path: PATHTOCASE/qc/mosdepth/SAMPLEID/SAMPLEID.per-base.d4
cg/server/admin.py CHANGED
@@ -911,7 +911,7 @@ class PacbioSmrtCellMetricsView(BaseView):
911
911
 
912
912
  column_list = (
913
913
  "internal_id",
914
- "sequencing_run.run_name",
914
+ "sequencing_run.run_id",
915
915
  "movie_name",
916
916
  "well",
917
917
  "plate",
@@ -935,9 +935,9 @@ class PacbioSmrtCellMetricsView(BaseView):
935
935
  "internal_id": view_pacbio_sample_sequencing_metrics_link,
936
936
  "model": view_smrt_cell_model,
937
937
  }
938
- column_labels = {"sequencing_run.run_name": "Run Name"}
938
+ column_labels = {"sequencing_run.run_id": "Run ID"}
939
939
  column_default_sort = ("completed_at", True)
940
- column_searchable_list = ["device.internal_id", "movie_name", "sequencing_run.run_name"]
940
+ column_searchable_list = ["device.internal_id", "movie_name", "sequencing_run.run_id"]
941
941
  column_sortable_list = [
942
942
  ("internal_id", "device.internal_id"),
943
943
  "started_at",
@@ -967,7 +967,7 @@ class PacbioSmrtCellMetricsView(BaseView):
967
967
  class PacbioSampleRunMetricsView(BaseView):
968
968
  column_filters = [
969
969
  "instrument_run.plate",
970
- "instrument_run.sequencing_run.run_name",
970
+ "instrument_run.sequencing_run.run_id",
971
971
  ]
972
972
  column_formatters = {
973
973
  "smrt_cell": PacbioSmrtCellMetricsView.view_smrt_cell_link,
@@ -975,12 +975,12 @@ class PacbioSampleRunMetricsView(BaseView):
975
975
  }
976
976
  column_labels = {
977
977
  "instrument_run.plate": "Plate",
978
- "instrument_run.sequencing_run.run_name": "Run Name",
978
+ "instrument_run.sequencing_run.run_id": "Run ID",
979
979
  }
980
980
  column_list = [
981
981
  "smrt_cell",
982
982
  "sample",
983
- "instrument_run.sequencing_run.run_name",
983
+ "instrument_run.sequencing_run.run_id",
984
984
  "instrument_run.plate",
985
985
  "hifi_reads",
986
986
  "hifi_yield",
@@ -990,5 +990,5 @@ class PacbioSampleRunMetricsView(BaseView):
990
990
  column_searchable_list = [
991
991
  "sample.internal_id",
992
992
  "instrument_run.device.internal_id",
993
- "instrument_run.sequencing_run.run_name",
993
+ "instrument_run.sequencing_run.run_id",
994
994
  ]
@@ -14,7 +14,7 @@ class RunDataGenerator(ABC):
14
14
  """Abstract class that holds functionality to create a run data object."""
15
15
 
16
16
  @abstractmethod
17
- def get_run_data(self, run_name: str, sequencing_dir: str) -> RunData:
17
+ def get_run_data(self, run_full_name: str, sequencing_dir: str) -> RunData:
18
18
  """Get the run data for a sequencing run."""
19
19
  pass
20
20
 
@@ -87,17 +87,17 @@ class PostProcessingService(ABC):
87
87
  """Abstract class that encapsulates the logic required for post-processing a sequencing run."""
88
88
 
89
89
  @abstractmethod
90
- def post_process(self, run_name: str, dry_run: bool = False):
90
+ def post_process(self, run_full_name: str, dry_run: bool = False):
91
91
  """Store sequencing metrics in StatusDB and relevant files in Housekeeper."""
92
92
  pass
93
93
 
94
94
  @abstractmethod
95
- def is_run_processed(self, run_name: str) -> bool:
95
+ def is_run_processed(self, run_full_name: str) -> bool:
96
96
  """Check if a run has been post-processed."""
97
97
  pass
98
98
 
99
99
  @abstractmethod
100
- def can_post_processing_start(self, run_name: str) -> bool:
100
+ def can_post_processing_start(self, run_full_name: str) -> bool:
101
101
  """Check if a run can be post processed."""
102
102
  pass
103
103
 
@@ -41,8 +41,8 @@ class PacBioStoreService(PostProcessingStoreService):
41
41
  try:
42
42
  return self.store.create_pacbio_sequencing_run(sequencing_run_dto)
43
43
  except PacbioSequencingRunAlreadyExistsError:
44
- LOG.debug(f"Sequencing run {sequencing_run_dto.run_name} already exists")
45
- return self.store.get_pacbio_sequencing_run_by_run_name(sequencing_run_dto.run_name)
44
+ LOG.debug(f"Sequencing run {sequencing_run_dto.run_id} already exists")
45
+ return self.store.get_pacbio_sequencing_run_by_run_id(sequencing_run_dto.run_id)
46
46
 
47
47
  def _create_pacbio_smrt_cell_metrics(
48
48
  self,
@@ -108,5 +108,5 @@ class PacBioStoreService(PostProcessingStoreService):
108
108
  f"Dry run, no entries will be added to database for SMRT cell {run_data.full_path}."
109
109
  )
110
110
  return
111
- LOG.debug(f"Data stored in statusDB for run {run_data.sequencing_run_name}")
111
+ LOG.debug(f"Data stored in statusDB for run {run_data.run_id}")
112
112
  self.store.commit_to_store()
@@ -12,7 +12,7 @@ class PacBioSMRTCellMetricsDTO(BaseModel):
12
12
  type: DeviceType
13
13
  well: str
14
14
  plate: int
15
- run_name: str
15
+ run_id: str
16
16
  movie_name: str
17
17
  started_at: datetime
18
18
  completed_at: datetime
@@ -64,7 +64,7 @@ class PacBioSampleSequencingMetricsDTO(BaseModel):
64
64
 
65
65
  class PacBioSequencingRunDTO(BaseModel):
66
66
  instrument_name: RevioNames
67
- run_name: str
67
+ run_id: str
68
68
 
69
69
 
70
70
  class PacBioDTOs(PostProcessingDTOs):
@@ -22,7 +22,7 @@ def get_smrt_cell_metrics_dto(
22
22
  type=DeviceType.PACBIO,
23
23
  well=metrics.dataset_metrics.well,
24
24
  plate=metrics.dataset_metrics.plate,
25
- run_name=run_data.sequencing_run_name,
25
+ run_id=run_data.run_id,
26
26
  started_at=metrics.dataset_metrics.run_started_at,
27
27
  completed_at=metrics.dataset_metrics.run_completed_at,
28
28
  hifi_reads=metrics.read.hifi_reads,
@@ -81,5 +81,5 @@ def get_sequencing_run_dto(
81
81
  ) -> PacBioSequencingRunDTO:
82
82
  return PacBioSequencingRunDTO(
83
83
  instrument_name=metrics.dataset_metrics.instrument_name, # type: ignore - pydantic will convert to correct type
84
- run_name=run_data.sequencing_run_name,
84
+ run_id=run_data.run_id,
85
85
  )
@@ -60,7 +60,7 @@ class PacBioHousekeeperService(PostProcessingHKService):
60
60
  file_path=bundle_info.file_path,
61
61
  tags=bundle_info.tags,
62
62
  )
63
- LOG.debug(f"Files stored in Housekeeper for run {run_data.sequencing_run_name}")
63
+ LOG.debug(f"Files stored in Housekeeper for run {run_data.run_id}")
64
64
 
65
65
  @staticmethod
66
66
  def _get_bundle_type_for_file(file_path: Path) -> str:
@@ -64,7 +64,7 @@ class PacBioMetricsParser(PostProcessingMetricsParser):
64
64
  metrics_files=metrics_files, file_name=PacBioDirsAndFiles.BARCODES_REPORT
65
65
  )
66
66
  sample_metrics: list[SampleMetrics] = get_parsed_sample_metrics(metrics_files)
67
- LOG.debug(f"All metrics parsed for run {run_data.sequencing_run_name}")
67
+ LOG.debug(f"All metrics parsed for run {run_data.run_id}")
68
68
  return PacBioMetrics(
69
69
  read=read_metrics,
70
70
  control=control_metrics,
@@ -51,38 +51,43 @@ class PacBioPostProcessingService(PostProcessingService):
51
51
  ),
52
52
  to_raise=PostProcessingError,
53
53
  )
54
- def post_process(self, run_name: str, dry_run: bool = False) -> None:
55
- LOG.info(f"Starting Pacbio post-processing for run: {run_name}")
54
+ def post_process(self, run_full_name: str, dry_run: bool = False) -> None:
55
+ LOG.info(f"Starting Pacbio post-processing for run: {run_full_name}")
56
56
  run_data: PacBioRunData = self.run_data_generator.get_run_data(
57
- run_name=run_name, sequencing_dir=self.sequencing_dir
57
+ run_full_name=run_full_name, sequencing_dir=self.sequencing_dir
58
58
  )
59
59
  self.run_validator.ensure_post_processing_can_start(run_data)
60
60
  self.store_service.store_post_processing_data(run_data=run_data, dry_run=dry_run)
61
61
  self.hk_service.store_files_in_housekeeper(run_data=run_data, dry_run=dry_run)
62
62
  self._touch_post_processing_complete(run_data=run_data, dry_run=dry_run)
63
63
 
64
- def is_run_processed(self, run_name: str) -> bool:
64
+ def is_run_processed(self, run_full_name: str) -> bool:
65
65
  """Check if a run has been post-processed."""
66
- processing_complete_file = Path(self.sequencing_dir, run_name, POST_PROCESSING_COMPLETED)
66
+ processing_complete_file = Path(
67
+ self.sequencing_dir, run_full_name, POST_PROCESSING_COMPLETED
68
+ )
67
69
  return processing_complete_file.exists()
68
70
 
69
- def can_post_processing_start(self, run_name: str) -> bool:
70
- LOG.debug(f"Checking if Pacbio post-processing can start for run: {run_name}")
71
- parent_directory: Path = Path(self.sequencing_dir, run_name).parent
71
+ def can_post_processing_start(self, run_full_name: str) -> bool:
72
+ """Makes sure that all SMRT cells in the sequencing run are ready to be post-processed."""
73
+ LOG.debug(f"Checking if Pacbio post-processing can start for run: {run_full_name}")
74
+ parent_directory: Path = Path(self.sequencing_dir, run_full_name).parent
72
75
  all_smrt_cells_are_ready: bool = all(
73
76
  self.is_smrt_cell_ready_for_post_processing(f"{parent_directory.name}/{smrt_cell.name}")
74
77
  for smrt_cell in parent_directory.iterdir()
75
78
  )
76
79
  return all_smrt_cells_are_ready
77
80
 
78
- def is_smrt_cell_ready_for_post_processing(self, run_name: str) -> bool:
79
- LOG.debug(f"Checking if Pacbio SMRT-cell {run_name} is ready for postprocessing")
81
+ def is_smrt_cell_ready_for_post_processing(self, smrt_cell_full_name: str) -> bool:
82
+ LOG.debug(f"Checking if Pacbio SMRT-cell {smrt_cell_full_name} is ready for postprocessing")
80
83
  try:
81
84
  run_data: PacBioRunData = self.run_data_generator.get_run_data(
82
- run_name=run_name, sequencing_dir=self.sequencing_dir
85
+ run_full_name=smrt_cell_full_name, sequencing_dir=self.sequencing_dir
83
86
  )
84
87
  self.run_validator.validate_run_files(run_data)
85
88
  except PostProcessingRunFileManagerError as error:
86
- LOG.debug(f"Run {run_name} is not ready for post-processing. {error.args[0]}.")
89
+ LOG.debug(
90
+ f"Run {smrt_cell_full_name} is not ready for post-processing. {error.args[0]}."
91
+ )
87
92
  return False
88
93
  return True
@@ -17,24 +17,26 @@ class PacBioRunDataGenerator(RunDataGenerator):
17
17
  @handle_post_processing_errors(
18
18
  to_except=(ValueError,), to_raise=PostProcessingRunDataGeneratorError
19
19
  )
20
- def get_run_data(self, run_name: str, sequencing_dir: str) -> PacBioRunData:
20
+ def get_run_data(self, run_full_name: str, sequencing_dir: str) -> PacBioRunData:
21
21
  """
22
22
  Get the run data for a PacBio SMRT cell run.
23
- run_name should include the PacBio run including plate well, e.g. 'r84202_20240522_133539/1_A01'
23
+ run_full_name should include the PacBio run including plate well, e.g. 'r84202_20240522_133539/1_A01'
24
24
  """
25
- self._validate_run_name(run_name)
26
- full_path = Path(sequencing_dir, run_name)
25
+ self._validate_run_name(run_full_name)
26
+ full_path = Path(sequencing_dir, run_full_name)
27
27
 
28
28
  return PacBioRunData(
29
29
  full_path=full_path,
30
- sequencing_run_name=self._get_sequencing_run_name(run_name),
31
- well_name=self._get_well(run_name),
32
- plate=self._get_plate(run_name),
30
+ run_id=self._get_run_id_from_run_full_name(run_full_name),
31
+ well_name=self._get_well(run_full_name),
32
+ plate=self._get_plate(run_full_name), # type: ignore Pydantic transforming
33
33
  )
34
34
 
35
35
  @staticmethod
36
- def _get_sequencing_run_name(run_name: str) -> str:
37
- return run_name.split("/")[0]
36
+ def _get_run_id_from_run_full_name(
37
+ run_full_name: str,
38
+ ) -> str:
39
+ return run_full_name.split("/")[0]
38
40
 
39
41
  @staticmethod
40
42
  def _get_plate_well(run_name: str) -> str:
@@ -7,6 +7,6 @@ class PacBioRunData(RunData):
7
7
  """Holds information on a single SMRTcell of a PacBio run."""
8
8
 
9
9
  full_path: Path
10
- sequencing_run_name: str
10
+ run_id: str
11
11
  well_name: str
12
12
  plate: int
@@ -14,17 +14,16 @@ class PacbioSequencingRunsService:
14
14
  self.store = store
15
15
 
16
16
  def get_sequencing_runs_by_name(self, run_name: str) -> PacbioSmrtCellMetricsResponse:
17
- runs: list[PacbioSmrtCellMetricsDTO] = []
18
- db_runs: list[PacbioSMRTCellMetrics] = self.store.get_pacbio_smrt_cell_metrics_by_run_name(
19
- run_name
17
+ metrics: list[PacbioSmrtCellMetricsDTO] = []
18
+ db_smrt_cell_metrics: list[PacbioSMRTCellMetrics] = (
19
+ self.store.get_pacbio_smrt_cell_metrics_by_run_id(run_name)
20
20
  )
21
- for db_run in db_runs:
22
- run_dict = db_run.to_dict()
23
- run_dict["internal_id"] = db_run.device.internal_id
24
- run_dict["run_name"] = db_run.sequencing_run.run_name
25
- run = PacbioSmrtCellMetricsDTO.model_validate(run_dict)
26
- runs.append(run)
27
- return PacbioSmrtCellMetricsResponse(runs=runs)
21
+ for metric in db_smrt_cell_metrics:
22
+ metric_dict = metric.to_dict()
23
+ metric_dict["internal_id"] = metric.device.internal_id
24
+ metric_dict["run_name"] = metric.run_id
25
+ metrics.append(PacbioSmrtCellMetricsDTO.model_validate(metric_dict))
26
+ return PacbioSmrtCellMetricsResponse(runs=metrics)
28
27
 
29
28
  def get_sequencing_runs(self, page: int = 0, page_size: int = 0) -> PacbioSequencingRunResponse:
30
29
  db_runs, total_count = self.store.get_pacbio_sequencing_runs(page=page, page_size=page_size)
@@ -32,7 +31,7 @@ class PacbioSequencingRunsService:
32
31
  for db_run in db_runs:
33
32
  run = PacbioSequencingRunDTO(
34
33
  id=db_run.id,
35
- run_name=db_run.run_name,
34
+ run_name=db_run.run_id,
36
35
  comment=db_run.comment,
37
36
  processed=db_run.processed,
38
37
  )
@@ -5,9 +5,9 @@ from cg.services.run_devices.run_names.service import RunNamesService
5
5
 
6
6
  class PacbioRunNamesService(RunNamesService):
7
7
 
8
- def get_run_names(self) -> list[str]:
8
+ def get_run_full_names(self) -> list[str]:
9
9
  """
10
- Get all the run names from the PacBio sequencing directory in the form
10
+ Get all the SMRTcell full names from the PacBio sequencing directory in the form
11
11
  <sequencing_run>/<SMRTcell>, for example:
12
12
  r84202_20240913_121403/1_C01
13
13
  """
@@ -7,6 +7,6 @@ class RunNamesService(ABC):
7
7
  self.run_directory = run_directory
8
8
 
9
9
  @abstractmethod
10
- def get_run_names(self) -> list[str]:
10
+ def get_run_full_names(self) -> list[str]:
11
11
  """Get all the run names from a run directory."""
12
12
  pass
cg/store/crud/create.py CHANGED
@@ -513,17 +513,17 @@ class CreateMixin(ReadHandler):
513
513
  """
514
514
  if (
515
515
  self._get_query(table=PacbioSequencingRun)
516
- .filter(PacbioSequencingRun.run_name == pacbio_sequencing_run_dto.run_name)
516
+ .filter(PacbioSequencingRun.run_id == pacbio_sequencing_run_dto.run_id)
517
517
  .first()
518
518
  ):
519
519
  raise PacbioSequencingRunAlreadyExistsError(
520
- message=f"{pacbio_sequencing_run_dto.run_name} already exists."
520
+ message=f"{pacbio_sequencing_run_dto.run_id} already exists."
521
521
  )
522
522
  else:
523
- LOG.debug(f"Creating Pacbio Sequencing Run for {pacbio_sequencing_run_dto.run_name}")
523
+ LOG.debug(f"Creating Pacbio Sequencing Run for {pacbio_sequencing_run_dto.run_id}")
524
524
  sequencing_run = PacbioSequencingRun(
525
525
  instrument_name=pacbio_sequencing_run_dto.instrument_name,
526
- run_name=pacbio_sequencing_run_dto.run_name,
526
+ run_id=pacbio_sequencing_run_dto.run_id,
527
527
  )
528
528
  self.add_item_to_store(sequencing_run)
529
529
  return sequencing_run
cg/store/crud/read.py CHANGED
@@ -1808,21 +1808,20 @@ class ReadHandler(BaseHandler):
1808
1808
  sequencing_metrics = sequencing_metrics.filter(RunDevice.internal_id.in_(smrt_cell_ids))
1809
1809
  return sequencing_metrics.all()
1810
1810
 
1811
- def get_pacbio_smrt_cell_metrics_by_run_name(
1812
- self, run_name: str
1813
- ) -> list[PacbioSMRTCellMetrics]:
1811
+ def get_pacbio_smrt_cell_metrics_by_run_id(self, run_id: str) -> list[PacbioSMRTCellMetrics]:
1814
1812
  """
1815
- Fetches data from PacbioSequencingRunDTO filtered on run name.
1813
+ Fetches data from PacbioSMRTCellMetrics filtered on run ID.
1816
1814
  Raises:
1817
- EntryNotFoundError if no sequencing runs are found for the run name
1815
+ EntryNotFoundError if no SMRT cell metrics are found for the run ID
1818
1816
  """
1819
- runs: Query = self._get_query(table=PacbioSMRTCellMetrics).join(
1820
- PacbioSMRTCellMetrics.sequencing_run
1817
+ metrics: Query = (
1818
+ self._get_query(table=PacbioSMRTCellMetrics)
1819
+ .join(PacbioSMRTCellMetrics.sequencing_run)
1820
+ .filter(PacbioSequencingRun.run_id == run_id)
1821
1821
  )
1822
- runs = runs.filter(PacbioSequencingRun.run_name == run_name)
1823
- if runs.count() == 0:
1824
- raise EntryNotFoundError(f"Could not find any sequencing runs for {run_name}")
1825
- return runs.all()
1822
+ if metrics.count() == 0:
1823
+ raise EntryNotFoundError(f"Could not find any SMRT Cell metrics for run {run_id}")
1824
+ return metrics.all()
1826
1825
 
1827
1826
  def get_pacbio_sequencing_runs(
1828
1827
  self, page: int = 0, page_size: int = 0
@@ -1856,7 +1855,7 @@ class ReadHandler(BaseHandler):
1856
1855
 
1857
1856
  def get_pacbio_sequencing_run_by_id(self, id: int):
1858
1857
  """
1859
- Get Pacbio Sequencing run by id.
1858
+ Get Pacbio Sequencing run by database id.
1860
1859
  Raises:
1861
1860
  PacbioSequencingRunNotFoundError: If no Pacbio sequencing run is found with the given id.
1862
1861
  """
@@ -1871,15 +1870,15 @@ class ReadHandler(BaseHandler):
1871
1870
  f"Pacbio Sequencing run with id {id} was not found in the database."
1872
1871
  )
1873
1872
 
1874
- def get_pacbio_sequencing_run_by_run_name(self, run_name: str) -> PacbioSequencingRun:
1873
+ def get_pacbio_sequencing_run_by_run_id(self, run_id: str) -> PacbioSequencingRun:
1875
1874
  """
1876
- Get Pacbio Sequencing run by run name.
1877
1875
  Raises:
1878
- PacbioSequencingRunNotFoundError: If no Pacbio sequencing run is found with the given run name.
1876
+ PacbioSequencingRunNotFoundError: If no Pacbio sequencing run is found with the given
1877
+ run ID.
1879
1878
  """
1880
1879
  try:
1881
- return self._get_query(table=PacbioSequencingRun).filter_by(run_name=run_name).one()
1880
+ return self._get_query(table=PacbioSequencingRun).filter_by(run_id=run_id).one()
1882
1881
  except sqlalchemy.orm.exc.NoResultFound:
1883
1882
  raise PacbioSequencingRunNotFoundError(
1884
- f"Pacbio Sequencing run with run_name {run_name} was not found in the database."
1883
+ f"Pacbio Sequencing run with ID {run_id} was not found in the database."
1885
1884
  )
cg/store/models.py CHANGED
@@ -1113,8 +1113,8 @@ class PacbioSMRTCellMetrics(InstrumentRun):
1113
1113
  __mapper_args__ = {"polymorphic_identity": DeviceType.PACBIO}
1114
1114
 
1115
1115
  @property
1116
- def run_name(self) -> str:
1117
- return self.sequencing_run.run_name
1116
+ def run_id(self) -> str:
1117
+ return self.sequencing_run.run_id
1118
1118
 
1119
1119
  def to_dict(self):
1120
1120
  return to_dict(self)
@@ -1185,7 +1185,7 @@ class PacbioSequencingRun(Base):
1185
1185
  __tablename__ = "pacbio_sequencing_run"
1186
1186
 
1187
1187
  id: Mapped[PrimaryKeyInt]
1188
- run_name: Mapped[Str64] = mapped_column(unique=True)
1188
+ run_id: Mapped[Str64] = mapped_column(unique=True)
1189
1189
  processed: Mapped[bool] = mapped_column(default=False)
1190
1190
  comment: Mapped[Text] = mapped_column(default="")
1191
1191
  instrument_name: Mapped[RevioNames] = mapped_column(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cg
3
- Version: 83.16.4
3
+ Version: 83.17.1
4
4
  Summary: Clinical Genomics command center
5
5
  Requires-Python: >=3.11,<3.13
6
6
  Classifier: Programming Language :: Python
@@ -1,4 +1,4 @@
1
- cg/__init__.py,sha256=fHsf7E2iBNtyrOiJBDtalgvzOQSE9J5bZSELyUzX-Bw,41
1
+ cg/__init__.py,sha256=Zve1eNmtgbcknDgSp0wAaJYTe-LWKuPFhrQEKOFwKkM,41
2
2
  cg/apps/__init__.py,sha256=pYf0vxo4iYQqURzFRYzqpOCdV8Cm9MWx0GHvJOz0EMg,315
3
3
  cg/apps/coverage/__init__.py,sha256=dJtsmNf8tODE2-VEomMIoYA7ugLYZAk_upsfOQCZeF8,27
4
4
  cg/apps/coverage/api.py,sha256=e_ozC3QeNKoEfpjjMaL-XjeBLtz-JySWccrtw0E9mLM,2940
@@ -102,8 +102,8 @@ cg/cli/generate/delivery_report/options.py,sha256=Y1eDU5jBkaSW1XAaNptmQgS88trbiX
102
102
  cg/cli/generate/delivery_report/utils.py,sha256=0suksAiXslNr3eE7H0YiGADeJlCMeA9LRmDOforY0Xw,5423
103
103
  cg/cli/get.py,sha256=sqKX2tDWnCE6zTwcMBCOb796Bc9rvu1AYLkONQ3Sq0w,8852
104
104
  cg/cli/post_process/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
105
- cg/cli/post_process/post_process.py,sha256=f6bCOsNLIHYHJdbKBVcjRO684MS258CptsmAVknoYI0,2367
106
- cg/cli/post_process/utils.py,sha256=XrzBhVDybFa4sBGDz5Dbwah0YrYD1IS_j3WzPjWjUfs,3193
105
+ cg/cli/post_process/post_process.py,sha256=Abq77qlyYe60O4NRLboA5c33rGJp9iWj7t7RBatFrgk,2417
106
+ cg/cli/post_process/utils.py,sha256=0zIwcVrXUKmfJYqFLJP3GSu_OWK2A-apeaY9LrYQz8U,3263
107
107
  cg/cli/sequencing_qc/sequencing_qc.py,sha256=anMscRw9Ulp3t2tQuLNuPE1HDtWTISgh_4yJourvAyA,494
108
108
  cg/cli/set/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
109
109
  cg/cli/set/base.py,sha256=gqdDpKS32rM29sQxPyK6fLf0Of6G1Un7htkAxZHkvKo,10453
@@ -460,13 +460,13 @@ cg/models/workflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
460
460
  cg/models/workflow/mutant.py,sha256=Y5cwG7UninrAWCn6R9rTNhSDAkDprCebCilyCBlPIcY,685
461
461
  cg/models/workflow/validators.py,sha256=BzbmB9QVDjM1C_7F874PR0QD6xhCZvDG01ItITmFy_s,70
462
462
  cg/resources/__init__.py,sha256=mRMKpOEL-NO4JEzQsjTrtDFf8toOtBXK0BhDbPnZGVE,1247
463
- cg/resources/nallo_bundle_filenames.yaml,sha256=pjJaBgtZtsYAqd-sQ1bCq365u9fcsoN0Gn34JjDduJE,16724
463
+ cg/resources/nallo_bundle_filenames.yaml,sha256=04mNM5DFovMTct0OixgspKtaP91_hENoo1lMf-YUSjY,17899
464
464
  cg/resources/raredisease_bundle_filenames.yaml,sha256=IN8QDcYQNxFVWghvSNLJ2-Udsd5ts3uBqD9rnJGj4kg,25278
465
465
  cg/resources/rnafusion_bundle_filenames.yaml,sha256=hoXuTobKbjH7W7dld87rSF7X0r4KxLXuUllX0ISDDXU,3281
466
466
  cg/resources/taxprofiler_bundle_filenames.yaml,sha256=AULMEAYkMzADYUtVtuSmBj7UaAIlLGRDyBMEOO0xWz8,2871
467
467
  cg/resources/tomte_bundle_filenames.yaml,sha256=lFxk9GssmCyKBUn5lbRBtBS9FS9cABaoVzb-e2zrJac,4144
468
468
  cg/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
469
- cg/server/admin.py,sha256=XFr_wxXLyyUB6orQ1mFUHto4NFgJAMBgfEoR2p-RbeQ,30141
469
+ cg/server/admin.py,sha256=cvVOR9eMtSbLn7zIGVYjRz8sQ5WnD0x4Hc34yTZVaMk,30123
470
470
  cg/server/app.py,sha256=WEULzx5JeC0aJHag3Vltzopd8r7tgHPr_1nbytS-AI8,6975
471
471
  cg/server/app_config.py,sha256=8DaNtYtdp6A29FAuTFX-Lk7SLv7Zx-_f57ZU0-T_3ZI,1403
472
472
  cg/server/auto.py,sha256=5DqokNScv483imZTvOYrJo6wV9-P7ZGnJaaHnfnNJLs,57
@@ -819,33 +819,33 @@ cg/services/orders/validation/utils.py,sha256=BcO3FuD2HiDzLU8T-yvIRftccfjTxAfUaW
819
819
  cg/services/pdc_service/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
820
820
  cg/services/pdc_service/pdc_service.py,sha256=cqeVC4d11wQ-8kjXlszHgYPY_JS7sGCLLnPhDlU6MY0,2884
821
821
  cg/services/run_devices/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
822
- cg/services/run_devices/abstract_classes.py,sha256=I2dbhWcB0to5ok572PbiF7K62ID5ag3eoIjMEO6lNos,3679
822
+ cg/services/run_devices/abstract_classes.py,sha256=BN3txu4Le8eRDdZ0P5NGPk8ua467uy_jfGPpjbKxgds,3699
823
823
  cg/services/run_devices/abstract_models.py,sha256=hu8M8uk0ZStgohllutIxJUP5Hhjv7eUiLuejks2t0GM,377
824
824
  cg/services/run_devices/constants.py,sha256=-zI33OxI9XvXlyeSGw8jdqeuD_S1CFQRwWW5w8Pvg00,56
825
825
  cg/services/run_devices/error_handler.py,sha256=BXVXy-8i4hr5jd7H5LEPs_sT7YzCzQMNoFV8m7y9BEc,636
826
826
  cg/services/run_devices/exc.py,sha256=6MH1yusfPNNa2RSbHhe48-WlUG1YJQsxMK2TkjemloI,1021
827
827
  cg/services/run_devices/pacbio/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
828
- cg/services/run_devices/pacbio/data_storage_service/pacbio_store_service.py,sha256=dZWnssL1RgGkruPfKtJxZjghW1AGj8aiL4J4U7RorLE,4742
828
+ cg/services/run_devices/pacbio/data_storage_service/pacbio_store_service.py,sha256=5MXVrY3SxIQiMJIGD1iGap2nQWOyBNaoBBLHHEVIZbI,4723
829
829
  cg/services/run_devices/pacbio/data_transfer_service/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
830
830
  cg/services/run_devices/pacbio/data_transfer_service/data_transfer_service.py,sha256=XqJ6cJc2KfiI0svQFvZe8Hz4EcCDaggbvKkp6HBejag,2410
831
- cg/services/run_devices/pacbio/data_transfer_service/dto.py,sha256=g_7nrCLjQyEstLbR10v6cZV6hZnlCX2RQbPCFL8vAzE,2022
832
- cg/services/run_devices/pacbio/data_transfer_service/utils.py,sha256=xQR-Sty5HwvjBpQbyZvnNnCaJrbFSRvb6pbzABCWiHY,4300
831
+ cg/services/run_devices/pacbio/data_transfer_service/dto.py,sha256=gvHBj51eRRaGuvNj1UmXN4YhvG_22nc4IzTqqua9BAU,2018
832
+ cg/services/run_devices/pacbio/data_transfer_service/utils.py,sha256=6bgCFipgh685iguIJkqSmxGx1KjRk8XZ-Qwi3KY-bDk,4270
833
833
  cg/services/run_devices/pacbio/housekeeper_service/models.py,sha256=F1c7dID12XiR4TcyRq4mhRB5gWZz430z0h7sHKcni00,153
834
- cg/services/run_devices/pacbio/housekeeper_service/pacbio_houskeeper_service.py,sha256=kR3vbxWoJ-axouCofLjgfLgKPgdryaMu7vgo-EU1emY,5354
834
+ cg/services/run_devices/pacbio/housekeeper_service/pacbio_houskeeper_service.py,sha256=6vpuKeft3dUOYocmXv7nRGrQ8ncX16T3Pd2w-2W_1l4,5341
835
835
  cg/services/run_devices/pacbio/metrics_parser/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
836
- cg/services/run_devices/pacbio/metrics_parser/metrics_parser.py,sha256=26aAxw4xmBwtkVrSD4bmjThTTLsB6hmJgZEUXrITRW8,3279
836
+ cg/services/run_devices/pacbio/metrics_parser/metrics_parser.py,sha256=G6XWqlkLs8h2lRcsy9d4CXKJ6u-PeYGYy7K55lzeL2o,3266
837
837
  cg/services/run_devices/pacbio/metrics_parser/models.py,sha256=4BTxMv5d5eg2NSoBoZ8EwVqJyGuLTqHacgiSQ3AFL0E,7331
838
838
  cg/services/run_devices/pacbio/metrics_parser/utils.py,sha256=Y_Jsj-mnsuVF-iKZ7W1sJAuWqw25ayVonj9ktLHCNfA,3467
839
- cg/services/run_devices/pacbio/post_processing_service.py,sha256=LYy3IRR48R2V-0azDSK_11kqxkAcla--7uN3uqkVyX8,3964
840
- cg/services/run_devices/pacbio/run_data_generator/pacbio_run_data_generator.py,sha256=rvNepeIjt2BeZk-CvOpD449jmxceME0npEYAlqIebWg,1902
841
- cg/services/run_devices/pacbio/run_data_generator/run_data.py,sha256=si-F7CCwmIFoLpb6YaJmxI_SWVxOi2ivmjnxQl3P0nk,268
839
+ cg/services/run_devices/pacbio/post_processing_service.py,sha256=Wa8t4rs_mqZdbqgil_ayX_lbhLsxCdH5r4Sg-njT-GI,4209
840
+ cg/services/run_devices/pacbio/run_data_generator/pacbio_run_data_generator.py,sha256=i8UEtEOXAXDr7PQezTz-_40cHqdwddJ8c7fmA1iTQPk,1999
841
+ cg/services/run_devices/pacbio/run_data_generator/run_data.py,sha256=h0TfMtHwyXlRp6SY8OCeTgKbDVcuC3925l0tftbrgZc,255
842
842
  cg/services/run_devices/pacbio/run_file_manager/models.py,sha256=C6kycBPx6YKNq2oFJOIhdrcPloi3QIBOrlbaAgeYzgs,192
843
843
  cg/services/run_devices/pacbio/run_file_manager/run_file_manager.py,sha256=xW8cKrLKh445hQnmtuIrvg6INs2lMSaDirG83fvimI4,5068
844
844
  cg/services/run_devices/pacbio/run_validator/pacbio_run_validator.py,sha256=d8fvmJcByEFPMnwqOe6mQsXXIO87WkXwfK9L_Bx7whg,3037
845
- cg/services/run_devices/pacbio/sequencing_runs_service.py,sha256=nLT8uCSztpgS-G8J1m16BBeJi4x_NMddMw1hS0Ook2w,2139
845
+ cg/services/run_devices/pacbio/sequencing_runs_service.py,sha256=n_noNrPfOAUGizgTpE5n1ezZA0O92XAB9o_FYIzcus8,2145
846
846
  cg/services/run_devices/run_names/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
847
- cg/services/run_devices/run_names/pacbio.py,sha256=DqvwtrVPeUeWu9PljeBrgGi_GT_8_lJRkgZTDU3WwhA,663
848
- cg/services/run_devices/run_names/service.py,sha256=y2ljpN_gGew6grIHnez740IW6cOzyyz0sWS_O9Jut68,288
847
+ cg/services/run_devices/run_names/pacbio.py,sha256=4l-fCejTMMgAnVQ2RqIyQaqMtVbs_SeDEm6JJ4Dg36U,678
848
+ cg/services/run_devices/run_names/service.py,sha256=d6-paeXsENHlU59eo4FcSXBAhoz50oL6bSglscRo2rQ,293
849
849
  cg/services/run_devices/validators.py,sha256=pd3JXd5ITKK70pvrs2wH4ed4fn1_dhu_qvQaSyZDGg4,906
850
850
  cg/services/sample_run_metrics_service/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
851
851
  cg/services/sample_run_metrics_service/dtos.py,sha256=bJ0BL-QkqXIAAIg3F9edIdzAa_X-r3Yt_RfotAD2IHM,438
@@ -874,9 +874,9 @@ cg/store/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
874
874
  cg/store/api/data_classes.py,sha256=vgJehK0zm3SdB4LAQAWvTjoCHfos4N8_Vf0DDshrAnM,289
875
875
  cg/store/base.py,sha256=qmIjuWuq_wryBfGoSZny9nvqZj7Hl8N23hcdQ7Hss5I,6885
876
876
  cg/store/crud/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
877
- cg/store/crud/create.py,sha256=ZEhhpoIXd05GP8DWIR5yFDb4X-Vg2BWrUinW8n89SfI,22509
877
+ cg/store/crud/create.py,sha256=QZiVB4TUsDKops2yqkzL8T82W-MXCBKwtBjnKZSWJ5M,22497
878
878
  cg/store/crud/delete.py,sha256=TlpoVWvUQMaRfy5bk-icFf9SSi_0Ir6XpFcAiM22DB0,1386
879
- cg/store/crud/read.py,sha256=4cxHQVYAHLSwHiNrh6rq207w99cKfLFMKtgd-iupXoM,78857
879
+ cg/store/crud/read.py,sha256=UJ1NLkK3k682v8xk4NFJyPXC2ik-zsYshG6098Yy0aQ,78809
880
880
  cg/store/crud/update.py,sha256=FZvOPebNnkWICu1N4gTdFeiMcuTUPglgCDfaxE6G288,6262
881
881
  cg/store/database.py,sha256=7B0hZpMSKtu5R885TSI4UBj8id1T5JNBY-tn69n6Fk0,1662
882
882
  cg/store/exc.py,sha256=uUCywNSwGus2uZnqmN56LHV84fHfkFYo8jXms1ToCnQ,274
@@ -903,7 +903,7 @@ cg/store/filters/status_panel_filters.py,sha256=qMYhIsrF9G3mjCvL9b9O2l_cmD3SfPWh
903
903
  cg/store/filters/status_pool_filters.py,sha256=XcYqe2z5k_q09xpp4cleDMQ4Q3o2y7UPCkB0QUkl1ck,4308
904
904
  cg/store/filters/status_sample_filters.py,sha256=mRpt_ik7niMjBo9K7pP8cmdfDMdr0B3I6Tt2MWXkLoc,9656
905
905
  cg/store/filters/status_user_filters.py,sha256=sMwKeWqgEtqv8gyhbN_Uf5huPUxbOt5qEqMWVu67Zys,1328
906
- cg/store/models.py,sha256=WuTbEtqRdcUsuQpOsSjhUMNovfDQYbPeff3Qo_wjERs,44321
906
+ cg/store/models.py,sha256=lgBbx8O0rqWTbxTPJkaKWSLs9JjFVAZ63e7_uEq9Vsg,44315
907
907
  cg/store/store.py,sha256=mz1TfKPlanH2uQyhZdwe_8VKg0IdFolmromKLu668IY,630
908
908
  cg/utils/__init__.py,sha256=gGjdV2l_hfWFCTybU6dwDk_FcItM88EIHNPaX6g1qUk,30
909
909
  cg/utils/calculations.py,sha256=zLVJO6nNw6n7AW7fHZI56UnQ23lqJrShB4Hh2ow6-TQ,349
@@ -922,7 +922,7 @@ cg/utils/flask/enum.py,sha256=xwNVtFPkSzoloJctLHu7obRyxcng1GJrhkeYkqwf9tw,1052
922
922
  cg/utils/mapping.py,sha256=oZpZW2kgsbtAP2FZ7RtRPELiEE1zZk_nAGisHGtCOUo,491
923
923
  cg/utils/time.py,sha256=_VOglhrFEZ5cwHK1U1g36SdwzB7UvV-Nvlt4ymuZUho,1501
924
924
  cg/utils/utils.py,sha256=RciI_UhWcnG_pMZrmQZ1ZYb-O1N0DweTYMmhE0SIRgQ,1410
925
- cg-83.16.4.dist-info/METADATA,sha256=o4bGotxkz_SJ-MVCg5JZnXTx65FWbMp6YpGxpvIqEqE,4940
926
- cg-83.16.4.dist-info/WHEEL,sha256=3ny-bZhpXrU6vSQ1UPG34FoxZBp3lVcvK0LkgUz6VLk,88
927
- cg-83.16.4.dist-info/entry_points.txt,sha256=q5f47YQQGltzK_xnIq1mDopRXXEItr85Xe1BCtG-Wts,39
928
- cg-83.16.4.dist-info/RECORD,,
925
+ cg-83.17.1.dist-info/METADATA,sha256=yUBHF44GMYrBmo4-AXyWg0g0q3SaDDpmkN5VKiQOm3k,4940
926
+ cg-83.17.1.dist-info/WHEEL,sha256=3ny-bZhpXrU6vSQ1UPG34FoxZBp3lVcvK0LkgUz6VLk,88
927
+ cg-83.17.1.dist-info/entry_points.txt,sha256=q5f47YQQGltzK_xnIq1mDopRXXEItr85Xe1BCtG-Wts,39
928
+ cg-83.17.1.dist-info/RECORD,,
File without changes