export/import metrics
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
# tasks.py
|
||||
from celery import shared_task
|
||||
from celery.utils.log import get_task_logger
|
||||
|
||||
from django.conf import settings
|
||||
from asgiref.sync import async_to_sync
|
||||
from modules.planarian_metrics import ReductStoreClient
|
||||
from scanner.models import SessionExperiment
|
||||
from .models import ExperimentConfig
|
||||
|
||||
|
||||
logger = get_task_logger(__name__)
|
||||
|
||||
def _get_reduct_client() -> ReductStoreClient:
|
||||
"""Instancie le client ReductStore depuis les settings Django."""
|
||||
return ReductStoreClient(url=settings.REDUCTSTORE_URL, token=settings.REDUCTSTORE_TOKEN)
|
||||
|
||||
|
||||
@shared_task
|
||||
def export_experiment_metrics(experiment):
|
||||
|
||||
@async_to_sync
|
||||
async def _do_export(well, planarian, record_type):
|
||||
client = _get_reduct_client()
|
||||
|
||||
await client.connect()
|
||||
try:
|
||||
f, n = await client.export_csv(
|
||||
experiment = experiment.identifier,
|
||||
well = well,
|
||||
planarian = planarian,
|
||||
record_type = record_type,
|
||||
output_dir = settings.CSV_EXPORT_DIR,
|
||||
)
|
||||
logger.warning(f"Export CSV {settings.CSV_EXPORT_DIR}/{f} done, {n} lignes")
|
||||
except Exception as e:
|
||||
logger.error(f"Erreur export CSV: {e}")
|
||||
|
||||
experiment_configs = ExperimentConfig.objects.filter(experiment_key_id=experiment.id).order_by('well').all()
|
||||
for conf in experiment_configs:
|
||||
well = conf.well
|
||||
count = conf.planarian_count
|
||||
|
||||
for record_type in ["frame", "summary"]:
|
||||
for planarian in range(count):
|
||||
_do_export(well, planarian, record_type)
|
||||
|
||||
@shared_task
|
||||
def export_session_metrics(session):
|
||||
experiments = SessionExperiment.experiment_by_session(session.id)
|
||||
for experiment in experiments:
|
||||
export_experiment_metrics(experiment)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user