Metadata-Version: 2.1
Name: coopui
Version: 0.13
Summary: Package dedicated for holding tooling that allows a developer to interact with a user
Home-page: https://github.com/tylertjburns/coopui
Author: tburns
Author-email: tyler.tj.burns@gmail.com
License: MIT
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Intended Audience :: Developers
Requires-Python: >3.5
Description-Content-Type: text/markdown
Requires-Dist: cooptools (==0.7)
Requires-Dist: numpy (==1.19.4)
Requires-Dist: pandas (==1.1.5)
Requires-Dist: python-dateutil (==2.8.1)
Requires-Dist: pytz (==2020.4)
Requires-Dist: six (==1.15.0)

# coopui
 Package dedicated for holding tooling that allows a developer to interact with a user


Import the packages that will handle the cli interaction with the user
```
from coopui.cli.CliAtomicUserInteraction import CliAtomicUserInteraction
from coopui.cli.CliMenu import CliMenu
```

 The CliAtomicUserInteraction class allows interaction with the user with validation of the input returned, as well as ability to notify user with text
 ```
if __name__ == "__main__":
    ui = CliAtomicUserInteraction()

    # yes or no
    ret1 = ui.request_yes_no(prompt="Select Yes or No")

    # from a list
    lst = [x for x in 'abcdefghijklmnop']
    ret2 = ui.request_from_list(lst)

    # from a dict
    dic = {1: "Cat", 2: "Dog", 3: "Turtle", 4: "Frog"}
    ret3 = ui.request_from_dict(dic)

    # notify user
    ui.notify_user(text=f"selected yes: {ret1}")
    ui.notify_user(text=f"selected letter from list: {ret2}")
    ui.notify_user(text=f"selected animal: {ret3}")
``` 


 First define a custom function to greet a user:
 ```
def greet(ui):
    ui.notify_user("Hello!")
    ret = ui.request_yes_no("Are you having a good day?")

    if ret is None:
        return

    if ret:
        ui.notify_user("Glad to hear it!")
    else:
        ui.notify_user("Im so sorry....")
```

Then, use the CliAtomicUserInteraction class along with the CliMenu class to provide a menu to perform the greeting
```
if __name__ == "__main__":
    ui = CliAtomicUserInteraction()
    menu = CliMenu(menu_header="************* My Menu *************",
                   definition={
                       "G": ("[G]reeting", lambda: greet(ui))
                   },
                   notify_user_provider=ui.notify_user
                   )

    menu.run()
```

A menu will return only if the result of a selection is None. Therefore, always include a definition for returning None
```
if __name__ == "__main__":
    ui = CliAtomicUserInteraction()
    menu = CliMenu(menu_header="************* My Menu *************",
                   definition={
                       "G": ("[G]reeting", lambda: greet(ui)),
                       "X": ("Back", None)
                   },
                   notify_user_provider=ui.notify_user
                   )

    menu.run()
```


Multiple menus can be chained together to define a nested menu selection. 

```
if __name__ == "__main__":
    ui = CliAtomicUserInteraction()
    main_menu = CliMenu(menu_header="************* My Menu *************",
                   definition={
                       "G": ("[G]reeting", lambda: greet(ui)),
                       "S": ("[S]ub-menu", lambda: sub_menu.run()),
                       "X": ("E[X]it", None)
                   },
                   notify_user_provider=ui.notify_user
                   )
    sub_menu = CliMenu(menu_header="************* Sub Menu *************",
                   definition={
                       "G": ("[G]reeting", lambda: greet(ui)),
                       "X": ("X -- Back", None)
                   },
                   notify_user_provider=ui.notify_user
                   )

    main_menu.run()
```


