diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 00000000..2c95f0ba --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = Heritrix +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# 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) \ No newline at end of file diff --git a/docs/api.rst b/docs/api.rst new file mode 100644 index 00000000..a040f7cf --- /dev/null +++ b/docs/api.rst @@ -0,0 +1,1196 @@ +REST API +======== + +This manual describes the REST application programming interface (API) +of the Heritrix Web crawler.  Heritrix is the Internet Archive's open +source, extensible, Web-scale, archival-quality Web crawler. For more +information about Heritrix, visit \ http://crawler.archive.org/. + +This document is intended for application developers and administrators +interested in controlling the Heritrix Web crawler through its REST API. + +Conventions and Assumptions +--------------------------- + +The following conventions are used in this document. + +.. raw:: html + + + + + + + + + + + + + + + + + + + + + + +

Convention
+

Description
+

(identifier)

A identifier surrounded by parenthesis indicates a user-defined value. For example, (heritrixhostname) indicates a user-defined hostname that is running Heritrix.

[identifier1,identifier2,...]

Multiple identifiers surrounded by brackets indicate a predefined set of values. For example, [on,off] indicates a set of values comprised of the literals, "on" and "off".

+ +The following curl parameters are used when invoking the API. + +.. raw:: html + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

curl Parameter
+

Description
+

-v

Verbose. Output a detailed account of the curl command to standard out.

-d

Data. These are the name/value pairs that are send in the body of a POST.

-k

Insecure. Allows connections to SSL sites without certificates.

-u
+

User. Allows the submission of a username and password to authenticate the HTTP request.

--anyauth

Any authentication type. Allows authentication of the request based on any type of authentication method.

--location

Follows HTTP redirects. This option is used so that API calls that return data (such as HTML) will not halt upon receipt of a redirect code (such as an HTTP 303).

-H
+

Set the value of an HTTP header. For example, "Accept: application/xml".

+ +It is assumed that the reader has a working knowledge of the HTTP +protocol and Heritrix functionality.  Also, the examples assume that +Heritrix is run with an administrative username and password of "admin." + +REST +---- + +Representational State Transfer (REST) is a software architecture for +distributed hypermedia systems such as the World Wide Web (WWW). REST is +built on the concept of representations of resources. Resources can be +any coherent and meaningful concept that may be addressed. A URI is an +example of a resource. The representation of the resource is typically a +document that captures the current or intended state of the resource. An +example of a representation of a resource is an HTML page. + +Heritrix uses REST to expose its functionality. The REST implementation +used by Heritrix is Restlet. Restlet implements the concepts defined by +REST, including resources and representations. It also provides a REST +container that processes RESTful requests. The container is the Noelios +Restlet Engine. For detailed information on Restlet, +visit \ http://www.restlet.org/. + +Heritrix Restlet API +-------------------- + +Heritrix exposes its REST functionality through HTTPS. The HTTPS +protocol is used to send requests to retrieve or modify configuration +settings and manage crawl jobs. + +Requirements for API Invocation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Any client that supports HTTPS can be used to invoke the Heritrix API. +The most common clients are command line tools such as curl and wget. +These command line tools are typically found in Unix environments but +can also be run on a Windows environment by +installing \ `Cygwin `__.  Cygwin is a free +Linux emulation environment for Windows. + +API Format +~~~~~~~~~~ + +The format used to describe each API is as follows. + +.. raw:: html + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name
+

Description
+

API Name
+

The name assigned to the API. The name is a single word or short phrase that encapsulates the purpose of the API call.

URI

The URI to call when invoking the API.

Description

The description of the API. The description provides a detailed overview of what the API accomplishes and when the API should be called.

HTTP Method

The HTTP method to use when invoking the API.

HTTP Data

The name/value pairs that are submitted with the HTTP request.

HTML Example

An example call to the API. The curl command line utility is the HTTPS client used in the examples. The call returns HTML output.
+

XML Example
+

An example call to the API that returns XML output.  The curl command line utility is the HTTPS client used in the examples.

