Exemple #1
0
    def _fix_keys_typed_dict(
        self, typed_dict: TypeTypedDict, argument_line: TypeDocLine,
    ) -> None:
        for line in argument_line.indented:
            if not line.name:
                continue

            attribute = typed_dict.get_attribute(line.name)
            attribute.required = line.required
            if attribute.type_annotation is Type.Any:
                attribute.type_annotation = get_type_from_docstring(line.type_name)
            if not line.indented:
                continue

            self._fix_keys(attribute.type_annotation, line)
class TestTypeTypedDict:
    result: TypeTypedDict

    def setup_method(self):
        self.result = TypeTypedDict(
            "MyDict",
            [
                TypedDictAttribute("required", Type.bool, True),
                TypedDictAttribute("optional", Type.str, False),
            ],
            "documentation",
        )

    def test_init(self) -> None:
        assert self.result.name == "MyDict"
        assert len(self.result.children) == 2
        assert self.result.docstring == "documentation"
        assert self.result.requires_safe_render

    def test_get_attribute(self) -> None:
        assert self.result.get_attribute("required") == self.result.children[0]

        with pytest.raises(ValueError):
            self.result.get_attribute("non_existing")

    def test_render(self) -> None:
        assert self.result.render() == "MyDict"
        assert self.result.render("OtherDict") == "MyDict"
        assert self.result.render("MyDict") == '"MyDict"'
        self.result.stringify = True
        assert self.result.render() == '"MyDict"'
        self.result.replace_with_dict.add(self.result.name)
        assert self.result.render("MyDict") == "Dict[str, Any]"

    def test_get_import_record(self) -> None:
        assert self.result.get_import_record().render(
        ) == "from .type_defs import MyDict"

    def test_get_types(self) -> None:
        assert self.result.get_types() == {self.result}

    def test_add_attribute(self) -> None:
        self.result.add_attribute("third", Type.int, False)
        assert len(self.result.children) == 3

    def test_is_dict(self) -> None:
        assert self.result.is_dict()

    def test_is_typed_dict(self) -> None:
        assert self.result.is_typed_dict()

    def test_render_class(self) -> None:
        assert self.result.render_class(
        ) == "class MyDict:\n    required: bool\n    optional: str"

    def test_has_optional(self) -> None:
        assert self.result.has_optional()
        assert not TypeTypedDict(
            "MyDict",
            [TypedDictAttribute("required", Type.bool, True)],
        ).has_optional()
        assert TypeTypedDict(
            "MyDict",
            [TypedDictAttribute("optional", Type.str, False)],
        ).has_optional()
        assert not TypeTypedDict("MyDict", []).has_optional()

    def test_has_required(self) -> None:
        assert self.result.has_required()
        assert TypeTypedDict(
            "MyDict",
            [TypedDictAttribute("required", Type.bool, True)],
        ).has_required()
        assert not TypeTypedDict(
            "MyDict",
            [TypedDictAttribute("optional", Type.str, False)],
        ).has_required()
        assert not TypeTypedDict("MyDict", []).has_required()

    def test_has_both(self) -> None:
        assert self.result.has_both()
        assert not TypeTypedDict(
            "MyDict",
            [TypedDictAttribute("required", Type.bool, True)],
        ).has_both()
        assert not TypeTypedDict(
            "MyDict",
            [TypedDictAttribute("optional", Type.str, False)],
        ).has_both()
        assert not TypeTypedDict("MyDict", []).has_both()

    def test_get_required(self) -> None:
        assert len(self.result.get_required()) == 1
        assert self.result.get_required()[0].name == "required"

    def test_get_optional(self) -> None:
        assert len(self.result.get_optional()) == 1
        assert self.result.get_optional()[0].name == "optional"

    def test_copy(self) -> None:
        assert self.result.copy().name == self.result.name

    def test_is_same(self) -> None:
        assert self.result.is_same(
            TypeTypedDict(
                "OtherDict",
                [
                    TypedDictAttribute("required", Type.bool, True),
                    TypedDictAttribute("optional", Type.str, False),
                ],
            ))
        assert not self.result.is_same(
            TypeTypedDict(
                "OtherDict",
                [
                    TypedDictAttribute("required", Type.bool, True),
                    TypedDictAttribute("optional", Type.float, False),
                ],
            ))

    def test_get_children_types(self) -> None:
        assert self.result.get_children_types() == {Type.str, Type.bool}

    def test_get_children_typed_dicts(self) -> None:
        assert len(self.result.get_children_typed_dicts()) == 0

    def test_get_children_literals(self) -> None:
        assert len(self.result.get_children_literals()) == 0
        assert len(self.result.get_children_literals([self.result])) == 0

    def test_replace_self_references(self) -> None:
        self.result.replace_self_references()