|
1 | 1 | import copy |
2 | 2 | import json |
3 | | -from essentials.json import FriendlyEncoder |
4 | | -from dataclasses import asdict, fields, is_dataclass |
| 3 | +from dataclasses import fields, is_dataclass |
5 | 4 | from enum import Enum |
6 | 5 | from typing import Any, List, Tuple |
7 | 6 |
|
8 | 7 | import yaml |
| 8 | +from essentials.json import FriendlyEncoder |
9 | 9 |
|
10 | 10 |
|
11 | 11 | class Format(Enum): |
12 | 12 | YAML = "YAML" |
13 | 13 | JSON = "JSON" |
14 | 14 |
|
15 | 15 |
|
16 | | -class EntitiesJSONEncoder(FriendlyEncoder): |
17 | | - def default(self, obj: Any) -> Any: |
18 | | - try: |
19 | | - return super().default(obj) |
20 | | - except TypeError: |
21 | | - if is_dataclass(obj): |
22 | | - return {k: v for k, v in asdict(obj).items() if v is not None} |
23 | | - raise |
24 | | - |
25 | | - |
26 | 16 | class OpenAPIRoot: |
27 | 17 | """Base class for a root OpenAPI Documentation""" |
28 | 18 |
|
@@ -67,8 +57,6 @@ def _asdict_inner(obj, dict_factory): |
67 | 57 | value = _asdict_inner(getattr(obj, f.name), dict_factory) |
68 | 58 | result.append((f.name, value)) |
69 | 59 | return dict_factory(result) |
70 | | - elif isinstance(obj, tuple) and hasattr(obj, "_fields"): |
71 | | - return type(obj)(*[_asdict_inner(v, dict_factory) for v in obj]) |
72 | 60 | elif isinstance(obj, (list, tuple)): |
73 | 61 | return type(obj)(_asdict_inner(v, dict_factory) for v in obj) |
74 | 62 | elif isinstance(obj, dict): |
@@ -104,7 +92,7 @@ def to_obj(self, item: Any) -> Any: |
104 | 92 |
|
105 | 93 | def to_json(self, item: Any) -> str: |
106 | 94 | return json.dumps( |
107 | | - self.to_obj(item), indent=4, ensure_ascii=False, cls=EntitiesJSONEncoder |
| 95 | + self.to_obj(item), indent=4, ensure_ascii=False, cls=FriendlyEncoder |
108 | 96 | ) |
109 | 97 |
|
110 | 98 | def to_yaml(self, item: Any) -> str: |
|
0 commit comments