From 9775bc2cc6b370839b362c13745e334c577fbeea Mon Sep 17 00:00:00 2001 From: nikto_b Date: Thu, 16 Oct 2025 22:19:42 +0300 Subject: [PATCH] Fix dict body validation x2 --- pyproject.toml | 2 +- src/megasniff/deflator.py | 4 ++++ src/megasniff/templates/deflator.jinja2 | 2 +- tests/test_basic_deflator.py | 14 ++++++++++++++ 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 2aa55c7..214d32c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "megasniff" -version = "0.2.6" +version = "0.2.6.post1" description = "Library for in-time codegened type validation" authors = [ { name = "nikto_b", email = "niktob560@yandex.ru" } diff --git a/src/megasniff/deflator.py b/src/megasniff/deflator.py index 1309211..20cf150 100644 --- a/src/megasniff/deflator.py +++ b/src/megasniff/deflator.py @@ -13,6 +13,10 @@ from typing import get_args, Union, Annotated, Sequence, TypeAliasType, \ import jinja2 from .utils import * +import uuid +from pathlib import Path +import tempfile +import importlib.util JsonObject: TypeAlias = Union[None, bool, int, float, str, list['JsonObject'], dict[str, 'JsonObject']] diff --git a/src/megasniff/templates/deflator.jinja2 b/src/megasniff/templates/deflator.jinja2 index 9e735b9..8a470e7 100644 --- a/src/megasniff/templates/deflator.jinja2 +++ b/src/megasniff/templates/deflator.jinja2 @@ -20,7 +20,7 @@ if not isinstance({{from_container}}, dict): {% endif %} for k_{{hashname(unwrapping)}}, v_{{hashname(unwrapping)}} in {{from_container}}.items(): {{ render_unwrap(unwrapping.key_unwrap, 'k_' + hashname(unwrapping), 'k_' + hashname(unwrapping)) | indent(4) }} -{{ render_unwrap(unwrapping.value_unwrap, 'v_' + hashname(unwrapping), into_container + '[v_' + hashname(unwrapping) + ']') | indent(4) }} +{{ render_unwrap(unwrapping.value_unwrap, 'v_' + hashname(unwrapping), into_container + '[k_' + hashname(unwrapping) + ']') | indent(4) }} {%- endset %} {{out}} {%- endmacro %} diff --git a/tests/test_basic_deflator.py b/tests/test_basic_deflator.py index a3cfb46..84a9879 100644 --- a/tests/test_basic_deflator.py +++ b/tests/test_basic_deflator.py @@ -44,6 +44,20 @@ def test_unions(): assert a['a'] == '42a' +def test_dict_body(): + @dataclass + class A: + a: dict[str, float] + + defl = SchemaDeflatorGenerator() + fn = defl.schema_to_deflator(A) + + a = fn(A({'1': 1.1, '2': 2.2})) + print(a) + assert a['a']['1'] == 1.1 + assert a['a']['2'] == 2.2 + + @dataclass class CircA: b: CircB