cattrs
cattrs copied to clipboard
Error when Literal used as dict key type
- cattrs version: 22.1.0
- Python version: 3.10.4
- Operating System: Ubuntu
Description
Hi, awesome library! Pushing the limits here :)
As named, Literal don't seem to work when used as dict key type.
Repro
from typing import Literal
import cattr
N = Literal['one', 'two']
cattr.structure('one', N) # works
cattr.structure(['one'], list[N]) # works
cattr.structure({'one': 5}, dict[N, int]) # crashes
Error
Traceback (most recent call last):
Input In [24] in <cell line: 10>
cattr.structure({'one': 5}, dict[N, int])
python3.10/site-packages/cattrs/converters.py:281 in structure
return self._structure_func.dispatch(cl)(obj, cl)
python3.10/site-packages/cattr/dispatch.py:49 in _dispatch
return self._function_dispatch.dispatch(cl)
python3.10/site-packages/cattr/dispatch.py:122 in dispatch
return handler(typ)
python3.10/site-packages/cattrs/converters.py:802 in gen_structure_mapping
h = make_mapping_structure_fn(cl, self)
python3.10/site-packages/cattrs/gen.py:716 in make_mapping_structure_fn
eval(compile(script, "", "exec"), globs)
File <string>:17
raise IterableValidationError('While structuring dict[typing.Literal['one', 'two'], int]', errors, __cattr_mapping_cl)
^
SyntaxError: invalid syntax. Perhaps you forgot a comma?