Skip to content

Commit 3b9080b

Browse files
committed
Rearrange code
1 parent 099e16d commit 3b9080b

File tree

1 file changed

+26
-27
lines changed

1 file changed

+26
-27
lines changed

json_to_models/models/__init__.py

Lines changed: 26 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
from ..dynamic_typing import DOptional, ModelMeta, ModelPtr
44

55
Index = str
6+
ModelsStructureType = Tuple[List[dict], Dict[ModelMeta, ModelMeta]]
7+
68
T = TypeVar('T')
79

810

@@ -35,33 +37,6 @@ def insert_after(self, value: T, *after: T):
3537
self.insert(pos + 1, value)
3638

3739

38-
def filter_pointers(model: ModelMeta) -> Iterable[ModelPtr]:
39-
"""
40-
Return iterator over pointers with not None parent
41-
"""
42-
return (ptr for ptr in model.pointers if ptr.parent)
43-
44-
45-
def extract_root(model: ModelMeta) -> Set[Index]:
46-
"""
47-
Return set of indexes of root models that are use given ``model`` directly or through another nested model.
48-
"""
49-
seen: Set[Index] = set()
50-
nodes: List[ModelPtr] = list(filter_pointers(model))
51-
roots: Set[Index] = set()
52-
while nodes:
53-
node = nodes.pop()
54-
seen.add(node.type.index)
55-
filtered = list(filter_pointers(node.parent))
56-
nodes.extend(ptr for ptr in filtered if ptr.type.index not in seen)
57-
if not filtered:
58-
roots.add(node.parent.index)
59-
return roots
60-
61-
62-
ModelsStructureType = Tuple[List[dict], Dict[ModelMeta, ModelMeta]]
63-
64-
6540
def compose_models(models_map: Dict[str, ModelMeta]) -> ModelsStructureType:
6641
"""
6742
Generate nested sorted models structure for internal usage.
@@ -116,6 +91,30 @@ def compose_models(models_map: Dict[str, ModelMeta]) -> ModelsStructureType:
11691
return root_models, path_injections
11792

11893

94+
def filter_pointers(model: ModelMeta) -> Iterable[ModelPtr]:
95+
"""
96+
Return iterator over pointers with not None parent
97+
"""
98+
return (ptr for ptr in model.pointers if ptr.parent)
99+
100+
101+
def extract_root(model: ModelMeta) -> Set[Index]:
102+
"""
103+
Return set of indexes of root models that are use given ``model`` directly or through another nested model.
104+
"""
105+
seen: Set[Index] = set()
106+
nodes: List[ModelPtr] = list(filter_pointers(model))
107+
roots: Set[Index] = set()
108+
while nodes:
109+
node = nodes.pop()
110+
seen.add(node.type.index)
111+
filtered = list(filter_pointers(node.parent))
112+
nodes.extend(ptr for ptr in filtered if ptr.type.index not in seen)
113+
if not filtered:
114+
roots.add(node.parent.index)
115+
return roots
116+
117+
119118
def sort_fields(model_meta: ModelMeta) -> Tuple[List[str], List[str]]:
120119
"""
121120
Split fields into required and optional groups

0 commit comments

Comments
 (0)