-
On Python 3.10 it looks like we can do |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 1 reply
-
I suppose we have to subclass class Plugins(OptionallyRequired[plugins.PluginCollection]):
def run_validation(self, value: object) -> plugins.PluginCollection:
if not isinstance(value, (list, tuple, dict)):
raise ValidationError('Invalid Plugins configuration. Expected a list or dict.') So something like: class ListOrDict(Type[Union[list, dict]]):
def run_validation(self, value: object) -> ...:
if not isinstance(value, (list, tuple, dict)):
raise ValidationError('Invalid configuration. Expected a list or dict.') |
Beta Was this translation helpful? Give feedback.
-
mkdocs/mkdocs/config/config_options.py Line 331 in 00b648f
but does not pass mypy:
Note also that if you find yourself allowing both class ListOfItemsThatCanBeWrittenAsDict(BaseConfigOption[List[MyItem]]):
def run_validation(self, value: object) -> plugins.PluginCollection:
if not isinstance(value, (list, dict)):
raise ValidationError('Invalid configuration. Expected a list or dict.')
if isinstance(value, dict):
return [MyItem(name=k, **v) for k, v in value.items()]
else:
return [MyItem(**v) for v in value] As a further note, mkdocs/mkdocs/config/config_options.py Line 948 in 00b648f |
Beta Was this translation helpful? Give feedback.
Type((list, dict))
is a supported way to write this.mkdocs/mkdocs/config/config_options.py
Line 331 in 00b648f
Type(list | dict)
works by accident only on newer versions of Python at run timebut does not pass mypy:
Note also that if you find yours…