diff --git a/README.md b/README.md
index 873f35b..5e8b4a7 100644
--- a/README.md
+++ b/README.md
@@ -163,6 +163,7 @@ Gooey does its best to choose sensible defaults based on the options it finds. C
| store_const | CheckBox |
|
| store_true | CheckBox |
|
| store_False | CheckBox|
|
+| version | CheckBox|
|
| append | TextCtrl |
|
| count | DropDown |
|
| Mutually Exclusive Group | RadioGroup |
diff --git a/gooey/python_bindings/argparse_to_json.py b/gooey/python_bindings/argparse_to_json.py
index 576b173..a0e9495 100644
--- a/gooey/python_bindings/argparse_to_json.py
+++ b/gooey/python_bindings/argparse_to_json.py
@@ -12,7 +12,8 @@ from argparse import (
_StoreFalseAction,
_StoreTrueAction,
_StoreAction,
- _SubParsersAction)
+ _SubParsersAction,
+ _VersionAction)
from collections import OrderedDict
from functools import partial
from uuid import uuid4
@@ -277,8 +278,10 @@ def categorize2(groups, widget_dict, options):
def categorize(actions, widget_dict, options):
_get_widget = partial(get_widget, widget_dict)
for action in actions:
+ if is_version(action):
+ yield action_to_json(action, _get_widget(action, 'CheckBox'), options)
- if is_mutex(action):
+ elif is_mutex(action):
yield build_radio_group(action, widget_dict, options)
elif is_standard(action):
@@ -352,6 +355,9 @@ def is_file(action):
''' action with FileType '''
return isinstance(action.type, argparse.FileType)
+def is_version(action):
+ return isinstance(action, _VersionAction)
+
def is_standard(action):
""" actions which are general "store" instructions.
e.g. anything which has an argument style like:
diff --git a/gooey/tests/test_argparse_to_json.py b/gooey/tests/test_argparse_to_json.py
index 77723fa..30d4d8d 100644
--- a/gooey/tests/test_argparse_to_json.py
+++ b/gooey/tests/test_argparse_to_json.py
@@ -155,6 +155,26 @@ class TestArgparse(unittest.TestCase):
self.assertEqual(getin(item, ['data', 'default']), None)
+ def test_version_maps_to_checkbox(self):
+ testcases = [
+ [['--version'], {}, 'TextField'],
+ # we only remap if the action is version
+ # i.e. we don't care about the argument name itself
+ [['--version'], {'action': 'store'}, 'TextField'],
+ # should get mapped to CheckBox becuase of the action
+ [['--version'], {'action': 'version'}, 'CheckBox'],
+ # ditto, even through the 'name' isn't 'version'
+ [['--foobar'], {'action': 'version'}, 'CheckBox'],
+ ]
+ for args, kwargs, expectedType in testcases:
+ with self.subTest([args, kwargs]):
+ parser = argparse.ArgumentParser(prog='test')
+ parser.add_argument(*args, **kwargs)
+ result = argparse_to_json.convert(parser, num_required_cols=2, num_optional_cols=2)
+ contents = getin(result, ['widgets', 'test', 'contents'])[0]
+ self.assertEqual(contents['items'][0]['type'], expectedType)
+
+
def test_textinput_with_list_default_mapped_to_cli_friendly_value(self):
"""
Issue: #500