Skip to content

Commit 35625c3

Browse files
ctruedenclaude
andcommitted
Make object serializability extensible
Now, Python classes just need to implement a for_json method, so that objects can be sent across processes via the Appose JSON protocol. Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 7c3a050 commit 35625c3

File tree

2 files changed

+17
-13
lines changed

2 files changed

+17
-13
lines changed

src/appose/shm.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,13 @@ def dispose(self) -> None:
105105
else:
106106
self.close()
107107

108+
def for_json(self):
109+
return {
110+
"appose_type": "shm",
111+
"name": self.name,
112+
"rsize": self.rsize,
113+
}
114+
108115
def __enter__(self) -> "SharedMemory":
109116
return self
110117

@@ -162,6 +169,14 @@ def ndarray(self):
162169
except ModuleNotFoundError:
163170
raise ImportError("NumPy is not available.")
164171

172+
def for_json(self):
173+
return {
174+
"appose_type": "ndarray",
175+
"dtype": self.dtype,
176+
"shape": self.shape,
177+
"shm": self.shm,
178+
}
179+
165180
def __enter__(self) -> "NDArray":
166181
return self
167182

src/appose/util/message.py

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,8 @@ def decode(the_json: str) -> Args:
3636

3737
class _ApposeJSONEncoder(json.JSONEncoder):
3838
def default(self, obj):
39-
if isinstance(obj, SharedMemory):
40-
return {
41-
"appose_type": "shm",
42-
"name": obj.name,
43-
"rsize": obj.rsize,
44-
}
45-
if isinstance(obj, NDArray):
46-
return {
47-
"appose_type": "ndarray",
48-
"dtype": obj.dtype,
49-
"shape": obj.shape,
50-
"shm": obj.shm,
51-
}
39+
if hasattr(obj, "for_json"):
40+
return obj.for_json()
5241

5342
# If in worker mode and object is not JSON-serializable,
5443
# auto-export it and return a worker_object reference.

0 commit comments

Comments
 (0)