Skip to content

not compatible with pydantic.validate_arguments #402

Open
@xbanke

Description

@xbanke

A function with Field parameter wrapped by pydantic.validate_arguments, can not been exeuted from the command line.

from datetime import datetime
from pydantic import Field, validate_arguments


@validate_arguments()
def foo(dt: datetime = Field(default_factory=datetime.now)):
    print(dt)


if __name__ == '__main__':
    import fire
    fire.Fire(foo)

run this code from command line with raise:

Traceback (most recent call last):
  File "/home/xxx/repositories/others/test_fire.py", line 12, in <module>
    fire.Fire(foo)
  File "/home/xxx/.conda/envs/py39/lib/python3.9/site-packages/fire/core.py", line 141, in Fire
    component_trace = _Fire(component, args, parsed_flag_args, context, name)
  File "/home/xxx/.conda/envs/py39/lib/python3.9/site-packages/fire/core.py", line 466, in _Fire
    component, remaining_args = _CallAndUpdateTrace(
  File "/home/xxx/.conda/envs/py39/lib/python3.9/site-packages/fire/core.py", line 681, in _CallAndUpdateTrace
    component = fn(*varargs, **kwargs)
  File "pydantic/decorator.py", line 40, in pydantic.decorator.validate_arguments.validate.wrapper_function
    from contextlib import _GeneratorContextManager
  File "pydantic/decorator.py", line 133, in pydantic.decorator.ValidatedFunction.call
    func.__dict__.update(kw)
  File "pydantic/decorator.py", line 130, in pydantic.decorator.ValidatedFunction.init_model_instance
    else:
  File "pydantic/main.py", line 341, in pydantic.main.BaseModel.__init__
pydantic.error_wrappers.ValidationError: 1 validation error for Foo
dt
  invalid type; expected datetime, string, bytes, int or float (type=type_error)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions