From ca94436a4386e4187e94275ca0cf59667d49ea01 Mon Sep 17 00:00:00 2001 From: Benjamin Mort Date: Thu, 11 Apr 2019 12:29:42 +0100 Subject: [PATCH 01/14] Updated pull request template --- docs/PULL_REQUEST_TEMPLATE.md | 47 ++++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 14 deletions(-) diff --git a/docs/PULL_REQUEST_TEMPLATE.md b/docs/PULL_REQUEST_TEMPLATE.md index 6d2e152e..8e513f9f 100644 --- a/docs/PULL_REQUEST_TEMPLATE.md +++ b/docs/PULL_REQUEST_TEMPLATE.md @@ -1,23 +1,42 @@ - + + + -## Description: - +# Description + + + + + +## Testing instructions -## Testing instructions: - + + + + + ## Types of changes - -- [ ] Bug fix (non-breaking change that fixes an issue) -- [ ] New feature (non-breaking change that adds functionality) -- [ ] Breaking change (fix or feature that would cause existing functionality to change) -## Checklist: - + + + +- [ ] New feature +- [ ] Refactor +- [ ] Bug fix +- [ ] Documentation update +- [ ] Breaking change +- [ ] Non-breaking change + +## Checklist + + + +*(Also refer to the [DoD](https://developerskatelescopeorg.readthedocs.io/en/latest/agile_practices/definition_of_done.html) in the SKA developer guidelines)* + - [ ] The code follows the code style of this project. -- [ ] The changes require a documentation update. - [ ] Documentation has been updated accordingly. -- [ ] Tests cover all changes in this PR. +- [ ] Tests cover changes in this PR (75% - 90% coverage). +- [ ] Tests have be added to the CI script. - [ ] All new and existing tests passed. From 0c45424b2833417eec90b2e8c551d9d3452dcbfd Mon Sep 17 00:00:00 2001 From: Benjamin Mort Date: Thu, 11 Apr 2019 12:30:19 +0100 Subject: [PATCH 02/14] updated the documentation readme with readthedocs build instructions --- docs/README.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 700745b8..ec66dbe8 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,4 +1,14 @@ # SIP Documentation Placeholder for any documentation, or technical notes related to SIP code -which we choose to keep in the code repo rather than on Confluence. +which we choose to keep in the code repository rather than on Confluence. + +## Building `readthedocs` documentation + +```bash +make html +``` + +```bash +sphinx-autobuild docs/src docs/build/html +``` From ae39021b2e7d313c3ec66e6f890a22e285a77fe4 Mon Sep 17 00:00:00 2001 From: Benjamin Mort Date: Thu, 11 Apr 2019 12:30:55 +0100 Subject: [PATCH 03/14] updated docstrings based on sphinx warnings --- .../configuration_db/sip_config_db/_config_db_redis.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sip/execution_control/configuration_db/sip_config_db/_config_db_redis.py b/sip/execution_control/configuration_db/sip_config_db/_config_db_redis.py index 36c16002..b0f21240 100644 --- a/sip/execution_control/configuration_db/sip_config_db/_config_db_redis.py +++ b/sip/execution_control/configuration_db/sip_config_db/_config_db_redis.py @@ -186,8 +186,8 @@ def load_dict(self, db_key: str, hierarchical: bool = False) -> dict: Args: db_key (str): Key at which the dictionary is stored in the db. hierarchical (bool): If True, expect the dictionary to have been - stored hierarchically. If False, expect the dictionary to have - been stored flat. + stored hierarchically. If False, expect the dictionary to have + been stored flat. Returns: dict, the dictionary stored at key @@ -211,8 +211,8 @@ def load_dict_values(self, db_key: str, dict_keys: List[str], db_key (str): Key where the dictionary is stored dict_keys (List[str]): Keys within the dictionary to load. hierarchical (bool): If True, expect the dictionary to have been - stored hierarchically. If False, expect the dictionary to have - been stored flat. + stored hierarchically. If False, expect the dictionary to have + been stored flat. Returns: From b47cc8b10174a4e848d55496861c91737a77e885 Mon Sep 17 00:00:00 2001 From: Benjamin Mort Date: Sat, 4 May 2019 00:00:02 +0100 Subject: [PATCH 04/14] Updated placeholder Sphinx doc --- docs/Makefile | 19 ++++ docs/src/api.rst | 38 ++++++++ docs/src/background.rst | 7 ++ docs/src/conf.py | 201 ++++++++++++++++++++++++++++++++++++++++ docs/src/index.rst | 23 +++++ docs/src/quickstart.rst | 7 ++ docs/src/references.rst | 7 ++ 7 files changed, 302 insertions(+) create mode 100644 docs/Makefile create mode 100644 docs/src/api.rst create mode 100644 docs/src/background.rst create mode 100644 docs/src/conf.py create mode 100644 docs/src/index.rst create mode 100644 docs/src/quickstart.rst create mode 100644 docs/src/references.rst diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 00000000..fcba7872 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,19 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SOURCEDIR = src +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/docs/src/api.rst b/docs/src/api.rst new file mode 100644 index 00000000..2f70b828 --- /dev/null +++ b/docs/src/api.rst @@ -0,0 +1,38 @@ +.. API + +.. toctree:: + :maxdepth: 2 + +API +*** + +Configuration Database +====================== + +SDP State +--------- + +.. automodule:: sip_config_db.states.sdp_state + :members: + :inherited-members: + +Service States +-------------- + +.. automodule:: sip_config_db.states.service_state + :members: + +Services +-------- + +.. automodule:: sip_config_db.states.service_state + :members: + +Utility modules +--------------- + +.. automodule:: sip_config_db.utils.datetime_utils + :members: + +.. automodule:: sip_config_db.utils.generate_sbi_config + :members: diff --git a/docs/src/background.rst b/docs/src/background.rst new file mode 100644 index 00000000..3053db73 --- /dev/null +++ b/docs/src/background.rst @@ -0,0 +1,7 @@ +.. Background + +.. toctree:: + :maxdepth: 2 + +Background +********** diff --git a/docs/src/conf.py b/docs/src/conf.py new file mode 100644 index 00000000..3c1625fb --- /dev/null +++ b/docs/src/conf.py @@ -0,0 +1,201 @@ +# -*- 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 +import sphinx_rtd_theme +# sys.path.insert(0, os.path.abspath('.')) +sys.path.insert(0, os.path.abspath( + os.path.join('..', '..', 'sip', 'execution_control', 'configuration_db') +)) + +# -- Project information ----------------------------------------------------- + +project = 'ska.sdp.sip' +copyright = '2019, SKA Organisation' +author = 'SIP team' + +# The short X.Y version +version = '0.1' +# The full version, including alpha/beta/rc tags +release = '0.1-beta' + + +# -- 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 = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.doctest', + 'sphinx.ext.todo', + 'sphinx.ext.coverage', + 'sphinx.ext.mathjax', + 'sphinx.ext.ifconfig', + 'sphinx.ext.viewcode', + 'sphinx.ext.githubpages', + 'recommonmark' +] + +# 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 = 'En-en' + +# 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 = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = True + +# -- 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 = {} + +html_context = { + 'display_github': True, + 'github_user': 'SKA-ScienceDataProcessor', + 'github_repo': 'integration-prototype', + 'github_version': 'master', + 'conf_py_path': '/docs/src/' +} + + +# -- Options for HTMLHelp output --------------------------------------------- + +# Output file base name for HTML help builder. +htmlhelp_basename = 'sipdoc' + + +# -- 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, 'sip.tex', 'sip Documentation', + 'SKA SDP SIP team', '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, 'sip', 'sip 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, 'sip', 'sip Documentation', + author, 'sip', 'One line description of project.', + 'Miscellaneous'), +] + + +# -- Options for Epub output ------------------------------------------------- + +# Bibliographic Dublin Core info. +epub_title = project + +# The unique identifier of the text. This can be a ISBN number +# or the project homepage. +# +# epub_identifier = '' + +# A unique identification for the text. +# +# epub_uid = '' + +# A list of files that should not be packed into the epub file. +epub_exclude_files = ['search.html'] + + +# -- Extension configuration ------------------------------------------------- + +# Example configuration for intersphinx: refer to the Python standard library. +intersphinx_mapping = {'https://docs.python.org/': None} diff --git a/docs/src/index.rst b/docs/src/index.rst new file mode 100644 index 00000000..ddde3c38 --- /dev/null +++ b/docs/src/index.rst @@ -0,0 +1,23 @@ +Welcome to the SIP documentation! +================================= + +The SDP System Integration Prototype (SIP) is project to produce a minimal +end-to-end Prototype of the major internal and external control interfaces +of the SDP. + +.. toctree:: + :maxdepth: 2 + :caption: Contents + + background + quickstart + api + references + + +Indices and tables +------------------ + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/docs/src/quickstart.rst b/docs/src/quickstart.rst new file mode 100644 index 00000000..71cdaa08 --- /dev/null +++ b/docs/src/quickstart.rst @@ -0,0 +1,7 @@ +.. Quickstart + +.. toctree:: + :maxdepth: 2 + +Quickstart +********** diff --git a/docs/src/references.rst b/docs/src/references.rst new file mode 100644 index 00000000..90f94680 --- /dev/null +++ b/docs/src/references.rst @@ -0,0 +1,7 @@ +.. References + +.. toctree:: + :maxdepth: 2 + +References +********** From f555ec90f05ba741bcaa4a9f73dcdd04855906f0 Mon Sep 17 00:00:00 2001 From: Benjamin Mort Date: Sat, 4 May 2019 00:00:40 +0100 Subject: [PATCH 05/14] Updated PR template & readme in docs folder --- docs/PULL_REQUEST_TEMPLATE.md | 3 ++- docs/README.md | 29 ++++++++++++++++++++++++++--- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/docs/PULL_REQUEST_TEMPLATE.md b/docs/PULL_REQUEST_TEMPLATE.md index 8e513f9f..9ed2aa51 100644 --- a/docs/PULL_REQUEST_TEMPLATE.md +++ b/docs/PULL_REQUEST_TEMPLATE.md @@ -33,7 +33,8 @@ -*(Also refer to the [DoD](https://developerskatelescopeorg.readthedocs.io/en/latest/agile_practices/definition_of_done.html) in the SKA developer guidelines)* +*(Please also refer to the [definition of done](https://bit.ly/ska_dod) +in the SKA developer guidelines)* - [ ] The code follows the code style of this project. - [ ] Documentation has been updated accordingly. diff --git a/docs/README.md b/docs/README.md index ec66dbe8..3dbfe82b 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,14 +1,37 @@ # SIP Documentation -Placeholder for any documentation, or technical notes related to SIP code -which we choose to keep in the code repository rather than on Confluence. +This folder contains documentation and technical notes related to SIP code +which we choose to keep in the code repository (rather than on Confluence). -## Building `readthedocs` documentation +## Building Sphinx documentation + +Documentation is build automatically by the CI/CD **(TODO!)** script on pushes +to the Github repository. It can also be build manually using the +following commands (this assumes all dependencies have been installed - +eg. `pipenv shell`!): + +Building the HTML documentation is as simple as running the following command +from the `docs/` folder. ```bash make html ``` +This will render HTML documentation into the `docs/build/html` directory. To +view these open `docs/build/html/index.html` in a web browser. + +If developing documentation the +[`sphinx-autobuild`](https://github.com/GaretJax/sphinx-autobuild) Python +package can also be very useful. This will rebuild the documentation +automatically every time a change is made and serve it at the address +. If using the provided `pipenv`, this tool is already +installed and can be used with the following command, run from the top level +repository directory: + ```bash sphinx-autobuild docs/src docs/build/html ``` + +### Publishing to [`Read the Docs`](https://readthedocs.org/) + +... From 6db596a979525547cfe3dab9a715e88f496134e8 Mon Sep 17 00:00:00 2001 From: Benjamin Mort Date: Sat, 4 May 2019 00:09:53 +0100 Subject: [PATCH 06/14] Added pipenv and top level requirements file. --- Pipfile | 28 +++ Pipfile.lock | 639 +++++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 43 ++++ 3 files changed, 710 insertions(+) create mode 100644 Pipfile create mode 100644 Pipfile.lock create mode 100644 requirements.txt diff --git a/Pipfile b/Pipfile new file mode 100644 index 00000000..26e4d482 --- /dev/null +++ b/Pipfile @@ -0,0 +1,28 @@ +[[source]] +name = "pypi" +url = "https://pypi.org/simple" +verify_ssl = true + +[packages] +docker = "~=3.7.2" +redis = "~=2.10.6" +jsonschema = "~=2.6.0" +jinja2 = "~=2.10" +PyYAML = "~=5.1" +Sphinx = "*" +sphinx_rtd_theme = "*" +sphinx-autobuild = "*" +sphinxcontrib-websupport = "*" +recommonmark = "*" + +[dev-packages] +doc8 = ">=0.8.0" +pylint = ">=2.3.1" +pytest = "~=4.0.1" +pytest-pylint = "~=0.13.0" +pytest-codestyle = "~=1.3.1" +pytest-pydocstyle = "~=1.4.1" +pytest-cov = "~=2.6.0" + +[requires] +python_version = "3.6" diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 00000000..bcbaadb6 --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,639 @@ +{ + "_meta": { + "hash": { + "sha256": "c2f7e5b00b5e2e67948abc41f626b0ba7b4b1651af5cf2e41f30236e1869dc60" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.6" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "alabaster": { + "hashes": [ + "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359", + "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02" + ], + "version": "==0.7.12" + }, + "argh": { + "hashes": [ + "sha256:a9b3aaa1904eeb78e32394cd46c6f37ac0fb4af6dc488daa58971bdc7d7fcaf3", + "sha256:e9535b8c84dc9571a48999094fda7f33e63c3f1b74f3e5f3ac0105a58405bb65" + ], + "version": "==0.26.2" + }, + "babel": { + "hashes": [ + "sha256:6778d85147d5d85345c14a26aada5e478ab04e39b078b0745ee6870c2b5cf669", + "sha256:8cba50f48c529ca3fa18cf81fa9403be176d374ac4d60738b839122dfaaa3d23" + ], + "version": "==2.6.0" + }, + "certifi": { + "hashes": [ + "sha256:59b7658e26ca9c7339e00f8f4636cdfe59d34fa37b9b04f6f9e9926b3cece1a5", + "sha256:b26104d6835d1f5e49452a26eb2ff87fe7090b89dfcaee5ea2212697e1e1d7ae" + ], + "version": "==2019.3.9" + }, + "chardet": { + "hashes": [ + "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", + "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" + ], + "version": "==3.0.4" + }, + "commonmark": { + "hashes": [ + "sha256:14c3df31e8c9c463377e287b2a1eefaa6019ab97b22dad36e2f32be59d61d68d", + "sha256:867fc5db078ede373ab811e16b6789e9d033b15ccd7296f370ca52d1ee792ce0" + ], + "version": "==0.9.0" + }, + "docker": { + "hashes": [ + "sha256:2b1f48041cfdcc9f6b5da0e04e0e326ded225e736762ade2060000e708f4c9b7", + "sha256:c456ded5420af5860441219ff8e51cdec531d65f4a9e948ccd4133e063b72f50" + ], + "index": "pypi", + "version": "==3.7.2" + }, + "docker-pycreds": { + "hashes": [ + "sha256:6ce3270bcaf404cc4c3e27e4b6c70d3521deae82fb508767870fdbf772d584d4", + "sha256:7266112468627868005106ec19cd0d722702d2b7d5912a28e19b826c3d37af49" + ], + "version": "==0.4.0" + }, + "docutils": { + "hashes": [ + "sha256:02aec4bd92ab067f6ff27a38a38a41173bf01bed8f89157768c1573f53e474a6", + "sha256:51e64ef2ebfb29cae1faa133b3710143496eca21c530f3f71424d77687764274", + "sha256:7a4bd47eaf6596e1295ecb11361139febe29b084a87bf005bf899f9a42edc3c6" + ], + "version": "==0.14" + }, + "future": { + "hashes": [ + "sha256:67045236dcfd6816dc439556d009594abf643e5eb48992e36beac09c2ca659b8" + ], + "version": "==0.17.1" + }, + "idna": { + "hashes": [ + "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407", + "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c" + ], + "version": "==2.8" + }, + "imagesize": { + "hashes": [ + "sha256:3f349de3eb99145973fefb7dbe38554414e5c30abd0c8e4b970a7c9d09f3a1d8", + "sha256:f3832918bc3c66617f92e35f5d70729187676313caa60c187eb0f28b8fe5e3b5" + ], + "version": "==1.1.0" + }, + "jinja2": { + "hashes": [ + "sha256:065c4f02ebe7f7cf559e49ee5a95fb800a9e4528727aec6f24402a5374c65013", + "sha256:14dd6caf1527abb21f08f86c784eac40853ba93edb79552aa1e4b8aef1b61c7b" + ], + "index": "pypi", + "version": "==2.10.1" + }, + "jsonschema": { + "hashes": [ + "sha256:000e68abd33c972a5248544925a0cae7d1125f9bf6c58280d37546b946769a08", + "sha256:6ff5f3180870836cae40f06fa10419f557208175f13ad7bc26caa77beb1f6e02" + ], + "index": "pypi", + "version": "==2.6.0" + }, + "livereload": { + "hashes": [ + "sha256:29cadfabcedd12eed792e0131991235b9d4764d4474bed75cf525f57109ec0a2", + "sha256:e632a6cd1d349155c1d7f13a65be873b38f43ef02961804a1bba8d817fa649a7" + ], + "version": "==2.6.0" + }, + "markupsafe": { + "hashes": [ + "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473", + "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161", + "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235", + "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", + "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", + "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", + "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", + "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", + "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183", + "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66", + "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1", + "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", + "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", + "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", + "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", + "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", + "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d", + "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e", + "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d", + "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c", + "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21", + "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2", + "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5", + "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b", + "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6", + "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f", + "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f", + "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7" + ], + "version": "==1.1.1" + }, + "packaging": { + "hashes": [ + "sha256:0c98a5d0be38ed775798ece1b9727178c4469d9c3b4ada66e8e6b7849f8732af", + "sha256:9e1cbf8c12b1f1ce0bb5344b8d7ecf66a6f8a6e91bcb0c84593ed6d3ab5c4ab3" + ], + "version": "==19.0" + }, + "pathtools": { + "hashes": [ + "sha256:7c35c5421a39bb82e58018febd90e3b6e5db34c5443aaaf742b3f33d4655f1c0" + ], + "version": "==0.1.2" + }, + "port-for": { + "hashes": [ + "sha256:b16a84bb29c2954db44c29be38b17c659c9c27e33918dec16b90d375cc596f1c" + ], + "version": "==0.3.1" + }, + "pygments": { + "hashes": [ + "sha256:5ffada19f6203563680669ee7f53b64dabbeb100eb51b61996085e99c03b284a", + "sha256:e8218dd399a61674745138520d0d4cf2621d7e032439341bc3f647bff125818d" + ], + "version": "==2.3.1" + }, + "pyparsing": { + "hashes": [ + "sha256:1873c03321fc118f4e9746baf201ff990ceb915f433f23b395f5580d1840cb2a", + "sha256:9b6323ef4ab914af344ba97510e966d64ba91055d6b9afa6b30799340e89cc03" + ], + "version": "==2.4.0" + }, + "pytz": { + "hashes": [ + "sha256:303879e36b721603cc54604edcac9d20401bdbe31e1e4fdee5b9f98d5d31dfda", + "sha256:d747dd3d23d77ef44c6a3526e274af6efeb0a6f1afd5a69ba4d5be4098c8e141" + ], + "version": "==2019.1" + }, + "pyyaml": { + "hashes": [ + "sha256:1adecc22f88d38052fb787d959f003811ca858b799590a5eaa70e63dca50308c", + "sha256:436bc774ecf7c103814098159fbb84c2715d25980175292c648f2da143909f95", + "sha256:460a5a4248763f6f37ea225d19d5c205677d8d525f6a83357ca622ed541830c2", + "sha256:5a22a9c84653debfbf198d02fe592c176ea548cccce47553f35f466e15cf2fd4", + "sha256:7a5d3f26b89d688db27822343dfa25c599627bc92093e788956372285c6298ad", + "sha256:9372b04a02080752d9e6f990179a4ab840227c6e2ce15b95e1278456664cf2ba", + "sha256:a5dcbebee834eaddf3fa7366316b880ff4062e4bcc9787b78c7fbb4a26ff2dd1", + "sha256:aee5bab92a176e7cd034e57f46e9df9a9862a71f8f37cad167c6fc74c65f5b4e", + "sha256:c51f642898c0bacd335fc119da60baae0824f2cde95b0330b56c0553439f0673", + "sha256:c68ea4d3ba1705da1e0d85da6684ac657912679a649e8868bd850d2c299cce13", + "sha256:e23d0cc5299223dcc37885dae624f382297717e459ea24053709675a976a3e19" + ], + "index": "pypi", + "version": "==5.1" + }, + "recommonmark": { + "hashes": [ + "sha256:a520b8d25071a51ae23a27cf6252f2fe387f51bdc913390d83b2b50617f5bb48", + "sha256:c85228b9b7aea7157662520e74b4e8791c5eacd375332ec68381b52bf10165be" + ], + "index": "pypi", + "version": "==0.5.0" + }, + "redis": { + "hashes": [ + "sha256:8a1900a9f2a0a44ecf6e8b5eb3e967a9909dfed219ad66df094f27f7d6f330fb", + "sha256:a22ca993cea2962dbb588f9f30d0015ac4afcc45bee27d3978c0dbe9e97c6c0f" + ], + "index": "pypi", + "version": "==2.10.6" + }, + "requests": { + "hashes": [ + "sha256:502a824f31acdacb3a35b6690b5fbf0bc41d63a24a45c4004352b0242707598e", + "sha256:7bf2a778576d825600030a110f3c0e3e8edc51dfaafe1c146e39a2027784957b" + ], + "version": "==2.21.0" + }, + "six": { + "hashes": [ + "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", + "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73" + ], + "version": "==1.12.0" + }, + "snowballstemmer": { + "hashes": [ + "sha256:919f26a68b2c17a7634da993d91339e288964f93c274f1343e3bbbe2096e1128", + "sha256:9f3bcd3c401c3e862ec0ebe6d2c069ebc012ce142cce209c098ccb5b09136e89" + ], + "version": "==1.2.1" + }, + "sphinx": { + "hashes": [ + "sha256:423280646fb37944dd3c85c58fb92a20d745793a9f6c511f59da82fa97cd404b", + "sha256:de930f42600a4fef993587633984cc5027dedba2464bcf00ddace26b40f8d9ce" + ], + "index": "pypi", + "version": "==2.0.1" + }, + "sphinx-autobuild": { + "hashes": [ + "sha256:66388f81884666e3821edbe05dd53a0cfb68093873d17320d0610de8db28c74e", + "sha256:e60aea0789cab02fa32ee63c7acae5ef41c06f1434d9fd0a74250a61f5994692" + ], + "index": "pypi", + "version": "==0.7.1" + }, + "sphinx-rtd-theme": { + "hashes": [ + "sha256:00cf895504a7895ee433807c62094cf1e95f065843bf3acd17037c3e9a2becd4", + "sha256:728607e34d60456d736cc7991fd236afb828b21b82f956c5ea75f94c8414040a" + ], + "index": "pypi", + "version": "==0.4.3" + }, + "sphinxcontrib-applehelp": { + "hashes": [ + "sha256:edaa0ab2b2bc74403149cb0209d6775c96de797dfd5b5e2a71981309efab3897", + "sha256:fb8dee85af95e5c30c91f10e7eb3c8967308518e0f7488a2828ef7bc191d0d5d" + ], + "version": "==1.0.1" + }, + "sphinxcontrib-devhelp": { + "hashes": [ + "sha256:6c64b077937330a9128a4da74586e8c2130262f014689b4b89e2d08ee7294a34", + "sha256:9512ecb00a2b0821a146736b39f7aeb90759834b07e81e8cc23a9c70bacb9981" + ], + "version": "==1.0.1" + }, + "sphinxcontrib-htmlhelp": { + "hashes": [ + "sha256:4670f99f8951bd78cd4ad2ab962f798f5618b17675c35c5ac3b2132a14ea8422", + "sha256:d4fd39a65a625c9df86d7fa8a2d9f3cd8299a3a4b15db63b50aac9e161d8eff7" + ], + "version": "==1.0.2" + }, + "sphinxcontrib-jsmath": { + "hashes": [ + "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", + "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8" + ], + "version": "==1.0.1" + }, + "sphinxcontrib-qthelp": { + "hashes": [ + "sha256:513049b93031beb1f57d4daea74068a4feb77aa5630f856fcff2e50de14e9a20", + "sha256:79465ce11ae5694ff165becda529a600c754f4bc459778778c7017374d4d406f" + ], + "version": "==1.0.2" + }, + "sphinxcontrib-serializinghtml": { + "hashes": [ + "sha256:c0efb33f8052c04fd7a26c0a07f1678e8512e0faec19f4aa8f2473a8b81d5227", + "sha256:db6615af393650bf1151a6cd39120c29abaf93cc60db8c48eb2dddbfdc3a9768" + ], + "version": "==1.1.3" + }, + "sphinxcontrib-websupport": { + "hashes": [ + "sha256:68ca7ff70785cbe1e7bccc71a48b5b6d965d79ca50629606c7861a21b206d9dd", + "sha256:9de47f375baf1ea07cdb3436ff39d7a9c76042c10a769c52353ec46e4e8fc3b9" + ], + "index": "pypi", + "version": "==1.1.0" + }, + "tornado": { + "hashes": [ + "sha256:1174dcb84d08887b55defb2cda1986faeeea715fff189ef3dc44cce99f5fca6b", + "sha256:2613fab506bd2aedb3722c8c64c17f8f74f4070afed6eea17f20b2115e445aec", + "sha256:44b82bc1146a24e5b9853d04c142576b4e8fa7a92f2e30bc364a85d1f75c4de2", + "sha256:457fcbee4df737d2defc181b9073758d73f54a6cfc1f280533ff48831b39f4a8", + "sha256:49603e1a6e24104961497ad0c07c799aec1caac7400a6762b687e74c8206677d", + "sha256:8c2f40b99a8153893793559919a355d7b74649a11e59f411b0b0a1793e160bc0", + "sha256:e1d897889c3b5a829426b7d52828fb37b28bc181cd598624e65c8be40ee3f7fa" + ], + "version": "==6.0.2" + }, + "urllib3": { + "hashes": [ + "sha256:2393a695cd12afedd0dcb26fe5d50d0cf248e5a66f75dbd89a3d4eb333a61af4", + "sha256:a637e5fae88995b256e3409dc4d52c2e2e0ba32c42a6365fee8bbd2238de3cfb" + ], + "version": "==1.24.3" + }, + "watchdog": { + "hashes": [ + "sha256:965f658d0732de3188211932aeb0bb457587f04f63ab4c1e33eab878e9de961d" + ], + "version": "==0.9.0" + }, + "websocket-client": { + "hashes": [ + "sha256:1151d5fb3a62dc129164292e1227655e4bbc5dd5340a5165dfae61128ec50aa9", + "sha256:1fd5520878b68b84b5748bb30e592b10d0a91529d5383f74f4964e72b297fd3a" + ], + "version": "==0.56.0" + } + }, + "develop": { + "astroid": { + "hashes": [ + "sha256:6560e1e1749f68c64a4b5dee4e091fce798d2f0d84ebe638cf0e0585a343acf4", + "sha256:b65db1bbaac9f9f4d190199bb8680af6f6f84fd3769a5ea883df8a91fe68b4c4" + ], + "version": "==2.2.5" + }, + "atomicwrites": { + "hashes": [ + "sha256:03472c30eb2c5d1ba9227e4c2ca66ab8287fbfbbda3888aa93dc2e28fc6811b4", + "sha256:75a9445bac02d8d058d5e1fe689654ba5a6556a1dfd8ce6ec55a0ed79866cfa6" + ], + "version": "==1.3.0" + }, + "attrs": { + "hashes": [ + "sha256:69c0dbf2ed392de1cb5ec704444b08a5ef81680a61cb899dc08127123af36a79", + "sha256:f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399" + ], + "version": "==19.1.0" + }, + "chardet": { + "hashes": [ + "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", + "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" + ], + "version": "==3.0.4" + }, + "coverage": { + "hashes": [ + "sha256:3684fabf6b87a369017756b551cef29e505cb155ddb892a7a29277b978da88b9", + "sha256:39e088da9b284f1bd17c750ac672103779f7954ce6125fd4382134ac8d152d74", + "sha256:3c205bc11cc4fcc57b761c2da73b9b72a59f8d5ca89979afb0c1c6f9e53c7390", + "sha256:465ce53a8c0f3a7950dfb836438442f833cf6663d407f37d8c52fe7b6e56d7e8", + "sha256:48020e343fc40f72a442c8a1334284620f81295256a6b6ca6d8aa1350c763bbe", + "sha256:5296fc86ab612ec12394565c500b412a43b328b3907c0d14358950d06fd83baf", + "sha256:5f61bed2f7d9b6a9ab935150a6b23d7f84b8055524e7be7715b6513f3328138e", + "sha256:68a43a9f9f83693ce0414d17e019daee7ab3f7113a70c79a3dd4c2f704e4d741", + "sha256:6b8033d47fe22506856fe450470ccb1d8ba1ffb8463494a15cfc96392a288c09", + "sha256:7ad7536066b28863e5835e8cfeaa794b7fe352d99a8cded9f43d1161be8e9fbd", + "sha256:7bacb89ccf4bedb30b277e96e4cc68cd1369ca6841bde7b005191b54d3dd1034", + "sha256:839dc7c36501254e14331bcb98b27002aa415e4af7ea039d9009409b9d2d5420", + "sha256:8f9a95b66969cdea53ec992ecea5406c5bd99c9221f539bca1e8406b200ae98c", + "sha256:932c03d2d565f75961ba1d3cec41ddde00e162c5b46d03f7423edcb807734eab", + "sha256:988529edadc49039d205e0aa6ce049c5ccda4acb2d6c3c5c550c17e8c02c05ba", + "sha256:998d7e73548fe395eeb294495a04d38942edb66d1fa61eb70418871bc621227e", + "sha256:9de60893fb447d1e797f6bf08fdf0dbcda0c1e34c1b06c92bd3a363c0ea8c609", + "sha256:9e80d45d0c7fcee54e22771db7f1b0b126fb4a6c0a2e5afa72f66827207ff2f2", + "sha256:a545a3dfe5082dc8e8c3eb7f8a2cf4f2870902ff1860bd99b6198cfd1f9d1f49", + "sha256:a5d8f29e5ec661143621a8f4de51adfb300d7a476224156a39a392254f70687b", + "sha256:aca06bfba4759bbdb09bf52ebb15ae20268ee1f6747417837926fae990ebc41d", + "sha256:bb23b7a6fd666e551a3094ab896a57809e010059540ad20acbeec03a154224ce", + "sha256:bfd1d0ae7e292105f29d7deaa9d8f2916ed8553ab9d5f39ec65bcf5deadff3f9", + "sha256:c62ca0a38958f541a73cf86acdab020c2091631c137bd359c4f5bddde7b75fd4", + "sha256:c709d8bda72cf4cd348ccec2a4881f2c5848fd72903c185f363d361b2737f773", + "sha256:c968a6aa7e0b56ecbd28531ddf439c2ec103610d3e2bf3b75b813304f8cb7723", + "sha256:df785d8cb80539d0b55fd47183264b7002077859028dfe3070cf6359bf8b2d9c", + "sha256:f406628ca51e0ae90ae76ea8398677a921b36f0bd71aab2099dfed08abd0322f", + "sha256:f46087bbd95ebae244a0eda01a618aff11ec7a069b15a3ef8f6b520db523dcf1", + "sha256:f8019c5279eb32360ca03e9fac40a12667715546eed5c5eb59eb381f2f501260", + "sha256:fc5f4d209733750afd2714e9109816a29500718b32dd9a5db01c0cb3a019b96a" + ], + "version": "==4.5.3" + }, + "doc8": { + "hashes": [ + "sha256:2df89f9c1a5abfb98ab55d0175fed633cae0cf45025b8b1e0ee5ea772be28543", + "sha256:d12f08aa77a4a65eb28752f4bc78f41f611f9412c4155e2b03f1f5d4a45efe04" + ], + "index": "pypi", + "version": "==0.8.0" + }, + "docutils": { + "hashes": [ + "sha256:02aec4bd92ab067f6ff27a38a38a41173bf01bed8f89157768c1573f53e474a6", + "sha256:51e64ef2ebfb29cae1faa133b3710143496eca21c530f3f71424d77687764274", + "sha256:7a4bd47eaf6596e1295ecb11361139febe29b084a87bf005bf899f9a42edc3c6" + ], + "version": "==0.14" + }, + "isort": { + "hashes": [ + "sha256:1349c6f7c2a0f7539f5f2ace51a9a8e4a37086ce4de6f78f5f53fb041d0a3cd5", + "sha256:f09911f6eb114e5592abe635aded8bf3d2c3144ebcfcaf81ee32e7af7b7d1870" + ], + "version": "==4.3.18" + }, + "lazy-object-proxy": { + "hashes": [ + "sha256:0ce34342b419bd8f018e6666bfef729aec3edf62345a53b537a4dcc115746a33", + "sha256:1b668120716eb7ee21d8a38815e5eb3bb8211117d9a90b0f8e21722c0758cc39", + "sha256:209615b0fe4624d79e50220ce3310ca1a9445fd8e6d3572a896e7f9146bbf019", + "sha256:27bf62cb2b1a2068d443ff7097ee33393f8483b570b475db8ebf7e1cba64f088", + "sha256:27ea6fd1c02dcc78172a82fc37fcc0992a94e4cecf53cb6d73f11749825bd98b", + "sha256:2c1b21b44ac9beb0fc848d3993924147ba45c4ebc24be19825e57aabbe74a99e", + "sha256:2df72ab12046a3496a92476020a1a0abf78b2a7db9ff4dc2036b8dd980203ae6", + "sha256:320ffd3de9699d3892048baee45ebfbbf9388a7d65d832d7e580243ade426d2b", + "sha256:50e3b9a464d5d08cc5227413db0d1c4707b6172e4d4d915c1c70e4de0bbff1f5", + "sha256:5276db7ff62bb7b52f77f1f51ed58850e315154249aceb42e7f4c611f0f847ff", + "sha256:61a6cf00dcb1a7f0c773ed4acc509cb636af2d6337a08f362413c76b2b47a8dd", + "sha256:6ae6c4cb59f199d8827c5a07546b2ab7e85d262acaccaacd49b62f53f7c456f7", + "sha256:7661d401d60d8bf15bb5da39e4dd72f5d764c5aff5a86ef52a042506e3e970ff", + "sha256:7bd527f36a605c914efca5d3d014170b2cb184723e423d26b1fb2fd9108e264d", + "sha256:7cb54db3535c8686ea12e9535eb087d32421184eacc6939ef15ef50f83a5e7e2", + "sha256:7f3a2d740291f7f2c111d86a1c4851b70fb000a6c8883a59660d95ad57b9df35", + "sha256:81304b7d8e9c824d058087dcb89144842c8e0dea6d281c031f59f0acf66963d4", + "sha256:933947e8b4fbe617a51528b09851685138b49d511af0b6c0da2539115d6d4514", + "sha256:94223d7f060301b3a8c09c9b3bc3294b56b2188e7d8179c762a1cda72c979252", + "sha256:ab3ca49afcb47058393b0122428358d2fbe0408cf99f1b58b295cfeb4ed39109", + "sha256:bd6292f565ca46dee4e737ebcc20742e3b5be2b01556dafe169f6c65d088875f", + "sha256:cb924aa3e4a3fb644d0c463cad5bc2572649a6a3f68a7f8e4fbe44aaa6d77e4c", + "sha256:d0fc7a286feac9077ec52a927fc9fe8fe2fabab95426722be4c953c9a8bede92", + "sha256:ddc34786490a6e4ec0a855d401034cbd1242ef186c20d79d2166d6a4bd449577", + "sha256:e34b155e36fa9da7e1b7c738ed7767fc9491a62ec6af70fe9da4a057759edc2d", + "sha256:e5b9e8f6bda48460b7b143c3821b21b452cb3a835e6bbd5dd33aa0c8d3f5137d", + "sha256:e81ebf6c5ee9684be8f2c87563880f93eedd56dd2b6146d8a725b50b7e5adb0f", + "sha256:eb91be369f945f10d3a49f5f9be8b3d0b93a4c2be8f8a5b83b0571b8123e0a7a", + "sha256:f460d1ceb0e4a5dcb2a652db0904224f367c9b3c1470d5a7683c0480e582468b" + ], + "version": "==1.3.1" + }, + "mccabe": { + "hashes": [ + "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", + "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f" + ], + "version": "==0.6.1" + }, + "more-itertools": { + "hashes": [ + "sha256:2112d2ca570bb7c3e53ea1a35cd5df42bb0fd10c45f0fb97178679c3c03d64c7", + "sha256:c3e4748ba1aad8dba30a4886b0b1a2004f9a863837b8654e7059eebf727afa5a" + ], + "version": "==7.0.0" + }, + "pbr": { + "hashes": [ + "sha256:6901995b9b686cb90cceba67a0f6d4d14ae003cd59bc12beb61549bdfbe3bc89", + "sha256:d950c64aeea5456bbd147468382a5bb77fe692c13c9f00f0219814ce5b642755" + ], + "version": "==5.2.0" + }, + "pluggy": { + "hashes": [ + "sha256:19ecf9ce9db2fce065a7a0586e07cfb4ac8614fe96edf628a264b1c70116cf8f", + "sha256:84d306a647cc805219916e62aab89caa97a33a1dd8c342e87a37f91073cd4746" + ], + "version": "==0.9.0" + }, + "py": { + "hashes": [ + "sha256:64f65755aee5b381cea27766a3a147c3f15b9b6b9ac88676de66ba2ae36793fa", + "sha256:dc639b046a6e2cff5bbe40194ad65936d6ba360b52b3c3fe1d08a82dd50b5e53" + ], + "version": "==1.8.0" + }, + "pycodestyle": { + "hashes": [ + "sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56", + "sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c" + ], + "version": "==2.5.0" + }, + "pydocstyle": { + "hashes": [ + "sha256:2258f9b0df68b97bf3a6c29003edc5238ff8879f1efb6f1999988d934e432bd8", + "sha256:5741c85e408f9e0ddf873611085e819b809fca90b619f5fd7f34bd4959da3dd4", + "sha256:ed79d4ec5e92655eccc21eb0c6cf512e69512b4a97d215ace46d17e4990f2039" + ], + "version": "==3.0.0" + }, + "pylint": { + "hashes": [ + "sha256:5d77031694a5fb97ea95e828c8d10fc770a1df6eb3906067aaed42201a8a6a09", + "sha256:723e3db49555abaf9bf79dc474c6b9e2935ad82230b10c1138a71ea41ac0fff1" + ], + "index": "pypi", + "version": "==2.3.1" + }, + "pytest": { + "hashes": [ + "sha256:f689bf2fc18c4585403348dd56f47d87780bf217c53ed9ae7a3e2d7faa45f8e9", + "sha256:f812ea39a0153566be53d88f8de94839db1e8a05352ed8a49525d7d7f37861e9" + ], + "index": "pypi", + "version": "==4.0.2" + }, + "pytest-codestyle": { + "hashes": [ + "sha256:c0a04d66e414b4d55047ee666918bc333cb12ec75be906f7d3b9712555cebd70" + ], + "index": "pypi", + "version": "==1.3.1" + }, + "pytest-cov": { + "hashes": [ + "sha256:0ab664b25c6aa9716cbf203b17ddb301932383046082c081b9848a0edf5add33", + "sha256:230ef817450ab0699c6cc3c9c8f7a829c34674456f2ed8df1fe1d39780f7c87f" + ], + "index": "pypi", + "version": "==2.6.1" + }, + "pytest-pydocstyle": { + "hashes": [ + "sha256:acfd986e6c49e0979cfd6dc1f1f57219a9a1ba92f93c4db8614a183741f4b427" + ], + "index": "pypi", + "version": "==1.4.1" + }, + "pytest-pylint": { + "hashes": [ + "sha256:50500fa8ecd7f7ca8e1d08e4c2c8748ae376a95745d3574861a86d642d9ed9b3", + "sha256:5265fc9f9b8286c56535f521c8bed22d2510e54f779e161f01306e6a53390730", + "sha256:605bc4eea24b15e45bc7658dabce8c6932a8e9ded765cfa4a5f5cd62db77794d" + ], + "index": "pypi", + "version": "==0.13.0" + }, + "restructuredtext-lint": { + "hashes": [ + "sha256:97b3da356d5b3a8514d8f1f9098febd8b41463bed6a1d9f126cf0a048b6fd908" + ], + "version": "==1.3.0" + }, + "six": { + "hashes": [ + "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", + "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73" + ], + "version": "==1.12.0" + }, + "snowballstemmer": { + "hashes": [ + "sha256:919f26a68b2c17a7634da993d91339e288964f93c274f1343e3bbbe2096e1128", + "sha256:9f3bcd3c401c3e862ec0ebe6d2c069ebc012ce142cce209c098ccb5b09136e89" + ], + "version": "==1.2.1" + }, + "stevedore": { + "hashes": [ + "sha256:7be098ff53d87f23d798a7ce7ae5c31f094f3deb92ba18059b1aeb1ca9fec0a0", + "sha256:7d1ce610a87d26f53c087da61f06f9b7f7e552efad2a7f6d2322632b5f932ea2" + ], + "version": "==1.30.1" + }, + "typed-ast": { + "hashes": [ + "sha256:132eae51d6ef3ff4a8c47c393a4ef5ebf0d1aecc96880eb5d6c8ceab7017cc9b", + "sha256:18141c1484ab8784006c839be8b985cfc82a2e9725837b0ecfa0203f71c4e39d", + "sha256:2baf617f5bbbfe73fd8846463f5aeafc912b5ee247f410700245d68525ec584a", + "sha256:3d90063f2cbbe39177e9b4d888e45777012652d6110156845b828908c51ae462", + "sha256:4304b2218b842d610aa1a1d87e1dc9559597969acc62ce717ee4dfeaa44d7eee", + "sha256:4983ede548ffc3541bae49a82675996497348e55bafd1554dc4e4a5d6eda541a", + "sha256:5315f4509c1476718a4825f45a203b82d7fdf2a6f5f0c8f166435975b1c9f7d4", + "sha256:6cdfb1b49d5345f7c2b90d638822d16ba62dc82f7616e9b4caa10b72f3f16649", + "sha256:7b325f12635598c604690efd7a0197d0b94b7d7778498e76e0710cd582fd1c7a", + "sha256:8d3b0e3b8626615826f9a626548057c5275a9733512b137984a68ba1598d3d2f", + "sha256:8f8631160c79f53081bd23446525db0bc4c5616f78d04021e6e434b286493fd7", + "sha256:912de10965f3dc89da23936f1cc4ed60764f712e5fa603a09dd904f88c996760", + "sha256:b010c07b975fe853c65d7bbe9d4ac62f1c69086750a574f6292597763781ba18", + "sha256:c908c10505904c48081a5415a1e295d8403e353e0c14c42b6d67f8f97fae6616", + "sha256:c94dd3807c0c0610f7c76f078119f4ea48235a953512752b9175f9f98f5ae2bd", + "sha256:ce65dee7594a84c466e79d7fb7d3303e7295d16a83c22c7c4037071b059e2c21", + "sha256:eaa9cfcb221a8a4c2889be6f93da141ac777eb8819f077e1d09fb12d00a09a93", + "sha256:f3376bc31bad66d46d44b4e6522c5c21976bf9bca4ef5987bb2bf727f4506cbb", + "sha256:f9202fa138544e13a4ec1a6792c35834250a85958fde1251b6a22e07d1260ae7" + ], + "markers": "implementation_name == 'cpython'", + "version": "==1.3.5" + }, + "wrapt": { + "hashes": [ + "sha256:4aea003270831cceb8a90ff27c4031da6ead7ec1886023b80ce0dfe0adf61533" + ], + "version": "==1.11.1" + } + } +} diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..718dddf6 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,43 @@ +-i https://pypi.org/simple +alabaster==0.7.12 +argh==0.26.2 +babel==2.6.0 +certifi==2019.3.9 +chardet==3.0.4 +commonmark==0.9.0 +docker-pycreds==0.4.0 +docker==3.7.2 +docutils==0.14 +future==0.17.1 +idna==2.8 +imagesize==1.1.0 +jinja2==2.10.1 +jsonschema==2.6.0 +livereload==2.6.0 +markupsafe==1.1.1 +packaging==19.0 +pathtools==0.1.2 +port-for==0.3.1 +pygments==2.3.1 +pyparsing==2.4.0 +pytz==2019.1 +pyyaml==5.1 +recommonmark==0.5.0 +redis==2.10.6 +requests==2.21.0 +six==1.12.0 +snowballstemmer==1.2.1 +sphinx-autobuild==0.7.1 +sphinx-rtd-theme==0.4.3 +sphinx==2.0.1 +sphinxcontrib-applehelp==1.0.1 +sphinxcontrib-devhelp==1.0.1 +sphinxcontrib-htmlhelp==1.0.2 +sphinxcontrib-jsmath==1.0.1 +sphinxcontrib-qthelp==1.0.2 +sphinxcontrib-serializinghtml==1.1.3 +sphinxcontrib-websupport==1.1.0 +tornado==6.0.2 +urllib3==1.24.3 +watchdog==0.9.0 +websocket-client==0.56.0 From c937ea67e95fbc0a6163a9abdd673bb1b0864baa Mon Sep 17 00:00:00 2001 From: Benjamin Mort Date: Thu, 11 Apr 2019 12:29:42 +0100 Subject: [PATCH 07/14] Updated pull request template --- docs/PULL_REQUEST_TEMPLATE.md | 47 ++++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 14 deletions(-) diff --git a/docs/PULL_REQUEST_TEMPLATE.md b/docs/PULL_REQUEST_TEMPLATE.md index 6d2e152e..8e513f9f 100644 --- a/docs/PULL_REQUEST_TEMPLATE.md +++ b/docs/PULL_REQUEST_TEMPLATE.md @@ -1,23 +1,42 @@ - + + + -## Description: - +# Description + + + + + +## Testing instructions -## Testing instructions: - + + + + + ## Types of changes - -- [ ] Bug fix (non-breaking change that fixes an issue) -- [ ] New feature (non-breaking change that adds functionality) -- [ ] Breaking change (fix or feature that would cause existing functionality to change) -## Checklist: - + + + +- [ ] New feature +- [ ] Refactor +- [ ] Bug fix +- [ ] Documentation update +- [ ] Breaking change +- [ ] Non-breaking change + +## Checklist + + + +*(Also refer to the [DoD](https://developerskatelescopeorg.readthedocs.io/en/latest/agile_practices/definition_of_done.html) in the SKA developer guidelines)* + - [ ] The code follows the code style of this project. -- [ ] The changes require a documentation update. - [ ] Documentation has been updated accordingly. -- [ ] Tests cover all changes in this PR. +- [ ] Tests cover changes in this PR (75% - 90% coverage). +- [ ] Tests have be added to the CI script. - [ ] All new and existing tests passed. From b1429b618000326eb2a2452d0ab32e2449856fe8 Mon Sep 17 00:00:00 2001 From: Benjamin Mort Date: Thu, 11 Apr 2019 12:30:19 +0100 Subject: [PATCH 08/14] updated the documentation readme with readthedocs build instructions --- docs/README.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 700745b8..ec66dbe8 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,4 +1,14 @@ # SIP Documentation Placeholder for any documentation, or technical notes related to SIP code -which we choose to keep in the code repo rather than on Confluence. +which we choose to keep in the code repository rather than on Confluence. + +## Building `readthedocs` documentation + +```bash +make html +``` + +```bash +sphinx-autobuild docs/src docs/build/html +``` From b6fbfd113c1ec273836b2ed92005e67574f505ce Mon Sep 17 00:00:00 2001 From: Benjamin Mort Date: Thu, 11 Apr 2019 12:30:55 +0100 Subject: [PATCH 09/14] updated docstrings based on sphinx warnings --- .../configuration_db/sip_config_db/_config_db_redis.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sip/execution_control/configuration_db/sip_config_db/_config_db_redis.py b/sip/execution_control/configuration_db/sip_config_db/_config_db_redis.py index 36c16002..b0f21240 100644 --- a/sip/execution_control/configuration_db/sip_config_db/_config_db_redis.py +++ b/sip/execution_control/configuration_db/sip_config_db/_config_db_redis.py @@ -186,8 +186,8 @@ def load_dict(self, db_key: str, hierarchical: bool = False) -> dict: Args: db_key (str): Key at which the dictionary is stored in the db. hierarchical (bool): If True, expect the dictionary to have been - stored hierarchically. If False, expect the dictionary to have - been stored flat. + stored hierarchically. If False, expect the dictionary to have + been stored flat. Returns: dict, the dictionary stored at key @@ -211,8 +211,8 @@ def load_dict_values(self, db_key: str, dict_keys: List[str], db_key (str): Key where the dictionary is stored dict_keys (List[str]): Keys within the dictionary to load. hierarchical (bool): If True, expect the dictionary to have been - stored hierarchically. If False, expect the dictionary to have - been stored flat. + stored hierarchically. If False, expect the dictionary to have + been stored flat. Returns: From 279b94f45cb8ad151395776737774fc5c8993934 Mon Sep 17 00:00:00 2001 From: Benjamin Mort Date: Sat, 4 May 2019 00:00:02 +0100 Subject: [PATCH 10/14] Updated placeholder Sphinx doc --- docs/Makefile | 19 ++++ docs/src/api.rst | 38 ++++++++ docs/src/background.rst | 7 ++ docs/src/conf.py | 201 ++++++++++++++++++++++++++++++++++++++++ docs/src/index.rst | 23 +++++ docs/src/quickstart.rst | 7 ++ docs/src/references.rst | 7 ++ 7 files changed, 302 insertions(+) create mode 100644 docs/Makefile create mode 100644 docs/src/api.rst create mode 100644 docs/src/background.rst create mode 100644 docs/src/conf.py create mode 100644 docs/src/index.rst create mode 100644 docs/src/quickstart.rst create mode 100644 docs/src/references.rst diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 00000000..fcba7872 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,19 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SOURCEDIR = src +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/docs/src/api.rst b/docs/src/api.rst new file mode 100644 index 00000000..2f70b828 --- /dev/null +++ b/docs/src/api.rst @@ -0,0 +1,38 @@ +.. API + +.. toctree:: + :maxdepth: 2 + +API +*** + +Configuration Database +====================== + +SDP State +--------- + +.. automodule:: sip_config_db.states.sdp_state + :members: + :inherited-members: + +Service States +-------------- + +.. automodule:: sip_config_db.states.service_state + :members: + +Services +-------- + +.. automodule:: sip_config_db.states.service_state + :members: + +Utility modules +--------------- + +.. automodule:: sip_config_db.utils.datetime_utils + :members: + +.. automodule:: sip_config_db.utils.generate_sbi_config + :members: diff --git a/docs/src/background.rst b/docs/src/background.rst new file mode 100644 index 00000000..3053db73 --- /dev/null +++ b/docs/src/background.rst @@ -0,0 +1,7 @@ +.. Background + +.. toctree:: + :maxdepth: 2 + +Background +********** diff --git a/docs/src/conf.py b/docs/src/conf.py new file mode 100644 index 00000000..3c1625fb --- /dev/null +++ b/docs/src/conf.py @@ -0,0 +1,201 @@ +# -*- 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 +import sphinx_rtd_theme +# sys.path.insert(0, os.path.abspath('.')) +sys.path.insert(0, os.path.abspath( + os.path.join('..', '..', 'sip', 'execution_control', 'configuration_db') +)) + +# -- Project information ----------------------------------------------------- + +project = 'ska.sdp.sip' +copyright = '2019, SKA Organisation' +author = 'SIP team' + +# The short X.Y version +version = '0.1' +# The full version, including alpha/beta/rc tags +release = '0.1-beta' + + +# -- 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 = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.doctest', + 'sphinx.ext.todo', + 'sphinx.ext.coverage', + 'sphinx.ext.mathjax', + 'sphinx.ext.ifconfig', + 'sphinx.ext.viewcode', + 'sphinx.ext.githubpages', + 'recommonmark' +] + +# 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 = 'En-en' + +# 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 = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = True + +# -- 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 = {} + +html_context = { + 'display_github': True, + 'github_user': 'SKA-ScienceDataProcessor', + 'github_repo': 'integration-prototype', + 'github_version': 'master', + 'conf_py_path': '/docs/src/' +} + + +# -- Options for HTMLHelp output --------------------------------------------- + +# Output file base name for HTML help builder. +htmlhelp_basename = 'sipdoc' + + +# -- 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, 'sip.tex', 'sip Documentation', + 'SKA SDP SIP team', '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, 'sip', 'sip 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, 'sip', 'sip Documentation', + author, 'sip', 'One line description of project.', + 'Miscellaneous'), +] + + +# -- Options for Epub output ------------------------------------------------- + +# Bibliographic Dublin Core info. +epub_title = project + +# The unique identifier of the text. This can be a ISBN number +# or the project homepage. +# +# epub_identifier = '' + +# A unique identification for the text. +# +# epub_uid = '' + +# A list of files that should not be packed into the epub file. +epub_exclude_files = ['search.html'] + + +# -- Extension configuration ------------------------------------------------- + +# Example configuration for intersphinx: refer to the Python standard library. +intersphinx_mapping = {'https://docs.python.org/': None} diff --git a/docs/src/index.rst b/docs/src/index.rst new file mode 100644 index 00000000..ddde3c38 --- /dev/null +++ b/docs/src/index.rst @@ -0,0 +1,23 @@ +Welcome to the SIP documentation! +================================= + +The SDP System Integration Prototype (SIP) is project to produce a minimal +end-to-end Prototype of the major internal and external control interfaces +of the SDP. + +.. toctree:: + :maxdepth: 2 + :caption: Contents + + background + quickstart + api + references + + +Indices and tables +------------------ + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/docs/src/quickstart.rst b/docs/src/quickstart.rst new file mode 100644 index 00000000..71cdaa08 --- /dev/null +++ b/docs/src/quickstart.rst @@ -0,0 +1,7 @@ +.. Quickstart + +.. toctree:: + :maxdepth: 2 + +Quickstart +********** diff --git a/docs/src/references.rst b/docs/src/references.rst new file mode 100644 index 00000000..90f94680 --- /dev/null +++ b/docs/src/references.rst @@ -0,0 +1,7 @@ +.. References + +.. toctree:: + :maxdepth: 2 + +References +********** From 43f77540c83cb8d0674845e5e223d62aa52e5c77 Mon Sep 17 00:00:00 2001 From: Benjamin Mort Date: Sat, 4 May 2019 00:00:40 +0100 Subject: [PATCH 11/14] Updated PR template & readme in docs folder --- docs/PULL_REQUEST_TEMPLATE.md | 3 ++- docs/README.md | 29 ++++++++++++++++++++++++++--- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/docs/PULL_REQUEST_TEMPLATE.md b/docs/PULL_REQUEST_TEMPLATE.md index 8e513f9f..9ed2aa51 100644 --- a/docs/PULL_REQUEST_TEMPLATE.md +++ b/docs/PULL_REQUEST_TEMPLATE.md @@ -33,7 +33,8 @@ -*(Also refer to the [DoD](https://developerskatelescopeorg.readthedocs.io/en/latest/agile_practices/definition_of_done.html) in the SKA developer guidelines)* +*(Please also refer to the [definition of done](https://bit.ly/ska_dod) +in the SKA developer guidelines)* - [ ] The code follows the code style of this project. - [ ] Documentation has been updated accordingly. diff --git a/docs/README.md b/docs/README.md index ec66dbe8..3dbfe82b 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,14 +1,37 @@ # SIP Documentation -Placeholder for any documentation, or technical notes related to SIP code -which we choose to keep in the code repository rather than on Confluence. +This folder contains documentation and technical notes related to SIP code +which we choose to keep in the code repository (rather than on Confluence). -## Building `readthedocs` documentation +## Building Sphinx documentation + +Documentation is build automatically by the CI/CD **(TODO!)** script on pushes +to the Github repository. It can also be build manually using the +following commands (this assumes all dependencies have been installed - +eg. `pipenv shell`!): + +Building the HTML documentation is as simple as running the following command +from the `docs/` folder. ```bash make html ``` +This will render HTML documentation into the `docs/build/html` directory. To +view these open `docs/build/html/index.html` in a web browser. + +If developing documentation the +[`sphinx-autobuild`](https://github.com/GaretJax/sphinx-autobuild) Python +package can also be very useful. This will rebuild the documentation +automatically every time a change is made and serve it at the address +. If using the provided `pipenv`, this tool is already +installed and can be used with the following command, run from the top level +repository directory: + ```bash sphinx-autobuild docs/src docs/build/html ``` + +### Publishing to [`Read the Docs`](https://readthedocs.org/) + +... From 2d4a885bbf46c5ea32384856286370f15f15f096 Mon Sep 17 00:00:00 2001 From: Benjamin Mort Date: Sat, 4 May 2019 00:09:53 +0100 Subject: [PATCH 12/14] Added pipenv and top level requirements file. --- Pipfile | 28 +++ Pipfile.lock | 639 +++++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 43 ++++ 3 files changed, 710 insertions(+) create mode 100644 Pipfile create mode 100644 Pipfile.lock create mode 100644 requirements.txt diff --git a/Pipfile b/Pipfile new file mode 100644 index 00000000..26e4d482 --- /dev/null +++ b/Pipfile @@ -0,0 +1,28 @@ +[[source]] +name = "pypi" +url = "https://pypi.org/simple" +verify_ssl = true + +[packages] +docker = "~=3.7.2" +redis = "~=2.10.6" +jsonschema = "~=2.6.0" +jinja2 = "~=2.10" +PyYAML = "~=5.1" +Sphinx = "*" +sphinx_rtd_theme = "*" +sphinx-autobuild = "*" +sphinxcontrib-websupport = "*" +recommonmark = "*" + +[dev-packages] +doc8 = ">=0.8.0" +pylint = ">=2.3.1" +pytest = "~=4.0.1" +pytest-pylint = "~=0.13.0" +pytest-codestyle = "~=1.3.1" +pytest-pydocstyle = "~=1.4.1" +pytest-cov = "~=2.6.0" + +[requires] +python_version = "3.6" diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 00000000..bcbaadb6 --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,639 @@ +{ + "_meta": { + "hash": { + "sha256": "c2f7e5b00b5e2e67948abc41f626b0ba7b4b1651af5cf2e41f30236e1869dc60" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.6" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "alabaster": { + "hashes": [ + "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359", + "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02" + ], + "version": "==0.7.12" + }, + "argh": { + "hashes": [ + "sha256:a9b3aaa1904eeb78e32394cd46c6f37ac0fb4af6dc488daa58971bdc7d7fcaf3", + "sha256:e9535b8c84dc9571a48999094fda7f33e63c3f1b74f3e5f3ac0105a58405bb65" + ], + "version": "==0.26.2" + }, + "babel": { + "hashes": [ + "sha256:6778d85147d5d85345c14a26aada5e478ab04e39b078b0745ee6870c2b5cf669", + "sha256:8cba50f48c529ca3fa18cf81fa9403be176d374ac4d60738b839122dfaaa3d23" + ], + "version": "==2.6.0" + }, + "certifi": { + "hashes": [ + "sha256:59b7658e26ca9c7339e00f8f4636cdfe59d34fa37b9b04f6f9e9926b3cece1a5", + "sha256:b26104d6835d1f5e49452a26eb2ff87fe7090b89dfcaee5ea2212697e1e1d7ae" + ], + "version": "==2019.3.9" + }, + "chardet": { + "hashes": [ + "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", + "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" + ], + "version": "==3.0.4" + }, + "commonmark": { + "hashes": [ + "sha256:14c3df31e8c9c463377e287b2a1eefaa6019ab97b22dad36e2f32be59d61d68d", + "sha256:867fc5db078ede373ab811e16b6789e9d033b15ccd7296f370ca52d1ee792ce0" + ], + "version": "==0.9.0" + }, + "docker": { + "hashes": [ + "sha256:2b1f48041cfdcc9f6b5da0e04e0e326ded225e736762ade2060000e708f4c9b7", + "sha256:c456ded5420af5860441219ff8e51cdec531d65f4a9e948ccd4133e063b72f50" + ], + "index": "pypi", + "version": "==3.7.2" + }, + "docker-pycreds": { + "hashes": [ + "sha256:6ce3270bcaf404cc4c3e27e4b6c70d3521deae82fb508767870fdbf772d584d4", + "sha256:7266112468627868005106ec19cd0d722702d2b7d5912a28e19b826c3d37af49" + ], + "version": "==0.4.0" + }, + "docutils": { + "hashes": [ + "sha256:02aec4bd92ab067f6ff27a38a38a41173bf01bed8f89157768c1573f53e474a6", + "sha256:51e64ef2ebfb29cae1faa133b3710143496eca21c530f3f71424d77687764274", + "sha256:7a4bd47eaf6596e1295ecb11361139febe29b084a87bf005bf899f9a42edc3c6" + ], + "version": "==0.14" + }, + "future": { + "hashes": [ + "sha256:67045236dcfd6816dc439556d009594abf643e5eb48992e36beac09c2ca659b8" + ], + "version": "==0.17.1" + }, + "idna": { + "hashes": [ + "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407", + "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c" + ], + "version": "==2.8" + }, + "imagesize": { + "hashes": [ + "sha256:3f349de3eb99145973fefb7dbe38554414e5c30abd0c8e4b970a7c9d09f3a1d8", + "sha256:f3832918bc3c66617f92e35f5d70729187676313caa60c187eb0f28b8fe5e3b5" + ], + "version": "==1.1.0" + }, + "jinja2": { + "hashes": [ + "sha256:065c4f02ebe7f7cf559e49ee5a95fb800a9e4528727aec6f24402a5374c65013", + "sha256:14dd6caf1527abb21f08f86c784eac40853ba93edb79552aa1e4b8aef1b61c7b" + ], + "index": "pypi", + "version": "==2.10.1" + }, + "jsonschema": { + "hashes": [ + "sha256:000e68abd33c972a5248544925a0cae7d1125f9bf6c58280d37546b946769a08", + "sha256:6ff5f3180870836cae40f06fa10419f557208175f13ad7bc26caa77beb1f6e02" + ], + "index": "pypi", + "version": "==2.6.0" + }, + "livereload": { + "hashes": [ + "sha256:29cadfabcedd12eed792e0131991235b9d4764d4474bed75cf525f57109ec0a2", + "sha256:e632a6cd1d349155c1d7f13a65be873b38f43ef02961804a1bba8d817fa649a7" + ], + "version": "==2.6.0" + }, + "markupsafe": { + "hashes": [ + "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473", + "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161", + "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235", + "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", + "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", + "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", + "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", + "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", + "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183", + "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66", + "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1", + "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", + "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", + "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", + "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", + "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", + "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d", + "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e", + "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d", + "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c", + "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21", + "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2", + "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5", + "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b", + "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6", + "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f", + "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f", + "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7" + ], + "version": "==1.1.1" + }, + "packaging": { + "hashes": [ + "sha256:0c98a5d0be38ed775798ece1b9727178c4469d9c3b4ada66e8e6b7849f8732af", + "sha256:9e1cbf8c12b1f1ce0bb5344b8d7ecf66a6f8a6e91bcb0c84593ed6d3ab5c4ab3" + ], + "version": "==19.0" + }, + "pathtools": { + "hashes": [ + "sha256:7c35c5421a39bb82e58018febd90e3b6e5db34c5443aaaf742b3f33d4655f1c0" + ], + "version": "==0.1.2" + }, + "port-for": { + "hashes": [ + "sha256:b16a84bb29c2954db44c29be38b17c659c9c27e33918dec16b90d375cc596f1c" + ], + "version": "==0.3.1" + }, + "pygments": { + "hashes": [ + "sha256:5ffada19f6203563680669ee7f53b64dabbeb100eb51b61996085e99c03b284a", + "sha256:e8218dd399a61674745138520d0d4cf2621d7e032439341bc3f647bff125818d" + ], + "version": "==2.3.1" + }, + "pyparsing": { + "hashes": [ + "sha256:1873c03321fc118f4e9746baf201ff990ceb915f433f23b395f5580d1840cb2a", + "sha256:9b6323ef4ab914af344ba97510e966d64ba91055d6b9afa6b30799340e89cc03" + ], + "version": "==2.4.0" + }, + "pytz": { + "hashes": [ + "sha256:303879e36b721603cc54604edcac9d20401bdbe31e1e4fdee5b9f98d5d31dfda", + "sha256:d747dd3d23d77ef44c6a3526e274af6efeb0a6f1afd5a69ba4d5be4098c8e141" + ], + "version": "==2019.1" + }, + "pyyaml": { + "hashes": [ + "sha256:1adecc22f88d38052fb787d959f003811ca858b799590a5eaa70e63dca50308c", + "sha256:436bc774ecf7c103814098159fbb84c2715d25980175292c648f2da143909f95", + "sha256:460a5a4248763f6f37ea225d19d5c205677d8d525f6a83357ca622ed541830c2", + "sha256:5a22a9c84653debfbf198d02fe592c176ea548cccce47553f35f466e15cf2fd4", + "sha256:7a5d3f26b89d688db27822343dfa25c599627bc92093e788956372285c6298ad", + "sha256:9372b04a02080752d9e6f990179a4ab840227c6e2ce15b95e1278456664cf2ba", + "sha256:a5dcbebee834eaddf3fa7366316b880ff4062e4bcc9787b78c7fbb4a26ff2dd1", + "sha256:aee5bab92a176e7cd034e57f46e9df9a9862a71f8f37cad167c6fc74c65f5b4e", + "sha256:c51f642898c0bacd335fc119da60baae0824f2cde95b0330b56c0553439f0673", + "sha256:c68ea4d3ba1705da1e0d85da6684ac657912679a649e8868bd850d2c299cce13", + "sha256:e23d0cc5299223dcc37885dae624f382297717e459ea24053709675a976a3e19" + ], + "index": "pypi", + "version": "==5.1" + }, + "recommonmark": { + "hashes": [ + "sha256:a520b8d25071a51ae23a27cf6252f2fe387f51bdc913390d83b2b50617f5bb48", + "sha256:c85228b9b7aea7157662520e74b4e8791c5eacd375332ec68381b52bf10165be" + ], + "index": "pypi", + "version": "==0.5.0" + }, + "redis": { + "hashes": [ + "sha256:8a1900a9f2a0a44ecf6e8b5eb3e967a9909dfed219ad66df094f27f7d6f330fb", + "sha256:a22ca993cea2962dbb588f9f30d0015ac4afcc45bee27d3978c0dbe9e97c6c0f" + ], + "index": "pypi", + "version": "==2.10.6" + }, + "requests": { + "hashes": [ + "sha256:502a824f31acdacb3a35b6690b5fbf0bc41d63a24a45c4004352b0242707598e", + "sha256:7bf2a778576d825600030a110f3c0e3e8edc51dfaafe1c146e39a2027784957b" + ], + "version": "==2.21.0" + }, + "six": { + "hashes": [ + "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", + "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73" + ], + "version": "==1.12.0" + }, + "snowballstemmer": { + "hashes": [ + "sha256:919f26a68b2c17a7634da993d91339e288964f93c274f1343e3bbbe2096e1128", + "sha256:9f3bcd3c401c3e862ec0ebe6d2c069ebc012ce142cce209c098ccb5b09136e89" + ], + "version": "==1.2.1" + }, + "sphinx": { + "hashes": [ + "sha256:423280646fb37944dd3c85c58fb92a20d745793a9f6c511f59da82fa97cd404b", + "sha256:de930f42600a4fef993587633984cc5027dedba2464bcf00ddace26b40f8d9ce" + ], + "index": "pypi", + "version": "==2.0.1" + }, + "sphinx-autobuild": { + "hashes": [ + "sha256:66388f81884666e3821edbe05dd53a0cfb68093873d17320d0610de8db28c74e", + "sha256:e60aea0789cab02fa32ee63c7acae5ef41c06f1434d9fd0a74250a61f5994692" + ], + "index": "pypi", + "version": "==0.7.1" + }, + "sphinx-rtd-theme": { + "hashes": [ + "sha256:00cf895504a7895ee433807c62094cf1e95f065843bf3acd17037c3e9a2becd4", + "sha256:728607e34d60456d736cc7991fd236afb828b21b82f956c5ea75f94c8414040a" + ], + "index": "pypi", + "version": "==0.4.3" + }, + "sphinxcontrib-applehelp": { + "hashes": [ + "sha256:edaa0ab2b2bc74403149cb0209d6775c96de797dfd5b5e2a71981309efab3897", + "sha256:fb8dee85af95e5c30c91f10e7eb3c8967308518e0f7488a2828ef7bc191d0d5d" + ], + "version": "==1.0.1" + }, + "sphinxcontrib-devhelp": { + "hashes": [ + "sha256:6c64b077937330a9128a4da74586e8c2130262f014689b4b89e2d08ee7294a34", + "sha256:9512ecb00a2b0821a146736b39f7aeb90759834b07e81e8cc23a9c70bacb9981" + ], + "version": "==1.0.1" + }, + "sphinxcontrib-htmlhelp": { + "hashes": [ + "sha256:4670f99f8951bd78cd4ad2ab962f798f5618b17675c35c5ac3b2132a14ea8422", + "sha256:d4fd39a65a625c9df86d7fa8a2d9f3cd8299a3a4b15db63b50aac9e161d8eff7" + ], + "version": "==1.0.2" + }, + "sphinxcontrib-jsmath": { + "hashes": [ + "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", + "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8" + ], + "version": "==1.0.1" + }, + "sphinxcontrib-qthelp": { + "hashes": [ + "sha256:513049b93031beb1f57d4daea74068a4feb77aa5630f856fcff2e50de14e9a20", + "sha256:79465ce11ae5694ff165becda529a600c754f4bc459778778c7017374d4d406f" + ], + "version": "==1.0.2" + }, + "sphinxcontrib-serializinghtml": { + "hashes": [ + "sha256:c0efb33f8052c04fd7a26c0a07f1678e8512e0faec19f4aa8f2473a8b81d5227", + "sha256:db6615af393650bf1151a6cd39120c29abaf93cc60db8c48eb2dddbfdc3a9768" + ], + "version": "==1.1.3" + }, + "sphinxcontrib-websupport": { + "hashes": [ + "sha256:68ca7ff70785cbe1e7bccc71a48b5b6d965d79ca50629606c7861a21b206d9dd", + "sha256:9de47f375baf1ea07cdb3436ff39d7a9c76042c10a769c52353ec46e4e8fc3b9" + ], + "index": "pypi", + "version": "==1.1.0" + }, + "tornado": { + "hashes": [ + "sha256:1174dcb84d08887b55defb2cda1986faeeea715fff189ef3dc44cce99f5fca6b", + "sha256:2613fab506bd2aedb3722c8c64c17f8f74f4070afed6eea17f20b2115e445aec", + "sha256:44b82bc1146a24e5b9853d04c142576b4e8fa7a92f2e30bc364a85d1f75c4de2", + "sha256:457fcbee4df737d2defc181b9073758d73f54a6cfc1f280533ff48831b39f4a8", + "sha256:49603e1a6e24104961497ad0c07c799aec1caac7400a6762b687e74c8206677d", + "sha256:8c2f40b99a8153893793559919a355d7b74649a11e59f411b0b0a1793e160bc0", + "sha256:e1d897889c3b5a829426b7d52828fb37b28bc181cd598624e65c8be40ee3f7fa" + ], + "version": "==6.0.2" + }, + "urllib3": { + "hashes": [ + "sha256:2393a695cd12afedd0dcb26fe5d50d0cf248e5a66f75dbd89a3d4eb333a61af4", + "sha256:a637e5fae88995b256e3409dc4d52c2e2e0ba32c42a6365fee8bbd2238de3cfb" + ], + "version": "==1.24.3" + }, + "watchdog": { + "hashes": [ + "sha256:965f658d0732de3188211932aeb0bb457587f04f63ab4c1e33eab878e9de961d" + ], + "version": "==0.9.0" + }, + "websocket-client": { + "hashes": [ + "sha256:1151d5fb3a62dc129164292e1227655e4bbc5dd5340a5165dfae61128ec50aa9", + "sha256:1fd5520878b68b84b5748bb30e592b10d0a91529d5383f74f4964e72b297fd3a" + ], + "version": "==0.56.0" + } + }, + "develop": { + "astroid": { + "hashes": [ + "sha256:6560e1e1749f68c64a4b5dee4e091fce798d2f0d84ebe638cf0e0585a343acf4", + "sha256:b65db1bbaac9f9f4d190199bb8680af6f6f84fd3769a5ea883df8a91fe68b4c4" + ], + "version": "==2.2.5" + }, + "atomicwrites": { + "hashes": [ + "sha256:03472c30eb2c5d1ba9227e4c2ca66ab8287fbfbbda3888aa93dc2e28fc6811b4", + "sha256:75a9445bac02d8d058d5e1fe689654ba5a6556a1dfd8ce6ec55a0ed79866cfa6" + ], + "version": "==1.3.0" + }, + "attrs": { + "hashes": [ + "sha256:69c0dbf2ed392de1cb5ec704444b08a5ef81680a61cb899dc08127123af36a79", + "sha256:f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399" + ], + "version": "==19.1.0" + }, + "chardet": { + "hashes": [ + "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", + "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" + ], + "version": "==3.0.4" + }, + "coverage": { + "hashes": [ + "sha256:3684fabf6b87a369017756b551cef29e505cb155ddb892a7a29277b978da88b9", + "sha256:39e088da9b284f1bd17c750ac672103779f7954ce6125fd4382134ac8d152d74", + "sha256:3c205bc11cc4fcc57b761c2da73b9b72a59f8d5ca89979afb0c1c6f9e53c7390", + "sha256:465ce53a8c0f3a7950dfb836438442f833cf6663d407f37d8c52fe7b6e56d7e8", + "sha256:48020e343fc40f72a442c8a1334284620f81295256a6b6ca6d8aa1350c763bbe", + "sha256:5296fc86ab612ec12394565c500b412a43b328b3907c0d14358950d06fd83baf", + "sha256:5f61bed2f7d9b6a9ab935150a6b23d7f84b8055524e7be7715b6513f3328138e", + "sha256:68a43a9f9f83693ce0414d17e019daee7ab3f7113a70c79a3dd4c2f704e4d741", + "sha256:6b8033d47fe22506856fe450470ccb1d8ba1ffb8463494a15cfc96392a288c09", + "sha256:7ad7536066b28863e5835e8cfeaa794b7fe352d99a8cded9f43d1161be8e9fbd", + "sha256:7bacb89ccf4bedb30b277e96e4cc68cd1369ca6841bde7b005191b54d3dd1034", + "sha256:839dc7c36501254e14331bcb98b27002aa415e4af7ea039d9009409b9d2d5420", + "sha256:8f9a95b66969cdea53ec992ecea5406c5bd99c9221f539bca1e8406b200ae98c", + "sha256:932c03d2d565f75961ba1d3cec41ddde00e162c5b46d03f7423edcb807734eab", + "sha256:988529edadc49039d205e0aa6ce049c5ccda4acb2d6c3c5c550c17e8c02c05ba", + "sha256:998d7e73548fe395eeb294495a04d38942edb66d1fa61eb70418871bc621227e", + "sha256:9de60893fb447d1e797f6bf08fdf0dbcda0c1e34c1b06c92bd3a363c0ea8c609", + "sha256:9e80d45d0c7fcee54e22771db7f1b0b126fb4a6c0a2e5afa72f66827207ff2f2", + "sha256:a545a3dfe5082dc8e8c3eb7f8a2cf4f2870902ff1860bd99b6198cfd1f9d1f49", + "sha256:a5d8f29e5ec661143621a8f4de51adfb300d7a476224156a39a392254f70687b", + "sha256:aca06bfba4759bbdb09bf52ebb15ae20268ee1f6747417837926fae990ebc41d", + "sha256:bb23b7a6fd666e551a3094ab896a57809e010059540ad20acbeec03a154224ce", + "sha256:bfd1d0ae7e292105f29d7deaa9d8f2916ed8553ab9d5f39ec65bcf5deadff3f9", + "sha256:c62ca0a38958f541a73cf86acdab020c2091631c137bd359c4f5bddde7b75fd4", + "sha256:c709d8bda72cf4cd348ccec2a4881f2c5848fd72903c185f363d361b2737f773", + "sha256:c968a6aa7e0b56ecbd28531ddf439c2ec103610d3e2bf3b75b813304f8cb7723", + "sha256:df785d8cb80539d0b55fd47183264b7002077859028dfe3070cf6359bf8b2d9c", + "sha256:f406628ca51e0ae90ae76ea8398677a921b36f0bd71aab2099dfed08abd0322f", + "sha256:f46087bbd95ebae244a0eda01a618aff11ec7a069b15a3ef8f6b520db523dcf1", + "sha256:f8019c5279eb32360ca03e9fac40a12667715546eed5c5eb59eb381f2f501260", + "sha256:fc5f4d209733750afd2714e9109816a29500718b32dd9a5db01c0cb3a019b96a" + ], + "version": "==4.5.3" + }, + "doc8": { + "hashes": [ + "sha256:2df89f9c1a5abfb98ab55d0175fed633cae0cf45025b8b1e0ee5ea772be28543", + "sha256:d12f08aa77a4a65eb28752f4bc78f41f611f9412c4155e2b03f1f5d4a45efe04" + ], + "index": "pypi", + "version": "==0.8.0" + }, + "docutils": { + "hashes": [ + "sha256:02aec4bd92ab067f6ff27a38a38a41173bf01bed8f89157768c1573f53e474a6", + "sha256:51e64ef2ebfb29cae1faa133b3710143496eca21c530f3f71424d77687764274", + "sha256:7a4bd47eaf6596e1295ecb11361139febe29b084a87bf005bf899f9a42edc3c6" + ], + "version": "==0.14" + }, + "isort": { + "hashes": [ + "sha256:1349c6f7c2a0f7539f5f2ace51a9a8e4a37086ce4de6f78f5f53fb041d0a3cd5", + "sha256:f09911f6eb114e5592abe635aded8bf3d2c3144ebcfcaf81ee32e7af7b7d1870" + ], + "version": "==4.3.18" + }, + "lazy-object-proxy": { + "hashes": [ + "sha256:0ce34342b419bd8f018e6666bfef729aec3edf62345a53b537a4dcc115746a33", + "sha256:1b668120716eb7ee21d8a38815e5eb3bb8211117d9a90b0f8e21722c0758cc39", + "sha256:209615b0fe4624d79e50220ce3310ca1a9445fd8e6d3572a896e7f9146bbf019", + "sha256:27bf62cb2b1a2068d443ff7097ee33393f8483b570b475db8ebf7e1cba64f088", + "sha256:27ea6fd1c02dcc78172a82fc37fcc0992a94e4cecf53cb6d73f11749825bd98b", + "sha256:2c1b21b44ac9beb0fc848d3993924147ba45c4ebc24be19825e57aabbe74a99e", + "sha256:2df72ab12046a3496a92476020a1a0abf78b2a7db9ff4dc2036b8dd980203ae6", + "sha256:320ffd3de9699d3892048baee45ebfbbf9388a7d65d832d7e580243ade426d2b", + "sha256:50e3b9a464d5d08cc5227413db0d1c4707b6172e4d4d915c1c70e4de0bbff1f5", + "sha256:5276db7ff62bb7b52f77f1f51ed58850e315154249aceb42e7f4c611f0f847ff", + "sha256:61a6cf00dcb1a7f0c773ed4acc509cb636af2d6337a08f362413c76b2b47a8dd", + "sha256:6ae6c4cb59f199d8827c5a07546b2ab7e85d262acaccaacd49b62f53f7c456f7", + "sha256:7661d401d60d8bf15bb5da39e4dd72f5d764c5aff5a86ef52a042506e3e970ff", + "sha256:7bd527f36a605c914efca5d3d014170b2cb184723e423d26b1fb2fd9108e264d", + "sha256:7cb54db3535c8686ea12e9535eb087d32421184eacc6939ef15ef50f83a5e7e2", + "sha256:7f3a2d740291f7f2c111d86a1c4851b70fb000a6c8883a59660d95ad57b9df35", + "sha256:81304b7d8e9c824d058087dcb89144842c8e0dea6d281c031f59f0acf66963d4", + "sha256:933947e8b4fbe617a51528b09851685138b49d511af0b6c0da2539115d6d4514", + "sha256:94223d7f060301b3a8c09c9b3bc3294b56b2188e7d8179c762a1cda72c979252", + "sha256:ab3ca49afcb47058393b0122428358d2fbe0408cf99f1b58b295cfeb4ed39109", + "sha256:bd6292f565ca46dee4e737ebcc20742e3b5be2b01556dafe169f6c65d088875f", + "sha256:cb924aa3e4a3fb644d0c463cad5bc2572649a6a3f68a7f8e4fbe44aaa6d77e4c", + "sha256:d0fc7a286feac9077ec52a927fc9fe8fe2fabab95426722be4c953c9a8bede92", + "sha256:ddc34786490a6e4ec0a855d401034cbd1242ef186c20d79d2166d6a4bd449577", + "sha256:e34b155e36fa9da7e1b7c738ed7767fc9491a62ec6af70fe9da4a057759edc2d", + "sha256:e5b9e8f6bda48460b7b143c3821b21b452cb3a835e6bbd5dd33aa0c8d3f5137d", + "sha256:e81ebf6c5ee9684be8f2c87563880f93eedd56dd2b6146d8a725b50b7e5adb0f", + "sha256:eb91be369f945f10d3a49f5f9be8b3d0b93a4c2be8f8a5b83b0571b8123e0a7a", + "sha256:f460d1ceb0e4a5dcb2a652db0904224f367c9b3c1470d5a7683c0480e582468b" + ], + "version": "==1.3.1" + }, + "mccabe": { + "hashes": [ + "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", + "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f" + ], + "version": "==0.6.1" + }, + "more-itertools": { + "hashes": [ + "sha256:2112d2ca570bb7c3e53ea1a35cd5df42bb0fd10c45f0fb97178679c3c03d64c7", + "sha256:c3e4748ba1aad8dba30a4886b0b1a2004f9a863837b8654e7059eebf727afa5a" + ], + "version": "==7.0.0" + }, + "pbr": { + "hashes": [ + "sha256:6901995b9b686cb90cceba67a0f6d4d14ae003cd59bc12beb61549bdfbe3bc89", + "sha256:d950c64aeea5456bbd147468382a5bb77fe692c13c9f00f0219814ce5b642755" + ], + "version": "==5.2.0" + }, + "pluggy": { + "hashes": [ + "sha256:19ecf9ce9db2fce065a7a0586e07cfb4ac8614fe96edf628a264b1c70116cf8f", + "sha256:84d306a647cc805219916e62aab89caa97a33a1dd8c342e87a37f91073cd4746" + ], + "version": "==0.9.0" + }, + "py": { + "hashes": [ + "sha256:64f65755aee5b381cea27766a3a147c3f15b9b6b9ac88676de66ba2ae36793fa", + "sha256:dc639b046a6e2cff5bbe40194ad65936d6ba360b52b3c3fe1d08a82dd50b5e53" + ], + "version": "==1.8.0" + }, + "pycodestyle": { + "hashes": [ + "sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56", + "sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c" + ], + "version": "==2.5.0" + }, + "pydocstyle": { + "hashes": [ + "sha256:2258f9b0df68b97bf3a6c29003edc5238ff8879f1efb6f1999988d934e432bd8", + "sha256:5741c85e408f9e0ddf873611085e819b809fca90b619f5fd7f34bd4959da3dd4", + "sha256:ed79d4ec5e92655eccc21eb0c6cf512e69512b4a97d215ace46d17e4990f2039" + ], + "version": "==3.0.0" + }, + "pylint": { + "hashes": [ + "sha256:5d77031694a5fb97ea95e828c8d10fc770a1df6eb3906067aaed42201a8a6a09", + "sha256:723e3db49555abaf9bf79dc474c6b9e2935ad82230b10c1138a71ea41ac0fff1" + ], + "index": "pypi", + "version": "==2.3.1" + }, + "pytest": { + "hashes": [ + "sha256:f689bf2fc18c4585403348dd56f47d87780bf217c53ed9ae7a3e2d7faa45f8e9", + "sha256:f812ea39a0153566be53d88f8de94839db1e8a05352ed8a49525d7d7f37861e9" + ], + "index": "pypi", + "version": "==4.0.2" + }, + "pytest-codestyle": { + "hashes": [ + "sha256:c0a04d66e414b4d55047ee666918bc333cb12ec75be906f7d3b9712555cebd70" + ], + "index": "pypi", + "version": "==1.3.1" + }, + "pytest-cov": { + "hashes": [ + "sha256:0ab664b25c6aa9716cbf203b17ddb301932383046082c081b9848a0edf5add33", + "sha256:230ef817450ab0699c6cc3c9c8f7a829c34674456f2ed8df1fe1d39780f7c87f" + ], + "index": "pypi", + "version": "==2.6.1" + }, + "pytest-pydocstyle": { + "hashes": [ + "sha256:acfd986e6c49e0979cfd6dc1f1f57219a9a1ba92f93c4db8614a183741f4b427" + ], + "index": "pypi", + "version": "==1.4.1" + }, + "pytest-pylint": { + "hashes": [ + "sha256:50500fa8ecd7f7ca8e1d08e4c2c8748ae376a95745d3574861a86d642d9ed9b3", + "sha256:5265fc9f9b8286c56535f521c8bed22d2510e54f779e161f01306e6a53390730", + "sha256:605bc4eea24b15e45bc7658dabce8c6932a8e9ded765cfa4a5f5cd62db77794d" + ], + "index": "pypi", + "version": "==0.13.0" + }, + "restructuredtext-lint": { + "hashes": [ + "sha256:97b3da356d5b3a8514d8f1f9098febd8b41463bed6a1d9f126cf0a048b6fd908" + ], + "version": "==1.3.0" + }, + "six": { + "hashes": [ + "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", + "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73" + ], + "version": "==1.12.0" + }, + "snowballstemmer": { + "hashes": [ + "sha256:919f26a68b2c17a7634da993d91339e288964f93c274f1343e3bbbe2096e1128", + "sha256:9f3bcd3c401c3e862ec0ebe6d2c069ebc012ce142cce209c098ccb5b09136e89" + ], + "version": "==1.2.1" + }, + "stevedore": { + "hashes": [ + "sha256:7be098ff53d87f23d798a7ce7ae5c31f094f3deb92ba18059b1aeb1ca9fec0a0", + "sha256:7d1ce610a87d26f53c087da61f06f9b7f7e552efad2a7f6d2322632b5f932ea2" + ], + "version": "==1.30.1" + }, + "typed-ast": { + "hashes": [ + "sha256:132eae51d6ef3ff4a8c47c393a4ef5ebf0d1aecc96880eb5d6c8ceab7017cc9b", + "sha256:18141c1484ab8784006c839be8b985cfc82a2e9725837b0ecfa0203f71c4e39d", + "sha256:2baf617f5bbbfe73fd8846463f5aeafc912b5ee247f410700245d68525ec584a", + "sha256:3d90063f2cbbe39177e9b4d888e45777012652d6110156845b828908c51ae462", + "sha256:4304b2218b842d610aa1a1d87e1dc9559597969acc62ce717ee4dfeaa44d7eee", + "sha256:4983ede548ffc3541bae49a82675996497348e55bafd1554dc4e4a5d6eda541a", + "sha256:5315f4509c1476718a4825f45a203b82d7fdf2a6f5f0c8f166435975b1c9f7d4", + "sha256:6cdfb1b49d5345f7c2b90d638822d16ba62dc82f7616e9b4caa10b72f3f16649", + "sha256:7b325f12635598c604690efd7a0197d0b94b7d7778498e76e0710cd582fd1c7a", + "sha256:8d3b0e3b8626615826f9a626548057c5275a9733512b137984a68ba1598d3d2f", + "sha256:8f8631160c79f53081bd23446525db0bc4c5616f78d04021e6e434b286493fd7", + "sha256:912de10965f3dc89da23936f1cc4ed60764f712e5fa603a09dd904f88c996760", + "sha256:b010c07b975fe853c65d7bbe9d4ac62f1c69086750a574f6292597763781ba18", + "sha256:c908c10505904c48081a5415a1e295d8403e353e0c14c42b6d67f8f97fae6616", + "sha256:c94dd3807c0c0610f7c76f078119f4ea48235a953512752b9175f9f98f5ae2bd", + "sha256:ce65dee7594a84c466e79d7fb7d3303e7295d16a83c22c7c4037071b059e2c21", + "sha256:eaa9cfcb221a8a4c2889be6f93da141ac777eb8819f077e1d09fb12d00a09a93", + "sha256:f3376bc31bad66d46d44b4e6522c5c21976bf9bca4ef5987bb2bf727f4506cbb", + "sha256:f9202fa138544e13a4ec1a6792c35834250a85958fde1251b6a22e07d1260ae7" + ], + "markers": "implementation_name == 'cpython'", + "version": "==1.3.5" + }, + "wrapt": { + "hashes": [ + "sha256:4aea003270831cceb8a90ff27c4031da6ead7ec1886023b80ce0dfe0adf61533" + ], + "version": "==1.11.1" + } + } +} diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..718dddf6 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,43 @@ +-i https://pypi.org/simple +alabaster==0.7.12 +argh==0.26.2 +babel==2.6.0 +certifi==2019.3.9 +chardet==3.0.4 +commonmark==0.9.0 +docker-pycreds==0.4.0 +docker==3.7.2 +docutils==0.14 +future==0.17.1 +idna==2.8 +imagesize==1.1.0 +jinja2==2.10.1 +jsonschema==2.6.0 +livereload==2.6.0 +markupsafe==1.1.1 +packaging==19.0 +pathtools==0.1.2 +port-for==0.3.1 +pygments==2.3.1 +pyparsing==2.4.0 +pytz==2019.1 +pyyaml==5.1 +recommonmark==0.5.0 +redis==2.10.6 +requests==2.21.0 +six==1.12.0 +snowballstemmer==1.2.1 +sphinx-autobuild==0.7.1 +sphinx-rtd-theme==0.4.3 +sphinx==2.0.1 +sphinxcontrib-applehelp==1.0.1 +sphinxcontrib-devhelp==1.0.1 +sphinxcontrib-htmlhelp==1.0.2 +sphinxcontrib-jsmath==1.0.1 +sphinxcontrib-qthelp==1.0.2 +sphinxcontrib-serializinghtml==1.1.3 +sphinxcontrib-websupport==1.1.0 +tornado==6.0.2 +urllib3==1.24.3 +watchdog==0.9.0 +websocket-client==0.56.0 From 416e18f8b2e9088c3f4a977b0378b0bb7ec2982f Mon Sep 17 00:00:00 2001 From: Benjamin Mort Date: Sat, 4 May 2019 00:44:09 +0100 Subject: [PATCH 13/14] Updated top level pipenv file and associated requirements.txt --- Pipfile | 26 ++++---- Pipfile.lock | 165 ++++++++++++++++++++++++++++------------------- requirements.txt | 11 +--- 3 files changed, 114 insertions(+), 88 deletions(-) diff --git a/Pipfile b/Pipfile index 26e4d482..ea257018 100644 --- a/Pipfile +++ b/Pipfile @@ -4,25 +4,25 @@ url = "https://pypi.org/simple" verify_ssl = true [packages] -docker = "~=3.7.2" +docker = "*" +jinja2 = "*" +jsonschema = "*" +PyYAML = "*" +recommonmark = "*" redis = "~=2.10.6" -jsonschema = "~=2.6.0" -jinja2 = "~=2.10" -PyYAML = "~=5.1" Sphinx = "*" sphinx_rtd_theme = "*" -sphinx-autobuild = "*" sphinxcontrib-websupport = "*" -recommonmark = "*" [dev-packages] -doc8 = ">=0.8.0" -pylint = ">=2.3.1" -pytest = "~=4.0.1" -pytest-pylint = "~=0.13.0" -pytest-codestyle = "~=1.3.1" -pytest-pydocstyle = "~=1.4.1" -pytest-cov = "~=2.6.0" +doc8 = "*" +pylint = "*" +pytest = "*" +pytest-pylint = "*" +pytest-codestyle = "*" +pytest-pydocstyle = "*" +pytest-cov = "*" +sphinx-autobuild = "*" [requires] python_version = "3.6" diff --git a/Pipfile.lock b/Pipfile.lock index bcbaadb6..1c57c34f 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "c2f7e5b00b5e2e67948abc41f626b0ba7b4b1651af5cf2e41f30236e1869dc60" + "sha256": "a81f80be521ad7fe827d71b0b156333ec6ef6d6b00f2a32f289157478b958d81" }, "pipfile-spec": 6, "requires": { @@ -23,12 +23,12 @@ ], "version": "==0.7.12" }, - "argh": { + "attrs": { "hashes": [ - "sha256:a9b3aaa1904eeb78e32394cd46c6f37ac0fb4af6dc488daa58971bdc7d7fcaf3", - "sha256:e9535b8c84dc9571a48999094fda7f33e63c3f1b74f3e5f3ac0105a58405bb65" + "sha256:69c0dbf2ed392de1cb5ec704444b08a5ef81680a61cb899dc08127123af36a79", + "sha256:f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399" ], - "version": "==0.26.2" + "version": "==19.1.0" }, "babel": { "hashes": [ @@ -111,18 +111,11 @@ }, "jsonschema": { "hashes": [ - "sha256:000e68abd33c972a5248544925a0cae7d1125f9bf6c58280d37546b946769a08", - "sha256:6ff5f3180870836cae40f06fa10419f557208175f13ad7bc26caa77beb1f6e02" + "sha256:0c0a81564f181de3212efa2d17de1910f8732fa1b71c42266d983cd74304e20d", + "sha256:a5f6559964a3851f59040d3b961de5e68e70971afb88ba519d27e6a039efff1a" ], "index": "pypi", - "version": "==2.6.0" - }, - "livereload": { - "hashes": [ - "sha256:29cadfabcedd12eed792e0131991235b9d4764d4474bed75cf525f57109ec0a2", - "sha256:e632a6cd1d349155c1d7f13a65be873b38f43ef02961804a1bba8d817fa649a7" - ], - "version": "==2.6.0" + "version": "==3.0.1" }, "markupsafe": { "hashes": [ @@ -164,18 +157,6 @@ ], "version": "==19.0" }, - "pathtools": { - "hashes": [ - "sha256:7c35c5421a39bb82e58018febd90e3b6e5db34c5443aaaf742b3f33d4655f1c0" - ], - "version": "==0.1.2" - }, - "port-for": { - "hashes": [ - "sha256:b16a84bb29c2954db44c29be38b17c659c9c27e33918dec16b90d375cc596f1c" - ], - "version": "==0.3.1" - }, "pygments": { "hashes": [ "sha256:5ffada19f6203563680669ee7f53b64dabbeb100eb51b61996085e99c03b284a", @@ -190,6 +171,12 @@ ], "version": "==2.4.0" }, + "pyrsistent": { + "hashes": [ + "sha256:5403d37f4d55ff4572b5b5676890589f367a9569529c6f728c11046c4ea4272b" + ], + "version": "==0.15.1" + }, "pytz": { "hashes": [ "sha256:303879e36b721603cc54604edcac9d20401bdbe31e1e4fdee5b9f98d5d31dfda", @@ -259,14 +246,6 @@ "index": "pypi", "version": "==2.0.1" }, - "sphinx-autobuild": { - "hashes": [ - "sha256:66388f81884666e3821edbe05dd53a0cfb68093873d17320d0610de8db28c74e", - "sha256:e60aea0789cab02fa32ee63c7acae5ef41c06f1434d9fd0a74250a61f5994692" - ], - "index": "pypi", - "version": "==0.7.1" - }, "sphinx-rtd-theme": { "hashes": [ "sha256:00cf895504a7895ee433807c62094cf1e95f065843bf3acd17037c3e9a2becd4", @@ -325,18 +304,6 @@ "index": "pypi", "version": "==1.1.0" }, - "tornado": { - "hashes": [ - "sha256:1174dcb84d08887b55defb2cda1986faeeea715fff189ef3dc44cce99f5fca6b", - "sha256:2613fab506bd2aedb3722c8c64c17f8f74f4070afed6eea17f20b2115e445aec", - "sha256:44b82bc1146a24e5b9853d04c142576b4e8fa7a92f2e30bc364a85d1f75c4de2", - "sha256:457fcbee4df737d2defc181b9073758d73f54a6cfc1f280533ff48831b39f4a8", - "sha256:49603e1a6e24104961497ad0c07c799aec1caac7400a6762b687e74c8206677d", - "sha256:8c2f40b99a8153893793559919a355d7b74649a11e59f411b0b0a1793e160bc0", - "sha256:e1d897889c3b5a829426b7d52828fb37b28bc181cd598624e65c8be40ee3f7fa" - ], - "version": "==6.0.2" - }, "urllib3": { "hashes": [ "sha256:2393a695cd12afedd0dcb26fe5d50d0cf248e5a66f75dbd89a3d4eb333a61af4", @@ -344,12 +311,6 @@ ], "version": "==1.24.3" }, - "watchdog": { - "hashes": [ - "sha256:965f658d0732de3188211932aeb0bb457587f04f63ab4c1e33eab878e9de961d" - ], - "version": "==0.9.0" - }, "websocket-client": { "hashes": [ "sha256:1151d5fb3a62dc129164292e1227655e4bbc5dd5340a5165dfae61128ec50aa9", @@ -359,6 +320,13 @@ } }, "develop": { + "argh": { + "hashes": [ + "sha256:a9b3aaa1904eeb78e32394cd46c6f37ac0fb4af6dc488daa58971bdc7d7fcaf3", + "sha256:e9535b8c84dc9571a48999094fda7f33e63c3f1b74f3e5f3ac0105a58405bb65" + ], + "version": "==0.26.2" + }, "astroid": { "hashes": [ "sha256:6560e1e1749f68c64a4b5dee4e091fce798d2f0d84ebe638cf0e0585a343acf4", @@ -480,6 +448,13 @@ ], "version": "==1.3.1" }, + "livereload": { + "hashes": [ + "sha256:29cadfabcedd12eed792e0131991235b9d4764d4474bed75cf525f57109ec0a2", + "sha256:e632a6cd1d349155c1d7f13a65be873b38f43ef02961804a1bba8d817fa649a7" + ], + "version": "==2.6.0" + }, "mccabe": { "hashes": [ "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", @@ -492,8 +467,15 @@ "sha256:2112d2ca570bb7c3e53ea1a35cd5df42bb0fd10c45f0fb97178679c3c03d64c7", "sha256:c3e4748ba1aad8dba30a4886b0b1a2004f9a863837b8654e7059eebf727afa5a" ], + "markers": "python_version > '2.7'", "version": "==7.0.0" }, + "pathtools": { + "hashes": [ + "sha256:7c35c5421a39bb82e58018febd90e3b6e5db34c5443aaaf742b3f33d4655f1c0" + ], + "version": "==0.1.2" + }, "pbr": { "hashes": [ "sha256:6901995b9b686cb90cceba67a0f6d4d14ae003cd59bc12beb61549bdfbe3bc89", @@ -508,6 +490,12 @@ ], "version": "==0.9.0" }, + "port-for": { + "hashes": [ + "sha256:b16a84bb29c2954db44c29be38b17c659c9c27e33918dec16b90d375cc596f1c" + ], + "version": "==0.3.1" + }, "py": { "hashes": [ "sha256:64f65755aee5b381cea27766a3a147c3f15b9b6b9ac88676de66ba2ae36793fa", @@ -540,42 +528,59 @@ }, "pytest": { "hashes": [ - "sha256:f689bf2fc18c4585403348dd56f47d87780bf217c53ed9ae7a3e2d7faa45f8e9", - "sha256:f812ea39a0153566be53d88f8de94839db1e8a05352ed8a49525d7d7f37861e9" + "sha256:3773f4c235918987d51daf1db66d51c99fac654c81d6f2f709a046ab446d5e5d", + "sha256:b7802283b70ca24d7119b32915efa7c409982f59913c1a6c0640aacf118b95f5" ], "index": "pypi", - "version": "==4.0.2" + "version": "==4.4.1" }, "pytest-codestyle": { "hashes": [ - "sha256:c0a04d66e414b4d55047ee666918bc333cb12ec75be906f7d3b9712555cebd70" + "sha256:51cd27130ffd3a36f464caa56842acad404865adfae725b97804864fde7e5332" ], "index": "pypi", - "version": "==1.3.1" + "version": "==1.4.0" }, "pytest-cov": { "hashes": [ - "sha256:0ab664b25c6aa9716cbf203b17ddb301932383046082c081b9848a0edf5add33", - "sha256:230ef817450ab0699c6cc3c9c8f7a829c34674456f2ed8df1fe1d39780f7c87f" + "sha256:2b097cde81a302e1047331b48cadacf23577e431b61e9c6f49a1170bbe3d3da6", + "sha256:e00ea4fdde970725482f1f35630d12f074e121a23801aabf2ae154ec6bdd343a" ], "index": "pypi", - "version": "==2.6.1" + "version": "==2.7.1" }, "pytest-pydocstyle": { "hashes": [ - "sha256:acfd986e6c49e0979cfd6dc1f1f57219a9a1ba92f93c4db8614a183741f4b427" + "sha256:701d0590be48bf80691521c646d956c5fa5ebb40324505dcd107e3022a773d7a" ], "index": "pypi", - "version": "==1.4.1" + "version": "==1.5.0" }, "pytest-pylint": { "hashes": [ - "sha256:50500fa8ecd7f7ca8e1d08e4c2c8748ae376a95745d3574861a86d642d9ed9b3", - "sha256:5265fc9f9b8286c56535f521c8bed22d2510e54f779e161f01306e6a53390730", - "sha256:605bc4eea24b15e45bc7658dabce8c6932a8e9ded765cfa4a5f5cd62db77794d" + "sha256:0dcb6cd429281f7493994e65324937bb295ef28f7632c046b45828380f4fe88a", + "sha256:45d2209b65989c8981289c8e75d0fde8c55e87cef27e97facb49f14773a8d3fb", + "sha256:7bfbb66fc6dc160193a9e813a7c55e5ae32028f18660deeb90e1cb7e980cbbac" ], "index": "pypi", - "version": "==0.13.0" + "version": "==0.14.0" + }, + "pyyaml": { + "hashes": [ + "sha256:1adecc22f88d38052fb787d959f003811ca858b799590a5eaa70e63dca50308c", + "sha256:436bc774ecf7c103814098159fbb84c2715d25980175292c648f2da143909f95", + "sha256:460a5a4248763f6f37ea225d19d5c205677d8d525f6a83357ca622ed541830c2", + "sha256:5a22a9c84653debfbf198d02fe592c176ea548cccce47553f35f466e15cf2fd4", + "sha256:7a5d3f26b89d688db27822343dfa25c599627bc92093e788956372285c6298ad", + "sha256:9372b04a02080752d9e6f990179a4ab840227c6e2ce15b95e1278456664cf2ba", + "sha256:a5dcbebee834eaddf3fa7366316b880ff4062e4bcc9787b78c7fbb4a26ff2dd1", + "sha256:aee5bab92a176e7cd034e57f46e9df9a9862a71f8f37cad167c6fc74c65f5b4e", + "sha256:c51f642898c0bacd335fc119da60baae0824f2cde95b0330b56c0553439f0673", + "sha256:c68ea4d3ba1705da1e0d85da6684ac657912679a649e8868bd850d2c299cce13", + "sha256:e23d0cc5299223dcc37885dae624f382297717e459ea24053709675a976a3e19" + ], + "index": "pypi", + "version": "==5.1" }, "restructuredtext-lint": { "hashes": [ @@ -597,6 +602,14 @@ ], "version": "==1.2.1" }, + "sphinx-autobuild": { + "hashes": [ + "sha256:66388f81884666e3821edbe05dd53a0cfb68093873d17320d0610de8db28c74e", + "sha256:e60aea0789cab02fa32ee63c7acae5ef41c06f1434d9fd0a74250a61f5994692" + ], + "index": "pypi", + "version": "==0.7.1" + }, "stevedore": { "hashes": [ "sha256:7be098ff53d87f23d798a7ce7ae5c31f094f3deb92ba18059b1aeb1ca9fec0a0", @@ -604,6 +617,18 @@ ], "version": "==1.30.1" }, + "tornado": { + "hashes": [ + "sha256:1174dcb84d08887b55defb2cda1986faeeea715fff189ef3dc44cce99f5fca6b", + "sha256:2613fab506bd2aedb3722c8c64c17f8f74f4070afed6eea17f20b2115e445aec", + "sha256:44b82bc1146a24e5b9853d04c142576b4e8fa7a92f2e30bc364a85d1f75c4de2", + "sha256:457fcbee4df737d2defc181b9073758d73f54a6cfc1f280533ff48831b39f4a8", + "sha256:49603e1a6e24104961497ad0c07c799aec1caac7400a6762b687e74c8206677d", + "sha256:8c2f40b99a8153893793559919a355d7b74649a11e59f411b0b0a1793e160bc0", + "sha256:e1d897889c3b5a829426b7d52828fb37b28bc181cd598624e65c8be40ee3f7fa" + ], + "version": "==6.0.2" + }, "typed-ast": { "hashes": [ "sha256:132eae51d6ef3ff4a8c47c393a4ef5ebf0d1aecc96880eb5d6c8ceab7017cc9b", @@ -629,6 +654,12 @@ "markers": "implementation_name == 'cpython'", "version": "==1.3.5" }, + "watchdog": { + "hashes": [ + "sha256:965f658d0732de3188211932aeb0bb457587f04f63ab4c1e33eab878e9de961d" + ], + "version": "==0.9.0" + }, "wrapt": { "hashes": [ "sha256:4aea003270831cceb8a90ff27c4031da6ead7ec1886023b80ce0dfe0adf61533" diff --git a/requirements.txt b/requirements.txt index 718dddf6..f217ff91 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ -i https://pypi.org/simple alabaster==0.7.12 -argh==0.26.2 +attrs==19.1.0 babel==2.6.0 certifi==2019.3.9 chardet==3.0.4 @@ -12,14 +12,12 @@ future==0.17.1 idna==2.8 imagesize==1.1.0 jinja2==2.10.1 -jsonschema==2.6.0 -livereload==2.6.0 +jsonschema==3.0.1 markupsafe==1.1.1 packaging==19.0 -pathtools==0.1.2 -port-for==0.3.1 pygments==2.3.1 pyparsing==2.4.0 +pyrsistent==0.15.1 pytz==2019.1 pyyaml==5.1 recommonmark==0.5.0 @@ -27,7 +25,6 @@ redis==2.10.6 requests==2.21.0 six==1.12.0 snowballstemmer==1.2.1 -sphinx-autobuild==0.7.1 sphinx-rtd-theme==0.4.3 sphinx==2.0.1 sphinxcontrib-applehelp==1.0.1 @@ -37,7 +34,5 @@ sphinxcontrib-jsmath==1.0.1 sphinxcontrib-qthelp==1.0.2 sphinxcontrib-serializinghtml==1.1.3 sphinxcontrib-websupport==1.1.0 -tornado==6.0.2 urllib3==1.24.3 -watchdog==0.9.0 websocket-client==0.56.0 From 12d3b18e76cc9382e10021efbd5af84251b08674 Mon Sep 17 00:00:00 2001 From: Benjamin Mort Date: Tue, 7 May 2019 01:15:03 +0100 Subject: [PATCH 14/14] Updated initial Sphinx placeholder - Enabled markdown support (using m2r) - Linked in Demo docs --- Pipfile | 2 +- Pipfile.lock | 37 ++++++++++-------------- demos/01_sdp_states/README.md | 4 +-- demos/02_running_a_workflow/README.md | 2 +- docs/src/conf.py | 12 ++++++-- docs/src/demos_link.rst | 5 ++++ docs/src/docker_images.md | 3 ++ docs/src/figures/components_cartoon.png | 1 + docs/src/figures/sdp_states.png | 1 + docs/src/figures/service_states.png | 1 + docs/src/figures/services-components.png | 1 + docs/src/figures/services.png | 1 + docs/src/figures/states_data_model.png | 1 + docs/src/index.rst | 2 ++ docs/src/pipenv_usage.md | 32 ++++++++++++++++++++ docs/src/python_packages.md | 3 ++ docs/src/references.rst | 9 ++++++ docs/src/test.md | 7 +++++ requirements.txt | 5 ++-- 19 files changed, 97 insertions(+), 32 deletions(-) create mode 100644 docs/src/demos_link.rst create mode 100644 docs/src/docker_images.md create mode 120000 docs/src/figures/components_cartoon.png create mode 120000 docs/src/figures/sdp_states.png create mode 120000 docs/src/figures/service_states.png create mode 120000 docs/src/figures/services-components.png create mode 120000 docs/src/figures/services.png create mode 120000 docs/src/figures/states_data_model.png create mode 100644 docs/src/pipenv_usage.md create mode 100644 docs/src/python_packages.md create mode 100644 docs/src/test.md diff --git a/Pipfile b/Pipfile index ea257018..eec91fae 100644 --- a/Pipfile +++ b/Pipfile @@ -7,8 +7,8 @@ verify_ssl = true docker = "*" jinja2 = "*" jsonschema = "*" +m2r = "*" PyYAML = "*" -recommonmark = "*" redis = "~=2.10.6" Sphinx = "*" sphinx_rtd_theme = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 1c57c34f..67347884 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "a81f80be521ad7fe827d71b0b156333ec6ef6d6b00f2a32f289157478b958d81" + "sha256": "0fff94985ef492216f41c37835a2c3dca3fd8e39c494cebab4ca6a5d47702ea7" }, "pipfile-spec": 6, "requires": { @@ -51,13 +51,6 @@ ], "version": "==3.0.4" }, - "commonmark": { - "hashes": [ - "sha256:14c3df31e8c9c463377e287b2a1eefaa6019ab97b22dad36e2f32be59d61d68d", - "sha256:867fc5db078ede373ab811e16b6789e9d033b15ccd7296f370ca52d1ee792ce0" - ], - "version": "==0.9.0" - }, "docker": { "hashes": [ "sha256:2b1f48041cfdcc9f6b5da0e04e0e326ded225e736762ade2060000e708f4c9b7", @@ -81,12 +74,6 @@ ], "version": "==0.14" }, - "future": { - "hashes": [ - "sha256:67045236dcfd6816dc439556d009594abf643e5eb48992e36beac09c2ca659b8" - ], - "version": "==0.17.1" - }, "idna": { "hashes": [ "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407", @@ -117,6 +104,13 @@ "index": "pypi", "version": "==3.0.1" }, + "m2r": { + "hashes": [ + "sha256:bf90bad66cda1164b17e5ba4a037806d2443f2a4d5ddc9f6a5554a0322aaed99" + ], + "index": "pypi", + "version": "==0.2.1" + }, "markupsafe": { "hashes": [ "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473", @@ -150,6 +144,13 @@ ], "version": "==1.1.1" }, + "mistune": { + "hashes": [ + "sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e", + "sha256:88a1051873018da288eee8538d476dffe1262495144b33ecb586c4ab266bb8d4" + ], + "version": "==0.8.4" + }, "packaging": { "hashes": [ "sha256:0c98a5d0be38ed775798ece1b9727178c4469d9c3b4ada66e8e6b7849f8732af", @@ -201,14 +202,6 @@ "index": "pypi", "version": "==5.1" }, - "recommonmark": { - "hashes": [ - "sha256:a520b8d25071a51ae23a27cf6252f2fe387f51bdc913390d83b2b50617f5bb48", - "sha256:c85228b9b7aea7157662520e74b4e8791c5eacd375332ec68381b52bf10165be" - ], - "index": "pypi", - "version": "==0.5.0" - }, "redis": { "hashes": [ "sha256:8a1900a9f2a0a44ecf6e8b5eb3e967a9909dfed219ad66df094f27f7d6f330fb", diff --git a/demos/01_sdp_states/README.md b/demos/01_sdp_states/README.md index 51b9f29a..dc8e4cbb 100644 --- a/demos/01_sdp_states/README.md +++ b/demos/01_sdp_states/README.md @@ -1,4 +1,4 @@ -# SIP Demo: Monitoring and Control of the state of SDP +# Demo 1: Monitoring and Control of the state of SDP ## 1 Introduction @@ -189,7 +189,7 @@ As shown in the Figure below, these are light-weight prototypes of a number of the Execution Control, Tango Control and Platform services identified in the SDP architecture. -![Services & Components](figures/services-components.png) +![Services & Components](figures/services-components.png "") ### 3.2 Monitoring and Control of SDP diff --git a/demos/02_running_a_workflow/README.md b/demos/02_running_a_workflow/README.md index 1977762d..718645de 100644 --- a/demos/02_running_a_workflow/README.md +++ b/demos/02_running_a_workflow/README.md @@ -1,4 +1,4 @@ -# SIP Demo: Running a workflow +# Demo 2: Running a workflow ## 1. Introduction diff --git a/docs/src/conf.py b/docs/src/conf.py index 3c1625fb..efe38e04 100644 --- a/docs/src/conf.py +++ b/docs/src/conf.py @@ -15,10 +15,16 @@ import os import sys import sphinx_rtd_theme + # sys.path.insert(0, os.path.abspath('.')) sys.path.insert(0, os.path.abspath( os.path.join('..', '..', 'sip', 'execution_control', 'configuration_db') )) +sys.path.insert(0, os.path.abspath( + os.path.join('..', '..', 'demos', '01_sdp_states') +)) + + # -- Project information ----------------------------------------------------- @@ -50,7 +56,7 @@ 'sphinx.ext.ifconfig', 'sphinx.ext.viewcode', 'sphinx.ext.githubpages', - 'recommonmark' + 'm2r' ] # Add any paths that contain templates here, relative to this directory. @@ -59,8 +65,8 @@ # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # -# source_suffix = ['.rst', '.md'] -source_suffix = '.rst' +source_suffix = ['.rst', '.md'] +# source_suffix = '.rst' # The master toctree document. master_doc = 'index' diff --git a/docs/src/demos_link.rst b/docs/src/demos_link.rst new file mode 100644 index 00000000..3486d499 --- /dev/null +++ b/docs/src/demos_link.rst @@ -0,0 +1,5 @@ +SIP Demos +********* + +.. mdinclude:: ../../demos/01_sdp_states/README.md +.. mdinclude:: ../../demos/02_running_a_workflow/README.md diff --git a/docs/src/docker_images.md b/docs/src/docker_images.md new file mode 100644 index 00000000..d0eb68da --- /dev/null +++ b/docs/src/docker_images.md @@ -0,0 +1,3 @@ +# Creating and publishing SIP Docker images + +___TODO!___ diff --git a/docs/src/figures/components_cartoon.png b/docs/src/figures/components_cartoon.png new file mode 120000 index 00000000..a9178dbc --- /dev/null +++ b/docs/src/figures/components_cartoon.png @@ -0,0 +1 @@ +../../../demos/01_sdp_states/figures/components_cartoon.png \ No newline at end of file diff --git a/docs/src/figures/sdp_states.png b/docs/src/figures/sdp_states.png new file mode 120000 index 00000000..15867f6c --- /dev/null +++ b/docs/src/figures/sdp_states.png @@ -0,0 +1 @@ +../../../demos/01_sdp_states/figures/sdp_states.png \ No newline at end of file diff --git a/docs/src/figures/service_states.png b/docs/src/figures/service_states.png new file mode 120000 index 00000000..b7bad250 --- /dev/null +++ b/docs/src/figures/service_states.png @@ -0,0 +1 @@ +../../../demos/01_sdp_states/figures/service_states.png \ No newline at end of file diff --git a/docs/src/figures/services-components.png b/docs/src/figures/services-components.png new file mode 120000 index 00000000..a4052c5a --- /dev/null +++ b/docs/src/figures/services-components.png @@ -0,0 +1 @@ +../../../demos/01_sdp_states/figures/services-components.png \ No newline at end of file diff --git a/docs/src/figures/services.png b/docs/src/figures/services.png new file mode 120000 index 00000000..27be7a1b --- /dev/null +++ b/docs/src/figures/services.png @@ -0,0 +1 @@ +../../../demos/01_sdp_states/figures/services.png \ No newline at end of file diff --git a/docs/src/figures/states_data_model.png b/docs/src/figures/states_data_model.png new file mode 120000 index 00000000..b9468bb3 --- /dev/null +++ b/docs/src/figures/states_data_model.png @@ -0,0 +1 @@ +../../../demos/01_sdp_states/figures/states_data_model.png \ No newline at end of file diff --git a/docs/src/index.rst b/docs/src/index.rst index ddde3c38..ccc8c26f 100644 --- a/docs/src/index.rst +++ b/docs/src/index.rst @@ -11,6 +11,8 @@ of the SDP. background quickstart + demos_link + test api references diff --git a/docs/src/pipenv_usage.md b/docs/src/pipenv_usage.md new file mode 100644 index 00000000..67ef749d --- /dev/null +++ b/docs/src/pipenv_usage.md @@ -0,0 +1,32 @@ +# Pipenv usage + +- +- + +```bash +pipenv shell +``` + +To generate a `requirements.txt` file: + +```bash +pipenv lock -r [--dev] > requirements.txt +``` + +## Interaction with `setup.py` + +From + +> Here is a recommended workflow for when you are using a `setup.py` as a way +> to distribute your package: +> +> - `setup.py` install_requires keyword should include whatever the package +> "minimally needs to run correctly". +> - `Pipfile` represents the concrete requirements for your package +> - Pull the minimally required dependencies from `setup.py` by installing +> your package using `pipenv`: +> - Use `pipenv install -e .` +> - That will result in a line in your `pipfile` that looks something +> like `"e1839a8" = {path = ".", editable = true}`. +> - `Pipfile.lock` contains details for a reproducible environment generated +> from `pipenv lock` diff --git a/docs/src/python_packages.md b/docs/src/python_packages.md new file mode 100644 index 00000000..375cec50 --- /dev/null +++ b/docs/src/python_packages.md @@ -0,0 +1,3 @@ +# Creating and publishing SIP Python Packages + +___TODO!___ diff --git a/docs/src/references.rst b/docs/src/references.rst index 90f94680..a67091b7 100644 --- a/docs/src/references.rst +++ b/docs/src/references.rst @@ -5,3 +5,12 @@ References ********** + +- `SIP Integration Prototype Report `_ + +- `SDP Software Architecture Documentations `_ + - `Component and Connector View `_ + - `Module View `_ + - `Data Model View `_ + +- test diff --git a/docs/src/test.md b/docs/src/test.md new file mode 100644 index 00000000..d981d0f6 --- /dev/null +++ b/docs/src/test.md @@ -0,0 +1,7 @@ +# Markdown documentation .. + +This is a markdown file ... + +```python +a = [1, 2, 3] +``` diff --git a/requirements.txt b/requirements.txt index f217ff91..5fd33b1e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,23 +4,22 @@ attrs==19.1.0 babel==2.6.0 certifi==2019.3.9 chardet==3.0.4 -commonmark==0.9.0 docker-pycreds==0.4.0 docker==3.7.2 docutils==0.14 -future==0.17.1 idna==2.8 imagesize==1.1.0 jinja2==2.10.1 jsonschema==3.0.1 +m2r==0.2.1 markupsafe==1.1.1 +mistune==0.8.4 packaging==19.0 pygments==2.3.1 pyparsing==2.4.0 pyrsistent==0.15.1 pytz==2019.1 pyyaml==5.1 -recommonmark==0.5.0 redis==2.10.6 requests==2.21.0 six==1.12.0