@@ -20,58 +20,26 @@ def __setitem__(self, type_, function):
20
20
self .move_to_end (base )
21
21
22
22
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 ):
35
24
class FUNCTIONAL :
36
25
"""Sentinel type to register a functional encoder."""
37
26
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
40
29
41
30
def __init__ (self , * args , functional_encoders = (), typed_encoders : dict [type , callable ] = NULL_DICT , ** kwargs ):
42
31
super ().__init__ (* args , ** kwargs )
43
32
44
33
self ._typed_encoders = TypedEncoderRegistry (typed_encoders )
45
34
self ._functional_encoders = [* functional_encoders ]
46
35
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
-
66
36
@property
67
37
def functional_encoders (self ):
68
- return chain (self ._functional_encoders , self .default_functional_encoders () )
38
+ return chain (self ._functional_encoders , self .default_functional_encoders )
69
39
70
40
@property
71
41
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 )
75
43
76
44
def register (self , function , type_ = FUNCTIONAL ):
77
45
if type_ is self .FUNCTIONAL :
@@ -82,9 +50,9 @@ def register(self, function, type_=FUNCTIONAL):
82
50
@classmethod
83
51
def register_default_encoder (cls , function , type_ = FUNCTIONAL ):
84
52
if type_ is cls .FUNCTIONAL :
85
- cls ._default_functional_encoders .append (function )
53
+ cls .default_functional_encoders .append (function )
86
54
else :
87
- cls ._default_typed_encoders [type_ ] = function
55
+ cls .default_typed_encoders [type_ ] = function
88
56
89
57
def default (self , o ) -> str :
90
58
for base , encoder in self .typed_encoders .items ():
0 commit comments