You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

51 lines
1.7 KiB

"""
Created on Jan 24, 2014 <-- so long ago!
"""
import sys
from argparse import ArgumentParser
from functools import wraps
from gooey.python_bindings.control import choose_hander
from gooey.python_bindings.parameters import gooey_params
from gooey.python_bindings.types import GooeyParams
IGNORE_COMMAND = '--ignore-gooey'
def Gooey(f=None, **gkwargs):
"""
Decoration entry point for the Gooey process.
See types.GooeyParams for kwargs options
"""
params: GooeyParams = gooey_params(**gkwargs)
@wraps(f)
def inner(*args, **kwargs):
parser_handler = choose_hander(params, gkwargs.get('cli', sys.argv))
# monkey patch parser
ArgumentParser.original_parse_args = ArgumentParser.parse_args
ArgumentParser.parse_args = parser_handler
# return the wrapped, now monkey-patched, user function
# to be later invoked
return f(*args, **kwargs)
def thunk(func):
"""
This just handles the case where the decorator is called
with arguments (i.e. @Gooey(foo=bar) rather than @Gooey).
Cause python is weird, when a decorator is called (e.g. @decorator())
rather than just declared (e.g. @decorator), in complete and utter
defiance of what your lying eyes see, it changes from a higher order
function, to a function that takes an arbitrary argument *and then*
returns a higher order function. i.e.
decorate :: (a -> b) -> (a -> b)
decorate() :: c -> (a -> b) -> (a -> b)
wat.
"""
return Gooey(func, **params)
return inner if callable(f) else thunk