Files
PM-pinou 29484ef033 fix: defer background processing until all upload batches complete (race condition fix)
Add finalize_upload endpoint that starts _background_process only after
all file batches have been saved to disk. Fixes race where glob(*.csv)
captured only first batch's files.

- upload_csv: no longer starts thread, sets status='pending'
- finalize_upload: validates dir, starts processing thread
- upload.html: calls finalize after batch upload loop completes
2026-07-22 22:34:54 +08:00

31 lines
1.7 KiB
Python

from django.urls import path
from . import views
app_name = 'analysis'
urlpatterns = [
path('', views.dashboard, name='dashboard'),
path('upload/', views.upload_page, name='upload'),
path('upload/csv/', views.upload_csv, name='upload_csv'),
path('upload/csv/batch/<int:display_id>/', views.upload_csv_batch, name='upload_csv_batch'),
path('analyze/manual/', views.manual_page, name='manual'),
path('analyze/run/', views.manual_run_analysis, name='run_analysis'),
path('analyze/auto/', views.auto_page, name='auto'),
path('analyze/llm/', views.run_llm_analysis_view, name='run_llm_analysis'),
path('runs/', views.run_list, name='run_list'),
path('runs/<int:display_id>/', views.run_detail, name='run_detail'),
path('runs/<int:display_id>/status/', views.run_status_api, name='run_status'),
path('clusters/<int:display_id>/', views.cluster_overview, name='cluster_overview'),
path('clusters/<int:display_id>/<int:cluster_label>/', views.cluster_detail, name='cluster_detail'),
path('entities/<int:entity_id>/', views.entity_profile, name='entity_profile'),
path('config/', views.config_view, name='config'),
path('api/llm/test/', views.llm_test, name='llm_test'),
path('runs/<int:display_id>/retry/', views.retry_run, name='retry_run'),
path('runs/<int:display_id>/finalize/', views.finalize_upload, name='finalize_upload'),
path('runs/<int:display_id>/delete/', views.delete_upload, name='delete_upload'),
path('logs/', views.log_viewer, name='log_viewer'),
path('globe/', views.globe_view, name='globe'),
path('tools/run/', views.tool_lab_run, name='tool_lab_run'),
path('tools/plan/', views.tool_plan, name='tool_plan'),
path('tools/filter/', views.apply_filter, name='apply_filter'),
]