trafaret icon indicating copy to clipboard operation
trafaret copied to clipboard

guard don't work correct with keyword-only arguments and default value

Open Arfey opened this issue 3 years ago • 3 comments

import trafaret as trf


@trf.guard(a=trf.Int)
def foo(*, a=1):
    pass


foo()

# GuardError: {'a': DataError('is required')}

problem related to defaults property from FullArgSpec class

def foo(*, a=1): pass
def bar(a=1): pass

getargspec(foo)
# FullArgSpec(args=[], varargs=None, varkw=None, defaults=None, kwonlyargs=['a'], kwonlydefaults={'a': 1}, annotations={})

getargspec(bar)
# FullArgSpec(args=['a'], varargs=None, varkw=None, defaults=(1,), kwonlyargs=[], kwonlydefaults=None, annotations={})

https://github.com/Deepwalker/trafaret/blob/master/trafaret/base.py#L1493-L1496

here we need try to use the kwonlydefaults mapping

Arfey avatar Mar 31 '22 17:03 Arfey

committed some code, will make a release soon

Deepwalker avatar Apr 01 '22 16:04 Deepwalker

pls check 2.1.1 btw if you like this project, maybe we can convert into org etc.

Deepwalker avatar Apr 01 '22 17:04 Deepwalker

committed some code, will make a release soon

thx, i will check

Arfey avatar Apr 01 '22 20:04 Arfey