endoreg-db 0.8.5.2__py3-none-any.whl → 0.8.5.4__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/models/metadata/sensitive_meta_logic.py +97 -15
- {endoreg_db-0.8.5.2.dist-info → endoreg_db-0.8.5.4.dist-info}/METADATA +1 -1
- {endoreg_db-0.8.5.2.dist-info → endoreg_db-0.8.5.4.dist-info}/RECORD +5 -5
- {endoreg_db-0.8.5.2.dist-info → endoreg_db-0.8.5.4.dist-info}/WHEEL +0 -0
- {endoreg_db-0.8.5.2.dist-info → endoreg_db-0.8.5.4.dist-info}/licenses/LICENSE +0 -0
|
@@ -215,7 +215,7 @@ def create_pseudo_examiner_logic(instance: "SensitiveMeta") -> "Examiner":
|
|
|
215
215
|
)
|
|
216
216
|
# Ensure default center exists or handle appropriately
|
|
217
217
|
try:
|
|
218
|
-
default_center = Center.objects.
|
|
218
|
+
default_center = Center.objects.get(name="endoreg_db_demo")
|
|
219
219
|
except Center.DoesNotExist:
|
|
220
220
|
logger.error(
|
|
221
221
|
"Default center 'endoreg_db_demo' not found. Cannot create default examiner."
|
|
@@ -448,7 +448,50 @@ def perform_save_logic(instance: "SensitiveMeta") -> "Examiner":
|
|
|
448
448
|
def create_sensitive_meta_from_dict(
|
|
449
449
|
cls: Type["SensitiveMeta"], data: Dict[str, Any]
|
|
450
450
|
) -> "SensitiveMeta":
|
|
451
|
-
"""
|
|
451
|
+
"""
|
|
452
|
+
Create a SensitiveMeta instance from a dictionary.
|
|
453
|
+
|
|
454
|
+
**Center handling:**
|
|
455
|
+
This function accepts TWO ways to specify the center:
|
|
456
|
+
1. `center` (Center object) - Directly pass a Center instance
|
|
457
|
+
2. `center_name` (string) - Pass the center name as a string (will be resolved to Center object)
|
|
458
|
+
|
|
459
|
+
At least ONE of these must be provided.
|
|
460
|
+
|
|
461
|
+
**Example usage:**
|
|
462
|
+
```python
|
|
463
|
+
# Option 1: With Center object
|
|
464
|
+
data = {
|
|
465
|
+
"patient_first_name": "Patient",
|
|
466
|
+
"patient_last_name": "Unknown",
|
|
467
|
+
"patient_dob": date(1990, 1, 1),
|
|
468
|
+
"examination_date": date.today(),
|
|
469
|
+
"center": center_obj, # ← Center object
|
|
470
|
+
}
|
|
471
|
+
sm = SensitiveMeta.create_from_dict(data)
|
|
472
|
+
|
|
473
|
+
# Option 2: With center name string
|
|
474
|
+
data = {
|
|
475
|
+
"patient_first_name": "Patient",
|
|
476
|
+
"patient_last_name": "Unknown",
|
|
477
|
+
"patient_dob": date(1990, 1, 1),
|
|
478
|
+
"examination_date": date.today(),
|
|
479
|
+
"center_name": "university_hospital_wuerzburg", # ← String
|
|
480
|
+
}
|
|
481
|
+
sm = SensitiveMeta.create_from_dict(data)
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
Args:
|
|
485
|
+
cls: The SensitiveMeta class
|
|
486
|
+
data: Dictionary containing field values
|
|
487
|
+
|
|
488
|
+
Returns:
|
|
489
|
+
SensitiveMeta: The created instance
|
|
490
|
+
|
|
491
|
+
Raises:
|
|
492
|
+
ValueError: If neither center nor center_name is provided
|
|
493
|
+
ValueError: If center_name does not match any Center in database
|
|
494
|
+
"""
|
|
452
495
|
|
|
453
496
|
field_names = {
|
|
454
497
|
f.name
|
|
@@ -585,15 +628,29 @@ def create_sensitive_meta_from_dict(
|
|
|
585
628
|
)
|
|
586
629
|
selected_data.pop("examination_date", None)
|
|
587
630
|
|
|
588
|
-
# Handle Center
|
|
631
|
+
# Handle Center - accept both center_name (string) and center (object)
|
|
632
|
+
from ..administration import Center
|
|
633
|
+
|
|
634
|
+
center = data.get("center") # First try direct Center object
|
|
589
635
|
center_name = data.get("center_name")
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
center
|
|
636
|
+
|
|
637
|
+
if center is not None:
|
|
638
|
+
# Center object provided directly - validate it's a Center instance
|
|
639
|
+
if not isinstance(center, Center):
|
|
640
|
+
raise ValueError(f"'center' must be a Center instance, got {type(center)}")
|
|
594
641
|
selected_data["center"] = center
|
|
595
|
-
|
|
596
|
-
|
|
642
|
+
elif center_name:
|
|
643
|
+
# center_name string provided - resolve to Center object
|
|
644
|
+
try:
|
|
645
|
+
center = Center.objects.get(name=center_name)
|
|
646
|
+
selected_data["center"] = center
|
|
647
|
+
except Center.DoesNotExist:
|
|
648
|
+
raise ValueError(f"Center with name '{center_name}' does not exist.")
|
|
649
|
+
else:
|
|
650
|
+
# Neither center nor center_name provided
|
|
651
|
+
raise ValueError(
|
|
652
|
+
"Either 'center' (Center object) or 'center_name' (string) is required in data dictionary."
|
|
653
|
+
)
|
|
597
654
|
|
|
598
655
|
# Handle Names and Gender
|
|
599
656
|
first_name = selected_data.get("patient_first_name") or DEFAULT_UNKNOWN_NAME
|
|
@@ -708,17 +765,37 @@ def update_sensitive_meta_from_dict(
|
|
|
708
765
|
k: v for k, v in data.items() if k in field_names and k not in excluded_fields
|
|
709
766
|
}
|
|
710
767
|
|
|
711
|
-
# Handle potential Center update
|
|
768
|
+
# Handle potential Center update - accept both center_name (string) and center (object)
|
|
769
|
+
from ..administration import Center
|
|
770
|
+
|
|
771
|
+
center = data.get("center") # First try direct Center object
|
|
712
772
|
center_name = data.get("center_name")
|
|
713
|
-
|
|
773
|
+
|
|
774
|
+
if center is not None:
|
|
775
|
+
# Center object provided directly - validate and update
|
|
776
|
+
if isinstance(center, Center):
|
|
777
|
+
instance.center = center
|
|
778
|
+
logger.debug(f"Updated center from Center object: {center.name}")
|
|
779
|
+
else:
|
|
780
|
+
logger.warning(
|
|
781
|
+
f"Invalid center type {type(center)}, expected Center instance. Ignoring."
|
|
782
|
+
)
|
|
783
|
+
# Remove from selected_data to prevent override
|
|
784
|
+
selected_data.pop("center", None)
|
|
785
|
+
elif center_name:
|
|
786
|
+
# center_name string provided - resolve to Center object
|
|
714
787
|
try:
|
|
715
|
-
|
|
716
|
-
instance.center =
|
|
717
|
-
|
|
788
|
+
center_obj = Center.objects.get(name=center_name)
|
|
789
|
+
instance.center = center_obj
|
|
790
|
+
logger.debug(f"Updated center from center_name string: {center_name}")
|
|
791
|
+
except Center.DoesNotExist:
|
|
718
792
|
logger.warning(
|
|
719
793
|
f"Center '{center_name}' not found during update. Keeping existing center."
|
|
720
794
|
)
|
|
721
|
-
|
|
795
|
+
else:
|
|
796
|
+
# Both are None/missing - remove 'center' from selected_data to preserve existing value
|
|
797
|
+
selected_data.pop("center", None)
|
|
798
|
+
# If both are None/missing, keep existing center (no update needed)
|
|
722
799
|
|
|
723
800
|
# Set examiner names if provided, before calling save
|
|
724
801
|
examiner_first_name = data.get("examiner_first_name")
|
|
@@ -801,6 +878,11 @@ def update_sensitive_meta_from_dict(
|
|
|
801
878
|
# Update other attributes from selected_data
|
|
802
879
|
patient_name_changed = False
|
|
803
880
|
for k, v in selected_data.items():
|
|
881
|
+
# Skip None values to avoid overwriting existing data
|
|
882
|
+
if v is None:
|
|
883
|
+
logger.debug(f"Skipping field '{k}' during update because value is None")
|
|
884
|
+
continue
|
|
885
|
+
|
|
804
886
|
# Avoid overwriting examiner names if they were just explicitly set
|
|
805
887
|
if (
|
|
806
888
|
k not in ["examiner_first_name", "examiner_last_name"]
|
|
@@ -468,7 +468,7 @@ endoreg_db/models/metadata/model_meta.py,sha256=F_r-PTLeNi4J-4EaGCQkGIguhdl7Bwba
|
|
|
468
468
|
endoreg_db/models/metadata/model_meta_logic.py,sha256=vAbNDaoZygH8xOCulWlXoHoR1T0BSvr9kIloxjzhfjo,12533
|
|
469
469
|
endoreg_db/models/metadata/pdf_meta.py,sha256=BTmpSgqxmPKi0apcNjyrZAS4AFKCPXVdBd6VBeyyv6E,3174
|
|
470
470
|
endoreg_db/models/metadata/sensitive_meta.py,sha256=ekLHrW-b5uYcjfkRd0EW5ncx5ef8Bu-K6msDkpWCAbk,13034
|
|
471
|
-
endoreg_db/models/metadata/sensitive_meta_logic.py,sha256=
|
|
471
|
+
endoreg_db/models/metadata/sensitive_meta_logic.py,sha256=FRkBX_EgR2cfXO2_7TzllyceJJgU2lfGPkGsPGiLF2E,43119
|
|
472
472
|
endoreg_db/models/metadata/video_meta.py,sha256=c6xWdLW3uNqJ5VPJXHCxXA3mbXw-b0uR54-TOS3qL2Q,14966
|
|
473
473
|
endoreg_db/models/metadata/video_prediction_logic.py,sha256=j5N82mHtiomeeIaf1HA65kT5d0htQfJmbI2bJb8mpxQ,7677
|
|
474
474
|
endoreg_db/models/metadata/video_prediction_meta.py,sha256=EyfctAAAVcW9L0gf76ZBc9-G8MLMcD-tc2kkjaaLH4w,10592
|
|
@@ -788,7 +788,7 @@ endoreg_db/views/video/video_meta.py,sha256=C1wBMTtQb_yzEUrhFGAy2UHEWMk_CbU75WXX
|
|
|
788
788
|
endoreg_db/views/video/video_processing_history.py,sha256=mhFuS8RG5GV8E-lTtuD0qrq-bIpnUFp8vy9aERfC-J8,770
|
|
789
789
|
endoreg_db/views/video/video_remove_frames.py,sha256=2FmvNrSPM0fUXiBxINN6vBUUDCqDlBkNcGR3WsLDgKo,1696
|
|
790
790
|
endoreg_db/views/video/video_stream.py,sha256=kLyuf0ORTmsLeYUQkTQ6iRYqlIQozWhMMR3Lhfe_trk,12148
|
|
791
|
-
endoreg_db-0.8.5.
|
|
792
|
-
endoreg_db-0.8.5.
|
|
793
|
-
endoreg_db-0.8.5.
|
|
794
|
-
endoreg_db-0.8.5.
|
|
791
|
+
endoreg_db-0.8.5.4.dist-info/METADATA,sha256=F2Ma_FJzdqwLhv8CoQlTc3U2lXg-axA8T9EJd2KumPo,14719
|
|
792
|
+
endoreg_db-0.8.5.4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
793
|
+
endoreg_db-0.8.5.4.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
794
|
+
endoreg_db-0.8.5.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|