From 5ace642838605a94a88740a6a3ce620c7abddce9 Mon Sep 17 00:00:00 2001 From: David Lord Date: Tue, 28 Aug 2018 10:54:55 -0700 Subject: [PATCH] use pallets-sphinx-themes --- docs/Makefile | 130 +-------- docs/_static/click-icon.png | Bin 0 -> 625 bytes docs/_static/click-logo-sidebar.png | Bin 0 -> 4246 bytes docs/_static/click-logo.png | Bin 0 -> 26081 bytes docs/_templates/sidebarintro.html | 13 - docs/_templates/sidebarlogo.html | 3 - docs/_themes/LICENSE | 37 --- docs/_themes/README | 31 -- docs/_themes/click/layout.html | 20 -- docs/_themes/click/relations.html | 19 -- docs/_themes/click/static/click.css_t | 396 -------------------------- docs/_themes/click/theme.conf | 4 - docs/clickdoctools.py | 255 ----------------- docs/conf.py | 241 +++------------- docs/index.rst | 15 +- docs/make.bat | 155 ++-------- docs/requirements.txt | 2 + 17 files changed, 82 insertions(+), 1239 deletions(-) create mode 100644 docs/_static/click-icon.png create mode 100644 docs/_static/click-logo-sidebar.png create mode 100644 docs/_static/click-logo.png delete mode 100644 docs/_templates/sidebarintro.html delete mode 100644 docs/_templates/sidebarlogo.html delete mode 100644 docs/_themes/LICENSE delete mode 100644 docs/_themes/README delete mode 100644 docs/_themes/click/layout.html delete mode 100644 docs/_themes/click/relations.html delete mode 100644 docs/_themes/click/static/click.css_t delete mode 100644 docs/_themes/click/theme.conf delete mode 100644 docs/clickdoctools.py create mode 100644 docs/requirements.txt diff --git a/docs/Makefile b/docs/Makefile index 9bca27fe9..6e3c9b90d 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -1,130 +1,20 @@ -# Makefile for Sphinx documentation +# Minimal makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build -PAPER = +SPHINXPROJ = Jinja +SOURCEDIR = . BUILDDIR = _build -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . - -.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest - +# Put it first so that "make" without argument is like "make help". help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - -clean: - -rm -rf $(BUILDDIR)/* - -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Classy.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Classy.qhc" - -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/Classy" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Classy" - @echo "# devhelp" - -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \ - "run these through (pdf)latex." - -latexpdf: latex - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - make -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." +.PHONY: help Makefile -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/_static/click-icon.png b/docs/_static/click-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b883cfaa17f0ac31dd52effb9aaf6fe58feede06 GIT binary patch literal 625 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 literal 0 HcmV?d00001 diff --git a/docs/_static/click-logo.png b/docs/_static/click-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a8874506885e8a101d24789ce7033634d895eb77 GIT binary patch literal 26081 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 literal 0 HcmV?d00001 diff --git a/docs/_templates/sidebarintro.html b/docs/_templates/sidebarintro.html deleted file mode 100644 index 0041190fb..000000000 --- a/docs/_templates/sidebarintro.html +++ /dev/null @@ -1,13 +0,0 @@ -

About

-

- Click is a Python package for creating beautiful command line interfaces in a - composable way with as little amount of code as necessary. It’s the “Command - Line Interface Creation Kit”. -

-

Useful Links

