Metadata-Version: 2.1
Name: aclimatise
Version: 2.1.0
Summary: aCLImatise is a Python library and command-line utility for parsing the help output of a command-line tool and then outputting a description of the tool in a more structured format
Home-page: UNKNOWN
License: GPLv3
Platform: UNKNOWN
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Intended Audience :: Developers
Classifier: Natural Language :: English
Requires-Python: >=3.6
Description-Content-Type: text/x-rst
Requires-Dist: pyparsing
Requires-Dist: jinja2
Requires-Dist: spacy
Requires-Dist: miniwdl
Requires-Dist: wordsegment
Requires-Dist: inflection
Requires-Dist: illusional.wdlgen (==0.3.0)
Requires-Dist: ruamel.yaml (==0.16.5)
Requires-Dist: click
Requires-Dist: cwltool
Requires-Dist: cwl-utils (>=0.4)
Requires-Dist: regex
Requires-Dist: num2words
Requires-Dist: word2number
Requires-Dist: psutil
Requires-Dist: dataclasses
Provides-Extra: dev
Requires-Dist: pytest ; extra == 'dev'
Requires-Dist: pre-commit ; extra == 'dev'
Requires-Dist: Sphinx ; extra == 'dev'
Requires-Dist: sphinx-click ; extra == 'dev'
Requires-Dist: pytest-timeout ; extra == 'dev'
Requires-Dist: docker ; extra == 'dev'

aCLImatise
***********
For the full documentation, refer to the `Github Pages Website
<https://aclimatise.github.io/CliHelpParser/>`_.

======================================================================

aCLImatise is a Python library and command-line utility for parsing the help output
of a command-line tool and then outputting a description of the tool in a more
structured format, for example a
`Common Workflow Language tool definition <https://www.commonwl.org/v1.1/CommandLineTool.html>`_.

Currently aCLImatise supports both `CWL <https://www.commonwl.org/>`_ and
`WDL <https://openwdl.org/>`_ outputs, but other formats will be considered in the future, especially pull
requests to support them.

Example
-------

Lets say you want to create a CWL workflow containing the common Unix ``wc`` (word count)
utility. Running ``wc --help`` returns:

.. code-block::

   Usage: wc [OPTION]... [FILE]...
     or: wc [OPTION]... --files0-from=F
   Print newline, word, and byte counts for each FILE, and a total line if
   more than one FILE is specified.  A word is a non-zero-length sequence of
   characters delimited by white space.

   With no FILE, or when FILE is -, read standard input.

   The options below may be used to select which counts are printed, always in
   the following order: newline, word, character, byte, maximum line length.
     -c, --bytes            print the byte counts
     -m, --chars            print the character counts
     -l, --lines            print the newline counts
         --files0-from=F    read input from the files specified by
                              NUL-terminated names in file F;
                              If F is - then read names from standard input
     -L, --max-line-length  print the maximum display width
     -w, --words            print the word counts
         --help display this help and exit
         --version output version information and exit

   GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
   Full documentation at: <http://www.gnu.org/software/coreutils/wc>
   or available locally via: info '(coreutils) wc invocation'

If you run ``aclimatise explore wc``, which means "parse the wc command and all subcommands",
you'll end up with the following files in your current directory:

* ``wc.cwl``
* ``wc.wdl``
* ``wc.yml``

These are representations of the command ``wc`` in 3 different formats. If you look at ``wc.wdl``, you'll see that it
contains a WDL-compatible tool definition for ``wc``:

.. code-block:: text

    version 1.0
    task Wc {
      input {
        Boolean bytes
        Boolean chars
        Boolean lines
        String files__from
        Boolean max_line_length
        Boolean words
      }
      command <<<
        wc \
          ~{true="--bytes" false="" bytes} \
          ~{true="--chars" false="" chars} \
          ~{true="--lines" false="" lines} \
          ~{if defined(files__from) then ("--files0-from " +  '"' + files__from + '"') else ""} \
          ~{true="--max-line-length" false="" max_line_length} \
          ~{true="--words" false="" words}
      >>>
    }