+ +API +--- + +Create New Job +~~~~~~~~~~~~~~ + +URI +^^^ + +https://(heritrixhost):8443/engine + +Description +^^^^^^^^^^^ + +This API creates a new crawl job configuration. It uses the default +configuration provided by the profile-defaults profile. + +HTTP Method +^^^^^^^^^^^ + +POST + +HTTP Data +^^^^^^^^^ + +.. raw:: html + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name
+

Value
+

Description
+

createpath
+

(jobname)
+

The name of the job.
+

action
+

create
+

The action to invoke.
+

+ +HTML Example +^^^^^^^^^^^^ + +.. code:: bash + + curl -v -d "createpath=myjob&action=create" -k -u admin:admin --anyauth --location https://localhost:8443/engine + +XML Example +^^^^^^^^^^^ + +.. code:: bash + + curl -v -d "createpath=myjob&action=create" -k -u admin:admin --anyauth --location -H "Accept: application/xml" https://localhost:8443/engine + +Add Job Directory +~~~~~~~~~~~~~~~~~ + +.. _uri-1: + +URI +^^^ + +https://(heritrixhost):8443/engine + +.. _description-1: + +Description +^^^^^^^^^^^ + +This API adds a new job directory to the Heritrix configuration. The +directory must contain a cxml configuration file. + +.. _http-method-1: + +HTTP Method +^^^^^^^^^^^ + +POST + +.. _http-data-1: + +HTTP Data +^^^^^^^^^ + +.. raw:: html + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name
+

Value
+

Description
+

addpath
+

(job directory to add)
+

The job directory to add.
+

action
+

add
+

The action to invoke
+

+ +.. _html-example-1: + +HTML Example +^^^^^^^^^^^^ + +.. code:: bash + + curl -v -d "action=add&addpath=/Users/hstern/job" -k -u admin:admin --anyauth --location https://localhost:8443/engine + +.. _xml-example-1: + +XML Example +^^^^^^^^^^^ + +.. code:: bash + + curl -v -d "action=add&addpath=/Users/hstern/job" -k -u admin:admin --anyauth --location -H "Accept: application/xml" https://localhost:8443/engine + +Build Job Configuration +~~~~~~~~~~~~~~~~~~~~~~~ + +.. _uri-2: + +URI +^^^ + +https://(heritrixhost):8443/engine/job/(jobname) + +.. _description-2: + +Description +^^^^^^^^^^^ + +This API builds the job configuration for the chosen job. It reads an +XML descriptor file and uses Spring to build the Java objects that are +necessary for running the crawl. Before a crawl can be run it must be +built. + +.. _http-method-2: + +HTTP Method +^^^^^^^^^^^ + +POST + +.. _http-data-2: + +HTTP Data +^^^^^^^^^ + +.. raw:: html + + + + + + + + + + + + + + + + + + + + + +

Name
+

Value
+

Description
+

action
+

build
+

The action to invoke.
+

+ +.. _html-example-2: + +HTML Example +^^^^^^^^^^^^ + +.. code:: bash + + curl -v -d "action=build" -k -u admin:admin --anyauth --location https://localhost:8443/engine/job/myjob + +.. _xml-example-2: + +XML Example +^^^^^^^^^^^ + +.. code:: bash + + curl -v -d "action=build" -k -u admin:admin --anyauth --location -H "Accept: application/xml" https://localhost:8443/engine/job/myjob + +Launch Job +~~~~~~~~~~ + +.. _uri-3: + +URI +^^^ + +https://(heritrixhost):8443/engine/job/(jobname) + +.. _description-3: + +Description +^^^^^^^^^^^ + +This API launches a crawl job. The job can be launched in the "paused" +state or the "unpaused" state. If launched in the "unpaused" state the +job will immediately begin crawling. + +.. _http-method-3: + +HTTP Method +^^^^^^^^^^^ + +POST + +.. _http-data-3: + +HTTP Data +^^^^^^^^^ + +.. raw:: html + + + + + + + + + + + + + + + + + + + + + +

Name
+

Value
+

Description
+

action
+

launch
+

The action to invoke.
+