-
diff --git a/docs/_templates/sidebarlogo.html b/docs/_templates/sidebarlogo.html deleted file mode 100644 index 6a8735338..000000000 --- a/docs/_templates/sidebarlogo.html +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/docs/_themes/LICENSE b/docs/_themes/LICENSE deleted file mode 100644 index 8543fb836..000000000 --- a/docs/_themes/LICENSE +++ /dev/null @@ -1,37 +0,0 @@ -Copyright (c) 2014 by Armin Ronacher. - -Some rights reserved. - -Redistribution and use in source and binary forms of the theme, with or -without modification, are permitted provided that the following conditions -are met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - -* The names of the contributors may not be used to endorse or - promote products derived from this software without specific - prior written permission. - -We kindly ask you to only use these themes in an unmodified manner just -for Click and Click-related products, not for unrelated projects. If you -like the visual style and want to use it for your own projects, please -consider making some larger changes to the themes (such as changing -font faces, sizes, colors or margins). - -THIS THEME IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS THEME, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. diff --git a/docs/_themes/README b/docs/_themes/README deleted file mode 100644 index b3292bdff..000000000 --- a/docs/_themes/README +++ /dev/null @@ -1,31 +0,0 @@ -Flask Sphinx Styles -=================== - -This repository contains sphinx styles for Flask and Flask related -projects. To use this style in your Sphinx documentation, follow -this guide: - -1. put this folder as _themes into your docs folder. Alternatively - you can also use git submodules to check out the contents there. -2. add this to your conf.py: - - sys.path.append(os.path.abspath('_themes')) - html_theme_path = ['_themes'] - html_theme = 'flask' - -The following themes exist: - -- 'flask' - the standard flask documentation theme for large - projects -- 'flask_small' - small one-page theme. Intended to be used by - very small addon libraries for flask. - -The following options exist for the flask_small theme: - - [options] - index_logo = '' filename of a picture in _static - to be used as replacement for the - h1 in the index.rst file. - index_logo_height = 120px height of the index logo - github_fork = '' repository name on github for the - "fork me" badge diff --git a/docs/_themes/click/layout.html b/docs/_themes/click/layout.html deleted file mode 100644 index 919e78038..000000000 --- a/docs/_themes/click/layout.html +++ /dev/null @@ -1,20 +0,0 @@ -{%- extends "basic/layout.html" %} -{%- block extrahead %} - {{ super() }} -{% endblock %} -{%- block relbar2 %}{% endblock %} -{% block header %} - {{ super() }} - {% if pagename == 'index' %} -
- {% endif %} -{% endblock %} -{%- block footer %} - - {% if pagename == 'index' %} -
- {% endif %} -{%- endblock %} diff --git a/docs/_themes/click/relations.html b/docs/_themes/click/relations.html deleted file mode 100644 index 3bbcde85b..000000000 --- a/docs/_themes/click/relations.html +++ /dev/null @@ -1,19 +0,0 @@ -

Related Topics

