Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Architecture Documentation: CLI deep dive #7859

Merged
merged 1 commit into from
Sep 23, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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://github.com/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 @@ -21,6 +21,7 @@ Architecture of pip's internals
overview
anatomy
package-finding
command-line-interface
upgrade-options


Expand Down