From 6a67081c7394285170d4420ace6794758b1fa925 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Simon=20K=C3=BCnzel?= <simonk@fsmpi.rwth-aachen.de>
Date: Sun, 13 Oct 2024 19:06:18 +0200
Subject: [PATCH] Fix context serialization bug

---
 src/videoag_common/api_object/__init__.py |  1 +
 src/videoag_common/api_object/object.py   | 16 ++++++++++++++++
 2 files changed, 17 insertions(+)

diff --git a/src/videoag_common/api_object/__init__.py b/src/videoag_common/api_object/__init__.py
index 8617f6f..52283ca 100644
--- a/src/videoag_common/api_object/__init__.py
+++ b/src/videoag_common/api_object/__init__.py
@@ -6,5 +6,6 @@ from .object import (
     VisibilityApiObject,
     api_mapped,
     api_include_in_data,
+    NoSerializationContext
 )
 from .object_class import ApiObjectClass
diff --git a/src/videoag_common/api_object/object.py b/src/videoag_common/api_object/object.py
index 341600b..bd27778 100644
--- a/src/videoag_common/api_object/object.py
+++ b/src/videoag_common/api_object/object.py
@@ -37,6 +37,22 @@ def api_include_in_data(
     return decorator
 
 
+class NoSerializationContext(dict):
+    """
+    A dict which can be used as a context for serialize() to prevent any serialization of objects of a specific type.
+    This dict pretends like all keys are already present. Actually retrieving or updating an item throws an error
+    """
+    
+    def __setitem__(self, __key, __value):
+        raise Exception("Not supported")
+    
+    def __getitem__(self, __key):
+        raise Exception("Not supported")
+    
+    def __contains__(self, __key):
+        return True
+
+
 API_VALUE_OBJECT_CLASSES_BY_ID: dict[str, type["ApiValueObject"]] = {}
 _disable_value_object_registration = False
 
-- 
GitLab