File: prior_art.rst

package info (click to toggle)
python-invoke 0.11.1%2Bdfsg1-1
  • links: PTS, VCS
  • area: main
  • in suites: buster, stretch
  • size: 1,136 kB
  • ctags: 1,702
  • sloc: python: 5,614; makefile: 37; sh: 36
file content (37 lines) | stat: -rw-r--r-- 1,865 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
=========
Prior art
=========

Why another task running Python library? As usual, the short answer is "there
were already great 80-90% solutions out there, but none that fit our needs
100%." Specifically:

* **Multiple tasks at once** - almost no other Python command-line oriented
  libraries allow for invocations like::
  
    runner --core-opts task1 --task1-opts task2 --task2-opts
    
  and the few that do have half-baked implementations of the feature or are
  lacking in other ways.
* **Simplicity** - tools that try to do many things often suffer for it due to
  lack of focus. We wanted to build something clean and simple that just did
  one thing well.
* **Customizability/control** - Invoke was designed to work well with other
  tools such as `Fabric <http://fabfile.org>`_ and we felt that the work needed
  to adapt existing tools towards this goal would impede progress.

Some of the pre-existing solutions in this space in the Python world include:

* `Argh <http://packages.python.org/argh/index.html>`_: One of the more
  appealing options, but being built on argparse it doesn't support the
  multi-task invocation we needed. Also has its own "prior art" list which is
  worth your time.
* `Baker <http://pypi.python.org/pypi/Baker/1.02>`_: Nice and simple, but
  unfortunately too much so for our needs.
* `Paver <http://paver.github.com/paver/>`_: Tries to do too much, clunky API,
  user-hostile error messages, multi-task feature existed but was lacking.
* `Argparse <http://docs.python.org/library/argparse.html>`_: The modern gold
  standard for CLI parsing (albeit without command execution). Unfortunately,
  we were unable to get multiple tasks working despite lots of experimentation.
  Multiple tasks with their own potentially overlapping argument names, simply
  doesn't mesh with how ``argparse`` thinks about the command line.