Enhance logging configuration in WSGI setup for better debugging and error handling
This commit is contained in:
+68
-3
@@ -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
|
||||||
images = list(series.images.all())
|
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)
|
num_images = len(images)
|
||||||
|
|
||||||
tag_values = {}
|
tag_values = {}
|
||||||
tag_counts = {}
|
tag_counts = {}
|
||||||
|
|
||||||
for img in images:
|
for img in images:
|
||||||
ds = img.get_dicom_data()
|
# 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:
|
if not ds:
|
||||||
continue
|
continue
|
||||||
# Iterate elements
|
# Iterate elements
|
||||||
|
|||||||
+3
-1
@@ -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")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user