+ +.. _html-example-3: + +HTML Example +^^^^^^^^^^^^ + +.. code:: bash + + curl -v -d "action=launch" -k -u admin:admin --anyauth --location https://localhost:8443/engine/job/myjob + +.. _xml-example-3: + +XML Example +^^^^^^^^^^^ + +.. code:: bash + + curl -v -d "action=launch" -k -u admin:admin --anyauth --location -H "Accept: application/xml" https://localhost:8443/engine/job/myjob + +Rescan Job Directory +~~~~~~~~~~~~~~~~~~~~ + +.. _uri-4: + +URI +^^^ + +https://(heritrixhost):8443/engine + +.. _description-4: + +Description +^^^^^^^^^^^ + +This API rescans the main job directory and returns an HTML page +containing all the job names. It also returns information about the +jobs, such as the location of the job configuration file and the number +of job launches. + +.. _http-method-4: + +HTTP Method +^^^^^^^^^^^ + +POST + +HTTP Data + +.. raw:: html + + + + + + + + + + + + + + + + + + + + + +

Name
+

Value
+

Description
+

action
+

rescan
+

The action to invoke.
+

+ +.. _html-example-4: + +HTML Example +^^^^^^^^^^^^ + +.. code:: bash + + curl -v -d "action=rescan" -k -u admin:admin --anyauth --location https://localhost:8443/engine + +.. _xml-example-4: + +XML Example +^^^^^^^^^^^ + +.. code:: bash + + curl -v -d "action=rescan" -k -u admin:admin --anyauth --location -H "Accept: application/xml" https://localhost:8443/engine + +Pause Job +~~~~~~~~~ + +.. _uri-5: + +URI +^^^ + +https://(heritrixhost):8443/engine/job/(jobname) + +.. _description-5: + +Description +^^^^^^^^^^^ + +This API pauses an unpaused job. No crawling will occur while a job is +paused. + +.. _http-method-5: + +HTTP Method +^^^^^^^^^^^ + +POST + +.. _http-data-4: + +HTTP Data +^^^^^^^^^ + +.. raw:: html + + + + + + + + + + + + + + + + + + + + + +

Name
+

Value
+

Description
+

action
+

pause
+

The action to invoke.
+

+ +.. _html-example-5: + +HTML Example +^^^^^^^^^^^^ + +.. code:: bash + + curl -v -d "action=pause" -k -u admin:admin --anyauth --location https://localhost:8443/engine/job/myjob + +.. _xml-example-5: + +XML Example +^^^^^^^^^^^ + +.. code:: bash + + curl -v -d "action=pause" -k -u admin:admin --anyauth --location -H "Accept: application/xml" https://localhost:8443/engine/job/myjob + +Unpause Job +~~~~~~~~~~~ + +.. _uri-6: + +URI +^^^ + +https://(heritrixhost):8443/engine/job/(jobname) + +.. _description-6: + +Description +^^^^^^^^^^^ + +This API unpauses a paused job. Crawling will resume (or begin, in the +case of a job launched in the paused state) if possible. + +.. _http-method-6: + +HTTP Method +^^^^^^^^^^^ + +POST + +.. _http-data-5: + +HTTP Data +^^^^^^^^^ + +.. raw:: html + + + + + + + + + + + + + + + + + + + + + +

Name 
+

Value 
+

Description 
+

action 
+

unpause 
+

The action to invoke. 
+

+ +.. _html-example-6: + +HTML Example +^^^^^^^^^^^^ + +.. code:: bash + + curl -v -d "action=unpause" -k -u admin:admin --anyauth --location https://localhost:8443/engine/job/myjob + +.. _xml-example-6: + +XML Example +^^^^^^^^^^^ + +.. code:: bash + + curl -v -d "action=unpause" -k -u admin:admin --anyauth --location -H "Accept: application/xml" https://localhost:8443/engine/job/myjob + +Terminate Job +~~~~~~~~~~~~~ + +.. _uri-7: + +URI +^^^ + +https://(heritrixhost):8443/engine/job/(jobname) + +.. _description-7: + +Description +^^^^^^^^^^^ + +This API terminates a running job. + +.. _http-method-7: + +HTTP Method +^^^^^^^^^^^ + +POST + +.. _http-data-6: + +HTTP Data +^^^^^^^^^ + +.. raw:: html + + + + + + + + + + + + + + + + + + + + + +

Name
+

Value
+

Description
+

action
+

terminate
+

The action to invoke.
+

+ +.. _html-example-7: + +HTML Example +^^^^^^^^^^^^ + +.. code:: bash + + curl -v -d "action=terminate" -k -u admin:admin --anyauth --location https://localhost:8443/engine/job/myjob + +.. _xml-example-7: + +XML Example +^^^^^^^^^^^ + +.. code:: bash + + curl -v -d "action=terminate" -k -u admin:admin --anyauth --location -H "Accept: application/xml" https://localhost:8443/engine/job/myjob + +Teardown Job +~~~~~~~~~~~~ + +.. _uri-8: + +URI +^^^ + +https://(heritrixhost):8443/engine/job/(jobname) + +.. _description-8: + +Description +^^^^^^^^^^^ + +This API removes the Spring code that is used to run the job. Once a job +is torn down it must be rebuilt in order to run. + +.. _http-method-8: + +HTTP Method +^^^^^^^^^^^ + +POST + +.. _http-data-7: + +HTTP Data +^^^^^^^^^ + +.. raw:: html + + + + + + + + + + + + + + + + + + + + + +

Name
+

Value
+

Description
+

action
+

teardown
+

The action to invoke.
+

+ +.. _html-example-8: + +HTML Example +^^^^^^^^^^^^ + +.. code:: bash + + curl -v -d "action=teardown" -k -u admin:admin --anyauth --location https://localhost:8443/engine/job/myjob + +.. _xml-example-8: + +XML Example +^^^^^^^^^^^ + +.. code:: bash + + curl -v -d "action=teardown" -k -u admin:admin --anyauth --location -H "Accept: application/xml" https://localhost:8443/engine/job/myjob + +Copy Job +~~~~~~~~ + +.. _uri-9: + +URI +^^^ + +https://(heritrixhost):8443/engine/job/(jobname) + +.. _description-9: + +Description +^^^^^^^^^^^ + +This API copies an existing job configuration to a new job +configuration. If the "as profile" checkbox is selected, than the job +configuration is copied as a non-runnable profile configuration. + +.. _http-method-9: + +HTTP Method +^^^^^^^^^^^ + +POST + +HTTP Data + +.. raw:: html + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name
+

Value
+

Description
+

copyTo
+

(new job or profile configuration name)

The name of the new job or profile configuration.

asProfile

[on]
+

Whether to copy the job as a runnable configuration or as a non-runnable profile. "On" means the job will be copied as a profile. If the "asProfile" parameter is ommitted, the job will be copied as a runnable configuration.

+ +.. _html-example-9: + +HTML Example +^^^^^^^^^^^^ + +.. code:: bash + + curl -v -d "copyTo=mycopy&asProfile=on" -k -u admin:admin --anyauth --location https://localhost:8443/engine/job/myjob + +.. _xml-example-9: + +XML Example +^^^^^^^^^^^ + +.. code:: bash + + curl -v -d "copyTo=mycopy&asProfile=on" -k -u admin:admin --anyauth --location -H "Accept: application/xml" https://localhost:8443/engine/job/myjob + +Checkpoint Job +~~~~~~~~~~~~~~ + +.. _uri-10: + +URI +^^^ + +https://(heritrixhost):8443/engine/job/(jobname) + +.. _description-10: + +Description +^^^^^^^^^^^ + +This API checkpoints the chosen job. Checkpointing writes the current +state of a crawl to the file system so that the crawl can be recovered +if it fails. + +.. _http-method-10: + +HTTP Method +^^^^^^^^^^^ + +POST + +.. _http-data-8: + +HTTP Data +^^^^^^^^^ + +.. raw:: html + + + + + + + + + + + + + + + + + + + + + +

Name
+

Value
+

Description
+

action
+

checkpoint
+

The action to invoke.
+

