endoreg-db 0.8.2.4__py3-none-any.whl → 0.8.2.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of endoreg-db might be problematic. Click here for more details.

endoreg_db/urls/media.py CHANGED
@@ -24,10 +24,8 @@ from endoreg_db.views import (
24
24
  from endoreg_db.views.pdf.reimport import PdfReimportView
25
25
  from endoreg_db.views.video.reimport import VideoReimportView
26
26
  from endoreg_db.views.video.correction import (
27
- VideoReprocessView,
28
27
  VideoMetadataView,
29
28
  VideoProcessingHistoryView,
30
- VideoAnalyzeView,
31
29
  VideoApplyMaskView,
32
30
  VideoRemoveFramesView,
33
31
  VideoCorrectionView,
@@ -85,7 +83,6 @@ urlpatterns = [
85
83
  # POST /api/media/videos/<int:pk>/analyze/
86
84
  # Analyzes video for sensitive frames using MiniCPM-o 2.6 or OCR+LLM
87
85
  # Body: { detection_method: 'minicpm'|'ocr_llm'|'hybrid', sample_interval: 30 }
88
- path("media/videos/<int:pk>/analyze/", VideoAnalyzeView.as_view(), name="video-analyze"),
89
86
 
90
87
  # Video Masking API
91
88
  # POST /api/media/videos/<int:pk>/apply-mask/
@@ -98,12 +95,7 @@ urlpatterns = [
98
95
  # Removes specified frames from video
99
96
  # Body: { frame_list: [10,20,30] OR frame_ranges: '10-20,30' OR detection_method: 'automatic' }
100
97
  path("media/videos/<int:pk>/remove-frames/", VideoRemoveFramesView.as_view(), name="video-remove-frames"),
101
-
102
- # Video Reprocess API endpoint (modern media framework)
103
- # POST /api/media/videos/<int:pk>/reprocess/
104
- # Re-runs entire anonymization pipeline for a video (correction workflow)
105
- path("media/videos/<int:pk>/reprocess/", VideoReprocessView.as_view(), name="video-reprocess"),
106
-
98
+
107
99
  # ---------------------------------------------------------------------------------------
108
100
  # VIDEO SEGMENT API ENDPOINTS (Modern Media Framework - October 14, 2025)
109
101
  #
endoreg_db/utils/paths.py CHANGED
@@ -6,27 +6,25 @@ It provides a unified dictionary 'data_paths' for accessing all path objects.
6
6
  """
7
7
 
8
8
  from logging import getLogger
9
+
10
+ from sphinx.search import no
9
11
  logger = getLogger(__name__)
10
12
 
11
13
  from pathlib import Path
12
14
  from typing import Dict
13
-
14
15
  import os
16
+ # Alternative approach using env_path helper, deprecated since monorepo setup. Alright for single install, env is always preferred.
17
+ #from endoreg_db.config.env import env_path
15
18
 
16
19
  STORAGE_DIR = Path(os.getenv("STORAGE_DIR", "storage"))
17
20
 
18
- # Resolve STORAGE_DIR from env or default under BASE_DIR
19
- #def _resolve_storage_dir() -> Path:
20
- # env_val = os.getenv("STORAGE_DIR")
21
- # if env_val:
22
- # p = Path(env_val)
23
- # return p if p.is_absolute() else (BASE_DIR / p).resolve()
24
- # # Do not import django.conf.settings here to avoid early settings configuration.
25
- # # Fall back to a local storage directory under the repo.
26
- # return (BASE_DIR / "storage").resolve()
27
-
28
- # STORAGE_DIR = _resolve_storage_dir()
29
- STORAGE_DIR.mkdir(parents=True, exist_ok=True)
21
+ storage_dir_env = os.getenv("STORAGE_DIR")
22
+ if storage_dir_env is None:
23
+ raise RuntimeError("STORAGE_DIR environment variable is not set.")
24
+ storage_dir_str = Path(storage_dir_env)
25
+ STORAGE_DIR = storage_dir_str
26
+ if not STORAGE_DIR.exists():
27
+ STORAGE_DIR.mkdir(parents=True, exist_ok=True)
30
28
 
31
29
  PREFIX_RAW = "raw_"
32
30
  IMPORT_DIR_NAME = "import"
@@ -91,6 +89,7 @@ data_paths:Dict[str,Path] = {
91
89
  logger.info(f"Storage directory: {STORAGE_DIR.resolve()}")
92
90
  logger.info(f"Export directory: {EXPORT_DIR.resolve()}")
93
91
 
94
- for key, path in data_paths.items():
95
- path.mkdir(parents=True, exist_ok=True)
96
- logger.info(f"{key.capitalize()} directory: {path.resolve()}")
92
+ # for key, path in data_paths.items():
93
+ # path.mkdir(parents=True, exist_ok=True)
94
+
95
+ # logger.info(f"{key.capitalize()} directory: {path.resolve()}")
@@ -127,19 +127,8 @@ from .video import (
127
127
  # Video Correction (Phase 1.1) - Implemented
128
128
  VideoMetadataView,
129
129
  VideoProcessingHistoryView,
130
- VideoAnalyzeView,
131
130
  VideoApplyMaskView,
132
131
  VideoRemoveFramesView,
133
- VideoReprocessView,
134
-
135
- # Phase 1.2: Media Management Views ✅ IMPLEMENTED
136
- # VideoMediaView, # Imported via video module
137
- # PDFMediaView, # Legacy view still in pdf module
138
-
139
- # TODO Phase 1.2+: Future views
140
- # VideoCorrectionView,
141
- # TaskStatusView,
142
- # VideoDownloadProcessedView,
143
132
 
144
133
  # Existing views
145
134
  VideoReimportView,
@@ -266,10 +255,9 @@ __all__ = [
266
255
  # Video Views (Phase 1.1 - Implemented)
267
256
  'VideoMetadataView',
268
257
  'VideoProcessingHistoryView',
269
- 'VideoAnalyzeView',
270
258
  'VideoApplyMaskView',
271
259
  'VideoRemoveFramesView',
272
- 'VideoReprocessView',
260
+
273
261
  'VideoCorrectionView',
274
262
 
275
263
  # Video Views (Existing)
@@ -1,10 +1,8 @@
1
1
  from .correction import (
2
2
  VideoMetadataView,
3
3
  VideoProcessingHistoryView,
4
- VideoAnalyzeView,
5
4
  VideoApplyMaskView,
6
5
  VideoRemoveFramesView,
7
- VideoReprocessView,
8
6
  VideoCorrectionView,
9
7
  )
10
8
 
@@ -34,10 +32,8 @@ __all__ = [
34
32
  # Video Correction (Phase 1.1) - Implemented
35
33
  'VideoMetadataView',
36
34
  'VideoProcessingHistoryView',
37
- 'VideoAnalyzeView',
38
35
  'VideoApplyMaskView',
39
36
  'VideoRemoveFramesView',
40
- 'VideoReprocessView',
41
37
 
42
38
  # Phase 1.2: Media Management Views ✅ IMPLEMENTED
43
39
  'VideoMediaView',
@@ -30,6 +30,16 @@ from endoreg_db.utils.permissions import EnvironmentAwarePermission
30
30
 
31
31
  logger = logging.getLogger(__name__)
32
32
 
33
+ def update_processed_file(video, output_path: Path):
34
+ from endoreg_db.utils import data_paths
35
+ storage_root = Path(data_paths["storage"])
36
+ try:
37
+ rel_path = output_path.relative_to(storage_root)
38
+ except ValueError:
39
+ rel_path = output_path.relative_to(Path(settings.MEDIA_ROOT))
40
+ video.processed_file.name = str(rel_path)
41
+ video.save(update_fields=["processed_file"])
42
+
33
43
 
34
44
  class VideoCorrectionView(APIView):
35
45
  """
@@ -213,111 +223,6 @@ class VideoProcessingHistoryView(APIView):
213
223
  return Response(serializer.data)
214
224
 
215
225
 
216
- class VideoAnalyzeView(APIView):
217
- """
218
- POST /api/media/videos/{pk}/analyze/
219
-
220
- Analyze video for sensitive frames using MiniCPM-o 2.6 or OCR+LLM.
221
-
222
- Request body (optional):
223
- {
224
- "detection_method": "minicpm", // or "ocr_llm", "hybrid"
225
- "sample_interval": 30 // analyze every Nth frame (default: adaptive)
226
- }
227
-
228
- Returns:
229
- {
230
- "sensitive_frame_count": 42,
231
- "total_frames": 840,
232
- "sensitive_ratio": 0.05,
233
- "sensitive_frame_ids": [10, 15, 20, ...],
234
- "sensitive_percentage": 5.0,
235
- "detection_method": "minicpm",
236
- "message": "Analysis complete"
237
- }
238
- """
239
-
240
- def post(self, request, pk):
241
- """Analyze video for sensitive content."""
242
- video = get_object_or_404(VideoFile, pk=pk)
243
-
244
- # Extract parameters
245
- detection_method = request.data.get('detection_method', 'minicpm')
246
- sample_interval = request.data.get('sample_interval', None)
247
-
248
- try:
249
- # Initialize FrameCleaner with appropriate detection method
250
- use_minicpm = detection_method in ['minicpm', 'hybrid']
251
- frame_cleaner = FrameCleaner(use_minicpm=use_minicpm)
252
-
253
- # Get video path
254
- video_path = video.raw_file.path if hasattr(video.raw_file, 'path') else str(video.raw_file)
255
-
256
- # Run analysis (uses existing FrameCleaner.analyze_video_sensitivity)
257
- analysis_result = frame_cleaner.analyze_video_sensitivity(
258
- )
259
-
260
- # Extract results
261
- sensitive_frame_ids = analysis_result.get('sensitive_frame_ids', [])
262
- total_frames = analysis_result.get('total_frames', 0)
263
- sensitive_count = len(sensitive_frame_ids)
264
- sensitive_ratio = sensitive_count / total_frames if total_frames > 0 else 0.0
265
-
266
- # Update or create metadata
267
- metadata, created = VideoMetadata.objects.update_or_create(
268
- video=video,
269
- defaults={
270
- 'sensitive_frame_count': sensitive_count,
271
- 'sensitive_ratio': sensitive_ratio,
272
- 'sensitive_frame_ids': json.dumps(sensitive_frame_ids)
273
- }
274
- )
275
-
276
- # Create processing history record
277
- VideoProcessingHistory.objects.create(
278
- video=video,
279
- operation=VideoProcessingHistory.OPERATION_ANALYSIS,
280
- status=VideoProcessingHistory.STATUS_SUCCESS,
281
- config={
282
- 'detection_method': detection_method,
283
- 'sample_interval': sample_interval
284
- },
285
- details=f"Found {sensitive_count} sensitive frames out of {total_frames} total frames"
286
- )
287
-
288
- logger.info(f"Video {pk} analyzed: {sensitive_count}/{total_frames} sensitive frames")
289
-
290
- return Response({
291
- 'sensitive_frame_count': sensitive_count,
292
- 'total_frames': total_frames,
293
- 'sensitive_ratio': sensitive_ratio,
294
- 'sensitive_frame_ids': sensitive_frame_ids,
295
- 'sensitive_percentage': sensitive_ratio * 100,
296
- 'detection_method': detection_method,
297
- 'message': 'Analysis complete'
298
- })
299
-
300
- except Exception as e:
301
- logger.error(f"Video analysis failed for {pk}: {str(e)}", exc_info=True)
302
-
303
- # Create failure record
304
- VideoProcessingHistory.objects.create(
305
- video=video,
306
- operation=VideoProcessingHistory.OPERATION_ANALYSIS,
307
- status=VideoProcessingHistory.STATUS_FAILURE,
308
- config={
309
- 'detection_method': detection_method,
310
- 'sample_interval': sample_interval
311
- },
312
- details=str(e)
313
- )
314
-
315
- return Response(
316
- {'error': f'Analysis failed: {str(e)}'},
317
- status=status.HTTP_500_INTERNAL_SERVER_ERROR
318
- )
319
-
320
-
321
226
  class VideoApplyMaskView(APIView):
322
227
  """
323
228
  POST /api/media/videos/{pk}/apply-mask/
@@ -391,7 +296,7 @@ class VideoApplyMaskView(APIView):
391
296
  frame_cleaner = FrameCleaner()
392
297
 
393
298
  # Get video paths
394
- video_path = video.raw_file.path if hasattr(video.raw_file, 'path') else str(video.raw_file)
299
+ video_path = Path(video.raw_file.path) if hasattr(video.raw_file, 'path') else Path(str(video.raw_file))
395
300
  output_path = Path(settings.MEDIA_ROOT) / 'anonym_videos' / f"{video.uuid}_masked.mp4"
396
301
  output_path.parent.mkdir(parents=True, exist_ok=True)
397
302
 
@@ -403,7 +308,6 @@ class VideoApplyMaskView(APIView):
403
308
  # Convert ROI to mask config
404
309
  mask_config = frame_cleaner._create_mask_config_from_roi(
405
310
  endoscope_roi=roi,
406
- processor_rois=None
407
311
  )
408
312
 
409
313
  # Apply mask (uses existing FrameCleaner._mask_video)
@@ -413,16 +317,16 @@ class VideoApplyMaskView(APIView):
413
317
  success = frame_cleaner._mask_video(
414
318
  input_video=video_path,
415
319
  mask_config=mask_config,
416
- output_video=str(output_path)
320
+ output_video=output_path
417
321
  )
418
322
 
419
323
  processing_time = time.time() - start_time
420
324
 
421
325
  if success:
422
326
  # Update video record with anonymized file
423
- video.anonymized_file = f"anonym_videos/{video.uuid}_masked.mp4"
424
- video.save()
425
-
327
+ from django.core.files import File
328
+ processed_file_path = output_path
329
+ update_processed_file(video, processed_file_path)
426
330
  # Mark history as success
427
331
  history.mark_success(
428
332
  output_file=str(output_path),
@@ -544,7 +448,7 @@ class VideoRemoveFramesView(APIView):
544
448
  frame_cleaner = FrameCleaner()
545
449
 
546
450
  # Get video paths
547
- video_path = video.raw_file.path if hasattr(video.raw_file, 'path') else str(video.raw_file)
451
+ video_path = Path(video.raw_file.path) if hasattr(video.raw_file, 'path') else Path(str(video.raw_file))
548
452
  output_path = Path(settings.MEDIA_ROOT) / 'anonym_videos' / f"{video.uuid}_cleaned.mp4"
549
453
  output_path.parent.mkdir(parents=True, exist_ok=True)
550
454
 
@@ -555,15 +459,15 @@ class VideoRemoveFramesView(APIView):
555
459
  success = frame_cleaner.remove_frames_from_video(
556
460
  original_video=video_path,
557
461
  frames_to_remove=frames_to_remove,
558
- output_video=str(output_path)
462
+ output_video=output_path
559
463
  )
560
464
 
561
465
  processing_time = time.time() - start_time
562
466
 
563
467
  if success:
564
468
  # Update video record
565
- video.anonymized_file = f"anonym_videos/{video.uuid}_cleaned.mp4"
566
- video.save()
469
+ update_processed_file(video, output_path)
470
+
567
471
 
568
472
  # Phase 1.4: Update LabelVideoSegments (shift frame numbers)
569
473
  segment_update_result = update_segments_after_frame_removal(video, frames_to_remove)
@@ -623,65 +527,4 @@ class VideoRemoveFramesView(APIView):
623
527
  frames.extend(range(start, end + 1))
624
528
  else:
625
529
  frames.append(int(part))
626
- return sorted(set(frames)) # Remove duplicates and sort
627
-
628
-
629
- class VideoReprocessView(APIView):
630
- """
631
- POST /api/media/videos/{pk}/reprocess/
632
-
633
- Re-run entire anonymization pipeline for a video.
634
-
635
- Request body: {} (empty)
636
-
637
- Returns:
638
- {
639
- "message": "Reprocessing started",
640
- "status": "processing_anonymization"
641
- }
642
-
643
- Note: This resets VideoState and triggers video_import service.
644
- """
645
-
646
- def post(self, request, pk):
647
- """Reprocess video through entire anonymization pipeline."""
648
- video = get_object_or_404(VideoFile, pk=pk)
649
-
650
- try:
651
- # Create processing history record
652
- history = VideoProcessingHistory.objects.create(
653
- video=video,
654
- operation=VideoProcessingHistory.OPERATION_REPROCESSING,
655
- status=VideoProcessingHistory.STATUS_PENDING,
656
- config={}
657
- )
658
-
659
- # Reset video state to trigger re-processing
660
- if hasattr(video, 'state') and video.state:
661
- video.state.anonymization_status = 'processing_anonymization'
662
- video.state.save()
663
-
664
- # Clear previous metadata
665
- VideoMetadata.objects.filter(video=video).delete()
666
-
667
- # TODO Phase 1.2: Trigger Celery task for async reprocessing
668
- # task = reprocess_video_task.delay(video.id)
669
- # history.task_id = task.id
670
- # history.save()
671
-
672
- history.mark_success(details="Reprocessing initiated")
673
-
674
- logger.info(f"Video {pk} reprocessing started")
675
-
676
- return Response({
677
- 'message': 'Reprocessing started',
678
- 'status': 'processing_anonymization'
679
- })
680
-
681
- except Exception as e:
682
- logger.error(f"Reprocessing failed for {pk}: {str(e)}", exc_info=True)
683
-
684
- return Response(
685
- {'error': f'Reprocessing failed: {str(e)}'},
686
- status=status.HTTP_500_INTERNAL_SERVER_ERROR
687
- )
530
+ return sorted(set(frames)) # Remove duplicates and sort
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: endoreg-db
3
- Version: 0.8.2.4
3
+ Version: 0.8.2.5
4
4
  Summary: EndoReg Db Django App
5
5
  Project-URL: Homepage, https://info.coloreg.de
6
6
  Project-URL: Repository, https://github.com/wg-lux/endoreg-db
@@ -33,7 +33,7 @@ Requires-Dist: gunicorn>=23.0.0
33
33
  Requires-Dist: icecream>=2.1.4
34
34
  Requires-Dist: librosa==0.11.0
35
35
  Requires-Dist: llvmlite>=0.44.0
36
- Requires-Dist: lx-anonymizer[llm,ocr]>=0.8.2.1
36
+ Requires-Dist: lx-anonymizer[llm,ocr]>=0.8.3
37
37
  Requires-Dist: moviepy==2.2.1
38
38
  Requires-Dist: mypy>=1.16.0
39
39
  Requires-Dist: numpy>=2.2.3
@@ -240,7 +240,7 @@ endoreg_db/forms/settings/__init__.py,sha256=xKCYyRS1tEAWsm5C9OrG0Btqgitzuh_s31O
240
240
  endoreg_db/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
241
241
  endoreg_db/helpers/count_db.py,sha256=IkdgvDPM5xq7DgFn8Bp1rgpXOtmLzPfLpZy-5cFTEPg,1951
242
242
  endoreg_db/helpers/data_loader.py,sha256=Kn5MyRRuul-bDtLtqg2gn4E2OKt1-5HkjjD3QcwWyPM,6324
243
- endoreg_db/helpers/default_objects.py,sha256=-YnfKSIt7ixwM-7r8fjSnwdRUbeXjc7YbvnFfZo1QCQ,13309
243
+ endoreg_db/helpers/default_objects.py,sha256=g1ZeSsqEEp9kbeMpCUr7MyNXVvcqnhdj3wWtgtJY5Cs,13928
244
244
  endoreg_db/helpers/download_segmentation_model.py,sha256=VZ8BU7QkYpZkr8kpkUrnuvDBkirmLhuf2rHC2jRBILM,1053
245
245
  endoreg_db/helpers/interact.py,sha256=EAiUP_5CXCauKcYYEoUo-Ot3FqE5n1Rm4UX6mkC06IY,174
246
246
  endoreg_db/helpers/test_video_helper.py,sha256=4iIjH3Xe-5krhLffQLJO16XtxKJpM9wplpWUocmwWeg,4695
@@ -253,7 +253,7 @@ endoreg_db/management/commands/fix_missing_patient_data.py,sha256=5TPUTOQwI2fVh3
253
253
  endoreg_db/management/commands/fix_video_paths.py,sha256=7LLwc38oX3B_tYWbLJA43Li_KBO3m5Lyw0CF6YqN5rU,7145
254
254
  endoreg_db/management/commands/import_fallback_video.py,sha256=PhSBqyHevGgOZieZsj3NBfPJ656wqEkdCWrp2NSb538,9590
255
255
  endoreg_db/management/commands/import_report.py,sha256=vFst-NeQdL-w62yoH4kDamq-2Hos5GW90vLTO2-hfYI,13168
256
- endoreg_db/management/commands/import_video.py,sha256=Y2L0LNd0tnx2dQcOonQQBwytb_6gnm2QhUZFhvLYbOs,17719
256
+ endoreg_db/management/commands/import_video.py,sha256=AMvgi1eN0F_hjhgnNNYIFkJtHfjalBfh2lfDxw6VTzE,17980
257
257
  endoreg_db/management/commands/import_video_with_classification.py,sha256=ulZH5jvAWu_pJ1kI9B3hbIO1-p_BReY0zbIQDS_d9OI,14726
258
258
  endoreg_db/management/commands/init_default_ai_model.py,sha256=98yBigGZ5gkA-b1LPcvzS5x2jAms3pX58fU-TEAcjKw,4669
259
259
  endoreg_db/management/commands/load_ai_model_data.py,sha256=QDyWPjIC1ga13Ou67_mnE8HUGTAK0uF2LLQ12sE-95E,2747
@@ -310,11 +310,9 @@ endoreg_db/migrations/0001_initial.py,sha256=xfdlddGyRGvwKbm77E4gPRWsgJWZvXs6aw_
310
310
  endoreg_db/migrations/0002_add_video_correction_models.py,sha256=EFnABa4FClf6DwytRiG15Ws-aZwZ1ZgACnl6r2dNUxs,3691
311
311
  endoreg_db/migrations/0003_add_center_display_name.py,sha256=F13-IUe1q6XjVzE5-oMTAVx4oo_jvMcLpDiHtrTfQL4,873
312
312
  endoreg_db/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
313
- endoreg_db/models/__init__.py,sha256=JyucmAkGkbzKiLrnZKKUTsJb0bk1DqJC6cRsKtNbfgQ,7086
313
+ endoreg_db/models/__init__.py,sha256=UeaNymydlkhJbplbVlnv7MjCACnDQ4e09yzZj6NCZ_Y,7042
314
314
  endoreg_db/models/upload_job.py,sha256=lSsyv2d5jZxI8jAKlBU7dXi4jhEIKYjJKt8gZlwRz94,3000
315
315
  endoreg_db/models/utils.py,sha256=G2W-QzPEKLDqbBuE4Z0srlkUageW0ZRuIIF8sQCXp2w,4451
316
- endoreg_db/models/video_metadata.py,sha256=aULgRXCwIsB7pZ3uj3nI9Z26Bkj0fJCgpS4dJep4IfM,2007
317
- endoreg_db/models/video_processing.py,sha256=00ClmeN-nLO3k1F5u86gMjH8AHSccBpDlxtRJ9D5O_Y,4746
318
316
  endoreg_db/models/administration/__init__.py,sha256=T1dgcMsnYlz6peK7ThskJF6EFigw12lYZie34t301yw,1717
319
317
  endoreg_db/models/administration/ai/__init__.py,sha256=AYnrzvWkLYsySnlryfZ35_wgJ5egIdIpgmxW3DzO4OY,168
320
318
  endoreg_db/models/administration/ai/active_model.py,sha256=c0Ps5ObhEIoWCgf2T4SbDz8pf92rA10Cx594-Cj-lX4,1453
@@ -375,7 +373,7 @@ endoreg_db/models/label/annotation/video_segmentation_annotation.py,sha256=KccKV
375
373
  endoreg_db/models/label/label_video_segment/__init__.py,sha256=MLFkJvmLm8IZccn2IOMg9C9kZyKUviZtAZpbGdev_nw,84
376
374
  endoreg_db/models/label/label_video_segment/_create_from_video.py,sha256=Rp9OzIxuPhOye3efmP60yagz7bp5gIXizAu5PFbX8AY,1205
377
375
  endoreg_db/models/label/label_video_segment/label_video_segment.py,sha256=chOgGhevzFWJWpuS879bdQ4hT1_nfnqlyEmMZAd2XD4,21807
378
- endoreg_db/models/media/__init__.py,sha256=HxAH8NMqf-ftRsQmVQj4VlSHiTsdECGYLdseM-KKdo8,375
376
+ endoreg_db/models/media/__init__.py,sha256=WuomOKk-3kNGDLKoLO_ltnXbo028JDVlCCScdJMMQI4,465
379
377
  endoreg_db/models/media/frame/__init__.py,sha256=25WriZHocR82rbHr_IMIgBt5z-mkV2O0LVWUpJRnQ5E,45
380
378
  endoreg_db/models/media/frame/frame.py,sha256=6BvNKTAGsC_Q0S27nrvZ2cySDy3LSu5HCxrNcZwIEsA,4408
381
379
  endoreg_db/models/media/pdf/__init__.py,sha256=1fimtZK5LUuP_yqETN6pMj0hxKXuQqeLb1DP5wPmtT4,343
@@ -384,18 +382,19 @@ endoreg_db/models/media/pdf/report_file.py,sha256=6Vt_TJSB3qaF26qXbyjRSn-s_zN5y4
384
382
  endoreg_db/models/media/pdf/report_reader/__init__.py,sha256=LiMooVstXRay5qcB-uZW0wxbcdUvPrfAs_xBwWiuuWc,166
385
383
  endoreg_db/models/media/pdf/report_reader/report_reader_config.py,sha256=wYVDmPSmNIuCTpaaWqoLVgVZFYW-dqGpnAyVBqRLqXE,3445
386
384
  endoreg_db/models/media/pdf/report_reader/report_reader_flag.py,sha256=j9tjbLRenxpWfeaseALl8rV2Dqem9YaM_duS1iJkARU,536
387
- endoreg_db/models/media/video/__init__.py,sha256=oHh-iHRrdh4AO4gISJj84k129AFLVvjbwKNd9Q3w4Vk,65
385
+ endoreg_db/models/media/video/__init__.py,sha256=ifW4SXXN2q6wAuFwSP7XlYskpX7UX6uy0py5mpCCOCM,211
388
386
  endoreg_db/models/media/video/create_from_file.py,sha256=3n4bbzFteEOFDUuEikP0x-StCKI5R5IhyKC7o3kLZ6Y,15128
389
387
  endoreg_db/models/media/video/pipe_1.py,sha256=hOII3BCiMpxgpDKpV5h52-O2XTqKlb4YArxuH2fWyck,9402
390
388
  endoreg_db/models/media/video/pipe_2.py,sha256=DnMxW0uOqSsf7-0n9Rlvn7u89U4Jpkv7n6hFpQfUjkQ,4964
391
389
  endoreg_db/models/media/video/refactor_plan.md,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
392
- endoreg_db/models/media/video/video_file.py,sha256=fbqQo0RxeD5d-wHi1X7bHE-AyGQFrUg5fhdY1V8aU8M,26343
390
+ endoreg_db/models/media/video/video_file.py,sha256=txlxR8d1OBgt3UEkWvLcGSyLarh0jXLw-z0SAV5KOok,26789
393
391
  endoreg_db/models/media/video/video_file_ai.py,sha256=3ABea52FOF1qlrlxHdYhz_M3Kmqfzqtgq7M0prl-FAo,18819
394
392
  endoreg_db/models/media/video/video_file_anonymize.py,sha256=pet1UfSsbSHJJZxq6gDPifAfBWpGyEpD1jEQuSQi0Gg,16027
395
393
  endoreg_db/models/media/video/video_file_frames.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
396
394
  endoreg_db/models/media/video/video_file_io.py,sha256=9y3jBiIHA3Rw5pWczGbf13u-EcKiZQIuDserq2vOwuk,7921
397
- endoreg_db/models/media/video/video_file_meta.py,sha256=H0DvZ6pt5XUdkgDmHcBFCSsjOeW5q7McE1Zo3ArBF6s,443
398
395
  endoreg_db/models/media/video/video_file_segments.py,sha256=42oc2go3VWtNY1gsjp4kLbfQb5Qtl-aMbnAuKN3vum4,8647
396
+ endoreg_db/models/media/video/video_metadata.py,sha256=cM7COVZu7RMNr1uR_oDBpTU91YW-xToyyWJR50RlxjY,1994
397
+ endoreg_db/models/media/video/video_processing.py,sha256=_Hg_LMLj4JoJQUdVBcQj8yXEYs-rI1elaMVaAVrS93Y,4733
399
398
  endoreg_db/models/media/video/video_file_frames/__init__.py,sha256=X1eX1o5X8PVaWwdejtQcSdkG_mvYGXXvlnzF8tE7Lck,2060
400
399
  endoreg_db/models/media/video/video_file_frames/_bulk_create_frames.py,sha256=9kihorJQZQvoJK669mNBPGzdnNaiPG1cZMnPmox95kg,702
401
400
  endoreg_db/models/media/video/video_file_frames/_create_frame_object.py,sha256=5nf69epDRRFZuTaGJxQS5co0tvNeb0dnTEfo1o5YV7M,539
@@ -434,7 +433,7 @@ endoreg_db/models/medical/finding/finding_intervention.py,sha256=FBwjI15yitMpTXk
434
433
  endoreg_db/models/medical/finding/finding_type.py,sha256=ohDEmLcgEpYjG5q0uhCaq2xQS8jH_rj4qyKQ2DUumqQ,1117
435
434
  endoreg_db/models/medical/hardware/__init__.py,sha256=uX2-UpBzX2chpZEeCyqbv2BSrv3OZNG9PrB8sHEWpHQ,178
436
435
  endoreg_db/models/medical/hardware/endoscope.py,sha256=8T8R2Bo2T29psQ3C_HTrhBogN8hiysuZkJOxUefqGoI,1657
437
- endoreg_db/models/medical/hardware/endoscopy_processor.py,sha256=tHpuDGRHqQROiUEhirZ15tkgj5PatIzLemQMW8CgCrY,5307
436
+ endoreg_db/models/medical/hardware/endoscopy_processor.py,sha256=DLKMXPWValfJCf4rZ1u6PdpeBa2ST0WTjkcuruFlzG0,6201
438
437
  endoreg_db/models/medical/laboratory/__init__.py,sha256=595XF1ikkwzQWbUsyasU23v1kDRugrgTp3eUfrMd0UQ,62
439
438
  endoreg_db/models/medical/laboratory/lab_value.py,sha256=uw4mjguVrqvsxQ-NzGO0DoNlSCaydI8KaJgUhuM16wo,20258
440
439
  endoreg_db/models/medical/medication/__init__.py,sha256=BHh6ARvm2uVNswN12EQAEMFPnoGBiVwl7RCjKrW6C2I,761
@@ -465,7 +464,7 @@ endoreg_db/models/metadata/frame_ocr_result.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQe
465
464
  endoreg_db/models/metadata/model_meta.py,sha256=aZH6Bz5Ss874Knvg1b3Kgq6gU8kVzPHXneunZJNF4yw,7111
466
465
  endoreg_db/models/metadata/model_meta_logic.py,sha256=yiIWbxxykUp6VB_7imRqSXcO0RS5GuoYP83O48TyKws,8987
467
466
  endoreg_db/models/metadata/pdf_meta.py,sha256=BTmpSgqxmPKi0apcNjyrZAS4AFKCPXVdBd6VBeyyv6E,3174
468
- endoreg_db/models/metadata/sensitive_meta.py,sha256=eORPGblrcFoMPPzqnc6QMs4cV63RL6nWWnb5f4bTQXs,12930
467
+ endoreg_db/models/metadata/sensitive_meta.py,sha256=ekLHrW-b5uYcjfkRd0EW5ncx5ef8Bu-K6msDkpWCAbk,13034
469
468
  endoreg_db/models/metadata/sensitive_meta_logic.py,sha256=Oh7ssZQEPfKGfRMF5nXKJpOIxXx-Xibd3rpOu-bQilk,29988
470
469
  endoreg_db/models/metadata/video_meta.py,sha256=c6xWdLW3uNqJ5VPJXHCxXA3mbXw-b0uR54-TOS3qL2Q,14966
471
470
  endoreg_db/models/metadata/video_prediction_logic.py,sha256=j5N82mHtiomeeIaf1HA65kT5d0htQfJmbI2bJb8mpxQ,7677
@@ -587,7 +586,7 @@ endoreg_db/serializers/video/segmentation.py,sha256=TrWNLGilp2prs7bD7G3S1Y0CVO9H
587
586
  endoreg_db/serializers/video/video_file_brief.py,sha256=9g5njY0rI64kLO-Kt8J220M_y5ObYUHaNw9bf3-8lK8,272
588
587
  endoreg_db/serializers/video/video_file_detail.py,sha256=NqhziTHtoJM_gTEPEe086eAn5tvEMJknQAKa1zY6ENo,3639
589
588
  endoreg_db/serializers/video/video_file_list.py,sha256=FGG33V-oKo86fqXYLMgrCPCD49IOngEHSTAud00wwsw,2255
590
- endoreg_db/serializers/video/video_metadata.py,sha256=8TUVcGWoP5wVIGW-wy1E8PcLOK2qyMwGIzzCOqxk6VA,3165
589
+ endoreg_db/serializers/video/video_metadata.py,sha256=ghB2iLc1nZCACq4i1zGqv1S29HXhx35lKJRheIQyw7Q,3177
591
590
  endoreg_db/serializers/video/video_processing_history.py,sha256=pJD4LltXCKlCQYsG119bhMHEhv7NslG6vlxJgS4Avg4,5281
592
591
  endoreg_db/services/__init__.py,sha256=CMLgpzemgjXvKN5HGFD_UVtRAg9XeMIfXvoSu-aUaRE,136
593
592
  endoreg_db/services/anonymization.py,sha256=iM-xW1aJm99G3PmkfZtMJmvoaj99c8OASP5-abBNcy0,8986
@@ -595,14 +594,13 @@ endoreg_db/services/examination_evaluation.py,sha256=jx9IL2PIoBzjiITzs00c1XucE7A
595
594
  endoreg_db/services/finding_description_service.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
596
595
  endoreg_db/services/lookup_service.py,sha256=A2t07-qlQhFEeNvOhez0GU0sxi7mnN0MIlhYzxj4W1U,10581
597
596
  endoreg_db/services/lookup_store.py,sha256=8sB2HmJQrnzq5Vfqt-UdaJLHYMRZCxnui9BCCXscnJE,4856
598
- endoreg_db/services/ollama_api_docs.py,sha256=6uyep2jqjrvx87By_teEW8BX0cm14Pt2b-Hht-rrelQ,47259
599
597
  endoreg_db/services/pdf_import.py,sha256=_ll_Vng1SpI7mEKxNRYuNttVnehuJFpKjQGDB8OX7no,47133
600
598
  endoreg_db/services/polling_coordinator.py,sha256=alnPB-kdMyxbYaxQN9fki9dKrwmAsY3s68bUHWDSNeI,10662
601
- endoreg_db/services/pseudonym_service.py,sha256=sjqPw-SBwdNfWKxciMiy7RJokcII15YgrmZeNVI593k,3149
599
+ endoreg_db/services/pseudonym_service.py,sha256=CJhbtRa6K6SPbphgCZgEMi8AFQtB18CUoBDttFnxEoM,3126
602
600
  endoreg_db/services/requirements_object.py,sha256=290zf8AEbVtCoHhW4Jr7_ud-RvrqYmb1Nz9UBHtTnc0,6164
603
601
  endoreg_db/services/segment_sync.py,sha256=YgHvIHkbW4mqCu0ACf3zjRSZnNfxWwt4gh5syUVXuE0,6400
604
602
  endoreg_db/services/storage_aware_video_processor.py,sha256=kKFK64vXLeBSVkp1YJonU3gFDTeXZ8C4qb9QZZB99SE,13420
605
- endoreg_db/services/video_import.py,sha256=t7adr-1r5zKk32Wlx9sg08DKV8DEhy-UAPhqnaVwIpQ,58681
603
+ endoreg_db/services/video_import.py,sha256=X20FQkEO5QGcfuacAz8jX1_LW1GhwbF33JGPpmypEyk,50161
606
604
  endoreg_db/tasks/upload_tasks.py,sha256=OJq7DhNwcbWdXzHY8jz5c51BCVkPN5gSWOz-6Fx6W5M,7799
607
605
  endoreg_db/tasks/video_ingest.py,sha256=kxFuYkHijINV0VabQKCFVpJRv6eCAw07tviONurDgg8,5265
608
606
  endoreg_db/tasks/video_processing_tasks.py,sha256=KjcERRJ1TZzmavBpvr6OsvSTUViU0PR1ECWnEdzu2Js,14140
@@ -617,7 +615,7 @@ endoreg_db/urls/examination.py,sha256=IWNIR-hsWKD3nfL27EzMMazcZnOa_imjgk8RL0mql2
617
615
  endoreg_db/urls/files.py,sha256=qfa8mPDNF9SW4z66B26SCtX7WHyoAo1muS1DR2QwST8,192
618
616
  endoreg_db/urls/label_video_segment_validate.py,sha256=bGWacxIG4pHnGRbnHL_L91ShKWfKCn5X-YXsHGs6i-I,1044
619
617
  endoreg_db/urls/label_video_segments.py,sha256=Hjc__HjohZnNE-oudqBc_uOIHqiSbQ_zpN4aHzGYRuE,1142
620
- endoreg_db/urls/media.py,sha256=wXu_bWlBCTBM1LlSjEsfq9sh5PcyKIJwh57UxyZV47A,11127
618
+ endoreg_db/urls/media.py,sha256=ufFP3GL3fpxYUSlFJfIfg1L6pmUcC_Blao46G3PsEPQ,10699
621
619
  endoreg_db/urls/patient.py,sha256=VLKFbEiNgpfYLWFisbHidyoUnoQuEzj1U0SgZDpdPDM,588
622
620
  endoreg_db/urls/report.py,sha256=9i3sOSofB7_PHGByr3DMghZFtcbjKf_U5PVSlxu9d4I,1917
623
621
  endoreg_db/urls/requirements.py,sha256=5d-SD_7nsTA9YXlBeWdZuh-mXh26BkgH29fFBaTLjU8,455
@@ -641,7 +639,7 @@ endoreg_db/utils/mime_types.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
641
639
  endoreg_db/utils/names.py,sha256=6OKOSmXeAKv5XVs86_IjlQ7klyF3zLkvVQz9Bl7Lf0o,2745
642
640
  endoreg_db/utils/ocr.py,sha256=LvyABxX5OZhIeXw2pI6af8_xTj7nHQQoKGh5kNsrv7o,7136
643
641
  endoreg_db/utils/parse_and_generate_yaml.py,sha256=k7y0fl9Jbb_LNryeJYd6tebklRlu1-P70dJ-4sxvEZs,1626
644
- endoreg_db/utils/paths.py,sha256=pjX-FOSEbC8cE0P4m16O8IKS9rlSXBt_a-kRnnPPsnA,3426
642
+ endoreg_db/utils/paths.py,sha256=ncXtB_l6FBVXXdk59U7v4FhSvLO7Yb0DQ-GQMcOqiTw,3398
645
643
  endoreg_db/utils/permissions.py,sha256=IqxG9IqJBSZuxvT1ItVgGS8fMzkA2OLdDV6y8mKHSuo,5096
646
644
  endoreg_db/utils/requirement_helpers.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
647
645
  endoreg_db/utils/translation.py,sha256=77Xel12pAGo0rQ0NxB7nfejvMb0GBjEmhC3I7mcU91I,1256
@@ -680,7 +678,7 @@ endoreg_db/utils/video/names.py,sha256=m268j2Ynt94OYH6dYxeL8gzU5ODtFJD4OmzS7l0nB
680
678
  endoreg_db/utils/video/streaming_processor.py,sha256=C-39DtxhSnL7B2cObFE5k829VLXl_Fl0KQFrFP368JA,13747
681
679
  endoreg_db/utils/video/video_splitter.py,sha256=EZEnhNjaUva_9VxjcjScgRSrxsEuifhBjlwIMLX1qaA,3698
682
680
  endoreg_db/views/Frames_NICE_and_PARIS_classifications_views.py,sha256=Lu1JuUD44B6yUAR9pcYLlQ-3g66VTktmzStuO0uGIj4,8752
683
- endoreg_db/views/__init__.py,sha256=Jy92erUivibnqS-hEVkXdMFgIByc8qpzMnoPDL3nAFg,6941
681
+ endoreg_db/views/__init__.py,sha256=L1xXouAYYqIK7zXDvA6qhcEv7gs5b7wc3g8HeFCVFWU,6553
684
682
  endoreg_db/views/anonymization/__init__.py,sha256=s1_r9j0jPJsKHy1-isjFAlRF3Cw0o8EXxyUP7Xv1Kqo,698
685
683
  endoreg_db/views/anonymization/media_management.py,sha256=ObiXjPa-KsSGs3IfmABE-TVzQZ2U6yJioFh64T7TtKY,16799
686
684
  endoreg_db/views/anonymization/overview.py,sha256=fA4a4tZ4tbnWf3BUP6heAtqmHvinixUnDoI3dqPjTE0,8320
@@ -770,8 +768,8 @@ endoreg_db/views/requirement_lookup/lookup.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
770
768
  endoreg_db/views/requirement_lookup/lookup_store.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
771
769
  endoreg_db/views/stats/__init__.py,sha256=VHxrW0-RAWYki_89jWWJ0TrD7Nb0D3m-VjYV6bvP2k4,259
772
770
  endoreg_db/views/stats/stats_views.py,sha256=v9ue1BKXdcApOgyolgNiT3hazx1xSVVvo26r91IozWY,8656
773
- endoreg_db/views/video/__init__.py,sha256=dm9BsgcB35kPq4Dn9rT6yoGuIkIHxYtVLEVGaAExOrA,1384
774
- endoreg_db/views/video/correction.py,sha256=ioO52MU8bn7AvkVlU0D40EdxvogPOGtx30St5h9meDA,25656
771
+ endoreg_db/views/video/__init__.py,sha256=wRYF-M3amwlmTRlJ7nAYQZiwS0QgLLPxH3pPtHSQy-A,1288
772
+ endoreg_db/views/video/correction.py,sha256=VEzpnDPCAhsYatXVRZhGZA5FpFS_t9mENs89zFJsoYo,19750
775
773
  endoreg_db/views/video/reimport.py,sha256=gSDBQ_Bam2xpJIj1SIMoLKnoBDBRgQ9V_TZdK9OICrI,8959
776
774
  endoreg_db/views/video/segmentation.py,sha256=jzsLB95rYnHALSX2E_QNpAM9BpE1pbteOBxcAr_EjZo,11758
777
775
  endoreg_db/views/video/task_status.py,sha256=PXaesTS4R7Uhu9WBaTL4lscpOschVqyR32zVDUuSbfw,1770
@@ -785,9 +783,8 @@ endoreg_db/views/video/video_media.py,sha256=fvMQmSM1a-3rxpx_wK0wee9sRXV3EZz2bF8
785
783
  endoreg_db/views/video/video_meta.py,sha256=C1wBMTtQb_yzEUrhFGAy2UHEWMk_CbU75WXX_5z00sE,1021
786
784
  endoreg_db/views/video/video_processing_history.py,sha256=mhFuS8RG5GV8E-lTtuD0qrq-bIpnUFp8vy9aERfC-J8,770
787
785
  endoreg_db/views/video/video_remove_frames.py,sha256=2FmvNrSPM0fUXiBxINN6vBUUDCqDlBkNcGR3WsLDgKo,1696
788
- endoreg_db/views/video/video_reprocess.py,sha256=IVlt_ASldNy5BywOecgkl1OT7l2SRijf78PUutMansA,1294
789
786
  endoreg_db/views/video/video_stream.py,sha256=kLyuf0ORTmsLeYUQkTQ6iRYqlIQozWhMMR3Lhfe_trk,12148
790
- endoreg_db-0.8.2.4.dist-info/METADATA,sha256=R_W40-C35-lrZiRGKehgXwebEUo7oHwY8zOgvAVfFcM,14772
791
- endoreg_db-0.8.2.4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
792
- endoreg_db-0.8.2.4.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
793
- endoreg_db-0.8.2.4.dist-info/RECORD,,
787
+ endoreg_db-0.8.2.5.dist-info/METADATA,sha256=JOdQtG1Bilq-iXh5pnJnhft411306plJg0udZDasq5Q,14770
788
+ endoreg_db-0.8.2.5.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
789
+ endoreg_db-0.8.2.5.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
790
+ endoreg_db-0.8.2.5.dist-info/RECORD,,
@@ -1,11 +0,0 @@
1
- # This file is likely obsolete after refactoring into the video_file_meta submodule.
2
- # Its contents should have been moved to files like:
3
- # - video_file_meta/text_meta.py
4
- # - video_file_meta/video_meta.py
5
- # - video_file_meta/initialize_video_specs.py
6
- # - video_file_meta/get_fps.py
7
- # - video_file_meta/get_endo_roi.py
8
- # - video_file_meta/get_crop_template.py
9
- #
10
- # Please ensure all logic has been migrated and consider deleting this file.
11
- pass