From 96354cd54c1a54c9f9914ea019e5d7ae0f74b3b4 Mon Sep 17 00:00:00 2001 From: fabcor Date: Thu, 21 Sep 2023 17:45:27 +0200 Subject: [PATCH] Fix documentation pages --- .github/workflows/pages.yaml | 82 ++++++ docs/Makefile | 2 +- docs/{source => }/conf.py | 108 ++++--- docs/source/Beamline.rst | 6 - docs/source/Collection.rst | 6 - docs/source/Queue.rst | 7 - docs/source/Sample.rst | 6 - docs/source/SampleCentring.rst | 7 - docs/source/contents.rst | 13 + docs/source/dev/contributing.md | 2 + docs/source/dev/dev-env.rst | 8 + docs/source/dev/index.rst | 9 + docs/source/{Login.rst => dev/login.rst} | 10 +- docs/source/index.md | 2 + docs/source/index.rst | 17 -- docs/source/rest-api/beamline.rst | 6 + docs/source/rest-api/detector.rst | 6 + docs/source/rest-api/diffractometer.rst | 6 + docs/source/rest-api/index.rst | 9 + docs/source/rest-api/lims.rst | 6 + docs/source/rest-api/login.rst | 6 + docs/source/rest-api/queue.rst | 6 + docs/source/rest-api/remote-access.rst | 6 + docs/source/rest-api/sample-view.rst | 6 + poetry.lock | 355 +++++++++++++++++++++-- pyproject.toml | 3 + 26 files changed, 575 insertions(+), 125 deletions(-) create mode 100644 .github/workflows/pages.yaml rename docs/{source => }/conf.py (83%) delete mode 100644 docs/source/Beamline.rst delete mode 100644 docs/source/Collection.rst delete mode 100644 docs/source/Queue.rst delete mode 100644 docs/source/Sample.rst delete mode 100644 docs/source/SampleCentring.rst create mode 100644 docs/source/contents.rst create mode 100644 docs/source/dev/contributing.md create mode 100644 docs/source/dev/dev-env.rst create mode 100644 docs/source/dev/index.rst rename docs/source/{Login.rst => dev/login.rst} (85%) create mode 100644 docs/source/index.md delete mode 100644 docs/source/index.rst create mode 100644 docs/source/rest-api/beamline.rst create mode 100644 docs/source/rest-api/detector.rst create mode 100644 docs/source/rest-api/diffractometer.rst create mode 100644 docs/source/rest-api/index.rst create mode 100644 docs/source/rest-api/lims.rst create mode 100644 docs/source/rest-api/login.rst create mode 100644 docs/source/rest-api/queue.rst create mode 100644 docs/source/rest-api/remote-access.rst create mode 100644 docs/source/rest-api/sample-view.rst diff --git a/.github/workflows/pages.yaml b/.github/workflows/pages.yaml new file mode 100644 index 000000000..4b196c84f --- /dev/null +++ b/.github/workflows/pages.yaml @@ -0,0 +1,82 @@ +--- + + +name: "Pages" + +concurrency: + group: "pages" + cancel-in-progress: true + +on: + push: + +jobs: + + "pages-build": + + runs-on: "ubuntu-22.04" + + services: + + redis: + image: "redis" + options: >- + --health-cmd "redis-cli ping" + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + - "6379:6379/tcp" + + steps: + + - name: "Checkout" + uses: "actions/checkout@v4" # tested with v4.0.0 + + - name: "Setup conda environment with micromamba" + uses: "mamba-org/setup-micromamba@v1" # tested with v1.4.4 + with: + environment-file: "conda-environment.yml" + + - name: "Install dependencies with Poetry" + run: "poetry install" + + - name: "Build documentation with Sphinx" + run: "make --directory=./docs/ html" + + - name: "Upload artifact for GitHub Pages" + # This could potentially be run only when we intent to deploy... + # ...but it can be useful to have the artifact for debugging. + # if: "github.ref_name == github.event.repository.default_branch" + uses: "actions/upload-pages-artifact@v2" # tested with v2.0.0 + with: + path: "docs/build/html" + + "pages-deploy": + + if: "github.ref_name == github.event.repository.default_branch" + + environment: + name: "github-pages" + url: "${{ steps.deployment.outputs.page_url }}" + + needs: + - "pages-build" + + permissions: + pages: "write" + id-token: "write" + + runs-on: "ubuntu-22.04" + + steps: + + - name: "Setup GitHub Pages" + uses: "actions/configure-pages@v3" # tested with v3.0.6 + + - name: "Deploy to GitHub Pages" + id: "deployment" + uses: "actions/deploy-pages@v2" # tested with 2.0.4 + + +... # EOF diff --git a/docs/Makefile b/docs/Makefile index 92cceef36..422eef5c9 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -2,7 +2,7 @@ # # You can set these variables from the command line. -SPHINXOPTS = +SPHINXOPTS = -c . SPHINXBUILD = sphinx-build PAPER = BUILDDIR = build diff --git a/docs/source/conf.py b/docs/conf.py similarity index 83% rename from docs/source/conf.py rename to docs/conf.py index 810567604..11e2c3510 100644 --- a/docs/source/conf.py +++ b/docs/conf.py @@ -12,18 +12,30 @@ # All configuration values have a default; values that are commented out # serve to show the default. -import sys -import os -import shlex +import datetime +import importlib.metadata + +import mxcube3 + + +PROJECT_PACKAGE_NAME = "mxcubeweb" # Distribution package (not import package) +PROJECT_PACKAGE_METADATA = importlib.metadata.metadata(PROJECT_PACKAGE_NAME) + +PROJECT_SLUG_NAME = PROJECT_PACKAGE_NAME + +# This is necessary to for the `autoflask` directive to get access to the routes +server, _ = mxcube3.build_server_and_config(test=True, argv=[]) +# This is to avoid `Server.kill_processes`, that makes the build return non-zero +server.flask.testing = True + + +# -- Sphinx configuration ------------------------------------------------- + # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. # sys.path.insert(0, os.path.abspath('.')) -sys.path.append(os.path.abspath("../../")) -sys.path.append(os.path.abspath("../../mxcube3/")) -sys.path.append(os.path.abspath("../../mxcube3/HardwareObjects")) -sys.path.append(os.path.abspath("../../mxcube3/HardwareRepository")) # -- General configuration ------------------------------------------------ @@ -35,12 +47,8 @@ # ones. # extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest', 'sphinx.ext.intersphinx', 'sphinx.ext.todo'] extensions = [ - "sphinxcontrib.httpdomain", + "myst_parser", "sphinxcontrib.autohttp.flask", - "sphinx.ext.autodoc", - "sphinx.ext.doctest", - "sphinx.ext.intersphinx", - "sphinx.ext.todo", ] # Add any paths that contain templates here, relative to this directory. @@ -48,35 +56,39 @@ # 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": "restructuredtext", + ".md": "markdown", +} # The encoding of source files. # source_encoding = 'utf-8-sig' # The master toctree document. -master_doc = "index" +root_doc = "contents" # General information about the project. -project = u"MXCuBE3" -copyright = u"2015, MXCuBE Collaboration" -author = u"MXCuBE Collaboration" +project = "MXCuBE-Web" +author = PROJECT_PACKAGE_METADATA["Author"] +copyright = f"{datetime.datetime.today().year}, {author}" + +DOCUMENT_DESCRIPTION = f"{project} documentation" # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. -version = "0.1" +version = PROJECT_PACKAGE_METADATA["Version"] # The full version, including alpha/beta/rc tags. -release = "0.1" +release = version # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. -language = None +# language = "en" # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: @@ -113,7 +125,11 @@ # keep_warnings = False # If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = False +# todo_include_todos = False + +rst_prolog = f""" +.. |project| replace:: {project} +""" # -- Options for HTML output ---------------------------------------------- @@ -125,7 +141,13 @@ # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. -# html_theme_options = {} +html_theme_options = { + "description": DOCUMENT_DESCRIPTION, + "github_banner": "true", + "github_button": "true", + "github_repo": "mxcubeweb", + "github_user": "mxcube", +} # Add any paths that contain custom themes here, relative to this directory. # html_theme_path = [] @@ -149,7 +171,7 @@ # 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"] +# html_static_path = ["_static"] # Add any extra paths that contain custom files (such as robots.txt or # .htaccess) here, relative to this directory. These files are copied @@ -165,7 +187,13 @@ # html_use_smartypants = True # Custom sidebar templates, maps document names to template names. -# html_sidebars = {} +html_sidebars = { + "**": [ + "about.html", + "globaltoc.html", + "searchbox.html", + ], +} # Additional templates that should be rendered to pages, maps page names to # template names. @@ -212,7 +240,7 @@ # html_search_scorer = 'scorer.js' # Output file base name for HTML help builder. -htmlhelp_basename = "MXCuBE3doc" +htmlhelp_basename = f"{PROJECT_SLUG_NAME}-doc" # -- Options for LaTeX output --------------------------------------------- @@ -232,10 +260,10 @@ # author, documentclass [howto, manual, or own class]). latex_documents = [ ( - master_doc, - "MXCuBE3.tex", - u"MXCuBE3 Documentation", - u"MXCuBE Collaboration", + root_doc, + "{PROJECT_SLUG_NAME}.tex", + DOCUMENT_DESCRIPTION, + author, "manual", ), ] @@ -265,7 +293,15 @@ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). -man_pages = [(master_doc, "mxcube3", u"MXCuBE3 Documentation", [author], 1)] +man_pages = [ + ( + root_doc, + PROJECT_SLUG_NAME, + DOCUMENT_DESCRIPTION, + [author], + 1, + ), +] # If true, show URL addresses after external links. # man_show_urls = False @@ -278,12 +314,12 @@ # dir menu entry, description, category) texinfo_documents = [ ( - master_doc, - "MXCuBE3", - u"MXCuBE3 Documentation", + root_doc, + PROJECT_SLUG_NAME, + project, author, - "MXCuBE3", - "One line description of project.", + project, + DOCUMENT_DESCRIPTION, "Miscellaneous", ), ] diff --git a/docs/source/Beamline.rst b/docs/source/Beamline.rst deleted file mode 100644 index 908d0b2ee..000000000 --- a/docs/source/Beamline.rst +++ /dev/null @@ -1,6 +0,0 @@ -Beamline API -======================== - -.. autoflask:: mxcube3.routes.Beamline:mxcube - :endpoints: - diff --git a/docs/source/Collection.rst b/docs/source/Collection.rst deleted file mode 100644 index 3a27da9a8..000000000 --- a/docs/source/Collection.rst +++ /dev/null @@ -1,6 +0,0 @@ -Data Collection API -======================== - -.. autoflask:: mxcube3.routes.Collection:mxcube - :endpoints: - diff --git a/docs/source/Queue.rst b/docs/source/Queue.rst deleted file mode 100644 index e4385165c..000000000 --- a/docs/source/Queue.rst +++ /dev/null @@ -1,7 +0,0 @@ -Queue API -======================== - - -.. autoflask:: mxcube3.routes.Queue:mxcube - :endpoints: queueStart, queueStop, queueAbort, queuePause, queueUnpause, queueClear, queueGet, queueSaveState, queueLoadState, executeEntryWithId, addSample, updateSample, toggleNode, deleteSampleOrMethod, deleteMethod,addMethod, updateMethod, getSample, getMethod, serialize - diff --git a/docs/source/Sample.rst b/docs/source/Sample.rst deleted file mode 100644 index ae242e934..000000000 --- a/docs/source/Sample.rst +++ /dev/null @@ -1,6 +0,0 @@ -Sample API -======================== - -.. autoflask:: mxcube3.routes.Sample:mxcube - :endpoints: - diff --git a/docs/source/SampleCentring.rst b/docs/source/SampleCentring.rst deleted file mode 100644 index 5c4bf4fa2..000000000 --- a/docs/source/SampleCentring.rst +++ /dev/null @@ -1,7 +0,0 @@ -Sample Centring API -======================== - - -.. autoflask:: mxcube3.routes.SampleCentring:mxcube - :endpoints: subscribeToCamera, unsubscribeToCamera, snapshot, getImageData, getCentringWithId, saveCentringWithId, updateCentringWithId, deleteCentringWithId, moveToCentredPosition, getCentringPositions, moveZoomMotor, backLightOn, backLightOff, frontLightOn, frontLightOff, moveMotor, get_status_of_id, get_status, centreAuto, centre3click, abortCentring, aClick, acceptCentring, rejectCentring - diff --git a/docs/source/contents.rst b/docs/source/contents.rst new file mode 100644 index 000000000..72527fb98 --- /dev/null +++ b/docs/source/contents.rst @@ -0,0 +1,13 @@ +################# +Table of contents +################# + +Contents: + +.. toctree:: + :glob: + :titlesonly: + + * + dev/index + rest-api/index diff --git a/docs/source/dev/contributing.md b/docs/source/dev/contributing.md new file mode 100644 index 000000000..004f419c7 --- /dev/null +++ b/docs/source/dev/contributing.md @@ -0,0 +1,2 @@ +```{include} ../../../CONTRIBUTING.md +``` diff --git a/docs/source/dev/dev-env.rst b/docs/source/dev/dev-env.rst new file mode 100644 index 000000000..3f1b8cd10 --- /dev/null +++ b/docs/source/dev/dev-env.rst @@ -0,0 +1,8 @@ +*********************** +Development environment +*********************** + +See instructions to prepare a development environment on the |wikilink|_ . + +.. |wikilink| replace:: |project| wiki +.. _wikilink: https://github.com/mxcube/mxcubeweb/wiki diff --git a/docs/source/dev/index.rst b/docs/source/dev/index.rst new file mode 100644 index 000000000..e9451ef74 --- /dev/null +++ b/docs/source/dev/index.rst @@ -0,0 +1,9 @@ +####################### +Developer documentation +####################### + +.. toctree:: + :glob: + :titlesonly: + + * diff --git a/docs/source/Login.rst b/docs/source/dev/login.rst similarity index 85% rename from docs/source/Login.rst rename to docs/source/dev/login.rst index bc7515335..e4ba0a5cc 100644 --- a/docs/source/Login.rst +++ b/docs/source/dev/login.rst @@ -1,5 +1,6 @@ +***** Login -===== +***** MXCuBE web sessions are meant to expire when there is no activity, as opposed to a typical web session that expires when the browser is closed. @@ -23,10 +24,3 @@ Every time the *refresh* endpoint is called, the browser session cookie is refreshed, meaning its expiration timestamp is pushed back in the future for as much as the value stored in ``PERMANENT_SESSION_LIFETIME``. - - -Login API ---------- - -.. autoflask:: mxcube3.routes.Login:mxcube - :endpoints: login, signout, loginInfo, get_initial_state, proposal_samples diff --git a/docs/source/index.md b/docs/source/index.md new file mode 100644 index 000000000..c7719d82f --- /dev/null +++ b/docs/source/index.md @@ -0,0 +1,2 @@ +```{include} ../../README.md +``` diff --git a/docs/source/index.rst b/docs/source/index.rst deleted file mode 100644 index ce4919f00..000000000 --- a/docs/source/index.rst +++ /dev/null @@ -1,17 +0,0 @@ -.. MXCuBE3 documentation master file, created by - sphinx-quickstart on Tue Nov 10 16:07:35 2015. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -Welcome to MXCuBE3's documentation! -=================================== - -Contents: - - .. toctree:: - :maxdepth: 2 - - SampleCentring - Queue - Login - diff --git a/docs/source/rest-api/beamline.rst b/docs/source/rest-api/beamline.rst new file mode 100644 index 000000000..36235484a --- /dev/null +++ b/docs/source/rest-api/beamline.rst @@ -0,0 +1,6 @@ +***************** +Beamline REST API +***************** + +.. autoflask:: mxcube3:server.flask + :blueprints: beamline diff --git a/docs/source/rest-api/detector.rst b/docs/source/rest-api/detector.rst new file mode 100644 index 000000000..0d02ae459 --- /dev/null +++ b/docs/source/rest-api/detector.rst @@ -0,0 +1,6 @@ +***************** +Detector REST API +***************** + +.. autoflask:: mxcube3:server.flask + :blueprints: detector diff --git a/docs/source/rest-api/diffractometer.rst b/docs/source/rest-api/diffractometer.rst new file mode 100644 index 000000000..f49adf033 --- /dev/null +++ b/docs/source/rest-api/diffractometer.rst @@ -0,0 +1,6 @@ +*********************** +Diffractometer REST API +*********************** + +.. autoflask:: mxcube3:server.flask + :blueprints: diffractometer diff --git a/docs/source/rest-api/index.rst b/docs/source/rest-api/index.rst new file mode 100644 index 000000000..8f117d183 --- /dev/null +++ b/docs/source/rest-api/index.rst @@ -0,0 +1,9 @@ +######## +REST API +######## + +.. toctree:: + :glob: + :titlesonly: + + * diff --git a/docs/source/rest-api/lims.rst b/docs/source/rest-api/lims.rst new file mode 100644 index 000000000..51a19a824 --- /dev/null +++ b/docs/source/rest-api/lims.rst @@ -0,0 +1,6 @@ +************* +LIMS REST API +************* + +.. autoflask:: mxcube3:server.flask + :blueprints: lims diff --git a/docs/source/rest-api/login.rst b/docs/source/rest-api/login.rst new file mode 100644 index 000000000..e35842dff --- /dev/null +++ b/docs/source/rest-api/login.rst @@ -0,0 +1,6 @@ +************** +Login REST API +************** + +.. autoflask:: mxcube3:server.flask + :blueprints: login diff --git a/docs/source/rest-api/queue.rst b/docs/source/rest-api/queue.rst new file mode 100644 index 000000000..1abb4e375 --- /dev/null +++ b/docs/source/rest-api/queue.rst @@ -0,0 +1,6 @@ +************** +Queue REST API +************** + +.. autoflask:: mxcube3:server.flask + :blueprints: queue diff --git a/docs/source/rest-api/remote-access.rst b/docs/source/rest-api/remote-access.rst new file mode 100644 index 000000000..808103928 --- /dev/null +++ b/docs/source/rest-api/remote-access.rst @@ -0,0 +1,6 @@ +********************** +Remote access REST API +********************** + +.. autoflask:: mxcube3:server.flask + :blueprints: remote_access diff --git a/docs/source/rest-api/sample-view.rst b/docs/source/rest-api/sample-view.rst new file mode 100644 index 000000000..ff55af8d9 --- /dev/null +++ b/docs/source/rest-api/sample-view.rst @@ -0,0 +1,6 @@ +******************** +Sample view REST API +******************** + +.. autoflask:: mxcube3:server.flask + :blueprints: sampleview diff --git a/poetry.lock b/poetry.lock index a85e37a37..038ad5b48 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,15 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. + +[[package]] +name = "alabaster" +version = "0.7.13" +description = "A configurable sidebar-enabled Sphinx theme" +optional = false +python-versions = ">=3.6" +files = [ + {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, + {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, +] [[package]] name = "anyio" @@ -83,6 +94,20 @@ docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib- tests = ["attrs[tests-no-zope]", "zope-interface"] tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +[[package]] +name = "babel" +version = "2.12.1" +description = "Internationalization utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, + {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, +] + +[package.dependencies] +pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} + [[package]] name = "backports-zoneinfo" version = "0.2.1" @@ -590,6 +615,17 @@ idna = ["idna (>=2.1,<4.0)"] trio = ["trio (>=0.14,<0.23)"] wmi = ["wmi (>=1.5.1,<2.0.0)"] +[[package]] +name = "docutils" +version = "0.20.1" +description = "Docutils -- Python Documentation Utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "docutils-0.20.1-py3-none-any.whl", hash = "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6"}, + {file = "docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"}, +] + [[package]] name = "email-validator" version = "2.0.0.post2" @@ -1118,13 +1154,13 @@ files = [ [[package]] name = "imageio" -version = "2.31.3" +version = "2.31.4" description = "Library for reading and writing a wide range of image, video, scientific, and volumetric data formats." optional = false python-versions = ">=3.8" files = [ - {file = "imageio-2.31.3-py3-none-any.whl", hash = "sha256:ea777be55bfa4bd6aee126c7dfa3bf1759bf87be982876c50f1a976d1b65446d"}, - {file = "imageio-2.31.3.tar.gz", hash = "sha256:74c6a832d81b7ad5a8a80976dea58ee033d3e2b99a54990cbd789b4cb0b31461"}, + {file = "imageio-2.31.4-py3-none-any.whl", hash = "sha256:9a39577b482b9c9533b95b436b45540dc32fdf2868ba912d723d3490594fae22"}, + {file = "imageio-2.31.4.tar.gz", hash = "sha256:8c18323d0f9d1bfce672bd9dcb18e85aa398039431bc73f70bd8bfba23c005d1"}, ] [package.dependencies] @@ -1147,6 +1183,17 @@ pyav = ["av"] test = ["fsspec[github]", "pytest", "pytest-cov"] tifffile = ["tifffile"] +[[package]] +name = "imagesize" +version = "1.4.1" +description = "Getting image size from png/jpeg/jpeg2000/gif file" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, + {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, +] + [[package]] name = "importlib-metadata" version = "6.8.0" @@ -1168,21 +1215,21 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs [[package]] name = "importlib-resources" -version = "6.0.1" +version = "6.1.0" description = "Read resources from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_resources-6.0.1-py3-none-any.whl", hash = "sha256:134832a506243891221b88b4ae1213327eea96ceb4e407a00d790bb0626f45cf"}, - {file = "importlib_resources-6.0.1.tar.gz", hash = "sha256:4359457e42708462b9626a04657c6208ad799ceb41e5c58c57ffa0e6a098a5d4"}, + {file = "importlib_resources-6.1.0-py3-none-any.whl", hash = "sha256:aa50258bbfa56d4e33fbd8aa3ef48ded10d1735f11532b8df95388cc6bdb7e83"}, + {file = "importlib_resources-6.1.0.tar.gz", hash = "sha256:9d48dcccc213325e810fd723e7fbb45ccb39f6cf5c31f00cf2b965f5f10f3cb9"}, ] [package.dependencies] zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff", "zipp (>=3.17)"] [[package]] name = "iniconfig" @@ -1277,13 +1324,13 @@ testing-libs = ["simplejson", "ujson", "yajl"] [[package]] name = "jsonschema" -version = "4.19.0" +version = "4.19.1" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema-4.19.0-py3-none-any.whl", hash = "sha256:043dc26a3845ff09d20e4420d6012a9c91c9aa8999fa184e7efcfeccb41e32cb"}, - {file = "jsonschema-4.19.0.tar.gz", hash = "sha256:6e1e7569ac13be8139b2dd2c21a55d350066ee3f80df06c608b398cdc6f30e8f"}, + {file = "jsonschema-4.19.1-py3-none-any.whl", hash = "sha256:cd5f1f9ed9444e554b38ba003af06c0a8c2868131e56bfbef0550fb450c0330e"}, + {file = "jsonschema-4.19.1.tar.gz", hash = "sha256:ec84cc37cfa703ef7cd4928db24f9cb31428a5d0fa77747b8b51a847458e0bbf"}, ] [package.dependencies] @@ -1597,6 +1644,30 @@ html5 = ["html5lib"] htmlsoup = ["BeautifulSoup4"] source = ["Cython (>=0.29.35)"] +[[package]] +name = "markdown-it-py" +version = "3.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = false +python-versions = ">=3.8" +files = [ + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, +] + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + [[package]] name = "markupsafe" version = "2.1.3" @@ -1746,6 +1817,36 @@ files = [ {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, ] +[[package]] +name = "mdit-py-plugins" +version = "0.4.0" +description = "Collection of plugins for markdown-it-py" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mdit_py_plugins-0.4.0-py3-none-any.whl", hash = "sha256:b51b3bb70691f57f974e257e367107857a93b36f322a9e6d44ca5bf28ec2def9"}, + {file = "mdit_py_plugins-0.4.0.tar.gz", hash = "sha256:d8ab27e9aed6c38aa716819fedfde15ca275715955f8a185a8e1cf90fb1d2c1b"}, +] + +[package.dependencies] +markdown-it-py = ">=1.0.0,<4.0.0" + +[package.extras] +code-style = ["pre-commit"] +rtd = ["myst-parser", "sphinx-book-theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + [[package]] name = "mock" version = "4.0.3" @@ -1822,6 +1923,32 @@ typing-extensions = ">=4.3.0,<5.0.0" [package.extras] tango = ["PyTango (>=9.3.6,<10.0.0)"] +[[package]] +name = "myst-parser" +version = "2.0.0" +description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," +optional = false +python-versions = ">=3.8" +files = [ + {file = "myst_parser-2.0.0-py3-none-any.whl", hash = "sha256:7c36344ae39c8e740dad7fdabf5aa6fc4897a813083c6cc9990044eb93656b14"}, + {file = "myst_parser-2.0.0.tar.gz", hash = "sha256:ea929a67a6a0b1683cdbe19b8d2e724cd7643f8aa3e7bb18dd65beac3483bead"}, +] + +[package.dependencies] +docutils = ">=0.16,<0.21" +jinja2 = "*" +markdown-it-py = ">=3.0,<4.0" +mdit-py-plugins = ">=0.4,<1.0" +pyyaml = "*" +sphinx = ">=6,<8" + +[package.extras] +code-style = ["pre-commit (>=3.0,<4.0)"] +linkify = ["linkify-it-py (>=2.0,<3.0)"] +rtd = ["ipython", "pydata-sphinx-theme (==v0.13.0rc4)", "sphinx-autodoc2 (>=0.4.2,<0.5.0)", "sphinx-book-theme (==1.0.0rc2)", "sphinx-copybutton", "sphinx-design2", "sphinx-pyscript", "sphinx-tippy (>=0.3.1)", "sphinx-togglebutton", "sphinxext-opengraph (>=0.8.2,<0.9.0)", "sphinxext-rediraffe (>=0.2.7,<0.3.0)"] +testing = ["beautifulsoup4", "coverage[toml]", "pytest (>=7,<8)", "pytest-cov", "pytest-param-files (>=0.3.4,<0.4.0)", "pytest-regressions", "sphinx-pytest"] +testing-docutils = ["pygments", "pytest (>=7,<8)", "pytest-param-files (>=0.3.4,<0.4.0)"] + [[package]] name = "nodeenv" version = "1.8.0" @@ -1891,11 +2018,12 @@ files = [ [package.dependencies] numpy = [ - {version = ">=1.21.0", markers = "python_version <= \"3.9\" and platform_system == \"Darwin\" and platform_machine == \"arm64\" and python_version >= \"3.8\""}, + {version = ">=1.21.0", markers = "python_version <= \"3.9\" and platform_system == \"Darwin\" and platform_machine == \"arm64\""}, + {version = ">=1.21.2", markers = "python_version >= \"3.10\""}, {version = ">=1.21.4", markers = "python_version >= \"3.10\" and platform_system == \"Darwin\""}, - {version = ">=1.21.2", markers = "platform_system != \"Darwin\" and python_version >= \"3.10\""}, - {version = ">=1.19.3", markers = "platform_system == \"Linux\" and platform_machine == \"aarch64\" and python_version >= \"3.8\" and python_version < \"3.10\" or python_version > \"3.9\" and python_version < \"3.10\" or python_version >= \"3.9\" and platform_system != \"Darwin\" and python_version < \"3.10\" or python_version >= \"3.9\" and platform_machine != \"arm64\" and python_version < \"3.10\""}, - {version = ">=1.17.3", markers = "(platform_system != \"Darwin\" and platform_system != \"Linux\") and python_version >= \"3.8\" and python_version < \"3.9\" or platform_system != \"Darwin\" and python_version >= \"3.8\" and python_version < \"3.9\" and platform_machine != \"aarch64\" or platform_machine != \"arm64\" and python_version >= \"3.8\" and python_version < \"3.9\" and platform_system != \"Linux\" or (platform_machine != \"arm64\" and platform_machine != \"aarch64\") and python_version >= \"3.8\" and python_version < \"3.9\""}, + {version = ">=1.19.3", markers = "python_version >= \"3.6\" and platform_system == \"Linux\" and platform_machine == \"aarch64\" or python_version >= \"3.9\""}, + {version = ">=1.17.0", markers = "python_version >= \"3.7\""}, + {version = ">=1.17.3", markers = "python_version >= \"3.8\""}, ] [[package]] @@ -2215,6 +2343,20 @@ files = [ [package.extras] dev = ["tox"] +[[package]] +name = "pygments" +version = "2.16.1" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.7" +files = [ + {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, + {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, +] + +[package.extras] +plugins = ["importlib-metadata"] + [[package]] name = "pylint" version = "2.15.3" @@ -2803,24 +2945,25 @@ testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jar [[package]] name = "setuptools-scm" -version = "7.1.0" +version = "8.0.3" description = "the blessed package to manage your versions by scm tags" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "setuptools_scm-7.1.0-py3-none-any.whl", hash = "sha256:73988b6d848709e2af142aa48c986ea29592bbcfca5375678064708205253d8e"}, - {file = "setuptools_scm-7.1.0.tar.gz", hash = "sha256:6c508345a771aad7d56ebff0e70628bf2b0ec7573762be9960214730de278f27"}, + {file = "setuptools-scm-8.0.3.tar.gz", hash = "sha256:0169fd70197efda2f8c4d0b2a7a3d614431b488116f37b79d031e9e7ec884d8c"}, + {file = "setuptools_scm-8.0.3-py3-none-any.whl", hash = "sha256:813822234453438a13c78d05c8af29918fbc06f88efb33d38f065340bbb48c39"}, ] [package.dependencies] -packaging = ">=20.0" +packaging = ">=20" setuptools = "*" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} -typing-extensions = "*" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} +typing-extensions = {version = "*", markers = "python_version < \"3.11\""} [package.extras] -test = ["pytest (>=6.2)", "virtualenv (>20)"] -toml = ["setuptools (>=42)"] +docs = ["entangled-cli[rich]", "mkdocs", "mkdocs-entangled-plugin", "mkdocs-material", "mkdocstrings[python]", "pygments"] +rich = ["rich"] +test = ["pytest", "rich", "virtualenv (>20)"] [[package]] name = "simple-websocket" @@ -2858,22 +3001,33 @@ files = [ {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, ] +[[package]] +name = "snowballstemmer" +version = "2.2.0" +description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +optional = false +python-versions = "*" +files = [ + {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, + {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, +] + [[package]] name = "spectree" -version = "1.2.1" +version = "1.2.3" description = "generate OpenAPI document and validate request&response with Python annotations." optional = false python-versions = ">=3.8" files = [ - {file = "spectree-1.2.1-py3-none-any.whl", hash = "sha256:f8ba5fda47d757c0a930306b65ff0068a6e7fa75971d4e8df0ad3731f05d981d"}, - {file = "spectree-1.2.1.tar.gz", hash = "sha256:928725142612d5266a51e4e268d936178361585f2771fd4e902c0bd5be033f1f"}, + {file = "spectree-1.2.3-py3-none-any.whl", hash = "sha256:833d69531aefe378c43bbbc88bbee539587f375784558d15537d256963782f57"}, + {file = "spectree-1.2.3.tar.gz", hash = "sha256:2a6a823a384de0f4cb0e9443e8b3c189610e9596a5ef4c7e64d0824550fb6753"}, ] [package.dependencies] pydantic = ">=1.2,<3" [package.extras] -dev = ["autoflake (>=1.4,<3.0)", "black (>=22.3,<24.0)", "flake8 (>=4,<7)", "isort (>=5.10,<6.0)", "mypy (>=0.971)", "pre-commit", "pytest (>=7.1,<8.0)", "syrupy (>=4.0)", "syrupy (>=4.0.0)"] +dev = ["autoflake (>=1.4,<3.0)", "black (>=22.3,<24.0)", "flake8 (>=4,<7)", "isort (>=5.10,<6.0)", "mypy (>=0.971)", "pre-commit", "pytest (>=7.1,<8.0)", "syrupy (>=4.0)"] docs = ["Sphinx", "myst-parser", "shibuya"] email = ["pydantic[email] (>=1.2,<3)"] falcon = ["falcon (>=3.0.0)"] @@ -2881,6 +3035,145 @@ flask = ["flask"] quart = ["quart"] starlette = ["starlette[full]"] +[[package]] +name = "sphinx" +version = "7.1.2" +description = "Python documentation generator" +optional = false +python-versions = ">=3.8" +files = [ + {file = "sphinx-7.1.2-py3-none-any.whl", hash = "sha256:d170a81825b2fcacb6dfd5a0d7f578a053e45d3f2b153fecc948c37344eb4cbe"}, + {file = "sphinx-7.1.2.tar.gz", hash = "sha256:780f4d32f1d7d1126576e0e5ecc19dc32ab76cd24e950228dcf7b1f6d3d9e22f"}, +] + +[package.dependencies] +alabaster = ">=0.7,<0.8" +babel = ">=2.9" +colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} +docutils = ">=0.18.1,<0.21" +imagesize = ">=1.3" +importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} +Jinja2 = ">=3.0" +packaging = ">=21.0" +Pygments = ">=2.13" +requests = ">=2.25.0" +snowballstemmer = ">=2.0" +sphinxcontrib-applehelp = "*" +sphinxcontrib-devhelp = "*" +sphinxcontrib-htmlhelp = ">=2.0.0" +sphinxcontrib-jsmath = "*" +sphinxcontrib-qthelp = "*" +sphinxcontrib-serializinghtml = ">=1.1.5" + +[package.extras] +docs = ["sphinxcontrib-websupport"] +lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-simplify", "isort", "mypy (>=0.990)", "ruff", "sphinx-lint", "types-requests"] +test = ["cython", "filelock", "html5lib", "pytest (>=4.6)"] + +[[package]] +name = "sphinxcontrib-applehelp" +version = "1.0.4" +description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" +optional = false +python-versions = ">=3.8" +files = [ + {file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"}, + {file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-devhelp" +version = "1.0.2" +description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." +optional = false +python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, + {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-htmlhelp" +version = "2.0.1" +description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "sphinxcontrib-htmlhelp-2.0.1.tar.gz", hash = "sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff"}, + {file = "sphinxcontrib_htmlhelp-2.0.1-py3-none-any.whl", hash = "sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["html5lib", "pytest"] + +[[package]] +name = "sphinxcontrib-httpdomain" +version = "1.8.1" +description = "Sphinx domain for documenting HTTP APIs" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" +files = [ + {file = "sphinxcontrib-httpdomain-1.8.1.tar.gz", hash = "sha256:6c2dfe6ca282d75f66df333869bb0ce7331c01b475db6809ff9d107b7cdfe04b"}, + {file = "sphinxcontrib_httpdomain-1.8.1-py2.py3-none-any.whl", hash = "sha256:21eefe1270e4d9de8d717cc89ee92cc4871b8736774393bafc5e38a6bb77b1d5"}, +] + +[package.dependencies] +six = "*" +Sphinx = ">=1.6" + +[[package]] +name = "sphinxcontrib-jsmath" +version = "1.0.1" +description = "A sphinx extension which renders display math in HTML via JavaScript" +optional = false +python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, + {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, +] + +[package.extras] +test = ["flake8", "mypy", "pytest"] + +[[package]] +name = "sphinxcontrib-qthelp" +version = "1.0.3" +description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." +optional = false +python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, + {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-serializinghtml" +version = "1.1.5" +description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." +optional = false +python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, + {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + [[package]] name = "sqlalchemy" version = "2.0.21" @@ -2932,7 +3225,7 @@ files = [ ] [package.dependencies] -greenlet = {version = "!=0.4.17", markers = "platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\""} +greenlet = {version = "!=0.4.17", markers = "platform_machine == \"win32\" or platform_machine == \"WIN32\" or platform_machine == \"AMD64\" or platform_machine == \"amd64\" or platform_machine == \"x86_64\" or platform_machine == \"ppc64le\" or platform_machine == \"aarch64\""} typing-extensions = ">=4.2.0" [package.extras] @@ -3409,4 +3702,4 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.11" -content-hash = "112db65d4af7dde19a3de52deb0b08e2ac2584e8e11581dbfe8e5abb38f3369d" +content-hash = "38413b4f36f1f244844c5945da3a5bcfb87f5614704b9fa812d2634e9e8544e7" diff --git a/pyproject.toml b/pyproject.toml index 2140542fe..625d7a4d5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -45,10 +45,13 @@ mxcube_video_streamer = "1.0.0" bcrypt = "^4.0.1" [tool.poetry.dev-dependencies] +myst-parser = "^2.0.0" pylint = [ { version = "==2.13.9", python = "<=3.7.1" }, { version = "2.15.3", python = ">=3.8" } ] pre-commit = "2.20.0" pytest = "7.1.3" pytest-cov = "4.0.0" +sphinx = "<7.2" +sphinxcontrib-httpdomain = "^1.8.1" [tool.black] line-length = 88