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()