Enhance logging configuration in WSGI setup for better debugging and error handling

This commit is contained in:
Ross
2026-03-02 11:04:51 +00:00
parent b3f5684e69
commit 12e3d47600
2 changed files with 71 additions and 4 deletions
+66 -1
View File
@@ -4800,6 +4800,11 @@ def series_dicom_json(request, pk):
def series_tags_partial(request, pk): def series_tags_partial(request, pk):
logger.info(f"Fetching tags for series {pk}")
try:
print(f"series_tags_partial hit: {pk}")
except Exception:
pass
# Accept either a numeric PK or a SeriesInstanceUID string # Accept either a numeric PK or a SeriesInstanceUID string
series = None series = None
try: try:
@@ -4809,18 +4814,78 @@ def series_tags_partial(request, pk):
series = None series = None
if series is None: if series is None:
# Try exact match first
series = Series.objects.filter(series_instance_uid=pk).first() series = Series.objects.filter(series_instance_uid=pk).first()
if series is None: if series is None:
return HttpResponse(status=404) # Try URL-decoded value and stripped variants
try:
import urllib.parse
decoded = urllib.parse.unquote(pk)
except Exception:
decoded = pk
if decoded != pk:
series = Series.objects.filter(series_instance_uid=decoded).first()
if series is None:
# Fallback to contains (be permissive for slightly mangled UIDs)
try:
series = Series.objects.filter(series_instance_uid__contains=pk).first()
except Exception:
series = None
images = None
if series is not None:
images = list(series.images.all()) images = list(series.images.all())
else:
# If no Series exists yet, try to find uploaded uncategorised dicoms
try:
dicoms = UncategorisedDicom.objects.filter(series_instance_uid=pk)
except Exception:
dicoms = UncategorisedDicom.objects.none()
if not dicoms.exists():
try:
import urllib.parse
decoded = urllib.parse.unquote(pk)
except Exception:
decoded = pk
if decoded != pk:
dicoms = UncategorisedDicom.objects.filter(series_instance_uid=decoded)
if not dicoms.exists():
try:
dicoms = UncategorisedDicom.objects.filter(series_instance_uid__contains=pk)
except Exception:
dicoms = UncategorisedDicom.objects.none()
if not dicoms.exists():
return HttpResponse(status=404)
images = list(dicoms)
num_images = len(images) num_images = len(images)
tag_values = {} tag_values = {}
tag_counts = {} tag_counts = {}
for img in images: for img in images:
# Uploaded uncategorised dicoms use a different API than SeriesImage
try:
if isinstance(img, UncategorisedDicom):
try:
ds = pydicom.dcmread(img.image)
except Exception:
# skip invalid dicoms
continue
else:
ds = img.get_dicom_data() ds = img.get_dicom_data()
except Exception:
# Defensive: skip items that don't expose expected methods
continue
if not ds: if not ds:
continue continue
# Iterate elements # Iterate elements
+3 -1
View File
@@ -34,12 +34,14 @@ try:
enqueue=True, enqueue=True,
serialize=True, serialize=True,
) )
logger.debug("Loguru logging configured with stdout and file sinks")
except Exception: except Exception:
# Best-effort only — don't crash WSGI startup if logging can't be configured # Best-effort only — don't crash WSGI startup if logging can't be configured
try: try:
logger.add(sys.stderr) logger.add(sys.stderr, level="DEBUG", enqueue=True, backtrace=False, diagnose=False)
except Exception: except Exception:
pass pass
logger.debug("Failed to configure Loguru logging sinks, continuing without file logging")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "rad.settings") os.environ.setdefault("DJANGO_SETTINGS_MODULE", "rad.settings")