from dataclasses import dataclass, field
import dataconf
from typing import Any, Dict, Text
@dataclass
class Test:
name: Text
items: Dict[Text, Any] = field(default_factory=dict)
config = """
name: letters
items: {
a: d,
b: e,
c: f
}
"""
conf = dataconf.string(config, Test)
AttributeError Traceback (most recent call last)
/var/folders/kh/n0p_nl6d7sg0hfqljfwmlhcr0000gq/T/ipykernel_6851/3484491678.py in <module>
----> 1 conf = dataconf.string(config, Test)
~/opt/anaconda3/lib/python3.8/site-packages/dataconf/main.py in string(s, clazz)
65
66 def string(s: str, clazz):
---> 67 return multi.string(s).on(clazz)
68
69
~/opt/anaconda3/lib/python3.8/site-packages/dataconf/main.py in on(self, clazz)
50 for nxt in nxts:
51 conf = ConfigTree.merge_configs(conf, nxt)
---> 52 return parse(conf, clazz)
53
54
~/opt/anaconda3/lib/python3.8/site-packages/dataconf/main.py in parse(conf, clazz)
12 def parse(conf: ConfigTree, clazz):
13 try:
---> 14 return utils.__parse(conf, clazz, "")
15 except pyparsing.ParseSyntaxException as e:
16 raise MalformedConfigException(
~/opt/anaconda3/lib/python3.8/site-packages/dataconf/utils.py in __parse(value, clazz, path)
66
67 if not isinstance(val, _MISSING_TYPE):
---> 68 fs[f.name] = __parse(val, f.type, f"{path}.{f.name}")
69
70 elif is_optional(f.type):
~/opt/anaconda3/lib/python3.8/site-packages/dataconf/utils.py in __parse(value, clazz, path)
107 left, right = args
108 try:
--> 109 return __parse(value, left if right is NoneType else right, path)
110 except TypeConfigException:
111 # cannot parse Optional
~/opt/anaconda3/lib/python3.8/site-packages/dataconf/utils.py in __parse(value, clazz, path)
101 )
102 if value is not None:
--> 103 return {k: __parse(v, args[1], f"{path}.{k}") for k, v in value.items()}
104 return None
105
~/opt/anaconda3/lib/python3.8/site-packages/dataconf/utils.py in <dictcomp>(.0)
101 )
102 if value is not None:
--> 103 return {k: __parse(v, args[1], f"{path}.{k}") for k, v in value.items()}
104 return None
105
~/opt/anaconda3/lib/python3.8/site-packages/dataconf/utils.py in __parse(value, clazz, path)
155
156 child_failures = []
--> 157 for child_clazz in sorted(clazz.__subclasses__(), key=lambda c: c.__name__):
158 if is_dataclass(child_clazz):
159 try:
AttributeError: '_SpecialForm' object has no attribute '__subclasses__'