bchao1 / bullet

🚅 Interactive prompts made simple. Build a prompt like stacking blocks.
https://pypi.org/project/bullet/
MIT License
3.55k stars 113 forks source link

Create CheckDependencies class #75

Open nano-labs opened 3 years ago

nano-labs commented 3 years ago

This class extends Check adding a dependency tree so when an item is checked it automatically checks all it's dependencies. Also, if an item is unchecked it automatically unchecks all it's dependants. The effect cascades to dependencies of dependencies.

Here's an example:

from bullet import CheckDependencies
from pprint import pprint
dependency_tree = (
    ("Option A", ("Option B",)),
    ("Option B", ("Option C",)),
    ("Option C", ()),
    ("Option D", ("Option C", "Option E")),
    ("Option E", ()),
)
pprint(dependency_tree)
print()
cli = CheckDependencies("Check some options", dep_tree=dependency_tree)
print(cli.launch())

checkdependency.gif

Or a different usage:

from bullet import CheckDependencies
from pprint import pprint
dependency_tree = (
    ("Option A", ()),
    ("Option B", ()),
    ("Option C", ()),
    ("Option D", ()),
    ("Option E", ()),
    ("ALL ABOVE", ("Option A", "Option B", "Option C", "Option D", "Option E")),
)
pprint(dependency_tree)
print()
cli = CheckDependencies("Check some options", dep_tree=dependency_tree)
print(cli.launch())

allabove.gif

nano-labs commented 3 years ago

Im already using this on my own project: https://github.com/nano-labs/dstart