Enhance logging configuration in WSGI setup for better debugging and error handling
This commit is contained in:
+66
-1
@@ -4800,6 +4800,11 @@ def series_dicom_json(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
|
||||
series = None
|
||||
try:
|
||||
@@ -4809,18 +4814,78 @@ def series_tags_partial(request, pk):
|
||||
series = None
|
||||
|
||||
if series is None:
|
||||
# Try exact match first
|
||||
series = Series.objects.filter(series_instance_uid=pk).first()
|
||||
|
||||
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())
|
||||
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)
|
||||
|
||||
tag_values = {}
|
||||
tag_counts = {}
|
||||
|
||||
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()
|
||||
except Exception:
|
||||
# Defensive: skip items that don't expose expected methods
|
||||
continue
|
||||
if not ds:
|
||||
continue
|
||||
# Iterate elements
|
||||
|
||||
+3
-1
@@ -34,12 +34,14 @@ try:
|
||||
enqueue=True,
|
||||
serialize=True,
|
||||
)
|
||||
logger.debug("Loguru logging configured with stdout and file sinks")
|
||||
except Exception:
|
||||
# Best-effort only — don't crash WSGI startup if logging can't be configured
|
||||
try:
|
||||
logger.add(sys.stderr)
|
||||
logger.add(sys.stderr, level="DEBUG", enqueue=True, backtrace=False, diagnose=False)
|
||||
except Exception:
|
||||
pass
|
||||
logger.debug("Failed to configure Loguru logging sinks, continuing without file logging")
|
||||
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "rad.settings")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user