- diff --git a/docs/_themes/click/static/click.css_t b/docs/_themes/click/static/click.css_t deleted file mode 100644 index 8ab23fbdd..000000000 --- a/docs/_themes/click/static/click.css_t +++ /dev/null @@ -1,396 +0,0 @@ -/* - * click.css_t - * ~~~~~~~~~~~ - * - * :copyright: Copyright 2014 by Armin Ronacher. - * :license: Flask Design License, see LICENSE for details. - */ - -{% set page_width = '940px' %} -{% set sidebar_width = '220px' %} - -@import url("basic.css"); - -@import url(http://fonts.googleapis.com/css?family=Ubuntu+Mono:400,400italic,700,700italic); -@import url(http://fonts.googleapis.com/css?family=Open+Sans:300,400); - -/* -- page layout ----------------------------------------------------------- */ - -body { - font-family: 'Ubuntu Mono', 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono'; - font-size: 15px; - background-color: white; - color: #000; - margin: 0; - padding: 0; -} - -div.document { - width: {{ page_width }}; - margin: 30px auto 0 auto; -} - -div.documentwrapper { - float: left; - width: 100%; -} - -div.bodywrapper { - margin: 0 0 0 {{ sidebar_width }}; -} - -div.sphinxsidebar { - width: {{ sidebar_width }}; -} - -div.sphinxsidebar h3, -div.sphinxsidebar h4 { - font-family: 'Open Sans', 'Helvetica', 'Arial', sans-serif; - font-weight: 300; - margin: 20px 0px 10px 0px; - padding: 0; -} - -hr { - border: 1px solid #B1B4B6; -} - -div.body { - background-color: #ffffff; - color: #3E4349; - padding: 0 30px 0 30px; -} - -img.floatingflask { - padding: 0 0 10px 10px; - float: right; -} - -div.footer { - width: {{ page_width }}; - margin: 20px auto 30px auto; - font-size: 14px; - color: #888; - text-align: right; -} - -div.footer a { - color: #888; -} - -div.related { - display: none; -} - -div.sphinxsidebar a { - color: #444; - text-decoration: none; - border-bottom: 1px dotted #999; -} - -div.sphinxsidebar a:hover { - border-bottom: 1px solid #999; -} - -div.sphinxsidebar { - font-size: 14px; - line-height: 1.5; -} - -div.sphinxsidebarwrapper { - padding: 18px 10px; -} - -div.sphinxsidebarwrapper p.logo { - padding: 0 0 20px 0; - margin: 0; - text-align: left; -} - -div.sphinxsidebar h3, -div.sphinxsidebar h4 { - color: #444; - font-size: 18px; - font-weight: normal; - margin: 0 0 5px 0; - padding: 0; -} - -div.sphinxsidebar h4 { - font-size: 15px; -} - -div.sphinxsidebar h3 a { - color: #444; -} - -div.sphinxsidebar p.logo a, -div.sphinxsidebar h3 a, -div.sphinxsidebar p.logo a:hover, -div.sphinxsidebar h3 a:hover { - border: none; -} - -div.sphinxsidebar p { - color: #555; - margin: 10px 0; -} - -div.sphinxsidebar ul { - margin: 10px 0; - padding: 0; - color: #000; -} - -div.sphinxsidebar input { - border: 1px solid #ccc; - font-family: 'Ubuntu Mono', 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono'; - font-size: 13px; -} - -div.sphinxsidebar #searchbox input[type="text"] { - width: 120px; -} - -/* -- body styles ----------------------------------------------------------- */ - -a { - color: #5D2CD1; - text-decoration: underline; -} - -a:hover { - color: #7546E3; - text-decoration: underline; -} - -div.body h1, -div.body h2, -div.body h3, -div.body h4, -div.body h5, -div.body h6 { - font-family: 'Open Sans', 'Helvetica', 'Arial', sans-serif; - font-weight: 400; - margin: 30px 0px 10px 0px; - padding: 0; -} - -div.indexwrapper h1 { - text-indent: -999999px; - background: url(click.png) no-repeat center center; - height: 200px; -} - -div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } -div.body h2 { font-size: 180%; } -div.body h3 { font-size: 150%; } -div.body h4 { font-size: 130%; } -div.body h5 { font-size: 100%; } -div.body h6 { font-size: 100%; } - -a.headerlink { - color: #ddd; - padding: 0 4px; - text-decoration: none; -} - -a.headerlink:hover { - color: #444; - background: #eaeaea; -} - -div.body p, div.body dd, div.body li { - line-height: 1.4em; -} - -div.admonition { - background: #fafafa; - margin: 20px -30px; - padding: 10px 30px; - border-top: 1px solid #ccc; - border-bottom: 1px solid #ccc; -} - -div.admonition tt.xref, div.admonition a tt { - border-bottom: 1px solid #fafafa; -} - -dd div.admonition { - margin-left: -60px; - padding-left: 60px; -} - -div.admonition p.admonition-title { - font-family: 'Open Sans', 'Helvetica', 'Arial', sans-serif; - font-weight: 400; - font-size: 24px; - margin: 0 0 10px 0; - padding: 0; - line-height: 1; -} - -div.admonition p.last { - margin-bottom: 0; -} - -div.highlight { - background-color: white; -} - -dt:target, .highlight { - background: #FAF3E8; -} - -div.note { - background-color: #eee; - border: 1px solid #ccc; -} - -div.seealso { - background-color: #ffc; - border: 1px solid #ff6; -} - -div.topic { - background-color: #eee; -} - -p.admonition-title { - display: inline; -} - -p.admonition-title:after { - content: ":"; -} - -pre, tt { - font-family: 'Ubuntu Mono', 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono'; - font-size: 15px; -} - -img.screenshot { -} - -tt.descname, tt.descclassname { - font-size: 0.95em; -} - -tt.descname { - padding-right: 0.08em; -} - -img.screenshot { - -moz-box-shadow: 2px 2px 4px #eee; - -webkit-box-shadow: 2px 2px 4px #eee; - box-shadow: 2px 2px 4px #eee; -} - -table.docutils { - border: 1px solid #888; - -moz-box-shadow: 2px 2px 4px #eee; - -webkit-box-shadow: 2px 2px 4px #eee; - box-shadow: 2px 2px 4px #eee; -} - -table.docutils td, table.docutils th { - border: 1px solid #888; - padding: 0.25em 0.7em; -} - -table.field-list, table.footnote { - border: none; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} - -table.footnote { - margin: 15px 0; - width: 100%; - border: 1px solid #eee; - background: #fdfdfd; - font-size: 0.9em; -} - -table.footnote + table.footnote { - margin-top: -15px; - border-top: none; -} - -table.field-list th { - padding: 0 0.8em 0 0; -} - -table.field-list td { - padding: 0; -} - -table.footnote td.label { - width: 0px; - padding: 0.3em 0 0.3em 0.5em; -} - -table.footnote td { - padding: 0.3em 0.5em; -} - -dl { - margin: 0; - padding: 0; -} - -dl dd { - margin-left: 30px; -} - -blockquote { - margin: 0 0 0 30px; - padding: 0; -} - -ul, ol { - margin: 10px 0 10px 30px; - padding: 0; -} - -pre { - padding: 7px 0 7px 30px; - margin: 15px 0; - line-height: 1.3em; -} - -tt { - background-color: #ecf0f3; - color: #222; - /* padding: 1px 2px; */ -} - -tt.xref, a tt { - background-color: #FBFBFB; - border-bottom: 1px solid white; -} - -a.reference { - text-decoration: none; - border-bottom: 1px dotted #5D2CD1; -} - -a.reference:hover { - border-bottom: 1px solid #7546E3; -} - -a.footnote-reference { - text-decoration: none; - font-size: 0.7em; - vertical-align: top; - border-bottom: 1px dotted #5D2CD1; -} - -a.footnote-reference:hover { - border-bottom: 1px solid #7546E3; -} - -a:hover tt { - background: #EEE; -} diff --git a/docs/_themes/click/theme.conf b/docs/_themes/click/theme.conf deleted file mode 100644 index d1ab008df..000000000 --- a/docs/_themes/click/theme.conf +++ /dev/null @@ -1,4 +0,0 @@ -[theme] -inherit = basic -stylesheet = click.css -pygments_style = tango diff --git a/docs/clickdoctools.py b/docs/clickdoctools.py deleted file mode 100644 index b46841e52..000000000 --- a/docs/clickdoctools.py +++ /dev/null @@ -1,255 +0,0 @@ -import os -import sys -import click -import shutil -import tempfile -import contextlib - -try: - from StringIO import StringIO -except ImportError: - from io import StringIO - -from docutils import nodes -from docutils.statemachine import ViewList - -from sphinx.domains import Domain -from sphinx.util.compat import Directive - - -class EchoingStdin(object): - - def __init__(self, input, output): - self._input = input - self._output = output - - def __getattr__(self, x): - return getattr(self._input, x) - - def _echo(self, rv): - mark = False - if rv.endswith('\xff'): - rv = rv[:-1] - mark = True - self._output.write(rv) - if mark: - self._output.write('^D\n') - return rv - - def read(self, n=-1): - return self._echo(self._input.read(n)) - - def readline(self, n=-1): - return self._echo(self._input.readline(n)) - - def readlines(self): - return [self._echo(x) for x in self._input.readlines()] - - def __iter__(self): - return iter(self._echo(x) for x in self._input) - - -@contextlib.contextmanager -def isolation(input=None, env=None): - if isinstance(input, unicode): - input = input.encode('utf-8') - input = StringIO(input or '') - output = StringIO() - sys.stdin = EchoingStdin(input, output) - sys.stdin.encoding = 'utf-8' - - def visible_input(prompt=None): - sys.stdout.write(prompt or '') - val = input.readline().rstrip('\r\n') - sys.stdout.write(val + '\n') - sys.stdout.flush() - return val - - def hidden_input(prompt=None): - sys.stdout.write((prompt or '') + '\n') - sys.stdout.flush() - return input.readline().rstrip('\r\n') - - sys.stdout = output - sys.stderr = output - old_visible_prompt_func = click.termui.visible_prompt_func - old_hidden_prompt_func = click.termui.hidden_prompt_func - click.termui.visible_prompt_func = visible_input - click.termui.hidden_prompt_func = hidden_input - - old_env = {} - try: - if env: - for key, value in env.iteritems(): - old_env[key] = os.environ.get(value) - os.environ[key] = value - yield output - finally: - for key, value in old_env.iteritems(): - if value is None: - try: - del os.environ[key] - except Exception: - pass - else: - os.environ[key] = value - sys.stdout = sys.__stdout__ - sys.stderr = sys.__stderr__ - click.termui.visible_prompt_func = old_visible_prompt_func - click.termui.hidden_prompt_func = old_hidden_prompt_func - - -@contextlib.contextmanager -def isolated_filesystem(): - cwd = os.getcwd() - t = tempfile.mkdtemp() - os.chdir(t) - try: - yield - finally: - os.chdir(cwd) - try: - shutil.rmtree(t) - except (OSError, IOError): - pass - - -class ExampleRunner(object): - - def __init__(self): - self.namespace = { - 'click': click, - '__file__': 'dummy.py', - } - - def declare(self, source): - code = compile(source, '', 'exec') - eval(code, self.namespace) - - def run(self, source): - code = compile(source, '', 'exec') - buffer = [] - - def invoke(cmd, args=None, prog_name=None, prog_prefix='python ', - input=None, terminate_input=False, env=None, - **extra): - if env: - for key, value in sorted(env.items()): - if ' ' in value: - value = '"%s"' % value - buffer.append('$ export %s=%s' % (key, value)) - args = args or [] - if prog_name is None: - prog_name = cmd.name.replace('_', '-') + '.py' - buffer.append(('$ %s%s %s' % ( - prog_prefix, - prog_name, - ' '.join(('"%s"' % x) if ' ' in x else x for x in args) - )).rstrip()) - if isinstance(input, (tuple, list)): - input = '\n'.join(input) + '\n' - if terminate_input: - input += '\xff' - with isolation(input=input, env=env) as output: - try: - cmd.main(args=args, prog_name=prog_name, **extra) - except SystemExit: - pass - buffer.extend(output.getvalue().splitlines()) - - def println(text=''): - buffer.append(text) - - eval(code, self.namespace, { - 'invoke': invoke, - 'println': println, - 'isolated_filesystem': isolated_filesystem, - }) - return buffer - - def close(self): - pass - - -def parse_rst(state, content_offset, doc): - node = nodes.section() - # hack around title style bookkeeping - surrounding_title_styles = state.memo.title_styles - surrounding_section_level = state.memo.section_level - state.memo.title_styles = [] - state.memo.section_level = 0 - state.nested_parse(doc, content_offset, node, match_titles=1) - state.memo.title_styles = surrounding_title_styles - state.memo.section_level = surrounding_section_level - return node.children - - -def get_example_runner(document): - runner = getattr(document, 'click_example_runner', None) - if runner is None: - runner = document.click_example_runner = ExampleRunner() - return runner - - -class ExampleDirective(Directive): - has_content = True - required_arguments = 0 - optional_arguments = 0 - final_argument_whitespace = False - - def run(self): - doc = ViewList() - runner = get_example_runner(self.state.document) - try: - runner.declare('\n'.join(self.content)) - except: - runner.close() - raise - doc.append('.. sourcecode:: python', '') - doc.append('', '') - for line in self.content: - doc.append(' ' + line, '') - return parse_rst(self.state, self.content_offset, doc) - - -class RunExampleDirective(Directive): - has_content = True - required_arguments = 0 - optional_arguments = 0 - final_argument_whitespace = False - - def run(self): - doc = ViewList() - runner = get_example_runner(self.state.document) - try: - rv = runner.run('\n'.join(self.content)) - except: - runner.close() - raise - doc.append('.. sourcecode:: text', '') - doc.append('', '') - for line in rv: - doc.append(' ' + line, '') - return parse_rst(self.state, self.content_offset, doc) - - -class ClickDomain(Domain): - name = 'click' - label = 'Click' - directives = { - 'example': ExampleDirective, - 'run': RunExampleDirective, - } - - -def delete_example_runner_state(app, doctree): - runner = getattr(doctree, 'click_example_runner', None) - if runner is not None: - runner.close() - del doctree.click_example_runner - - -def setup(app): - app.add_domain(ClickDomain) - - app.connect('doctree-read', delete_example_runner_state) diff --git a/docs/conf.py b/docs/conf.py index 08c31b113..4ecc39fee 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -1,219 +1,60 @@ -# -*- coding: utf-8 -*- -# -# click documentation build configuration file, created by -# sphinx-quickstart on Mon Apr 26 19:53:01 2010. -# -# This file is execfile()d with the current directory set to its containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. +from pallets_sphinx_themes import ProjectLink, get_version -import sys, os +# Project -------------------------------------------------------------- -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -sys.path.append(os.path.abspath('_themes')) -sys.path.append(os.path.abspath('..')) -sys.path.append(os.path.abspath('.')) +project = "Click" +copyright = "2014 Pallets Team" +author = "Pallets Team" +release, version = get_version("Click", version_length=1) -# -- General configuration ----------------------------------------------------- +# General -------------------------------------------------------------- -# If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' +master_doc = "index" +extensions = ["sphinx.ext.autodoc", "sphinx.ext.intersphinx", "pallets_sphinx_themes"] +intersphinx_mapping = {"python": ("https://docs.python.org/3/", None)} -# Add any Sphinx extension module names here, as strings. They can be extensions -# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = ['sphinx.ext.autodoc', 'sphinx.ext.intersphinx', - 'clickdoctools'] +# HTML ----------------------------------------------------------------- -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix of source filenames. -source_suffix = '.rst' - -# The encoding of source files. -#source_encoding = 'utf-8-sig' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'click' -copyright = u'2014, Armin Ronacher' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = '1.0' -# The full version, including alpha/beta/rc tags. -release = '1.0' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -#language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = ['_build'] - -# The reST default role (used for this markup: `text`) to use for all documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - - -# -- Options for HTML output --------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. Major themes that come with -# Sphinx are currently 'default' and 'sphinxdoc'. -html_theme = 'click' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -html_theme_options = { +html_theme = "click" +html_theme_options = {"index_sidebar_logo": False} +html_context = { + "project_links": [ + ProjectLink("Donate to Pallets", "https://palletsprojects.com/donate"), + ProjectLink("Click Website", "https://palletsprojects.com/p/click/"), + ProjectLink("PyPI releases", "https://pypi.org/project/Click/"), + ProjectLink("Source Code", "https://github.com/pallets/click/"), + ProjectLink("Issue Tracker", "https://github.com/pallets/click/issues/"), + ] } - -# Add any paths that contain custom themes here, relative to this directory. -html_theme_path = ['_themes'] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -html_title = 'click' - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -#html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -#html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. html_sidebars = { - 'index': ['sidebarintro.html', 'sourcelink.html', 'searchbox.html'], - '**': ['sidebarlogo.html', 'localtoc.html', 'relations.html', - 'sourcelink.html', 'searchbox.html'] + "index": ["project.html", "versions.html", "searchbox.html"], + "**": ["localtoc.html", "relations.html", "versions.html", "searchbox.html"], } +singlehtml_sidebars = {"index": ["project.html", "versions.html", "localtoc.html"]} +html_static_path = ["_static"] +html_favicon = "_static/click-icon.png" +html_logo = "_static/click-logo-sidebar.png" +html_title = "{} Documentation ({})".format(project, version) +html_show_sourcelink = False +html_domain_indices = False +html_experimental_html5_writer = True -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_domain_indices = True - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -#html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -#html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' +# LaTeX ---------------------------------------------------------------- -# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = '' - -# Output file base name for HTML help builder. -htmlhelp_basename = 'clickdoc' - - -# -- Options for LaTeX output -------------------------------------------------- - -# The paper size ('letter' or 'a4'). -#latex_paper_size = 'letter' - -# The font size ('10pt', '11pt' or '12pt'). -#latex_font_size = '10pt' - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ - ('index', 'click.tex', u'click documentation', - u'Armin Ronacher', 'manual'), + (master_doc, "Click.tex", "Click Documentation", "Pallets Team", "manual") ] -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None +# theme compatibility -------------------------------------------------- -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False -# Additional stuff for the LaTeX preamble. -#latex_preamble = '' +def setup(app): + from click.testing import CliRunner -# Documents to append as an appendix to all manuals. -#latex_appendices = [] + orig_invoke = CliRunner.invoke -# If false, no module index is generated. -#latex_domain_indices = True + def invoke(self, *args, **kwargs): + kwargs.pop("prog_name", None) + return orig_invoke(self, *args, **kwargs) - -# -- Options for manual page output -------------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - ('index', 'click', u'click documentation', - [u'Armin Ronacher'], 1) -] - -intersphinx_mapping = { - 'http://docs.python.org/dev': None -} + CliRunner.invoke = invoke diff --git a/docs/index.rst b/docs/index.rst index ab81d0eee..45c93c77b 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,5 +1,12 @@ -Welcome to the Click Documentation -================================== +.. rst-class:: hide-header + +Welcome to Click +================ + +.. image:: _static/click-logo.png + :align: center + :scale: 50% + :target: https://palletsprojects.com/p/click/ click is a Python package for creating beautiful command line interfaces in a composable way with as little amount of code as necessary. It's the @@ -49,8 +56,8 @@ You can get the library directly from PyPI:: pip install click -Documentation Contents ----------------------- +Documentation +------------- This part of the documentation guides you through all the usage patterns of the library. diff --git a/docs/make.bat b/docs/make.bat index 1e941d8ca..147946324 100644 --- a/docs/make.bat +++ b/docs/make.bat @@ -1,155 +1,36 @@ @ECHO OFF +pushd %~dp0 + REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) +set SOURCEDIR=. set BUILDDIR=_build -set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . -if NOT "%PAPER%" == "" ( - set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% -) +set SPHINXPROJ=Jinja if "%1" == "" goto help -if "%1" == "help" ( - :help - echo.Please use `make ^` where ^ is one of - echo. html to make standalone HTML files - echo. dirhtml to make HTML files named index.html in directories - echo. singlehtml to make a single large HTML file - echo. pickle to make pickle files - echo. json to make JSON files - echo. htmlhelp to make HTML files and a HTML help project - echo. qthelp to make HTML files and a qthelp project - echo. devhelp to make HTML files and a Devhelp project - echo. epub to make an epub - echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter - echo. text to make text files - echo. man to make manual pages - echo. changes to make an overview over all changed/added/deprecated items - echo. linkcheck to check all external links for integrity - echo. doctest to run all doctests embedded in the documentation if enabled - goto end -) - -if "%1" == "clean" ( - for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i - del /q /s %BUILDDIR%\* - goto end -) - -if "%1" == "html" ( - %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/html. - goto end -) - -if "%1" == "dirhtml" ( - %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. - goto end + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 ) -if "%1" == "singlehtml" ( - %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. - goto end -) +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end -if "%1" == "pickle" ( - %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle - echo. - echo.Build finished; now you can process the pickle files. - goto end -) - -if "%1" == "json" ( - %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json - echo. - echo.Build finished; now you can process the JSON files. - goto end -) - -if "%1" == "htmlhelp" ( - %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp - echo. - echo.Build finished; now you can run HTML Help Workshop with the ^ -.hhp project file in %BUILDDIR%/htmlhelp. - goto end -) - -if "%1" == "qthelp" ( - %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp - echo. - echo.Build finished; now you can run "qcollectiongenerator" with the ^ -.qhcp project file in %BUILDDIR%/qthelp, like this: - echo.^> qcollectiongenerator %BUILDDIR%\qthelp\Classy.qhcp - echo.To view the help file: - echo.^> assistant -collectionFile %BUILDDIR%\qthelp\Classy.ghc - goto end -) - -if "%1" == "devhelp" ( - %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp - echo. - echo.Build finished. - goto end -) - -if "%1" == "epub" ( - %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub - echo. - echo.Build finished. The epub file is in %BUILDDIR%/epub. - goto end -) - -if "%1" == "latex" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - echo. - echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "text" ( - %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text - echo. - echo.Build finished. The text files are in %BUILDDIR%/text. - goto end -) - -if "%1" == "man" ( - %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man - echo. - echo.Build finished. The manual pages are in %BUILDDIR%/man. - goto end -) - -if "%1" == "changes" ( - %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes - echo. - echo.The overview file is in %BUILDDIR%/changes. - goto end -) - -if "%1" == "linkcheck" ( - %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck - echo. - echo.Link check complete; look for any errors in the above output ^ -or in %BUILDDIR%/linkcheck/output.txt. - goto end -) - -if "%1" == "doctest" ( - %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest - echo. - echo.Testing of doctests in the sources finished, look at the ^ -results in %BUILDDIR%/doctest/output.txt. - goto end -) +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% :end +popd diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 000000000..dbd475f20 --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1,2 @@ +Sphinx~=1.7.7 +Pallets-Sphinx-Themes~=1.1.0