Skip to content

Python-Fire-like, ask for function args by Terminal UI / GUI, ensuring the type annotation.

License

Notifications You must be signed in to change notification settings

ClericPy/ask4args

Repository files navigation

Ask for function args by Terminal UI / GUI, ensuring the type annotation. Inspired by python-fire, and it maybe need a human-friendly interactive UI.

Install

pip install ask4args -U

Simple Usage

python3 -m ask4args module:function

Terminal UI

demo.gif

GUI

demo2.png

More Usage Examples

from ask4args.core import Ask4Args, Ask4ArgsGUI, Ask4ArgsWeb
from typing import List, Dict


def test_normal_function(a: int, b: int = 2, **args_dict: Dict[str, int]):
    # first a value=1, args_dict['c']=3, others use default.
    # press 1, enter, enter, enter, c, enter, 3, enter, enter
    assert a == 1
    assert b == 2
    assert args_dict['c'] == 3
    return ('success', vars())


def test_keyword_only_function(a: float,
                               b: int = 2,
                               *,
                               c: bool = False,
                               d: str = 'string',
                               e: int = None,
                               f: List[int] = None,
                               **args_dict: Dict[str, int]):
    """Read the doc, and test kw-only args.

    :param a: one float num
    :type a: float
    :param b: one int num, defaults to 4
    :type b: int, optional
    :param c: boolen arg, defaults to False
    :type c: bool, optional
    :param d: string arg, defaults to 'string'
    :type d: str, optional
    :return: return the args_dict
    :rtype: Dict[str, list]
    """
    assert a == 1.1
    assert b == 2
    assert c is False
    assert d == 'string'
    assert e == 1
    assert f == [1, 2, 3]
    assert args_dict['h'] == 3
    return ('success', vars())


class TestClass(object):

    def test_method(self, a: str, b: int = 1):
        assert a == ''
        assert b == 1
        return ('success', vars())

    @classmethod
    def test_class_method(cls, a: str, b: int = 1):
        assert a == ''
        assert b == 1
        return ('success', vars())


def test_defaults(a: int):
    assert a == 1
    return ('success', vars())


if __name__ == "__main__":
    # cls = Ask4ArgsWeb
    cls = Ask4Args
    # cls = Ask4ArgsGUI
    # =====================
    # =====================
    # ('success', {'a': 1, 'b': 2, 'args_dict': {'c': 3}})
    # cls(test_normal_function).run()
    # =====================
    # ('success', {'a': 1.1, 'b': 2, 'c': False, 'd': 'string', 'e': 1, 'f': [1, 2, 3], 'args_dict': {'h': 3}})
    # cls(test_keyword_only_function,
    #     choices={
    #         'e': [1, 2, 3, 4, 5]
    #     },
    #     checkboxes={
    #         'f': [1, 2, 3, 4, 5]
    #     }).run()
    # =====================
    # cls(TestClass().test_method).run()
    # =====================
    # cls(TestClass().test_class_method).run()
    # =====================
    # cls(test_defaults, defaults={'a': 1}).run()
    pass

TODO

  • Terminal UI
  • GUI
  • Web UI (no need to do)

About

Python-Fire-like, ask for function args by Terminal UI / GUI, ensuring the type annotation.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages