diff --git a/docs/_static/css/custom.css b/docs/_static/css/custom.css
new file mode 100644
index 00000000..8b28d3b9
--- /dev/null
+++ b/docs/_static/css/custom.css
@@ -0,0 +1,27 @@
+/* Custom styles */
+
+body {
+ color: #000;
+}
+
+.wy-side-nav-search > div.version {
+ color: #026;
+}
+
+.wy-menu-vertical header, .wy-menu-vertical p.caption {
+ color: #777;
+}
+
+.rst-content blockquote {
+ border-left: 2px solid #ddd;
+}
+
+code, .rst-content tt, .rst-content code {
+ font-size: 95%;
+}
+.note p code, .note div div pre {
+ background-color: #E7F2FC;
+}
+.warning p code, .warning div div pre {
+ background-color: #FFF8DD;
+}
diff --git a/docs/_static/img/icon.svg b/docs/_static/img/icon.svg
new file mode 100644
index 00000000..013929e7
--- /dev/null
+++ b/docs/_static/img/icon.svg
@@ -0,0 +1,127 @@
+
+
diff --git a/docs/_static/img/logo.ico b/docs/_static/img/logo.ico
new file mode 100644
index 00000000..e08f4be6
Binary files /dev/null and b/docs/_static/img/logo.ico differ
diff --git a/docs/_static/img/logo.png b/docs/_static/img/logo.png
new file mode 100644
index 00000000..640bdb84
Binary files /dev/null and b/docs/_static/img/logo.png differ
diff --git a/docs/_static/img/logo.svg b/docs/_static/img/logo.svg
new file mode 100644
index 00000000..38083975
--- /dev/null
+++ b/docs/_static/img/logo.svg
@@ -0,0 +1,118 @@
+
+
diff --git a/docs/api-reference.rst b/docs/api-reference.rst
new file mode 100644
index 00000000..e3594904
--- /dev/null
+++ b/docs/api-reference.rst
@@ -0,0 +1,17 @@
+.. full API docs
+
+ Copyright © 2019 Camila Maia
+
+ ## LICENSE_SHORT ##
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+######################
+Complete API Reference
+######################
+
+The following is a complete API reference generated from source.
+
+.. toctree::
+ :maxdepth: 4
+
+ api/scanapi
diff --git a/documentation/source/modules.rst b/docs/api/modules.rst
similarity index 100%
rename from documentation/source/modules.rst
rename to docs/api/modules.rst
diff --git a/documentation/source/scanapi.evaluators.rst b/docs/api/scanapi.evaluators.rst
similarity index 95%
rename from documentation/source/scanapi.evaluators.rst
rename to docs/api/scanapi.evaluators.rst
index eb781f33..1a2373f9 100644
--- a/documentation/source/scanapi.evaluators.rst
+++ b/docs/api/scanapi.evaluators.rst
@@ -1,6 +1,11 @@
scanapi.evaluators package
==========================
+.. automodule:: scanapi.evaluators
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
Submodules
----------
@@ -28,11 +33,3 @@ scanapi.evaluators.string\_evaluator module
:undoc-members:
:show-inheritance:
-
-Module contents
----------------
-
-.. automodule:: scanapi.evaluators
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/documentation/source/scanapi.rst b/docs/api/scanapi.rst
similarity index 91%
rename from documentation/source/scanapi.rst
rename to docs/api/scanapi.rst
index bf3dab16..f4607891 100644
--- a/documentation/source/scanapi.rst
+++ b/docs/api/scanapi.rst
@@ -1,6 +1,11 @@
scanapi package
===============
+.. automodule:: scanapi
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
Subpackages
-----------
@@ -45,14 +50,6 @@ scanapi.hide\_utils module
:undoc-members:
:show-inheritance:
-scanapi.main module
--------------------
-
-.. automodule:: scanapi.main
- :members:
- :undoc-members:
- :show-inheritance:
-
scanapi.reporter module
-----------------------
@@ -109,11 +106,3 @@ scanapi.utils module
:undoc-members:
:show-inheritance:
-
-Module contents
----------------
-
-.. automodule:: scanapi
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/documentation/source/scanapi.tree.rst b/docs/api/scanapi.tree.rst
similarity index 96%
rename from documentation/source/scanapi.tree.rst
rename to docs/api/scanapi.tree.rst
index b834566e..b84893de 100644
--- a/documentation/source/scanapi.tree.rst
+++ b/docs/api/scanapi.tree.rst
@@ -1,6 +1,11 @@
scanapi.tree package
====================
+.. automodule:: scanapi.tree
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
Submodules
----------
@@ -36,11 +41,3 @@ scanapi.tree.tree\_keys module
:undoc-members:
:show-inheritance:
-
-Module contents
----------------
-
-.. automodule:: scanapi.tree
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/cli-reference.rst b/docs/cli-reference.rst
new file mode 100644
index 00000000..6ce8d874
--- /dev/null
+++ b/docs/cli-reference.rst
@@ -0,0 +1,23 @@
+
+.. Click CLI reference
+
+ Copyright © 2019 Camila Maia
+
+ ## LICENSE_SHORT ##
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+######################
+Complete CLI Reference
+######################
+
+This is a full reference of the :command:`scanapi` command,
+with the same information as you get from using :option:`--help`.
+It is generated from source code and thus always up to date.
+See :doc:`usage` for a more detailed description.
+
+.. contents:: Available Commands
+ :local:
+
+.. click:: scanapi:main
+ :prog: scanapi
+ :show-nested:
diff --git a/docs/conf.py b/docs/conf.py
new file mode 100644
index 00000000..eaa9ad33
--- /dev/null
+++ b/docs/conf.py
@@ -0,0 +1,319 @@
+#
+# Sphinx documentation build configuration file.
+#
+# 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.
+
+import os
+import re
+import sys
+
+# 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.
+docs_dir = os.path.abspath(os.path.dirname(__file__))
+sys.path.insert(0, os.path.dirname(docs_dir))
+if os.path.exists(os.path.join(os.path.dirname(docs_dir), "src")):
+ sys.path.insert(0, os.path.join(os.path.dirname(docs_dir), "src"))
+
+#from setup import project as meta
+from rituals.util import buildsys
+meta = buildsys.project_meta(os.path.dirname(docs_dir))
+from scanapi import __main__ # Perform click setup for 'sphinx_click.ext'
+
+def setup(app):
+ """See https://docs.readthedocs.io/en/latest/guides/adding-custom-css.html"""
+ if os.path.exists('_static/css/custom.css'):
+ app.add_css_file('css/custom.css')
+ if os.path.exists('_static/js/custom.js'):
+ app.add_javascript('js/custom.js')
+
+on_rtd = os.environ.get('READTHEDOCS', None) == 'True'
+if not on_rtd:
+ import sphinx_rtd_theme
+
+# -- General configuration -----------------------------------------------------
+
+# If your documentation needs a minimal Sphinx version, state it here.
+needs_sphinx = '1.3'
+
+# 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.todo', 'sphinx.ext.coverage',
+ 'sphinx.ext.ifconfig', 'sphinx.ext.viewcode', 'sphinx.ext.napoleon',
+ 'sphinx_click.ext',
+]
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The suffix of source filenames.
+source_suffix = {
+ '.rst': 'restructuredtext',
+ '.md': 'markdown',
+}
+try:
+ import recommonmark
+except ImportError:
+ import warnings
+ warnings.warn("'recommonmark' extension not available!")
+ del source_suffix['.md']
+else:
+ extensions += ['recommonmark']
+
+# The encoding of source files.
+#source_encoding = 'utf-8-sig'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General information about the project.
+project = meta["name"]
+copyright = meta["copyright"]
+
+# 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 full version, including alpha/beta/rc tags.
+release = meta["version"]
+# The short X.Y version.
+version = '.'.join(re.split(r"[^\d]+", release)[:2])
+
+# 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 = '%Y-%m-%d'
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+exclude_patterns = [
+ "*~", "README.rst", "api/modules.rst",
+ "include-*.rst",
+]
+
+# 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
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+# A list of ignored prefixes for module index sorting.
+#modindex_common_prefix = []
+
+# Napoleon / API doc settings
+napoleon_numpy_docstring = False
+napoleon_use_ivar = True
+
+# https://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html
+autodoc_inherit_docstrings = True
+autodoc_default_options = {
+ 'members': None,
+ 'member-order': 'bysource',
+ 'undoc-members': None,
+ 'private-members': None,
+ #'special-members': '__str__,__repr__', # comma-separated specials to include
+ #'inherited-members': 'object,tuple,namedtuple', # comma-separated
+ #'show-inheritance': None,
+ #'ignore-module-all': '',
+ #'imported-members': 'StringIO',
+ 'exclude-members': '__weakref__', # comma-separated exclusions
+}
+
+
+# -- Options for HTML output ---------------------------------------------------
+if not on_rtd:
+ # The theme to use for HTML and HTML Help pages. See the documentation for
+ # a list of builtin themes.
+ html_theme = 'sphinx_rtd_theme'
+
+ # Add any paths that contain custom themes here, relative to this directory.
+ html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
+
+# 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 = dict(
+)
+
+# The name for this set of Sphinx documents. If None, it defaults to
+# " v documentation".
+#html_title = None
+
+# 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 = "_static/img/logo.png"
+
+# 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 = "_static/img/logo.ico"
+
+# 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 = '%Y-%m-%d'
+
+# 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 = {}
+
+# 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 = False
+
+# 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 = ''
+
+# This is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = None
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = project + 'doc'
+
+
+# -- 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': '',
+}
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title, author, documentclass [howto/manual]).
+latex_documents = [
+ ('index', project + '.tex', project + u' Documentation', meta["author"], 'manual'),
+]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+#latex_logo = None
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+#latex_use_parts = False
+
+# If true, show page references after internal links.
+#latex_show_pagerefs = False
+
+# If true, show URL addresses after external links.
+#latex_show_urls = False
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+#latex_domain_indices = True
+
+
+# -- Options for manual page output --------------------------------------------
+
+# One entry per manual page. List of tuples
+# (source start file, name, description, authors, manual section).
+man_pages = [
+ ('index', project, project + u' Documentation', [meta["author"]], 1)
+]
+
+# If true, show URL addresses after external links.
+#man_show_urls = False
+
+
+# -- 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 = [
+ ('index', project, project + u' Documentation', meta["author"], project, meta["description"], 'Miscellaneous'),
+]
+
+# Documents to append as an appendix to all manuals.
+#texinfo_appendices = []
+
+# If false, no module index is generated.
+#texinfo_domain_indices = True
+
+# How to display URL addresses: 'footnote', 'no', or 'inline'.
+#texinfo_show_urls = 'footnote'
+
+
+# -- InterSphinx configuration ----------------------------------------------
+# https://www.sphinx-doc.org/en/master/usage/extensions/intersphinx.html#configuration
+extensions += ['sphinx.ext.intersphinx']
+intersphinx_timeout = 15 # seconds
+intersphinx_mapping = dict(
+ invoke=('http://docs.pyinvoke.org/en/stable', None),
+)
+
+# -- External Links configuration -------------------------------------------
+extensions += ['sphinx.ext.extlinks']
+extlinks = dict(
+ gh=('https://github.com/%s', ''),
+)
+
+# -- GraphViz configuration -------------------------------------------------
+extensions += ['sphinx.ext.graphviz']
+graphviz_output_format = 'svg'
+
+# -- PlantUML configuration -------------------------------------------------
+##extensions += ['sphinxcontrib.plantuml']
+plantuml = os.path.expandvars('java -jar ${HOME}/.local/share/java/plantuml.jar')
+plantuml_output_format = 'svg_obj'
diff --git a/docs/index.rst b/docs/index.rst
new file mode 100644
index 00000000..c6625e8f
--- /dev/null
+++ b/docs/index.rst
@@ -0,0 +1,120 @@
+.. documentation master file
+
+ Copyright © 2019 Camila Maia
+
+ ## LICENSE_SHORT ##
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+#############################################################################
+Welcome to the “ScanAPI” manual!
+#############################################################################
+
+.. image:: _static/img/logo.png
+
+Automated Integration Testing and Live Documentation for your API.
+
+
+**********
+Installing
+**********
+
+*ScanAPI* can be installed from PyPI
+via ``pip install scanapi`` as usual,
+see `releases `_
+on GitHub for an overview of available versions – the project uses
+`semantic versioning `_ and follows
+`PEP 440 `_ conventions.
+If no releases are available yet, install from source as described right below.
+
+To get a bleeding-edge version from source, use these commands:
+
+.. code-block:: shell
+
+ repo="scanapi/scanapi"
+ python3 -m venv ~/.local/venvs/scanapi && . $_/bin/activate
+ python3 -m pip install -r "https://raw.githubusercontent.com/$repo/master/requirements.txt"
+ python3 -m pip install -e "git+https://github.com/$repo.git#egg=${repo#*/}"
+ ln -nfs ../.local/venvs/scanapi/bin/scanapi ~/.local/bin
+
+See the following section on how to create a full development environment.
+
+To add bash completion, read the
+`Click docs `_
+about it, or just follow these instructions:
+
+.. code-block:: shell
+
+ cmdname=scanapi
+ mkdir -p ~/.bash_completion.d
+ ( export _$(tr a-z- A-Z_ <<<"$cmdname")_COMPLETE=source ; \
+ $cmdname >~/.bash_completion.d/$cmdname.sh )
+ grep /.bash_completion.d/$cmdname.sh ~/.bash_completion >/dev/null \
+ || echo >>~/.bash_completion ". ~/.bash_completion.d/$cmdname.sh"
+ . "/etc/bash_completion"
+
+After installation, continue with :doc:`usage`.
+
+
+************
+Contributing
+************
+
+To create a working directory for this project, call these commands:
+
+.. code-block:: shell
+
+ git clone "https://github.com/scanapi/scanapi.git"
+ cd "scanapi"
+ . .env --yes --develop
+ invoke build --docs test check
+
+Contributing to this project is easy, and reporting an issue or
+adding to the documentation also improves things for every user.
+You don’t need to be a developer to contribute.
+See :doc:`CONTRIBUTING` for more.
+
+
+**********************
+Documentation Contents
+**********************
+
+.. toctree::
+ :maxdepth: 4
+
+ usage
+ cli-reference
+ api-reference
+ CONTRIBUTING
+ LICENSE
+
+
+**********
+References
+**********
+
+Tools
+=====
+
+- `Cookiecutter `_
+- `PyInvoke `_
+- `pytest `_
+- `tox `_
+- `Pylint `_
+- `twine `_
+- `bpython `_
+- `yolk3k `_
+
+Packages
+========
+
+- `Rituals `_
+- `Click `_
+
+
+Indices and Tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
diff --git a/docs/requirements.txt b/docs/requirements.txt
new file mode 100644
index 00000000..816c1bc2
--- /dev/null
+++ b/docs/requirements.txt
@@ -0,0 +1,7 @@
+#
+# "Read The Docs" requirements
+#
+
+
+sphinx-click
+-r ../requirements.txt
diff --git a/docs/usage.rst b/docs/usage.rst
new file mode 100644
index 00000000..10bbe0fb
--- /dev/null
+++ b/docs/usage.rst
@@ -0,0 +1,100 @@
+.. documentation: usage
+
+ Copyright © 2019 Camila Maia
+
+ ## LICENSE_SHORT ##
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#############################################################################
+Using `ScanAPI`
+#############################################################################
+
+********
+Overview
+********
+
+**TODO**
+
+This project is based on the :gh:`Springerle/py-generic-project` cookiecutter.
+Distribution packages are versioned according to :pep:`440`.
+
+
+*****************
+Command Line Tool
+*****************
+
+The :command:`scanapi` tool uses a sub-command scheme, like known from `git`.
+
+Add :ref:`global options ` directly after the :command:`scanapi` command name, and other options
+after their sub-command. To get detailed help for a specific sub-command,
+use a local :option:`--help` option as in ``scanapi help --help``.
+
+.. warning::
+
+ .. rubric:: Status: ALPHA
+
+ Not all of these options and commands are implemented yet!
+
+
+.. _cmd-help:
+
+The `help` Command
+==================
+
+Call ``scanapi help`` to check if your installation basically works.
+The output shows version information and install locations.
+It also lists the paths where configuration files are read from,
+see :option:`--config` and :envvar:`SCANAPI_CONFIG` on how to provide a custom path.
+
+
+
+.. _global-opts:
+
+Global Command Line Options
+===========================
+
+Global options must be used *before* any sub-command, e.g. ``scanapi -c :/dev/null help``.
+
+.. option:: --version
+
+ Show the version and install location, then exit.
+
+.. option:: --license
+
+ Show the license text and exit.
+
+.. option:: -q, --quiet
+
+ Be quiet and only show error messages.
+
+.. option:: -v, --verbose
+
+ Create extra verbose output.
+
+.. option:: -c, --config FILE
+
+ Load given configuration file(s). This overwrites the default lookup path for configuration files.
+
+ You can provide this option multiple times, and also provide PATH-like lists separated by a colon.
+ An empty path component ``-c ''`` restores the default lookup path, at the place you used it.
+
+ See also :envvar:`SCANAPI_CONFIG` on how to use the environment for this.
+
+.. option:: -h, --help
+
+ Show a usage message and exit.
+
+
+.. _env-vars:
+
+Environment Variables
+=====================
+
+Certain environment variables can be used to customise the behaviour
+of the application.
+
+.. envvar:: SCANAPI_CONFIG
+
+ A PATH-like list of *additional* config files, read after the default ones.
+
+ See also :option:`--config` for ad-hoc changes on the command line.
diff --git a/documentation/Makefile b/documentation/Makefile
deleted file mode 100644
index d0c3cbf1..00000000
--- a/documentation/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-# Minimal makefile for Sphinx documentation
-#
-
-# You can set these variables from the command line, and also
-# from the environment for the first two.
-SPHINXOPTS ?=
-SPHINXBUILD ?= sphinx-build
-SOURCEDIR = source
-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)
diff --git a/documentation/make.bat b/documentation/make.bat
deleted file mode 100644
index 6247f7e2..00000000
--- a/documentation/make.bat
+++ /dev/null
@@ -1,35 +0,0 @@
-@ECHO OFF
-
-pushd %~dp0
-
-REM Command file for Sphinx documentation
-
-if "%SPHINXBUILD%" == "" (
- set SPHINXBUILD=sphinx-build
-)
-set SOURCEDIR=source
-set BUILDDIR=build
-
-if "%1" == "" goto help
-
-%SPHINXBUILD% >NUL 2>NUL
-if errorlevel 9009 (
- echo.
- 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.If you don't have Sphinx installed, grab it from
- echo.http://sphinx-doc.org/
- exit /b 1
-)
-
-%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
-goto end
-
-:help
-%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
-
-:end
-popd
diff --git a/documentation/source/conf.py b/documentation/source/conf.py
deleted file mode 100644
index b3933472..00000000
--- a/documentation/source/conf.py
+++ /dev/null
@@ -1,52 +0,0 @@
-# Configuration file for the Sphinx documentation builder.
-#
-# This file only contains a selection of the most common options. For a full
-# list see the documentation:
-# https://www.sphinx-doc.org/en/master/usage/configuration.html
-
-# -- 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("../../scanapi"))
-
-
-# -- Project information -----------------------------------------------------
-
-project = "scanapi"
-copyright = "2020, Camila Maia"
-author = "Camila Maia"
-
-
-# -- General configuration ---------------------------------------------------
-
-# 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"]
-
-# Add any paths that contain templates here, relative to this directory.
-templates_path = ["_templates"]
-
-# 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 = []
-
-
-# -- 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"
-
-# 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"]
diff --git a/documentation/source/index.rst b/documentation/source/index.rst
deleted file mode 100644
index 4e79d4ac..00000000
--- a/documentation/source/index.rst
+++ /dev/null
@@ -1,23 +0,0 @@
-.. scanapi documentation master file, created by
- sphinx-quickstart on Sat Jul 25 19:36:11 2020.
- You can adapt this file completely to your liking, but it should at least
- contain the root `toctree` directive.
-
-Welcome to scanapi's documentation!
-===================================
-
-Here is some intro of the Scan API
-
-.. toctree::
- :maxdepth: 2
- :caption: Contents:
-
- modules
-
-
-Indices and tables
-==================
-
-* :ref:`genindex`
-* :ref:`modindex`
-* :ref:`search`
diff --git a/documentation/source/tests.rst b/documentation/source/tests.rst
deleted file mode 100644
index 00616d66..00000000
--- a/documentation/source/tests.rst
+++ /dev/null
@@ -1,30 +0,0 @@
-tests package
-=============
-
-Subpackages
------------
-
-.. toctree::
- :maxdepth: 4
-
- tests.unit
-
-Submodules
-----------
-
-tests.conftest module
----------------------
-
-.. automodule:: tests.conftest
- :members:
- :undoc-members:
- :show-inheritance:
-
-
-Module contents
----------------
-
-.. automodule:: tests
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/documentation/source/tests.unit.evaluators.rst b/documentation/source/tests.unit.evaluators.rst
deleted file mode 100644
index 5e3ea18a..00000000
--- a/documentation/source/tests.unit.evaluators.rst
+++ /dev/null
@@ -1,38 +0,0 @@
-tests.unit.evaluators package
-=============================
-
-Submodules
-----------
-
-tests.unit.evaluators.test\_code\_evaluator module
---------------------------------------------------
-
-.. automodule:: tests.unit.evaluators.test_code_evaluator
- :members:
- :undoc-members:
- :show-inheritance:
-
-tests.unit.evaluators.test\_spec\_evaluator module
---------------------------------------------------
-
-.. automodule:: tests.unit.evaluators.test_spec_evaluator
- :members:
- :undoc-members:
- :show-inheritance:
-
-tests.unit.evaluators.test\_string\_evaluator module
-----------------------------------------------------
-
-.. automodule:: tests.unit.evaluators.test_string_evaluator
- :members:
- :undoc-members:
- :show-inheritance:
-
-
-Module contents
----------------
-
-.. automodule:: tests.unit.evaluators
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/documentation/source/tests.unit.rst b/documentation/source/tests.unit.rst
deleted file mode 100644
index e228b9a9..00000000
--- a/documentation/source/tests.unit.rst
+++ /dev/null
@@ -1,95 +0,0 @@
-tests.unit package
-==================
-
-Subpackages
------------
-
-.. toctree::
- :maxdepth: 4
-
- tests.unit.evaluators
- tests.unit.tree
-
-Submodules
-----------
-
-tests.unit.test\_config\_loader module
---------------------------------------
-
-.. automodule:: tests.unit.test_config_loader
- :members:
- :undoc-members:
- :show-inheritance:
-
-tests.unit.test\_hide\_utils module
------------------------------------
-
-.. automodule:: tests.unit.test_hide_utils
- :members:
- :undoc-members:
- :show-inheritance:
-
-tests.unit.test\_main module
-----------------------------
-
-.. automodule:: tests.unit.test_main
- :members:
- :undoc-members:
- :show-inheritance:
-
-tests.unit.test\_reporter module
---------------------------------
-
-.. automodule:: tests.unit.test_reporter
- :members:
- :undoc-members:
- :show-inheritance:
-
-tests.unit.test\_scan module
-----------------------------
-
-.. automodule:: tests.unit.test_scan
- :members:
- :undoc-members:
- :show-inheritance:
-
-tests.unit.test\_session module
--------------------------------
-
-.. automodule:: tests.unit.test_session
- :members:
- :undoc-members:
- :show-inheritance:
-
-tests.unit.test\_settings module
---------------------------------
-
-.. automodule:: tests.unit.test_settings
- :members:
- :undoc-members:
- :show-inheritance:
-
-tests.unit.test\_template\_render module
-----------------------------------------
-
-.. automodule:: tests.unit.test_template_render
- :members:
- :undoc-members:
- :show-inheritance:
-
-tests.unit.test\_utils module
------------------------------
-
-.. automodule:: tests.unit.test_utils
- :members:
- :undoc-members:
- :show-inheritance:
-
-
-Module contents
----------------
-
-.. automodule:: tests.unit
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/documentation/source/tests.unit.tree.rst b/documentation/source/tests.unit.tree.rst
deleted file mode 100644
index 73f0b7b6..00000000
--- a/documentation/source/tests.unit.tree.rst
+++ /dev/null
@@ -1,38 +0,0 @@
-tests.unit.tree package
-=======================
-
-Submodules
-----------
-
-tests.unit.tree.test\_endpoint\_node module
--------------------------------------------
-
-.. automodule:: tests.unit.tree.test_endpoint_node
- :members:
- :undoc-members:
- :show-inheritance:
-
-tests.unit.tree.test\_request\_node module
-------------------------------------------
-
-.. automodule:: tests.unit.tree.test_request_node
- :members:
- :undoc-members:
- :show-inheritance:
-
-tests.unit.tree.test\_testing\_node module
-------------------------------------------
-
-.. automodule:: tests.unit.tree.test_testing_node
- :members:
- :undoc-members:
- :show-inheritance:
-
-
-Module contents
----------------
-
-.. automodule:: tests.unit.tree
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/pyproject.toml b/pyproject.toml
index 60b5ae9e..11874c79 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -37,6 +37,10 @@ isort = "^5.5.3"
bandit = "^1.6.2"
pytest-it = "^0.1.4"
flake8 = "3.8.4"
+invoke = "^1.6"
+rituals = "^0.4.1"
+sphinx-click = "^3.0.1"
+recommonmark = "^0.7.1"
[tool.isort]
multi_line_output = 3
diff --git a/tasks.py b/tasks.py
new file mode 100644
index 00000000..6990c6ea
--- /dev/null
+++ b/tasks.py
@@ -0,0 +1,23 @@
+# pylint: disable=wildcard-import, unused-wildcard-import, invalid-name
+""" Project automation for Invoke.
+"""
+# Copyright © 2019 Camila Maia
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in all
+# copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+from rituals.easy import * # pylint: disable=redefined-builtin