From 928376f238c36a2b97f0836d2d8410fbaf9c34f6 Mon Sep 17 00:00:00 2001 From: Remi PLANEL <rplanel@pasteur.fr> Date: Mon, 4 Dec 2023 14:02:24 +0100 Subject: [PATCH] create user session before any user interaction --- backend/analysis/api.py | 13 +++++++++++++ backend/analysis/models.py | 36 +++++++++++++++++++++--------------- frontend/components/Main.vue | 10 +++++++--- 3 files changed, 41 insertions(+), 18 deletions(-) diff --git a/backend/analysis/api.py b/backend/analysis/api.py index a69b2e4..aa965b5 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 cb9e57b..1341088 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 3f5c835..0b27e01 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" -- GitLab