Skip to content

Commit 9ffd005

Browse files
Revert last 3 commits that were wrongly pushed into main.
Revert "Update poetry and lock." This reverts commit 44d33c6. Revert "Replace default encoder lambdas with named functions to facilitate debugging." This reverts commit 83ac429. Revert "Allow JSONEncoder subclasses to have isolated namespaces to compose with their base class without impacting other subclasses." This reverts commit 9e66fac.
1 parent 9e66fac commit 9ffd005

File tree

5 files changed

+348
-551
lines changed

5 files changed

+348
-551
lines changed

jsonstar/default_encoders.py

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,8 @@
1818
try:
1919
from pydantic import BaseModel
2020

21-
def pydantic_dict(o):
22-
return o.dict()
23-
2421
PYDANTIC_TYPED_ENCODERS = {
25-
BaseModel: pydantic_dict,
22+
BaseModel: lambda o: o.dict(),
2623
}
2724
except ImportError:
2825
PYDANTIC_TYPED_ENCODERS = {}
@@ -31,10 +28,7 @@ def pydantic_dict(o):
3128
try:
3229
import attrs
3330

34-
def attrs_dict(o):
35-
return attrs.asdict(o)
36-
37-
ATTRS_FUNCTIONAL_ENCODERS = [attrs_dict]
31+
ATTRS_FUNCTIONAL_ENCODERS = [lambda o: attrs.asdict(o)]
3832
except ImportError:
3933
ATTRS_FUNCTIONAL_ENCODERS = ()
4034

@@ -50,12 +44,8 @@ def encode_timedelta_as_iso_string(duration):
5044
return f"{sign}P{days}DT{hours:02d}H{minutes:02d}M{seconds:02d}{ms}S"
5145

5246

53-
def dataclasses_asdict(o):
54-
return dataclasses.asdict(o)
55-
56-
5747
DEFAULT_FUNCTIONAL_ENCODERS = [
58-
dataclasses_asdict,
48+
lambda o: dataclasses.asdict(o),
5949
*ATTRS_FUNCTIONAL_ENCODERS,
6050
]
6151

jsonstar/encoder.py

Lines changed: 7 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -20,58 +20,26 @@ def __setitem__(self, type_, function):
2020
self.move_to_end(base)
2121

2222

23-
class EncoderMeta(type):
24-
def __new__(mcs, name, bases, namespace):
25-
if "_default_functional_encoders" not in namespace:
26-
namespace["_default_functional_encoders"] = []
27-
28-
if "_default_typed_encoders" not in namespace:
29-
namespace["_default_typed_encoders"] = TypedEncoderRegistry()
30-
31-
return super().__new__(mcs, name, bases, namespace)
32-
33-
34-
class JSONEncoderStar(stdlib_json.JSONEncoder, metaclass=EncoderMeta):
23+
class JSONEncoderStar(stdlib_json.JSONEncoder):
3524
class FUNCTIONAL:
3625
"""Sentinel type to register a functional encoder."""
3726

38-
_default_typed_encoders = TypedEncoderRegistry(DEFAULT_TYPED_ENCODERS)
39-
_default_functional_encoders = DEFAULT_FUNCTIONAL_ENCODERS
27+
default_typed_encoders = TypedEncoderRegistry(DEFAULT_TYPED_ENCODERS)
28+
default_functional_encoders = DEFAULT_FUNCTIONAL_ENCODERS
4029

4130
def __init__(self, *args, functional_encoders=(), typed_encoders: dict[type, callable] = NULL_DICT, **kwargs):
4231
super().__init__(*args, **kwargs)
4332

4433
self._typed_encoders = TypedEncoderRegistry(typed_encoders)
4534
self._functional_encoders = [*functional_encoders]
4635

47-
@classmethod
48-
def default_functional_encoders(cls):
49-
if cls is JSONEncoderStar:
50-
return cls._default_functional_encoders
51-
else:
52-
return cls._default_functional_encoders + cls.__base__.default_functional_encoders()
53-
54-
@classmethod
55-
def default_typed_encoders(cls):
56-
if cls is JSONEncoderStar:
57-
return cls._default_typed_encoders
58-
else:
59-
a = cls._default_typed_encoders
60-
b = cls.__base__.default_typed_encoders()
61-
c = ChainMap(a, b)
62-
d = TypedEncoderRegistry(c)
63-
return d
64-
# return TypedEncoderRegistry(ChainMap(cls.__base__.default_typed_encoders(), cls._default_typed_encoders))
65-
6636
@property
6737
def functional_encoders(self):
68-
return chain(self._functional_encoders, self.default_functional_encoders())
38+
return chain(self._functional_encoders, self.default_functional_encoders)
6939

7040
@property
7141
def typed_encoders(self):
72-
i = self._typed_encoders
73-
base = self.default_typed_encoders()
74-
return ChainMap(i, base)
42+
return ChainMap(self._typed_encoders, self.default_typed_encoders)
7543

7644
def register(self, function, type_=FUNCTIONAL):
7745
if type_ is self.FUNCTIONAL:
@@ -82,9 +50,9 @@ def register(self, function, type_=FUNCTIONAL):
8250
@classmethod
8351
def register_default_encoder(cls, function, type_=FUNCTIONAL):
8452
if type_ is cls.FUNCTIONAL:
85-
cls._default_functional_encoders.append(function)
53+
cls.default_functional_encoders.append(function)
8654
else:
87-
cls._default_typed_encoders[type_] = function
55+
cls.default_typed_encoders[type_] = function
8856

8957
def default(self, o) -> str:
9058
for base, encoder in self.typed_encoders.items():

0 commit comments

Comments
 (0)