Skip to content

Commit d757d42

Browse files
committed
Add comments and 2 more tests params
1 parent cef2c92 commit d757d42

File tree

2 files changed

+117
-0
lines changed

2 files changed

+117
-0
lines changed

json_to_models/models/__init__.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,20 @@ def insert_after(self, value: T, *after: T):
4141

4242

4343
class PositionsDict(defaultdict):
44+
# Dict contains mapping Index -> position, where position is list index to insert nested element of Index
4445
INC = object()
4546

4647
def __init__(self, default_factory=int, **kwargs):
4748
super().__init__(default_factory, **kwargs)
4849

4950
def update_position(self, key: str, value: Union[object, int]):
51+
"""
52+
Shift all elements which are placed after updated one
53+
54+
:param key: Index or "root"
55+
:param value: Could be position or PositionsDict.INC to perform quick increment (x+=1)
56+
:return:
57+
"""
5058
if value is self.INC:
5159
value = self[key] + 1
5260
if key in self:
@@ -162,6 +170,7 @@ def compose_models_flat(models_map: Dict[Index, ModelMeta]) -> ModelsStructureTy
162170
# Model is using by only one model
163171
parent = next(iter(parents))
164172
pos = positions.get(parent, len(root_models))
173+
positions.update_position(parent, pos + 1)
165174
positions.update_position(key, pos + 1)
166175
root_models.insert(pos, struct)
167176

test/test_code_generation/test_models_composition.py

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -492,6 +492,114 @@ def test_compose_models(
492492
{},
493493
id="sort_1"
494494
),
495+
pytest.param(
496+
[
497+
("RootA", {
498+
"field_a1": {"field_a1_n": {"field": int}},
499+
"field_a2": {"field_a2_n": {"field": int}},
500+
"field_a3": {"field_a3_n": {"field": int}},
501+
"field_a4": {"field_a4_n": {"field": int}},
502+
}),
503+
("RootB", {
504+
"field_b1": {"field_b1_n": {"field": int}},
505+
"field_b2": {"field_b2_n": {"field": int}},
506+
"field_b3": {"field_b3_n": {"field": int}},
507+
"field_b4": {"field_b4_n": {"field": int}},
508+
}),
509+
("RootC", {
510+
"field_c1": {"field_c1_n": {"field": int}},
511+
"field_c2": {"field_c2_n": {"field": int}},
512+
"field_c3": {"field_c3_n": {"field": int}},
513+
"field_c4": {"field_c4_n": {"field": int}},
514+
}),
515+
],
516+
[
517+
("RootA", []),
518+
("RootB", []),
519+
("RootC", []),
520+
("FieldA1", []),
521+
("FieldA2", []),
522+
("FieldA3", []),
523+
("FieldA4", []),
524+
("FieldB1", []),
525+
("FieldB2", []),
526+
("FieldB3", []),
527+
("FieldB4", []),
528+
("FieldC1", []),
529+
("FieldC2", []),
530+
("FieldC3", []),
531+
("FieldC4", []),
532+
("FieldA1N_FieldA2N_FieldA3N_FieldA4N_"
533+
"FieldB1N_FieldB2N_FieldB3N_FieldB4N_"
534+
"FieldC1N_FieldC2N_FieldC3N_FieldC4N", []),
535+
],
536+
{},
537+
id="sort_2"
538+
),
539+
pytest.param(
540+
[
541+
("RootA", {
542+
"field_a1": {
543+
"field_a1_n": {"field_1": int},
544+
"field_a1_n2": {"field_11": int},
545+
},
546+
"field_a2": {"field_a2_n": {"field_2": int}},
547+
"field_a3": {"field_a3_n": {"field_3": int}},
548+
"field_a4": {"field_a4_n": {"field_4": int}},
549+
}),
550+
("RootB", {
551+
"field_b1": {
552+
"field_b1_n": {"field_01": int},
553+
"field_b1_n2": {"field_b11": int},
554+
"field_b1_n3": {"field_b21": int},
555+
},
556+
"field_b2": {"field_b2_n": {"field_02": int}},
557+
"field_b3": {
558+
"field_b3_n": {"field_03": int},
559+
"field_b3_n2": {"field_b13": int},
560+
"field_b3_n3": {"field_b23": int},
561+
"field_b3_n4": {"field_b33": int},
562+
},
563+
"field_b4": {"field_b4_n": {"field_04": int}},
564+
}),
565+
],
566+
[
567+
("RootA", []),
568+
("RootB", []),
569+
570+
("FieldA1", []),
571+
("FieldA1N", []),
572+
("FieldA1N2", []),
573+
574+
("FieldA2", []),
575+
("FieldA2N", []),
576+
577+
("FieldA3", []),
578+
("FieldA3N", []),
579+
580+
("FieldA4", []),
581+
("FieldA4N", []),
582+
583+
("FieldB1", []),
584+
("FieldB1N", []),
585+
("FieldB1N2", []),
586+
("FieldB1N3", []),
587+
588+
("FieldB2", []),
589+
("FieldB2N", []),
590+
591+
("FieldB3", []),
592+
("FieldB3N", []),
593+
("FieldB3N2", []),
594+
("FieldB3N3", []),
595+
("FieldB3N4", []),
596+
597+
("FieldB4", []),
598+
("FieldB4N", []),
599+
],
600+
{},
601+
id="sort_3"
602+
),
495603
]
496604

497605

0 commit comments

Comments
 (0)