export-all-verif

This commit is contained in:
2026-05-19 10:53:51 +02:00
parent 5477de46fe
commit 308ddaa048
14 changed files with 345 additions and 132 deletions
+15 -1
View File
@@ -258,7 +258,6 @@ class Experiment(models.Model):
def by_identifier(cls, identifier):
return Experiment.objects.filter(identifier__exact=identifier).first()
class Meta:
ordering = ['-created', ]
verbose_name = _("Expérience")
@@ -376,15 +375,21 @@ def delete_periodic_task(sender, instance, **kwargs):
instance.scanning_task.delete()
def get_uuid_from_session(session_id, multiwel_position, well_name):
return f'{session_id}-{multiwel_position}-{well_name}'
class SessionExperiment(models.Model):
author = models.ForeignKey(User, on_delete=models.SET_NULL, verbose_name="Auteur", null=True, blank=True)
session = models.ForeignKey(Session, verbose_name=_("Session"), on_delete=models.CASCADE, null=True, blank=True)
experiment = models.ForeignKey(Experiment, verbose_name=_("Expérience"), on_delete=models.CASCADE, null=True, blank=True, related_name="session_experiments")
@classmethod
def experiment_by_session(cls, session_id, active=True):
return [ ss.experiment for ss in SessionExperiment.objects.filter(session__id=session_id, session__active=active).order_by('experiment__multiwell__order') ]
@classmethod
def uuid_from_session(cls, sid):
experiments = [ss.experiment for ss in SessionExperiment.objects.filter(session__id=sid, session__active=False)]
@@ -397,6 +402,15 @@ class SessionExperiment(models.Model):
uuid_list.append(uuid)
return uuid_list
@classmethod
def get_uuid(cls, session_id, experiment_id, well_name):
ss = SessionExperiment.objects.filter(session__id=session_id, experiment_id=experiment_id).first()
if ss:
return get_uuid_from_session(session_id, ss.experiment.multiwel.position, well_name)
return None
class Meta:
ordering = ['session',]
unique_together = ["session", "experiment"]
+14 -3
View File
@@ -39,6 +39,7 @@ def stats_view(request):
except Exception as e:
return JsonResponse({"error": str(e)}, status=500)
def global_context(request, **ctx):
default_multiwell = models.MultiWell.objects.filter(default=True).first()
conf = ScannerConstants().get()
@@ -60,11 +61,12 @@ def global_context(request, **ctx):
def admin_view(request):
return render(request, "scanner/iframe.html", context=global_context(request, link='/admin/'))
@login_required
@login_required
def admin_session_view(request):
return render(request, "scanner/iframe.html", context=global_context(request, link='/admin/scanner/session/'))
@login_required
def admin_experiment_view(request):
return render(request, "scanner/iframe.html", context=global_context(request, link='/admin/scanner/experiment/'))
@@ -73,15 +75,18 @@ def admin_experiment_view(request):
def admin_experimentconfig_view(request):
return render(request, "scanner/iframe.html", context=global_context(request, link='/admin/planarian/experimentconfig/'))
@login_required
def admin_periodictask_view(request):
return render(request, "scanner/iframe.html", context=global_context(request, link='/admin/django_celery_beat/periodictask/'))
@login_required
@user_passes_test(is_staff_or_admin)
def reductstore_view(request):
return render(request, "scanner/redirection.html", context=global_context(request, link=f'http://{settings.LOCAL_IP_SERVER}:8383/'))
@login_required
@user_passes_test(is_staff_or_admin)
def adminer_view(request):
@@ -92,21 +97,25 @@ def adminer_view(request):
def portainer_view(request):
return render(request, "scanner/redirection.html", context=global_context(request, link=f'http://{settings.LOCAL_IP_SERVER}:9000/'))
@login_required
@user_passes_test(is_staff_or_admin)
def supervisor_view(request):
return render(request, "scanner/redirection.html", context=global_context(request, link=f'http://{settings.LOCAL_IP_SERVER}:9001/'))
@login_required
@user_passes_test(is_staff_or_admin)
def supervisor_worker(request):
return render(request, "scanner/redirection.html", context=global_context(request, link=f'http://{settings.LOCAL_IP_SERVER}:9001/logtail/test_tube:services'))
@login_required
@user_passes_test(is_staff_or_admin)
def supervisor_scheduler(request):
return render(request, "scanner/redirection.html", context=global_context(request, link=f'http://{settings.LOCAL_IP_SERVER}:9001/logtail/test_tube:planification'))
def documentation(request, template=None):
ctx = dict(
choice_title=_("Documentation")
@@ -225,6 +234,7 @@ def export_medias(request):
)
return render(request, "scanner/export_medias.html", context=global_context(request, **ctx))
@require_POST
@csrf_exempt
def download_api(request):
@@ -286,6 +296,7 @@ def replay_view(request):
)
return render(request, "scanner/replay.html", context=global_context(request, **ctx))
@require_POST
@csrf_exempt
def export_api(request):
@@ -295,10 +306,10 @@ def export_api(request):
try:
if action == 'export_images':
export_all_images(session_id)
return JsonResponse({"success": True, "msg": str(_("Images téléchargées"))})
return JsonResponse({"success": True, "msg": str(_("Images en cours de téléchargement"))})
elif action == 'export_videos':
export_all_videos(session_id)
return JsonResponse({"success": True, "msg": str(_("Vidéos téléchargées"))})
return JsonResponse({"success": True, "msg": str(_("Vidéos en cours de téléchargement"))})
except:
return JsonResponse({"state": False, "success": False, "msg": str(_("Erreur d'exportation")), })