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.

49 lines
1.7 KiB

"""
Basic constraints to ensure GooeyParser is fed all the info it needs
for various widget classes.
TODO: this should all live in the build_config stage here where it is used
within the GooeyParser directly. As is, logic is fragmented across files. Some
assertions happen in argparse_to_json, while others happen in GooeyParser.
Whenever refactoring happens, these should be removed from GooeyParser.
"""
from textwrap import dedent
def is_required(action):
return action.required
def is_hidden(options):
return not options.get('visible', True)
def has_validator(options):
return bool(options.get('validator'))
def has_default(action):
return bool(action.default)
def assert_visibility_requirements(action, options):
if action.required and is_hidden(options) \
and not (has_validator(options) or has_default(action)):
raise ValueError(dedent(
'''
When using Gooey's hidden field functionality, you must either '
(a) provide a default value, or '
(b) provide a custom validator'
Without one of those, your users will be unable to advance past
the configuration screen as they cannot interact with your
hidden field, and the default validator requires something to
be present for fields marked as `required`.
'''
))
def assert_listbox_constraints(widget, **kwargs):
if widget and widget == 'Listbox':
if not 'nargs' in kwargs or kwargs['nargs'] not in ['*', '+']:
raise ValueError(
'Gooey\'s Listbox widget requires that nargs be specified.\n'
'Nargs must be set to either `*` or `+` (e.g. nargs="*")'
)