diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 05295b980023c6e7849729905d2185d69abf339b..dc0d35b4dad2ea77f95944cd2832ed35a7566e76 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,3 +1,12 @@ +workflow: + rules: + - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' + when: never + - when: always + + + + stages: - delete-release - build diff --git a/backend/analysis/api.py b/backend/analysis/api.py index a69b2e46ed02ce6a936ebd15c660923f8f3faf1f..aa965b5c54019e6f0b1a36d633cdf2217ee9bc65 100644 --- a/backend/analysis/api.py +++ b/backend/analysis/api.py @@ -28,6 +28,15 @@ def csrf(request): return JsonResponse({"token": token}) +@router.get("init-session") +def init_session(request): + if not request.session.session_key: + request.session.create() + request.session.set_expiry(60000) + + return JsonResponse({"session": "ok"}) + + @router.post("add", response=AnalysisOutSchema) def add( request, @@ -42,14 +51,17 @@ def add( if request.session.session_key: session_key = request.session.session_key else: + print("should not create a token !!!!!") request.session.create() request.session.set_expiry(60000) session_key = request.session.session_key + print(session_key) session = Session.objects.get(session_key=session_key) aw = AnalysisWorkflow.objects.get(pk=1) input_files = [ genome_path, + ] params = {} analysis = aw.invoke(session, input_files, params, f"{genomefile.name}") @@ -57,6 +69,7 @@ def add( return analysis + @router.get("/", response=list[AnalysisOutSchema]) def list(request): session_key = request.session.session_key diff --git a/backend/analysis/models.py b/backend/analysis/models.py index cb9e57b97d98f27b5eab0a690c91efb264340fc5..13410884d57dc6941dbffd543b853ba5b1905411 100644 --- a/backend/analysis/models.py +++ b/backend/analysis/models.py @@ -65,21 +65,27 @@ class AnalysisWorkflow(Workflow): galaxy_inv = self.galaxy_workflow.invoke( datamap, history=history.galaxy_history, params=params ) - analysis = Analysis( - name=history_name, - galaxy_id=galaxy_inv.id, - galaxy_state=galaxy_inv.state, - analysis_workflow=self, - workflow=self, - history=history, - analysis_history=history, - params=params, - datamap=datamap, - create_time=load_galaxy_invocation_time_to_datetime(galaxy_inv), - ) - analysis.save() - analysis.create_output_files() - return analysis + + try: + analysis = Analysis( + name=history_name, + galaxy_id=galaxy_inv.id, + galaxy_state=galaxy_inv.state, + analysis_workflow=self, + workflow=self, + history=history, + analysis_history=history, + params=params, + datamap=datamap, + create_time=load_galaxy_invocation_time_to_datetime(galaxy_inv), + ) + except ZeroDivisionError as e: + print(e) + finally: + analysis.save() + analysis.create_output_files(max_retry=20) + return analysis + def prepare_invocation( self, diff --git a/frontend/components/Main.vue b/frontend/components/Main.vue index 3f5c835b72719a0f88ef7b6b6b8c23db88d4e064..0b27e01aeb83a3afcc3c06042679c0401d20754c 100644 --- a/frontend/components/Main.vue +++ b/frontend/components/Main.vue @@ -6,12 +6,16 @@ export interface Props { const props = withDefaults(defineProps<Props>(), { fluid: true }); -useCsrfToken() +const { csrfToken } = await useCsrfToken() +// init session +if (csrfToken.value) { + const { data, pending, error } = useFetch("/api/analysis/init-session", { + headers: [["X-CSRFToken", csrfToken.value]] + }) +} const scrollThreshold = ref(200) const density = ref<'compact' | 'prominent'>("prominent") -// Hanle CSRF token - function onScroll() { if (window.scrollY > scrollThreshold.value) { density.value = "compact"