endoreg-db 0.8.2.3__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,12 +24,11 @@ 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,
31
+ VideoCorrectionView,
33
32
  )
34
33
  # ---------------------------------------------------------------------------------------
35
34
  # ANNOTATION API ENDPOINTS
@@ -66,6 +65,10 @@ urlpatterns = [
66
65
  # - History: Track all correction operations
67
66
  # ---------------------------------------------------------------------------------------
68
67
 
68
+ # Video Correction API
69
+ # GET /api/media/videos/video-correction/{id}/ - Get video details for correction
70
+ path("media/videos/video-correction/<int:pk>", VideoCorrectionView.as_view(), name="video-correction"),
71
+
69
72
  # Video Metadata API
70
73
  # GET /api/media/videos/<int:pk>/metadata/
71
74
  # Returns analysis results (sensitive frame count, ratio, frame IDs)
@@ -80,7 +83,6 @@ urlpatterns = [
80
83
  # POST /api/media/videos/<int:pk>/analyze/
81
84
  # Analyzes video for sensitive frames using MiniCPM-o 2.6 or OCR+LLM
82
85
  # Body: { detection_method: 'minicpm'|'ocr_llm'|'hybrid', sample_interval: 30 }
83
- path("media/videos/<int:pk>/analyze/", VideoAnalyzeView.as_view(), name="video-analyze"),
84
86
 
85
87
  # Video Masking API
86
88
  # POST /api/media/videos/<int:pk>/apply-mask/
@@ -93,12 +95,7 @@ urlpatterns = [
93
95
  # Removes specified frames from video
94
96
  # Body: { frame_list: [10,20,30] OR frame_ranges: '10-20,30' OR detection_method: 'automatic' }
95
97
  path("media/videos/<int:pk>/remove-frames/", VideoRemoveFramesView.as_view(), name="video-remove-frames"),
96
-
97
- # Video Reprocess API endpoint (modern media framework)
98
- # POST /api/media/videos/<int:pk>/reprocess/
99
- # Re-runs entire anonymization pipeline for a video (correction workflow)
100
- path("media/videos/<int:pk>/reprocess/", VideoReprocessView.as_view(), name="video-reprocess"),
101
-
98
+
102
99
  # ---------------------------------------------------------------------------------------
103
100
  # VIDEO SEGMENT API ENDPOINTS (Modern Media Framework - October 14, 2025)
104
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,
@@ -150,6 +139,7 @@ from .video import (
150
139
  rerun_segmentation,
151
140
  video_timeline_view,
152
141
  VideoExaminationViewSet,
142
+ VideoCorrectionView,
153
143
  )
154
144
 
155
145
  __all__ = [
@@ -265,10 +255,10 @@ __all__ = [
265
255
  # Video Views (Phase 1.1 - Implemented)
266
256
  'VideoMetadataView',
267
257
  'VideoProcessingHistoryView',
268
- 'VideoAnalyzeView',
269
258
  'VideoApplyMaskView',
270
259
  'VideoRemoveFramesView',
271
- 'VideoReprocessView',
260
+
261
+ 'VideoCorrectionView',
272
262
 
273
263
  # Video Views (Existing)
274
264
  'VideoReimportView',
@@ -1,10 +1,9 @@
1
1
  from .correction import (
2
2
  VideoMetadataView,
3
3
  VideoProcessingHistoryView,
4
- VideoAnalyzeView,
5
4
  VideoApplyMaskView,
6
5
  VideoRemoveFramesView,
7
- VideoReprocessView,
6
+ VideoCorrectionView,
8
7
  )
9
8
 
10
9
  from ..media.video_media import VideoMediaView
@@ -33,16 +32,14 @@ __all__ = [
33
32
  # Video Correction (Phase 1.1) - Implemented
34
33
  'VideoMetadataView',
35
34
  'VideoProcessingHistoryView',
36
- 'VideoAnalyzeView',
37
35
  'VideoApplyMaskView',
38
36
  'VideoRemoveFramesView',
39
- 'VideoReprocessView',
40
37
 
41
38
  # Phase 1.2: Media Management Views ✅ IMPLEMENTED
42
39
  'VideoMediaView',
43
40
 
44
41
  # TODO Phase 1.2+: Future views
45
- # 'VideoCorrectionView',
42
+ 'VideoCorrectionView',
46
43
  # 'TaskStatusView',
47
44
  # 'VideoDownloadProcessedView',
48
45
 
@@ -24,8 +24,33 @@ from endoreg_db.models import VideoFile, VideoMetadata, VideoProcessingHistory,
24
24
  from endoreg_db.serializers import VideoMetadataSerializer, VideoProcessingHistorySerializer
25
25
  from lx_anonymizer import FrameCleaner
26
26
 
27
+ from endoreg_db.models import VideoFile
28
+ from endoreg_db.serializers.video.video_file_detail import VideoDetailSerializer
29
+ from endoreg_db.utils.permissions import EnvironmentAwarePermission
30
+
27
31
  logger = logging.getLogger(__name__)
28
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
+
43
+
44
+ class VideoCorrectionView(APIView):
45
+ """
46
+ GET /api/video/media/video-correction/{id}/ - Get video details for correction
47
+ """
48
+ permission_classes = [EnvironmentAwarePermission]
49
+
50
+ def get(self, request, pk):
51
+ video = get_object_or_404(VideoFile, pk=pk)
52
+ ser = VideoDetailSerializer(video, context={"request": request})
53
+ return Response(ser.data, status=status.HTTP_200_OK)
29
54
 
30
55
  def update_segments_after_frame_removal(video: VideoFile, removed_frames: list) -> dict:
31
56
  """
@@ -198,113 +223,6 @@ class VideoProcessingHistoryView(APIView):
198
223
  return Response(serializer.data)
199
224
 
200
225
 
201
- class VideoAnalyzeView(APIView):
202
- """
203
- POST /api/media/videos/{pk}/analyze/
204
-
205
- Analyze video for sensitive frames using MiniCPM-o 2.6 or OCR+LLM.
206
-
207
- Request body (optional):
208
- {
209
- "detection_method": "minicpm", // or "ocr_llm", "hybrid"
210
- "sample_interval": 30 // analyze every Nth frame (default: adaptive)
211
- }
212
-
213
- Returns:
214
- {
215
- "sensitive_frame_count": 42,
216
- "total_frames": 840,
217
- "sensitive_ratio": 0.05,
218
- "sensitive_frame_ids": [10, 15, 20, ...],
219
- "sensitive_percentage": 5.0,
220
- "detection_method": "minicpm",
221
- "message": "Analysis complete"
222
- }
223
- """
224
-
225
- def post(self, request, pk):
226
- """Analyze video for sensitive content."""
227
- video = get_object_or_404(VideoFile, pk=pk)
228
-
229
- # Extract parameters
230
- detection_method = request.data.get('detection_method', 'minicpm')
231
- sample_interval = request.data.get('sample_interval', None)
232
-
233
- try:
234
- # Initialize FrameCleaner with appropriate detection method
235
- use_minicpm = detection_method in ['minicpm', 'hybrid']
236
- frame_cleaner = FrameCleaner(use_minicpm=use_minicpm)
237
-
238
- # Get video path
239
- video_path = video.raw_file.path if hasattr(video.raw_file, 'path') else str(video.raw_file)
240
-
241
- # Run analysis (uses existing FrameCleaner.analyze_video_sensitivity)
242
- analysis_result = frame_cleaner.analyze_video_sensitivity(
243
- video_path=video_path,
244
- sample_interval=sample_interval
245
- )
246
-
247
- # Extract results
248
- sensitive_frame_ids = analysis_result.get('sensitive_frame_ids', [])
249
- total_frames = analysis_result.get('total_frames', 0)
250
- sensitive_count = len(sensitive_frame_ids)
251
- sensitive_ratio = sensitive_count / total_frames if total_frames > 0 else 0.0
252
-
253
- # Update or create metadata
254
- metadata, created = VideoMetadata.objects.update_or_create(
255
- video=video,
256
- defaults={
257
- 'sensitive_frame_count': sensitive_count,
258
- 'sensitive_ratio': sensitive_ratio,
259
- 'sensitive_frame_ids': json.dumps(sensitive_frame_ids)
260
- }
261
- )
262
-
263
- # Create processing history record
264
- VideoProcessingHistory.objects.create(
265
- video=video,
266
- operation=VideoProcessingHistory.OPERATION_ANALYSIS,
267
- status=VideoProcessingHistory.STATUS_SUCCESS,
268
- config={
269
- 'detection_method': detection_method,
270
- 'sample_interval': sample_interval
271
- },
272
- details=f"Found {sensitive_count} sensitive frames out of {total_frames} total frames"
273
- )
274
-
275
- logger.info(f"Video {pk} analyzed: {sensitive_count}/{total_frames} sensitive frames")
276
-
277
- return Response({
278
- 'sensitive_frame_count': sensitive_count,
279
- 'total_frames': total_frames,
280
- 'sensitive_ratio': sensitive_ratio,
281
- 'sensitive_frame_ids': sensitive_frame_ids,
282
- 'sensitive_percentage': sensitive_ratio * 100,
283
- 'detection_method': detection_method,
284
- 'message': 'Analysis complete'
285
- })
286
-
287
- except Exception as e:
288
- logger.error(f"Video analysis failed for {pk}: {str(e)}", exc_info=True)
289
-
290
- # Create failure record
291
- VideoProcessingHistory.objects.create(
292
- video=video,
293
- operation=VideoProcessingHistory.OPERATION_ANALYSIS,
294
- status=VideoProcessingHistory.STATUS_FAILURE,
295
- config={
296
- 'detection_method': detection_method,
297
- 'sample_interval': sample_interval
298
- },
299
- details=str(e)
300
- )
301
-
302
- return Response(
303
- {'error': f'Analysis failed: {str(e)}'},
304
- status=status.HTTP_500_INTERNAL_SERVER_ERROR
305
- )
306
-
307
-
308
226
  class VideoApplyMaskView(APIView):
309
227
  """
310
228
  POST /api/media/videos/{pk}/apply-mask/
@@ -378,7 +296,7 @@ class VideoApplyMaskView(APIView):
378
296
  frame_cleaner = FrameCleaner()
379
297
 
380
298
  # Get video paths
381
- 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))
382
300
  output_path = Path(settings.MEDIA_ROOT) / 'anonym_videos' / f"{video.uuid}_masked.mp4"
383
301
  output_path.parent.mkdir(parents=True, exist_ok=True)
384
302
 
@@ -390,7 +308,6 @@ class VideoApplyMaskView(APIView):
390
308
  # Convert ROI to mask config
391
309
  mask_config = frame_cleaner._create_mask_config_from_roi(
392
310
  endoscope_roi=roi,
393
- processor_rois=None
394
311
  )
395
312
 
396
313
  # Apply mask (uses existing FrameCleaner._mask_video)
@@ -400,16 +317,16 @@ class VideoApplyMaskView(APIView):
400
317
  success = frame_cleaner._mask_video(
401
318
  input_video=video_path,
402
319
  mask_config=mask_config,
403
- output_video=str(output_path)
320
+ output_video=output_path
404
321
  )
405
322
 
406
323
  processing_time = time.time() - start_time
407
324
 
408
325
  if success:
409
326
  # Update video record with anonymized file
410
- video.anonymized_file = f"anonym_videos/{video.uuid}_masked.mp4"
411
- video.save()
412
-
327
+ from django.core.files import File
328
+ processed_file_path = output_path
329
+ update_processed_file(video, processed_file_path)
413
330
  # Mark history as success
414
331
  history.mark_success(
415
332
  output_file=str(output_path),
@@ -531,7 +448,7 @@ class VideoRemoveFramesView(APIView):
531
448
  frame_cleaner = FrameCleaner()
532
449
 
533
450
  # Get video paths
534
- 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))
535
452
  output_path = Path(settings.MEDIA_ROOT) / 'anonym_videos' / f"{video.uuid}_cleaned.mp4"
536
453
  output_path.parent.mkdir(parents=True, exist_ok=True)
537
454
 
@@ -542,15 +459,15 @@ class VideoRemoveFramesView(APIView):
542
459
  success = frame_cleaner.remove_frames_from_video(
543
460
  original_video=video_path,
544
461
  frames_to_remove=frames_to_remove,
545
- output_video=str(output_path)
462
+ output_video=output_path
546
463
  )
547
464
 
548
465
  processing_time = time.time() - start_time
549
466
 
550
467
  if success:
551
468
  # Update video record
552
- video.anonymized_file = f"anonym_videos/{video.uuid}_cleaned.mp4"
553
- video.save()
469
+ update_processed_file(video, output_path)
470
+
554
471
 
555
472
  # Phase 1.4: Update LabelVideoSegments (shift frame numbers)
556
473
  segment_update_result = update_segments_after_frame_removal(video, frames_to_remove)
@@ -610,65 +527,4 @@ class VideoRemoveFramesView(APIView):
610
527
  frames.extend(range(start, end + 1))
611
528
  else:
612
529
  frames.append(int(part))
613
- return sorted(set(frames)) # Remove duplicates and sort
614
-
615
-
616
- class VideoReprocessView(APIView):
617
- """
618
- POST /api/media/videos/{pk}/reprocess/
619
-
620
- Re-run entire anonymization pipeline for a video.
621
-
622
- Request body: {} (empty)
623
-
624
- Returns:
625
- {
626
- "message": "Reprocessing started",
627
- "status": "processing_anonymization"
628
- }
629
-
630
- Note: This resets VideoState and triggers video_import service.
631
- """
632
-
633
- def post(self, request, pk):
634
- """Reprocess video through entire anonymization pipeline."""
635
- video = get_object_or_404(VideoFile, pk=pk)
636
-
637
- try:
638
- # Create processing history record
639
- history = VideoProcessingHistory.objects.create(
640
- video=video,
641
- operation=VideoProcessingHistory.OPERATION_REPROCESSING,
642
- status=VideoProcessingHistory.STATUS_PENDING,
643
- config={}
644
- )
645
-
646
- # Reset video state to trigger re-processing
647
- if hasattr(video, 'state') and video.state:
648
- video.state.anonymization_status = 'processing_anonymization'
649
- video.state.save()
650
-
651
- # Clear previous metadata
652
- VideoMetadata.objects.filter(video=video).delete()
653
-
654
- # TODO Phase 1.2: Trigger Celery task for async reprocessing
655
- # task = reprocess_video_task.delay(video.id)
656
- # history.task_id = task.id
657
- # history.save()
658
-
659
- history.mark_success(details="Reprocessing initiated")
660
-
661
- logger.info(f"Video {pk} reprocessing started")
662
-
663
- return Response({
664
- 'message': 'Reprocessing started',
665
- 'status': 'processing_anonymization'
666
- })
667
-
668
- except Exception as e:
669
- logger.error(f"Reprocessing failed for {pk}: {str(e)}", exc_info=True)
670
-
671
- return Response(
672
- {'error': f'Reprocessing failed: {str(e)}'},
673
- status=status.HTTP_500_INTERNAL_SERVER_ERROR
674
- )
530
+ return sorted(set(frames)) # Remove duplicates and sort
@@ -11,7 +11,7 @@ from rest_framework.views import APIView
11
11
 
12
12
  class VideoCorrectionView(APIView):
13
13
  """
14
- GET /api/video-correction/{id}/ - Get video details for correction
14
+ GET /api/video/media/video-correction/{id}/ - Get video details for correction
15
15
  """
16
16
  permission_classes = [EnvironmentAwarePermission]
17
17
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: endoreg-db
3
- Version: 0.8.2.3
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=skIwOoHmDuHH-TFsZOHmFdu_whAk9qhTjLSpYgvRo1k,10880
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=pjQ1k1mptb0cL7yeaLOavfu0y27GVtnTLcObrmrYG5M,6889
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,24 +768,23 @@ 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=jKPKJMmucfVZeTbh2Fy-ynMR2y9CkJv4Q-wmHJk19zE,1361
774
- endoreg_db/views/video/correction.py,sha256=0ZaWqi4Fb-xJ9571d4-P2aJwohdka6djdlS8GFEs8as,25144
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
778
776
  endoreg_db/views/video/timeline.py,sha256=6jxS2gZh3bYH0eZSc-uHQhJwRDwTL6Um3CvaVkTl_pY,1793
779
777
  endoreg_db/views/video/video_analyze.py,sha256=vxQHnXRFH5Y6IaWEmEnE4Svkz6Vjw1O9NEJRafdfOe4,1907
780
778
  endoreg_db/views/video/video_apply_mask.py,sha256=spGK4oXMAKhVotJuwZGndbKKws6klveKe35mbX7Rv6k,1630
781
- endoreg_db/views/video/video_correction.py,sha256=RTJPtxV_vmIgeeKZfYAfiA_FMtq_AN5_YeXThhTqekE,755
779
+ endoreg_db/views/video/video_correction.py,sha256=9mFICVvRSxp0WhGv7ib4d4M1hJs1iIhYmTl2OUIXQAg,767
782
780
  endoreg_db/views/video/video_download_processed.py,sha256=tp5llYJKyQD0WSr4Fvqi-YrgBw2EPPe23E8F8SZbR4w,2000
783
781
  endoreg_db/views/video/video_examination_viewset.py,sha256=77ujdUh8fzTC5Oe2fo4ESLBkwJ10rGhJLlQBpP1eMbQ,13663
784
782
  endoreg_db/views/video/video_media.py,sha256=fvMQmSM1a-3rxpx_wK0wee9sRXV3EZz2bF8jLRAeaIQ,7022
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.3.dist-info/METADATA,sha256=hyVXfvdFDor0dewzKH7kdQf_S-Tnp30Vm0e5dwOyia8,14772
791
- endoreg_db-0.8.2.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
792
- endoreg_db-0.8.2.3.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
793
- endoreg_db-0.8.2.3.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