diff --git a/src/InSillyCloWeb/assemblies/models.py b/src/InSillyCloWeb/assemblies/models.py index f2bdb71f0b9714841563c34489e6cf60fc5c6569..c598ce9ad838fde40f7c8e8e09b639a5e59d4252 100644 --- a/src/InSillyCloWeb/assemblies/models.py +++ b/src/InSillyCloWeb/assemblies/models.py @@ -11,6 +11,7 @@ import zipfile from pathlib import Path import shutil +from django.contrib import messages from django.contrib.auth import models as auth_models from django.contrib.sessions.models import Session from django.db import models @@ -18,9 +19,12 @@ from django.db.models.functions import Upper from django.urls import reverse from django.utils.translation import gettext_lazy as _ from django.conf import settings + +from . import utils from .insillyclo_impl import InSillyCloDjangoMessageObserver +import insillyclo.additional_exception import insillyclo.data_source import insillyclo.main import insillyclo.models @@ -399,22 +403,29 @@ class SimulatorJob(models.Model): primers_file = pathlib.Path(str(self.primers_file.file)) else: primers_file = None - return insillyclo.simulator.compute_all( - observer=InSillyCloDjangoMessageObserver( - request=request, - debug=False, - fail_on_error=False, - ), - input_template_filled=self.job_dir / 'design_file.xlsx', - settings=None, - input_parts_files=self.db_ip_files, - gb_plasmids=self.genbank_dir.glob('**/*.gb'), - output_dir=self.results_dir, - data_source=insillyclo.data_source.DataSourceHardCodedImplementation(), - primers_file=primers_file, - primer_id_pairs=list(self.pcr_pairs) if primers_file else None, - enzyme_names=self.enzyme_names, - ) + for r in self.results_dir.glob('*'): + r.unlink() + try: + output = insillyclo.simulator.compute_all( + observer=InSillyCloDjangoMessageObserver( + request=request, + debug=False, + fail_on_error=True, + ), + input_template_filled=self.job_dir / 'design_file.xlsx', + settings=None, + input_parts_files=self.db_ip_files, + gb_plasmids=self.genbank_dir.glob('**/*.gb'), + output_dir=self.results_dir, + data_source=insillyclo.data_source.DataSourceHardCodedImplementation(), + primers_file=primers_file, + primer_id_pairs=list(self.pcr_pairs) if primers_file else None, + enzyme_names=self.enzyme_names, + ) + except insillyclo.additional_exception.InSillyCloFailureException as e: + output = None + messages.error(request, utils.clear_sensitive_info(str(e), self)) + return output @property def db_ip_files(self): diff --git a/src/InSillyCloWeb/assemblies/utils.py b/src/InSillyCloWeb/assemblies/utils.py index b2c1d2a023ff4270977beb7f736ba961d9507e82..51ef0fc49e179434c612b43d3b3721061fd59c64 100644 --- a/src/InSillyCloWeb/assemblies/utils.py +++ b/src/InSillyCloWeb/assemblies/utils.py @@ -3,6 +3,7 @@ import glob from zipfile import ZipFile from Bio import SeqIO from Bio.Seq import Seq +from django.conf import settings def get_genbank_file(name): @@ -71,3 +72,10 @@ def get_files(path, extension, recursive=False): for root, dirs, files in os.walk(path): for file_path in glob.iglob(root + "/*." + extension): yield file_path + + +def clear_sensitive_info(s: str, job=None) -> str: + if job: + s = s.replace(str(job.job_dir) + '/', '') + s = s.replace(settings.MEDIA_ROOT + '/', '') + return s