diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 00000000..d0c3cbf1 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 00000000..9534b018 --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=source +set BUILDDIR=build + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/docs/source/_static/engineer_diagram.drawio b/docs/source/_static/engineer_diagram.drawio new file mode 100644 index 00000000..127e2942 --- /dev/null +++ b/docs/source/_static/engineer_diagram.drawio @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/docs/source/_static/engineer_diagram.png b/docs/source/_static/engineer_diagram.png new file mode 100644 index 00000000..80626ea0 Binary files /dev/null and b/docs/source/_static/engineer_diagram.png differ diff --git a/docs/source/_static/royalblue.css b/docs/source/_static/royalblue.css new file mode 100644 index 00000000..d98fc068 --- /dev/null +++ b/docs/source/_static/royalblue.css @@ -0,0 +1,3 @@ +.wy-side-nav-search, .wy-nav-top { + background-color: #0d193b !important; +} diff --git a/docs/source/autodoc/index.rst b/docs/source/autodoc/index.rst new file mode 100644 index 00000000..811dae91 --- /dev/null +++ b/docs/source/autodoc/index.rst @@ -0,0 +1,8 @@ +Autogenerated documentation +=========================== + +Welcome to the autogenerated documentation of Royalnet Console! + +It may be incomplete or outdated, as it is automatically updated. + +.. automodule:: royalnet_console \ No newline at end of file diff --git a/docs/source/conf.py b/docs/source/conf.py new file mode 100644 index 00000000..54895570 --- /dev/null +++ b/docs/source/conf.py @@ -0,0 +1,100 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + +import pkg_resources + +# -- Project information ----------------------------------------------------- + +project = 'royalnet_console' +# noinspection PyShadowingBuiltins +copyright = '2021, Stefano Pigozzi' +author = 'Stefano Pigozzi' + +# The full version, including alpha/beta/rc tags +release = pkg_resources.get_distribution("royalnet_console").version + + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + "sphinx.ext.autodoc", + "sphinx.ext.intersphinx", + 'sphinx.ext.todo', +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = ['Thumbs.db', '.DS_Store'] + +# Print warnings on the page +keep_warnings = True + +# Display more warnings than usual +nitpicky = 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' + +# 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'] + + +# -- Intersphinx options ----------------------------------------------------- + +intersphinx_mapping = { + "python": ("https://docs.python.org/3.8", None), + "sqlalchemy": ("https://docs.sqlalchemy.org/en/13/", None), + "async_property": ("https://async-property.readthedocs.io/en/latest/", None), +} + + +# -- Setup function ---------------------------------------------------------- +def setup(app): + app.add_css_file('royalblue.css') + + +# -- Substitutions ----------------------------------------------------------- + + +rst_prolog = """ + +""" + +# -- Automodule settings ----------------------------------------------------- + +autodoc_default_options = { + 'members': True, + 'member-order': 'bysource', + 'special-members': '__init__', + 'undoc-members': True, +} + +# -- Automodule settings ----------------------------------------------------- + +todo_include_todos = True diff --git a/docs/source/index.rst b/docs/source/index.rst new file mode 100644 index 00000000..2b367982 --- /dev/null +++ b/docs/source/index.rst @@ -0,0 +1,32 @@ +Royalnet 6 +========== + +Welcome to the documentation of Royalnet 6! + + +Table of contents +----------------- + +.. toctree:: + :maxdepth: 3 + + autodoc/index + + +Useful links +------------ + +* `Royalnet on GitHub `_ + + +Indices and tables +------------------ + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + +To do +----- + +.. todolist:: diff --git a/poetry.lock b/poetry.lock index fdde81b7..a3cffb5e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -279,7 +279,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] [[package]] name = "royalnet" -version = "6.2.1" +version = "6.3.0" description = "A multipurpose bot framework" category = "main" optional = false @@ -479,7 +479,7 @@ brotli = ["brotlipy (>=0.6.0)"] [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "dd03dba3d8cafa05d423d919e0dbda54ac96dddab43573811d49929b468f5d1a" +content-hash = "b9acdca9d1875f1be11616d4e534d383646f484e92732ee78be19d84077a7888" [metadata.files] alabaster = [ @@ -728,8 +728,8 @@ requests = [ {file = "requests-2.25.1.tar.gz", hash = "sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804"}, ] royalnet = [ - {file = "royalnet-6.2.1-py3-none-any.whl", hash = "sha256:e5b333fda9e5b0cf34537903e76ce9ffc3ca231df6c6ba28a9b1f9ee94efc843"}, - {file = "royalnet-6.2.1.tar.gz", hash = "sha256:a41bb353840f4b0c4f8fb40d0852d1da9f284af0f525c90f9bfb77d26ccd2c53"}, + {file = "royalnet-6.3.0-py3-none-any.whl", hash = "sha256:f2f6ea15def33e27ca92a0ba3b7863fab7b7339bcbb99bc83f6be74bd8e805e6"}, + {file = "royalnet-6.3.0.tar.gz", hash = "sha256:6301ef60a1402ec59e55a206462f5b7296c5f6bbd6ab0bf38851ede42add5b20"}, ] snowballstemmer = [ {file = "snowballstemmer-2.1.0-py2.py3-none-any.whl", hash = "sha256:b51b447bea85f9968c13b650126a888aabd4cb4463fca868ec596826325dedc2"}, diff --git a/pyproject.toml b/pyproject.toml index dc60f366..3ac0e5df 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "royalnet-console" -version = "2.0.1" +version = "2.0.2" description = "A terminal-based frontend for the royalnet.engineer module." authors = ["Stefano Pigozzi "] license = "AGPL-3.0-or-later" @@ -19,7 +19,7 @@ classifiers = [ [tool.poetry.dependencies] python = "^3.8" -royalnet = "~6.2.0" +royalnet = "~6.3.0" psutil = "^5.8.0" click = "^7.1.2" colorama = "^0.4.4" diff --git a/royalnet-console.iml b/royalnet-console.iml index 91d076fe..b6e983e8 100644 --- a/royalnet-console.iml +++ b/royalnet-console.iml @@ -2,7 +2,12 @@ - + + + + + + diff --git a/royalnet_console/pda.py b/royalnet_console/pda.py index e418343b..5e35a2a1 100644 --- a/royalnet_console/pda.py +++ b/royalnet_console/pda.py @@ -46,6 +46,14 @@ class ConsolePDAImplementation(engi.ConversationListImplementation): if isinstance(cycles, int): cycles -= 1 + async def _handle_conversation_exc( + self, + dispenser: engi.Dispenser, + conv: engi.ConversationProtocol, + exception: Exception, + ) -> None: + self.log.error(f"ERROR: {exception}") + __all__ = ( "ConsolePDAImplementation",