@@ -27,8 +27,6 @@ class _TypeConverterRegistry:
27
27
def __init__ (self ):
28
28
"""Constructor."""
29
29
self ._converter_list = []
30
- self ._json_value_types = set (
31
- [int , float , bool , type (None ), list , tuple , dict , str ])
32
30
33
31
def register (
34
32
self ,
@@ -44,11 +42,7 @@ def register(
44
42
):
45
43
raise TypeError ('Argument \' src\' and \' dest\' must be a type or '
46
44
'tuple of types.' )
47
- if isinstance (dest , tuple ):
48
- json_value_convertible = any (d in self ._json_value_types for d in dest )
49
- else :
50
- json_value_convertible = dest in self ._json_value_types
51
- self ._converter_list .append ((src , dest , convert_fn , json_value_convertible ))
45
+ self ._converter_list .append ((src , dest , convert_fn ))
52
46
53
47
def get_converter (
54
48
self , src : Type [Any ], dest : Type [Any ]) -> Optional [Callable [[Any ], Any ]]:
@@ -58,51 +52,30 @@ def get_converter(
58
52
# We may consider more efficient way to do lookup in future.
59
53
# NOTE(daiyip): We do reverse lookup since usually subclass converter
60
54
# is register after base class.
61
- for src_type , dest_type , converter , _ in reversed (self ._converter_list ):
55
+ for src_type , dest_type , converter in reversed (self ._converter_list ):
62
56
if pg_inspect .is_subclass (src , src_type ):
63
57
dest_types = dest_type if isinstance (dest_type , tuple ) else (dest_type ,)
64
58
for dest_type in dest_types :
65
59
if pg_inspect .is_subclass (dest_type , dest ):
66
60
return converter
67
61
return None
68
62
69
- def get_json_value_converter (
70
- self , src : Type [Any ]) -> Optional [Callable [[Any ], Any ]]:
71
- """Get converter from source type to a JSON simple type."""
72
- for src_type , _ , converter , json_value_convertible in reversed (
73
- self ._converter_list ):
74
- if pg_inspect .is_subclass (src , src_type ) and json_value_convertible :
75
- return converter
76
- return None
77
-
78
63
79
64
_TYPE_CONVERTER_REGISTRY = _TypeConverterRegistry ()
80
65
81
66
82
67
def get_converter (
83
- src : Type [Any ], dest : Type [Any ]
68
+ src : Type [Any ], dest : Union [ Type [Any ], Tuple [ Type [ Any ], ...] ]
84
69
) -> Optional [Callable [[Any ], Any ]]:
85
70
"""Get converter from source type to destination type."""
86
- return _TYPE_CONVERTER_REGISTRY .get_converter (src , dest )
87
-
88
-
89
- def get_first_applicable_converter (
90
- src_type : Type [Any ],
91
- dest_type : Union [Type [Any ], Tuple [Type [Any ], ...]]):
92
- """Get first applicable converter."""
93
- dest_types = dest_type if isinstance (dest_type , tuple ) else (dest_type ,)
94
- for dest_type in dest_types :
95
- converter = get_converter (src_type , dest_type )
71
+ dest_types = dest if isinstance (dest , tuple ) else (dest ,)
72
+ for dest in dest_types :
73
+ converter = _TYPE_CONVERTER_REGISTRY .get_converter (src , dest )
96
74
if converter is not None :
97
75
return converter
98
76
return None
99
77
100
78
101
- def get_json_value_converter (src : Type [Any ]) -> Optional [Callable [[Any ], Any ]]:
102
- """Get converter from source type to a JSON simple type."""
103
- return _TYPE_CONVERTER_REGISTRY .get_json_value_converter (src )
104
-
105
-
106
79
def register_converter (
107
80
src_type : Union [Type [Any ], Tuple [Type [Any ], ...]],
108
81
dest_type : Union [Type [Any ], Tuple [Type [Any ], ...]],
@@ -148,4 +121,3 @@ def _register_builtin_converters():
148
121
149
122
150
123
_register_builtin_converters ()
151
- object_utils .JSONConvertible .TYPE_CONVERTER = get_json_value_converter
0 commit comments