Skip to content

Commit 79a79c3

Browse files
fix: serialize typing classes assigned to fields
1 parent a6ef70f commit 79a79c3

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

langfuse/serializer.py

+5
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import enum
77
from json import JSONEncoder
88
from typing import Any
9+
import typing
910
from uuid import UUID
1011
from collections.abc import Sequence
1112
from langfuse.api.core import serialize_datetime
@@ -107,6 +108,10 @@ def default(self, obj: Any):
107108
if isinstance(obj, Sequence):
108109
return [self.default(item) for item in obj]
109110

111+
# Check if obj is a type or a generic alias
112+
if isinstance(obj, type) or typing.get_origin(obj) is not None:
113+
return f"<{obj.__name__}>"
114+
110115
if hasattr(obj, "__slots__"):
111116
return self.default(
112117
{slot: getattr(obj, slot, None) for slot in obj.__slots__}

tests/test_serializer.py

+12
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from datetime import datetime, date, timezone
2+
import typing
23
from uuid import UUID
34
from enum import Enum
45
from dataclasses import dataclass
@@ -182,6 +183,17 @@ def __init__(self):
182183
assert json.loads(serializer.encode(obj)) == {"field": "value"}
183184

184185

186+
def test_slots_types():
187+
class SlotClass:
188+
def __init__(self):
189+
self.something = typing.Sequence[int]
190+
191+
obj = SlotClass()
192+
193+
serializer = EventSerializer()
194+
assert json.loads(serializer.encode(obj)) == {"something": "<Sequence>"}
195+
196+
185197
def test_numpy_float32():
186198
import numpy as np
187199

0 commit comments

Comments
 (0)