Skip to content

Commit

Permalink
Merge pull request pypa#7859 from pradyunsg/docs/deep-dive-cli
Browse files Browse the repository at this point in the history
Architecture Documentation: CLI deep dive
  • Loading branch information
pradyunsg committed Oct 12, 2020
1 parent 58a2ea3 commit 02661dc
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 0 deletions.
57 changes: 57 additions & 0 deletions docs/html/development/architecture/command-line-interface.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
======================
Command Line Interface
======================

The ``pip._internal.cli`` package is responsible for processing and providing
pip's command line interface. This package handles:

* CLI option definition and parsing
* autocompletion
* dispatching to the various commands
* utilities like progress bars and spinners

.. note::

This section of the documentation is currently being written. pip
developers welcome your help to complete this documentation. If you're
interested in helping out, please let us know in the
`tracking issue <https:/pypa/pip/issues/6831>`_.


.. _cli-overview:

Overview
========

A ``ConfigOptionParser`` instance is used as the "main parser",
for parsing top level args.

``Command`` then uses another ``ConfigOptionParser`` instance, to parse command-specific args.

* TODO: How & where options are defined
(cmdoptions, command-specific files).

* TODO: How & where arguments are processed.
(main_parser, command-specific parser)

* TODO: How processed arguments are accessed.
(attributes on argument to ``Command.run()``)

* TODO: How configuration and CLI "blend".
(implemented in ``ConfigOptionParser``)

* TODO: progress bars and spinners

* TODO: quirks / standard practices / broad ideas.
(avoiding lists in option def'n, special cased option value types,
)


Future Refactoring Ideas
========================

* Change option definition to be a more declarative, consistent, static
data-structure, replacing the current ``partial(Option, ...)`` form
* Move progress bar and spinner to a ``cli.ui`` subpackage
* Move all ``Command`` classes into a ``cli.commands`` subpackage
(including base classes)
1 change: 1 addition & 0 deletions docs/html/development/architecture/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ Architecture of pip's internals
anatomy
configuration-files
package-finding
command-line-interface
upgrade-options


Expand Down

0 comments on commit 02661dc

Please sign in to comment.