Skip to content

Commit f03891d

Browse files
feat: use classmethod to properly create alternative instantiation
Co-authored-by: antidodo <albin2993@gmail.com>
1 parent b7a5bd7 commit f03891d

2 files changed

Lines changed: 14 additions & 16 deletions

File tree

src/api/api.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,14 +66,14 @@ def run_call(self, body: CreateNextflowRun):
6666
nf_run.start(self.database)
6767
return {'status': f"Nextflow run started (id={nf_run.run_id})."}
6868

69-
def conclude_call(self, body: ConcludeNextflowRun) -> JSONResponse:
70-
nf_run = NextflowRunEntity(run_id=body.run_id, database=self.database)
69+
def conclude_call(self, body: ConcludeNextflowRun):
70+
nf_run = NextflowRunEntity.from_database(run_id=body.run_id, database=self.database)
7171
nf_run.conclude(body.run_status, body.storage_location)
7272
return {'status': f"Nextflow run with id={body.run_id} concluded."}
7373

7474
def interrupt_call(self, analysis_id: str):
7575
for nf_db in self.database.get_nf_runs_by_analysis_id(analysis_id):
76-
nf_run = NextflowRunEntity(run_id=nf_db.run_id, database=self.database)
76+
nf_run = NextflowRunEntity.from_database(run_id=nf_db.run_id, database=self.database)
7777
nf_run.stop()
7878
return {'status': f"Nextflow runs for analysis_id={analysis_id} interrupted."}
7979

src/resources/nextflow_run/entity.py

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import uuid
22
import time
3+
from typing import Optional
34
from pydantic import BaseModel
45

56
from src.resources.database.entity import Database
@@ -11,22 +12,19 @@ def __init__(self,
1112
analysis_id: str,
1213
pipeline_name: str,
1314
run_args: list[str],
14-
run_id: Optional[str],
15-
database: Optional[Database]) -> None:
16-
if database is not None:
17-
self.run_id = f"nf-run-{uuid.uuid4()}"
18-
self.analysis_id = analysis_id
19-
self.pipeline_name = pipeline_name
20-
self.run_args = run_args
21-
else:
22-
self.run_id = run_id
23-
nf_run = database.get_nf_run_by_run_id(run_id)
24-
self.analysis_id = nf_run.analysis_id
25-
self.pipeline_name = nf_run.pipeline_name
26-
self.run_args = nf_run.run_args
15+
run_id: Optional[str] = None) -> None:
16+
self.run_id = f"nf-run-{uuid.uuid4()}" if run_id is None else run_id
17+
self.analysis_id = analysis_id
18+
self.pipeline_name = pipeline_name
19+
self.run_args = run_args
2720
self.time_created: float = time.time()
2821
self.time_updated: float = time.time()
2922

23+
@classmethod
24+
def from_database(cls, run_id: str, database: Database) -> 'NextflowRunEntity':
25+
nf_run = database.get_nf_run_by_run_id(run_id)
26+
return cls(nf_run.analysis_id, nf_run.pipeline_name, nf_run.run_args, run_id=run_id)
27+
3028
def start(self, database: Database) -> None:
3129
database.create_nf_run(self.run_id, self.analysis_id)
3230
# TODO: Retrieve data from StorageClient

0 commit comments

Comments
 (0)