|
27 | 27 | log = logging.getLogger(__name__) |
28 | 28 |
|
29 | 29 |
|
30 | | -class PrimitiveTypeUnmarshaller: |
| 30 | +class BaseSchemaUnmarshaller: |
| 31 | + |
| 32 | + FORMATTERS = { |
| 33 | + None: Formatter(), |
| 34 | + } |
| 35 | + |
| 36 | + def __init__(self, schema): |
| 37 | + self.schema = schema |
| 38 | + |
| 39 | + def __call__(self, value): |
| 40 | + if value is None: |
| 41 | + return |
| 42 | + |
| 43 | + self.validate(value) |
| 44 | + |
| 45 | + return self.unmarshal(value) |
| 46 | + |
| 47 | + def validate(self, value): |
| 48 | + raise NotImplementedError |
| 49 | + |
| 50 | + def unmarshal(self, value): |
| 51 | + raise NotImplementedError |
31 | 52 |
|
32 | | - FORMATTERS = {} |
33 | 53 |
|
34 | | - def __init__(self, formatter, validator, schema): |
| 54 | +class PrimitiveTypeUnmarshaller(BaseSchemaUnmarshaller): |
| 55 | + |
| 56 | + def __init__(self, schema, formatter, validator): |
| 57 | + super().__init__(schema) |
35 | 58 | self.formatter = formatter |
36 | 59 | self.validator = validator |
37 | | - self.schema = schema |
38 | 60 |
|
39 | 61 | def __call__(self, value): |
40 | 62 | if value is None: |
@@ -123,9 +145,9 @@ class BooleanUnmarshaller(PrimitiveTypeUnmarshaller): |
123 | 145 | class ComplexUnmarshaller(PrimitiveTypeUnmarshaller): |
124 | 146 |
|
125 | 147 | def __init__( |
126 | | - self, formatter, validator, schema, unmarshallers_factory, |
| 148 | + self, schema, formatter, validator, unmarshallers_factory, |
127 | 149 | context=None): |
128 | | - super().__init__(formatter, validator, schema) |
| 150 | + super().__init__(schema, formatter, validator) |
129 | 151 | self.unmarshallers_factory = unmarshallers_factory |
130 | 152 | self.context = context |
131 | 153 |
|
@@ -242,10 +264,6 @@ def _unmarshal_properties(self, value, one_of_schema=None): |
242 | 264 |
|
243 | 265 | class AnyUnmarshaller(ComplexUnmarshaller): |
244 | 266 |
|
245 | | - FORMATTERS = { |
246 | | - None: Formatter(), |
247 | | - } |
248 | | - |
249 | 267 | SCHEMA_TYPES_ORDER = [ |
250 | 268 | 'object', 'array', 'boolean', |
251 | 269 | 'integer', 'number', 'string', |
|
0 commit comments