+ +.. _html-example-10: + +HTML Example +^^^^^^^^^^^^ + +.. code:: bash + + curl -v -d "action=checkpoint" -k -u admin:admin --anyauth --location https://localhost:8443/engine/job/myjob + +.. _xml-example-10: + +XML Example +^^^^^^^^^^^ + +.. code:: bash + + curl -v -d "action=checkpoint" -k -u admin:admin --anyauth --location -H "Accept: application/xml" https://localhost:8443/engine/job/myjob + +Execute Shell Script in Job +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. _uri-11: + +URI +^^^ + +https://(heritrixhost):8443/engine/job/(jobname)/script + +.. _description-11: + +Description +^^^^^^^^^^^ + +This API executes a shell script. The script can be written as +Beanshell, ECMAScript, Groovy, or AppleScript. + +.. _http-method-11: + +HTTP Method +^^^^^^^^^^^ + +POST + +.. _http-data-9: + +HTTP Data +^^^^^^^^^ + +.. raw:: html + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name
+

Value
+

Description
+

engine
+

[beanshell,js,groovy,AppleScriptEngine]
+

The script engine to use.

script

(code to execute)

The script code to execute.

+ +.. _html-example-11: + +HTML Example +^^^^^^^^^^^^ + +.. code:: bash + + curl -v -d "engine=beanshell&script=System.out.println%28%22test%22%29%3B" -k -u admin:admin --anyauth --location https://localhost:8443/engine/job/myjob/script + +.. _xml-example-11: + +XML Example +^^^^^^^^^^^ + +.. code:: bash + + curl -v -d "engine=beanshell&script=System.out.println%28%22test%22%29%3B" -k -u admin:admin --anyauth --location -H "Accept: application/xml" https://localhost:8443/engine/job/myjob/script + +Submitting a CXML Job Configuration File +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. _uri-12: + +URI +^^^ + +https://(heritrixhost):8443/engine/job/(jobname)/jobdir/crawler-beans.cxml + +.. _description-12: + +Description +^^^^^^^^^^^ + +This API submits the contents of a CXML file for a chosen job. CXML +files are the configuration files used to control a crawl job. Each job +has a single CXML file. + +.. _http-method-12: + +HTTP Method +^^^^^^^^^^^ + +PUT + +.. _http-data-10: + +HTTP Data +^^^^^^^^^ + +.. raw:: html + + + + + + + + + + + + +

(CXML file content)

The XML-based text of the CXML file.

+ +Example +^^^^^^^ + +.. code:: bash + + curl -v -T my-crawler-beans.cxml -k -u admin:admin --anyauth --location https://localhost:8443/engine/job/myjob/jobdir/crawler-beans.cxml + +API Response +^^^^^^^^^^^^ + +On success, the Heritrix REST API will return a HTTP 200 with no body. diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 00000000..ca4d236d --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,155 @@ +# -*- coding: utf-8 -*- +# +# Configuration file for the Sphinx documentation builder. +# +# This file does only contain a selection of the most common options. For a +# full list see the documentation: +# http://www.sphinx-doc.org/en/master/config + +# -- Path setup -------------------------------------------------------------- + +# 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. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + + +# -- Project information ----------------------------------------------------- + +project = 'Heritrix' +copyright = '2018 Internet Archive and contributors' +author = 'Internet Archive and contributors' + +# The short X.Y version +version = '3.1' +# The full version, including alpha/beta/rc tags +release = '' + + +# -- General configuration --------------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path . +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'sphinx_rtd_theme' + +# 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 = {} + +# 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'] + +# Custom sidebar templates, must be a dictionary that maps document names +# to template names. +# +# The default sidebars (for documents that don't match any pattern) are +# defined by theme itself. Builtin themes are using these templates by +# default: ``['localtoc.html', 'relations.html', 'sourcelink.html', +# 'searchbox.html']``. +# +# html_sidebars = {} + + +# -- Options for HTMLHelp output --------------------------------------------- + +# Output file base name for HTML help builder. +htmlhelp_basename = 'Heritrixdoc' + + +# -- Options for LaTeX output ------------------------------------------------ + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'Heritrix.tex', 'Heritrix Documentation', + 'Internet Archive and contributors', 'manual'), +] + + +# -- Options for manual page output ------------------------------------------ + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'heritrix', 'Heritrix Documentation', + [author], 1) +] + + +# -- Options for Texinfo output ---------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'Heritrix', 'Heritrix Documentation', + author, 'Heritrix', 'Archival-quality web crawler.', + 'Miscellaneous'), +] diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 00000000..d78839a2 --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,15 @@ +Heritrix 3 Documentation +======================== + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + api + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search`