diff --git a/Makefile b/Makefile index b69e60e0f4a9f8d6f56cf7c57a69f91d32063a3f..d120dd29d9eb7d08bef998acd77db6e8b69139e3 100644 --- a/Makefile +++ b/Makefile @@ -18,6 +18,7 @@ SHELL = /bin/bash DOCKER_REGISTRY_USER:=ska-telescope PROJECT = ska_tango_base IMAGE_FOR_DIAGRAMS = nexus.engageska-portugal.pt/ska-docker/ska-python-buildenv:9.3.3.1 +IMAGE_FOR_DOCS = sphinxdoc/sphinx:latest # # include makefile to pick up the standard Make targets, e.g., 'make build' # build, 'make push' docker push procedure, etc. The other Make targets @@ -55,6 +56,14 @@ generate-diagrams-in-docker-internals: ## Generate state machine diagrams (with cd /diagrams/docs/source && python3 draw_state_machines.py ls -lo /diagrams/docs/source/images/ +docs-in-docker: ## Generate docs inside a container + @docker run --rm -v $(PWD):/project $(IMAGE_FOR_DOCS) bash -c "cd /project && make docs-in-docker-internals" + +docs-in-docker-internals: ## Generate docs (within a container!) + test -f /.dockerenv # ensure running in docker container + python3 -m pip install -r /project/docs/requirements.txt + cd /project/docs && make clean && make html + help: ## show this help. @grep -hE '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' diff --git a/docs/Makefile b/docs/Makefile index 5f44cc48891470a9b671bc2b6fc7587092aebc01..d0c3cbf1020d5c292abdedf27627c6abe25e2293 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -1,177 +1,20 @@ -# Makefile for Sphinx documentation +# Minimal makefile for Sphinx documentation # -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = +# 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 -# User-friendly check for sphinx-build -ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) -$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) -endif - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source -# the i18n builder cannot share the environment and doctrees with the others -I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source - -.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext - +# Put it first so that "make" without argument is like "make help". help: - @echo "Please use \`make <target>' where <target> is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " texinfo to make Texinfo files" - @echo " info to make Texinfo files and run them through makeinfo" - @echo " gettext to make PO message catalogs" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " xml to make Docutils-native XML files" - @echo " pseudoxml to make pseudoxml-XML files for display purposes" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - -clean: - rm -rf $(BUILDDIR)/* - -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/SKA_TangoBase.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/SKA_TangoBase.qhc" - -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/SKA_TangoBase" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/SKA_TangoBase" - @echo "# devhelp" - -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -latexpdfja: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through platex and dvipdfmx..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -texinfo: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo - @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." - @echo "Run \`make' in that directory to run these through makeinfo" \ - "(use \`make info' here to do that automatically)." - -info: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo "Running Texinfo files through makeinfo..." - make -C $(BUILDDIR)/texinfo info - @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." - -gettext: - $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale - @echo - @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." - -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) -xml: - $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml - @echo - @echo "Build finished. The XML files are in $(BUILDDIR)/xml." +.PHONY: help Makefile -pseudoxml: - $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml - @echo - @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." +# 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/requirements.txt b/docs/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..e4e2f8eab706cdd8accda951aa6180e50ca93c62 --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1,2 @@ +Sphinx >= 3.5.0 +sphinx-rtd-theme >= 0.4.3 diff --git a/docs/source/Commands.rst b/docs/source/Commands.rst index 1da962ae848d63cfbac3eb8dab1a06a8d2aadadf..134d62cea2d943f8cf4325d2a61ed84fd3522a7c 100644 --- a/docs/source/Commands.rst +++ b/docs/source/Commands.rst @@ -1,5 +1,5 @@ -SKA Commands +Commands ============================================ .. toctree:: diff --git a/docs/source/CspSubElementMaster.rst b/docs/source/CspSubElementMaster.rst index 1c88c268058e10e8fae6f791c484424d5a8104c6..6128b98d0708f921b682c62a1ae1781ccd0cb7e2 100644 --- a/docs/source/CspSubElementMaster.rst +++ b/docs/source/CspSubElementMaster.rst @@ -3,7 +3,7 @@ You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -SKA CSP Sub-element Master +CSP Sub-element Master ============================================ This module implements a general Master device for a CSP Sub-element. @@ -11,6 +11,10 @@ This module implements a general Master device for a CSP Sub-element. :maxdepth: 2 .. automodule:: ska_tango_base.csp_subelement_master + +Tango Device Class +------------------ + .. autoclass:: ska_tango_base.CspSubElementMaster :members: :undoc-members: diff --git a/docs/source/CspSubElementObsDevice.rst b/docs/source/CspSubElementObsDevice.rst index b17da7d3bbda85d7b96ca1af27be6029eedc9a5d..859d6e2c9afb62a0369019887c3883172d3da445 100644 --- a/docs/source/CspSubElementObsDevice.rst +++ b/docs/source/CspSubElementObsDevice.rst @@ -7,13 +7,17 @@ <br /> -SKA CSP Sub-element ObsDevice +CSP Sub-element ObsDevice ============================================ .. toctree:: :maxdepth: 2 .. automodule:: ska_tango_base.csp_subelement_obsdevice + +Tango Device Class +------------------ + .. autoclass:: ska_tango_base.CspSubElementObsDevice :members: :undoc-members: diff --git a/docs/source/CspSubElementSubarray.rst b/docs/source/CspSubElementSubarray.rst index ee08f12a8c7c70bb7ad1b995b5141b144ddc396f..78863176de600da3130b3a53ae18048ecc60c8e8 100644 --- a/docs/source/CspSubElementSubarray.rst +++ b/docs/source/CspSubElementSubarray.rst @@ -3,7 +3,7 @@ You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -SKA CSP Sub-element Subarray +CSP Sub-element Subarray ============================================ This module implements a generic Subarray device for a CSP Sub-element. The scope of this module is to provide a uniform access to a CSP Sub-element @@ -14,6 +14,10 @@ subarray from the CSP.LMC side. :maxdepth: 2 .. automodule:: ska_tango_base.csp_subelement_subarray + +Tango Device Class +------------------ + .. autoclass:: ska_tango_base.CspSubElementSubarray :members: :undoc-members: diff --git a/docs/source/SKAAlarmHandler.rst b/docs/source/SKAAlarmHandler.rst index fd8f8548f7b3d7862c42224203b903c8583e10cd..fde7bbc1d1e0df57c563c30298e1919841e8fd74 100644 --- a/docs/source/SKAAlarmHandler.rst +++ b/docs/source/SKAAlarmHandler.rst @@ -3,13 +3,17 @@ You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -SKA AlarmHandler +Alarm Handler ============================================ .. toctree:: :maxdepth: 2 .. automodule:: ska_tango_base.alarm_handler_device + +Tango Device Class +------------------ + .. autoclass:: ska_tango_base.SKAAlarmHandler :members: :undoc-members: diff --git a/docs/source/SKABaseDevice.rst b/docs/source/SKABaseDevice.rst index 2d3e25764af4b65ddde3f7619514d6a8c12ce510..6fe03c19cc9586b93720eebae52018b982d30a8e 100644 --- a/docs/source/SKABaseDevice.rst +++ b/docs/source/SKABaseDevice.rst @@ -3,7 +3,7 @@ You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -SKA BaseDevice +Base Device ============================================ .. toctree:: @@ -11,10 +11,16 @@ SKA BaseDevice .. automodule:: ska_tango_base.base_device -.. autoclass:: ska_tango_base.DeviceStateModel +Tango Device Class +------------------ + +.. autoclass:: ska_tango_base.SKABaseDevice :members: :undoc-members: -.. autoclass:: ska_tango_base.SKABaseDevice +Device State Model +------------------ + +.. autoclass:: ska_tango_base.DeviceStateModel :members: :undoc-members: diff --git a/docs/source/SKACapability.rst b/docs/source/SKACapability.rst index 91ba5dadc483719756fad355e6fca36f1c4d20ce..1f465f8f459f543db1f25b6d6ec789ee71435c8a 100644 --- a/docs/source/SKACapability.rst +++ b/docs/source/SKACapability.rst @@ -3,13 +3,17 @@ You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -SKA Capability +Capability ============================================ .. toctree:: :maxdepth: 2 .. automodule:: ska_tango_base.capability_device + +Tango Device Class +------------------ + .. autoclass:: ska_tango_base.SKACapability :members: :undoc-members: diff --git a/docs/source/SKALogger.rst b/docs/source/SKALogger.rst index 2f628ef17a5fcfa74b05ec157989a19803e1044f..1ef5114f7c83ca1aff253b8669f211027a483c74 100644 --- a/docs/source/SKALogger.rst +++ b/docs/source/SKALogger.rst @@ -3,13 +3,17 @@ You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -SKA Logger +Logger ============================================ .. toctree:: :maxdepth: 2 .. automodule:: ska_tango_base.logger_device + +Tango Device Class +------------------ + .. autoclass:: ska_tango_base.SKALogger :members: :undoc-members: diff --git a/docs/source/SKAMaster.rst b/docs/source/SKAMaster.rst index 3356684f3a0c36d3346bbb6fcb7ad53e14ba1b56..adfb37d2dcefb5a7aabfcb98710de2b4b73cf625 100644 --- a/docs/source/SKAMaster.rst +++ b/docs/source/SKAMaster.rst @@ -3,13 +3,17 @@ You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -SKA Master +Master ============================================ .. toctree:: :maxdepth: 2 .. automodule:: ska_tango_base.master_device + +Tango Device Class +------------------ + .. autoclass:: ska_tango_base.SKAMaster :members: :undoc-members: diff --git a/docs/source/SKAObsDevice.rst b/docs/source/SKAObsDevice.rst index 89166e8cbb19b9c7be164ddfff9e010c0caa1192..6f8322a9094ffa76cd61e967b6e6d4393174d0f3 100644 --- a/docs/source/SKAObsDevice.rst +++ b/docs/source/SKAObsDevice.rst @@ -3,13 +3,24 @@ You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -SKA ObsDevice +Observation Device ============================================ .. toctree:: :maxdepth: 2 .. automodule:: ska_tango_base.obs_device + +Tango Device Class +------------------ + .. autoclass:: ska_tango_base.SKAObsDevice :members: :undoc-members: + +Device State Model +------------------ + +.. autoclass:: ska_tango_base.ObsDeviceStateModel + :members: + :undoc-members: \ No newline at end of file diff --git a/docs/source/SKASubarray.rst b/docs/source/SKASubarray.rst index 29c354be847bf8441e20ae572f876d6f6646a0ba..7b4a3b6e06d82ed8204d14993a63bc9fdbdccbc1 100644 --- a/docs/source/SKASubarray.rst +++ b/docs/source/SKASubarray.rst @@ -3,13 +3,31 @@ You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -SKA Subarray +Subarray ============================================ .. toctree:: :maxdepth: 2 .. automodule:: ska_tango_base.subarray_device + +Device Class +------------ + .. autoclass:: ska_tango_base.SKASubarray :members: :undoc-members: + +Device State Model +------------------ + +.. autoclass:: ska_tango_base.SKASubarrayStateModel + :members: + :undoc-members: + +Resource Manager +---------------- + +.. autoclass:: ska_tango_base.SKASubarrayResourceManager + :members: + :undoc-members: diff --git a/docs/source/SKATelState.rst b/docs/source/SKATelState.rst index fac3623cc3e3bd135ea740aad20767aa81d40f03..4a1ba64678e39c53205cf961ba52065f86bbd397 100644 --- a/docs/source/SKATelState.rst +++ b/docs/source/SKATelState.rst @@ -3,13 +3,17 @@ You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -SKA TelState +Telescope State ============================================ .. toctree:: :maxdepth: 2 .. automodule:: ska_tango_base.tel_state_device + +Tango Device Class +------------------ + .. autoclass:: ska_tango_base.SKATelState :members: :undoc-members: diff --git a/docs/source/State_Machine.rst b/docs/source/State_Machine.rst index 4b57eacd371bfc13e194e7d46af971b7931e410c..ed542bfd920af67a90f41f6603ce0a9268758f92 100644 --- a/docs/source/State_Machine.rst +++ b/docs/source/State_Machine.rst @@ -188,18 +188,7 @@ API :members: :undoc-members: -.. autoclass:: OperationStateMachine - :members: - -.. autoclass:: AdminModeStateMachine - :members: - -.. autoclass:: ObservationStateMachine - :members: .. automodule:: ska_tango_base.csp_subelement_state_machine :members: :undoc-members: - -.. autoclass:: CspSubElementObsDeviceStateMachine - :members: diff --git a/docs/source/_static/css/custom.css b/docs/source/_static/css/custom.css new file mode 100644 index 0000000000000000000000000000000000000000..4ee45f4ce7ec6e66ee72a18babf9c9e365fb7357 --- /dev/null +++ b/docs/source/_static/css/custom.css @@ -0,0 +1,78 @@ +/* +Following SKA brand guidelines colors are defined as + +SKA Sky Blue: rgb(0, 174, 239) +SKA Ocean Blue: rgb(0, 84, 164) +SKA Teal Blue: rgb(0, 104, 138) +SKA Burnt Sun: rgb(236, 134, 35) +SKA Earth Green: rgb(166, 206, 57) +*/ + +.wy-nav-side{ + background-color: rgb(0, 84, 164); + color: white; +} + +.wy-side-nav-search{ + padding-top: 0px; + /*background-color: rgb(0, 174, 239);*/ + background-color: rgb(0, 84, 164); + text-align: center; +} + +.wy-menu-vertical p.caption{ + color: rgb(236, 134, 35); +} + +.wy-menu { + color: white; +} + +.wy-menu-vertical a{ + color: white; +} + +.local-toc ul li a:hover { + background-color: rgb(0, 174, 239); +} + +.wy-side-nav-search a{ + padding-top: 0px; +} + +.wy-side-nav-search a img.logo{ + background-color: rgb(255, 255, 255); + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px; + padding-top: 40px; +} + +.ska-logo, ska-logo:hover{ + background-attachment: scroll; + background-clip: border-box; + background-color: rgb(255, 255, 255); + background-image: url("https://www.skatelescope.org/wp-content/themes/skatelescope.org-theme/img/img-logo3.png"); + background-origin: padding-box; + background-position: 22px 35px; + background-position-x: 22px; + background-position-y: 35px; + background-repeat: no-repeat; + background-size: 153px 98px; + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px; + /*color: rgb(0, 86, 120); + float: left; + font-family: "Eurostile LT W01 Demi", sans-serif; + font-size: 44.8px; + font-weight: 400; + line-height: 60px; + list-style-image: none; + list-style-position: outside; + list-style-type: none;*/ + margin-bottom: 0px; + margin-left: 0px; + margin-right: 0px; + margin-top: 0px; + width: 186px; + height: 135px; +} diff --git a/docs/source/_static/dummy b/docs/source/_static/dummy deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/docs/source/_static/img/favicon.ico b/docs/source/_static/img/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..31871e8982a9724ccff281ab86276932b2595abf Binary files /dev/null and b/docs/source/_static/img/favicon.ico differ diff --git a/docs/source/_static/img/logo.jpg b/docs/source/_static/img/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..495034a869903e5114264dbbabc5b4adc5e3dfa8 Binary files /dev/null and b/docs/source/_static/img/logo.jpg differ diff --git a/docs/source/_static/img/logo.svg b/docs/source/_static/img/logo.svg new file mode 100644 index 0000000000000000000000000000000000000000..0130216ca237480b0eb1228c440b7109cdce37c6 --- /dev/null +++ b/docs/source/_static/img/logo.svg @@ -0,0 +1,949 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="300px" height="212px" viewBox="0 0 300 212" enable-background="new 0 0 300 212" xml:space="preserve"> <image id="image0" width="300" height="212" x="0" y="0" + xlink:href="data:image/png;base64,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" /> +</svg> diff --git a/docs/source/_static/js/gitlab.js b/docs/source/_static/js/gitlab.js new file mode 100644 index 0000000000000000000000000000000000000000..bb4314df157ff2a5b3508cfa91c6cc8bac4cc9b1 --- /dev/null +++ b/docs/source/_static/js/gitlab.js @@ -0,0 +1,10 @@ +jQuery(function(){ + var ci_dashboard = "https://ska-telescope.gitlab.io/ska_ci_dashboard/"; + var dashboard_table = $("#ci-dashboard > table"); + if( dashboard_table.length ){ + $.get(ci_dashboard, function(data){ + dashboard_table.html($(data).find("#dataTable")); + }); + } +}); + diff --git a/docs/source/_templates/footer.html b/docs/source/_templates/footer.html new file mode 100644 index 0000000000000000000000000000000000000000..2ae1d851c7fc7a25dd34e6f7fa3781a10e132710 --- /dev/null +++ b/docs/source/_templates/footer.html @@ -0,0 +1,48 @@ + +{% extends "!footer.html" %} +{% block extrafooter %} + +<a rel="license" href="http://creativecommons.org/licenses/by/4.0/"> + <img alt="Creative Commons Licence" + style="border-width:0" + src="https://i.creativecommons.org/l/by/4.0/88x31.png" /> +</a> +<br /> +<span xmlns:dct="http://purl.org/dc/terms/" + property="dct:title"> + SKA developer documentation +</span> +by +<a xmlns:cc="http://creativecommons.org/ns#" + href="developer.skatelscope.org" + property="cc:attributionName" + rel="cc:attributionURL"> + SKA organisation +</a> +is licensed under a +<a rel="license" + href="http://creativecommons.org/licenses/by/4.0/"> + Creative Commons Attribution 4.0 International License +</a>. +<br />Based on a work at +<a xmlns:dct="http://purl.org/dc/terms/" + href="https://github.com/ska-telescope/developer.skatelescope.org" + rel="dct:source"> + github.com/ska-telescope/developer.skatelescope.org +</a>. +<br /><br /> +This work is inspired by the +<a href="https://developer.lsst.io/"> + LSST developer guide +</a> © Copyright 2016-2018 Association of Universities for Research in Astronomy, licensed under a +<a rel="license" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</a>. + + +<br /><br /> +This work is inspired by the +<a href="https://www.apache.org/dev/"> + Apache developer information +</a> +Copyright © 2018 The Apache Software Foundation, Licensed under the +<a rel="license" href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>. +{% endblock %} diff --git a/docs/source/_templates/layout.html b/docs/source/_templates/layout.html new file mode 100644 index 0000000000000000000000000000000000000000..a69a86a056c7578fca75fd445b11325371fd3067 --- /dev/null +++ b/docs/source/_templates/layout.html @@ -0,0 +1,43 @@ +{% extends "!layout.html" %} + +{# +{% block sidebartitle %} +#} + +{# original content + +{% if logo and theme_logo_only %} +<a href="{{ pathto(master_doc) }}"> +{% else %} +<a href="{{ pathto(master_doc) }}" class="icon icon-home"> {{project }} +{% endif %} + +{% if logo %} + +<img src="{{ pathto('_static/' + logo, 1) }}" class="logo" /> +{% endif %} +</a> + +{% if theme_display_version %} +{%- set nav_version = version %} +{% if READTHEDOCS and current_version %} +{%- set nav_version = current_version %} +{% endif %} +{% if nav_version %} +<div class="version"> +{{ nav_version }} +</div> +{% endif %} +{% endif %} + +{% include "searchbox.html" %} + +end of original content #} + +{# +<a href="{{pathto(master_doc)}}" class="ska-logo"></a> + +{% include "searchbox.html" %} + +{% endblock %} +#} diff --git a/docs/source/conf.py b/docs/source/conf.py index 5a69f8f67a921aff6309f26346d7e56a5f247887..7f7c596a2beed92397246b80072796cdf30c7851 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -12,48 +12,83 @@ # All configuration values have a default; values that are commented out # serve to show the default. -# import sys -# import os -# from unittest.mock import Mock as MagicMock -# -# class Mock(MagicMock): -# @classmethod -# def __getattr__(cls, name): -# return MagicMock() -# -# # Mock tango modules -# MOCK_MODULES = ['PyTango', 'tango', 'tango.server', 'run', 'command', -# 'future', 'future.utils', 'logging', 'logging.handlers'] -# sys.modules.update((mod_name, Mock()) for mod_name in MOCK_MODULES) - -from unittest.mock import Mock as MagicMock import os import sys -autodoc_mock_imports = ['PyTango', 'tango', 'tango.server', 'run', 'command', - 'future', 'future.utils', 'transitions', - 'ska_ser_logging', 'ska_ser_logging.configuration', - 'numpy' - ] + +# This is an elaborate hack to insert write property into _all_ +# mock decorators. It is needed for getting @command to build +# in mocked out tango.server. Also add dummy classes for +# attribute and device_property so that they at least +# appear in the docs, even if there is not other useful info. +# see https://github.com/sphinx-doc/sphinx/issues/6709 +from sphinx.ext.autodoc.mock import _MockObject + + +def get_kwarg_comma_separated_values(kwargs): + pairs = (f"{key}={value}" for key, value in kwargs.items()) + return ", ".join(pairs) + + +class TangoKwargMethodMock: + def __init__(self, name, **kwargs): + self.name = name + self.kwargs = kwargs + + def __repr__(self): + return f"{self.name}({get_kwarg_comma_separated_values(self.kwargs)})" + + +def call_mock(self, *args, **kw): + from types import FunctionType, MethodType + + if args and type(args[0]) in [type, FunctionType, MethodType]: + # Appears to be a decorator, pass through unchanged + args[0].write = lambda x: x + return args[0] + + if repr(self) in ['tango.server.attribute', 'tango.server.device_property']: + return TangoKwargMethodMock(repr(self), **kw) + + return self + + +_MockObject.__call__ = call_mock +# hack end + +autodoc_mock_imports = [ + 'tango', + 'transitions', + 'ska_ser_logging', + 'numpy', +] + +autodoc_default_options = { + 'member-order': 'bysource', +} -class Mock(MagicMock): - @classmethod - def __getattr__(cls, name): - return MagicMock() +# Both the class’ and the __init__ method’s docstring are concatenated and inserted. +autoclass_content = 'both' -# Mock tango modules -MOCK_MODULES = ['logging', 'logging.handlers'] -sys.modules.update((mod_name, Mock()) for mod_name in MOCK_MODULES) +def setup(app): + """ + Initialise app. + """ + app.add_css_file("css/custom.css") + app.add_js_file("js/gitlab.js") + +# -- Path set up -------------------------------------------------------------- # 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('../../src')) + # -- General configuration ------------------------------------------------ # If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' +needs_sphinx = '3.5' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom @@ -63,6 +98,7 @@ extensions = [ 'sphinx.ext.doctest', 'sphinx.ext.todo', 'sphinx.ext.coverage', + 'sphinx.ext.viewcode', ] # Add any paths that contain templates here, relative to this directory. @@ -79,26 +115,25 @@ master_doc = 'index' # General information about the project. project = u'SKA Tango Base' -copyright = u'2019, NCRA India and SARAO' # 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. # - -def get_release_version(): +def get_release_info(): release_filename = os.path.join("..", "..", "src", "ska_tango_base", "release.py") exec(open(release_filename).read()) - return locals()["version"] + return locals() -release_version = get_release_version() +release_info = get_release_info() +copyright = release_info["copyright"] # The short X.Y version. -version = release_version +version = release_info["version"] # The full version, including alpha/beta/rc tags. -release = release_version +release = release_info["version"] # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -138,15 +173,11 @@ pygments_style = 'sphinx' # If true, keep warnings as "system message" paragraphs in the built documents. #keep_warnings = False -autodoc_default_options = { - 'member-order': 'bysource', -} - # -- 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 = 'default' +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 @@ -172,6 +203,18 @@ html_theme = 'default' # pixels large. #html_favicon = None +html_context = { + "display_gitlab": True, # Integrate GitHub + "favicon": "img/favicon.ico", + "logo": "img/logo.jpg", + "theme_logo_only": True, + "gitlab_user": "ska-telescope", # Username + "gitlab_repo": "ska-tango-base", # Repo name + "gitlab_version": "master", # Version + "conf_py_path": "/docs/source/", # Path in the checkout to the docs root +} + + # 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". diff --git a/docs/source/index.rst b/docs/source/index.rst index b82d7f1f53b1a0d00c3749cd2f5f803512c3ad9d..036121da3642aec245cfbae9256e96b1f98f3044 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -7,26 +7,34 @@ Welcome to SKA Tango Base documentation! ======================================== .. toctree:: - :caption: Table of Contents + :caption: Standard Devices :maxdepth: 2 - Device: SKA Base Device<SKABaseDevice> - Device: SKA Alarm Handler<SKAAlarmHandler> - Device: SKA Logger<SKALogger> - Device: SKA Master<SKAMaster> - Device: SKA TelState<SKATelState> + Base Device<SKABaseDevice> + Alarm Handler<SKAAlarmHandler> + Logger<SKALogger> + Master<SKAMaster> + Tel State<SKATelState> - Device: SKA ObsDevice<SKAObsDevice> - Device: SKA Capability<SKACapability> - Device: SKA Subarray<SKASubarray> + Obs Device<SKAObsDevice> + Capability<SKACapability> + Subarray<SKASubarray> - Device: SKA CSP Sub-element Master<CspSubElementMaster> - Device: SKA CSP Sub-element ObsDevice<CspSubElementObsDevice> - Device: SKA CSP Sub-element Subarray<CspSubElementSubarray> +.. toctree:: + :caption: CSP Devices + :maxdepth: 2 + + CSP Sub-element Master<CspSubElementMaster> + CSP Sub-element Obs Device<CspSubElementObsDevice> + CSP Sub-element Subarray<CspSubElementSubarray> + +.. toctree:: + :caption: Control Model + :maxdepth: 2 - SKA Control Model<Control_Model> - SKA Commands<Commands> - SKA State Machine<State_Machine> + Control Model<Control_Model> + Commands<Commands> + State Machine<State_Machine> Indices and tables ================== diff --git a/setup.py b/setup.py index 10ca6a16f01f43e1ca0a8a15ebd811042d54eb74..8a1b17553ac2e5d54f97ab95a1a0587a7a79172c 100644 --- a/setup.py +++ b/setup.py @@ -35,7 +35,7 @@ setuptools.setup( ], platforms=["OS Independent"], setup_requires=[] + pytest_runner, - install_requires=["future", "transitions", "ska_ser_logging"], + install_requires=["transitions", "ska_ser_logging"], tests_require=["pytest", "coverage", "pytest-json-report", "pytest-forked"], entry_points={ "console_scripts": [ diff --git a/src/ska_tango_base/alarm_handler_device.py b/src/ska_tango_base/alarm_handler_device.py index 10c8c88114763d13967b342cd232e5583d29f1f2..d1e74161b064a5dd21c2423eab94b85aab6206b7 100644 --- a/src/ska_tango_base/alarm_handler_device.py +++ b/src/ska_tango_base/alarm_handler_device.py @@ -52,38 +52,45 @@ class SKAAlarmHandler(SKABaseDevice): dtype='int', doc="Number of active Alerts", ) + """Device attribute.""" statsNrAlarms = attribute( dtype='int', doc="Number of active Alarms", ) + """Device attribute.""" statsNrNewAlarms = attribute( dtype='int', doc="Number of New active alarms", ) + """Device attribute.""" statsNrUnackAlarms = attribute( dtype='double', doc="Number of unacknowledged alarms", ) + """Device attribute.""" statsNrRtnAlarms = attribute( dtype='double', doc="Number of returned alarms", ) + """Device attribute.""" activeAlerts = attribute( dtype=('str',), max_dim_x=10000, doc="List of active alerts", ) + """Device attribute.""" activeAlarms = attribute( dtype=('str',), max_dim_x=10000, doc="List of active alarms", ) + """Device attribute.""" # --------------- # General methods diff --git a/src/ska_tango_base/base_device.py b/src/ska_tango_base/base_device.py index 6986253ce0d7271573f166750f80bb902a7ce9c3..b78fac15264bcd25956f8e38a14109c8310e10ea 100644 --- a/src/ska_tango_base/base_device.py +++ b/src/ska_tango_base/base_device.py @@ -711,18 +711,77 @@ class SKABaseDevice(Device): SkaLevel = device_property( dtype='int16', default_value=4 ) + """ + Device property. + + Indication of importance of the device in the SKA hierarchy + to support drill-down navigation: 1..6, with 1 highest. + """ GroupDefinitions = device_property( dtype=('str',), ) + """ + Device property. + + Each string in the list is a JSON serialised dict defining the ``group_name``, + ``devices`` and ``subgroups`` in the group. A TANGO Group object is created + for each item in the list, according to the hierarchy defined. This provides + easy access to the managed devices in bulk, or individually. + + The general format of the list is as follows, with optional ``devices`` and + ``subgroups`` keys:: + + [ {"group_name": "<name>", + "devices": ["<dev name>", ...]}, + {"group_name": "<name>", + "devices": ["<dev name>", "<dev name>", ...], + "subgroups" : [{<nested group>}, + {<nested group>}, ...]}, + ... + ] + + For example, a hierarchy of racks, servers and switches:: + + [ {"group_name": "servers", + "devices": ["elt/server/1", "elt/server/2", + "elt/server/3", "elt/server/4"]}, + {"group_name": "switches", + "devices": ["elt/switch/A", "elt/switch/B"]}, + {"group_name": "pdus", + "devices": ["elt/pdu/rackA", "elt/pdu/rackB"]}, + {"group_name": "racks", + "subgroups": [ + {"group_name": "rackA", + "devices": ["elt/server/1", "elt/server/2", + "elt/switch/A", "elt/pdu/rackA"]}, + {"group_name": "rackB", + "devices": ["elt/server/3", "elt/server/4", + "elt/switch/B", "elt/pdu/rackB"], + "subgroups": []} + ]} ] + + """ LoggingLevelDefault = device_property( dtype='uint16', default_value=LoggingLevel.INFO ) + """ + Device property. + + Default logging level at device startup. + See :py:class:`~ska_tango_base.control_model.LoggingLevel` + """ LoggingTargetsDefault = device_property( dtype='DevVarStringArray', default_value=["tango::logger"] ) + """ + Device property. + + Default logging targets at device startup. + See the project readme for details. + """ # ---------- # Attributes @@ -732,11 +791,13 @@ class SKABaseDevice(Device): dtype='str', doc="Build state of this device", ) + """Device attribute.""" versionId = attribute( dtype='str', doc="Version Id of this device", ) + """Device attribute.""" loggingLevel = attribute( dtype=LoggingLevel, @@ -744,6 +805,11 @@ class SKABaseDevice(Device): doc="Current logging level for this device - " "initialises to LoggingLevelDefault on startup", ) + """ + Device attribute. + + See :py:class:`~ska_tango_base.control_model.LoggingLevel` + """ loggingTargets = attribute( dtype=('str',), @@ -752,6 +818,7 @@ class SKABaseDevice(Device): doc="Logging targets for this device, excluding ska_ser_logging defaults" " - initialises to LoggingTargetsDefault on startup", ) + """Device attribute.""" healthState = attribute( dtype=HealthState, @@ -760,6 +827,7 @@ class SKABaseDevice(Device): " condition and condition of all managed devices to set this. " "Most possibly an aggregate attribute.", ) + """Device attribute.""" adminMode = attribute( dtype=AdminMode, @@ -769,6 +837,7 @@ class SKABaseDevice(Device): "device condition and condition of all managed devices to set this. " "Most possibly an aggregate attribute.", ) + """Device attribute.""" controlMode = attribute( dtype=ControlMode, @@ -779,6 +848,7 @@ class SKABaseDevice(Device): "queries received from TM or any other ‘remote’ clients. The Local clients" " has to release LOCAL control before REMOTE clients can take control again.", ) + """Device attribute.""" simulationMode = attribute( dtype=SimulationMode, @@ -788,6 +858,7 @@ class SKABaseDevice(Device): "both modes, while others will have simulators that set simulationMode " "to True while the real devices always set simulationMode to False.", ) + """Device attribute.""" testMode = attribute( dtype=TestMode, @@ -797,6 +868,7 @@ class SKABaseDevice(Device): "Either no test mode or an " "indication of the test mode.", ) + """Device attribute.""" # --------------- # General methods diff --git a/src/ska_tango_base/capability_device.py b/src/ska_tango_base/capability_device.py index 5c7dba6a43683a1bce71a3f6d7e5d422ca14a316..3ede5b049ff6244ec1a8f42a26b92a9e1be3c762 100644 --- a/src/ska_tango_base/capability_device.py +++ b/src/ska_tango_base/capability_device.py @@ -88,17 +88,20 @@ class SKACapability(SKAObsDevice): display_unit="s", doc="Time of activation in seconds since Unix epoch.", ) + """Device attribute.""" configuredInstances = attribute( dtype='uint16', doc="Number of instances of this Capability Type currently in use on this subarray.", ) + """Device attribute.""" usedComponents = attribute( dtype=('str',), max_dim_x=100, doc="A list of components with no. of instances in use on this Capability.", ) + """Device attribute.""" # --------------- # General methods diff --git a/src/ska_tango_base/csp_subelement_master.py b/src/ska_tango_base/csp_subelement_master.py index ddd9fe3e822a111bd549a7180738f467e4a9a617..7bd30eb57515bdb25bad1c03b48d316f5f71ae13 100644 --- a/src/ska_tango_base/csp_subelement_master.py +++ b/src/ska_tango_base/csp_subelement_master.py @@ -72,6 +72,7 @@ class CspSubElementMaster(SKAMaster): unit="sec.", doc="Delay in sec between the power-up stages in Standby<->On transitions.", ) + """Device attribute.""" powerDelayStandbyOff = attribute( dtype='DevFloat', @@ -80,6 +81,7 @@ class CspSubElementMaster(SKAMaster): unit="sec", doc="Delay in sec between the power-up stages in Standby->Off transitions.", ) + """Device attribute.""" onProgress = attribute( dtype='DevUShort', @@ -88,6 +90,7 @@ class CspSubElementMaster(SKAMaster): min_value=0, doc="Progress percentage of the command execution.", ) + """Device attribute.""" onMaximumDuration = attribute( dtype='DevFloat', @@ -96,6 +99,7 @@ class CspSubElementMaster(SKAMaster): unit="sec.", doc="The expected maximum duration (sec.) to execute the On command.", ) + """Device attribute.""" onMeasuredDuration = attribute( dtype='DevFloat', @@ -103,6 +107,7 @@ class CspSubElementMaster(SKAMaster): unit="sec", doc="The measured time (sec) taken to execute the command.", ) + """Device attribute.""" standbyProgress = attribute( dtype='DevUShort', @@ -111,6 +116,7 @@ class CspSubElementMaster(SKAMaster): min_value=0, doc="Progress percentage of the command execution.", ) + """Device attribute.""" standbyMaximumDuration = attribute( dtype='DevFloat', @@ -119,6 +125,7 @@ class CspSubElementMaster(SKAMaster): unit="sec.", doc="The expected maximum duration (sec.) to execute the Standby command.", ) + """Device attribute.""" standbyMeasuredDuration = attribute( dtype='DevFloat', @@ -126,6 +133,7 @@ class CspSubElementMaster(SKAMaster): unit="sec", doc="The measured time (sec) taken to execute the Standby command.", ) + """Device attribute.""" offProgress = attribute( dtype='DevUShort', @@ -134,6 +142,7 @@ class CspSubElementMaster(SKAMaster): min_value=0, doc="Progress percentage of the command execution.", ) + """Device attribute.""" offMaximumDuration = attribute( dtype='DevFloat', @@ -142,6 +151,7 @@ class CspSubElementMaster(SKAMaster): unit="sec.", doc="The expected maximum duration (sec.) to execute the Off command.", ) + """Device attribute.""" offMeasuredDuration = attribute( dtype='DevFloat', @@ -149,6 +159,7 @@ class CspSubElementMaster(SKAMaster): unit="sec", doc="The measured time (sec) taken to execute the Off command.", ) + """Device attribute.""" totalOutputDataRateToSdp = attribute( dtype='DevFloat', @@ -156,6 +167,7 @@ class CspSubElementMaster(SKAMaster): unit="GB/s", doc="Report the total link expected output data rate.", ) + """Device attribute.""" loadFirmwareProgress = attribute( dtype='DevUShort', @@ -164,6 +176,7 @@ class CspSubElementMaster(SKAMaster): min_value=0, doc="The command progress percentage.", ) + """Device attribute.""" loadFirmwareMaximumDuration = attribute( dtype='DevFloat', @@ -172,6 +185,7 @@ class CspSubElementMaster(SKAMaster): unit="sec", doc="The expected maximum duration (in sec) for command execution.", ) + """Device attribute.""" loadFirmwareMeasuredDuration = attribute( dtype='DevFloat', @@ -179,6 +193,7 @@ class CspSubElementMaster(SKAMaster): unit="sec", doc="The command execution measured duration (in sec).", ) + """Device attribute.""" # --------------- # General methods diff --git a/src/ska_tango_base/csp_subelement_obsdevice.py b/src/ska_tango_base/csp_subelement_obsdevice.py index c378502c8b68da40056dffd36f4982ddb8527e95..ebdec29549b5624bd1cb8ed5e24638af347e86b2 100644 --- a/src/ska_tango_base/csp_subelement_obsdevice.py +++ b/src/ska_tango_base/csp_subelement_obsdevice.py @@ -118,24 +118,28 @@ class CspSubElementObsDevice(SKAObsDevice): label="scanID", doc="The scan identification number to be inserted in the output\nproducts.", ) + """Device attribute.""" configurationID = attribute( dtype='DevString', label="configurationID", doc="The configuration ID specified into the JSON configuration.", ) + """Device attribute.""" deviceID = attribute( dtype='DevUShort', label="deviceID", doc="The observing device ID.", ) + """Device attribute.""" lastScanConfiguration = attribute( dtype='DevString', label="lastScanConfiguration", doc="The last valid scan configuration.", ) + """Device attribute.""" sdpDestinationAddresses = attribute( dtype='DevString', @@ -145,12 +149,14 @@ class CspSubElementObsDevice(SKAObsDevice): " visibility channels\nPSS ? Pss pipelines\nPST ? PSTBeam\nNot used by al CSP Sub-element" " observing device (for ex. Mid CBF VCCs)", ) + """Device attribute.""" sdpLinkCapacity = attribute( dtype='DevFloat', label="sdpLinkCapacity", doc="The SDP link capavity in GB/s.", ) + """Device attribute.""" sdpLinkActive = attribute( dtype=('DevBoolean',), @@ -158,12 +164,14 @@ class CspSubElementObsDevice(SKAObsDevice): label="sdpLinkActive", doc="Flag reporting if the SDP link is active.\nTrue: active\nFalse:down", ) + """Device attribute.""" healthFailureMessage = attribute( dtype='DevString', label="healthFailureMessage", doc="Message providing info about device health failure.", ) + """Device attribute.""" # --------------- # General methods diff --git a/src/ska_tango_base/csp_subelement_subarray.py b/src/ska_tango_base/csp_subelement_subarray.py index a9c1fb0023be9fd392a982d2c7375649888c9011..541cc8d40cc01ebf965e19bacc8d06071b63a97d 100644 --- a/src/ska_tango_base/csp_subelement_subarray.py +++ b/src/ska_tango_base/csp_subelement_subarray.py @@ -55,12 +55,14 @@ class CspSubElementSubarray(SKASubarray): label="scanID", doc="The scan identification number to be inserted in the output products.", ) + """Device attribute.""" configurationID = attribute( dtype='DevString', label="configurationID", doc="The configuration ID specified into the JSON configuration.", ) + """Device attribute.""" sdpDestinationAddresses = attribute( dtype='DevString', @@ -68,6 +70,7 @@ class CspSubElementSubarray(SKASubarray): label="sdpDestinationAddresses", doc="JSON formatted string.\nReport the list of all the SDP addresses provided by SDP to receive the output products.\nSpecifies the Mac, IP, Port for each resource:CBF visibility channels, Pss pipelines, PSTBeam", ) + """Device attribute.""" outputDataRateToSdp = attribute( dtype='DevFloat', @@ -75,12 +78,14 @@ class CspSubElementSubarray(SKASubarray): unit="GB/s", doc="The output data rate (GB/s) on the link for each scan.", ) + """Device attribute.""" lastScanConfiguration = attribute( dtype='DevString', label="lastScanConfiguration", doc="The last valid scan configuration.", ) + """Device attribute.""" sdpLinkActive = attribute( dtype=('DevBoolean',), @@ -88,12 +93,14 @@ class CspSubElementSubarray(SKASubarray): label="sdpLinkActive", doc="Flag reporting if the SDP links are active.", ) + """Device attribute.""" listOfDevicesCompletedTasks = attribute( dtype='DevString', label="listOfDevicesCompletedTasks", doc="JSON formatted string reporting for each task/command the list of devices\nthat completed successfully the task.\nEx.\n{``cmd1``: [``device1``, ``device2``], ``cmd2``: [``device2``, ``device3``]}", ) + """Device attribute.""" configureScanMeasuredDuration = attribute( dtype='DevFloat', @@ -101,12 +108,14 @@ class CspSubElementSubarray(SKASubarray): unit="sec", doc="The measured time (sec) taken to execute the command", ) + """Device attribute.""" configureScanTimeoutExpiredFlag = attribute( dtype='DevBoolean', label="configureScanTimeoutExpiredFlag", doc="Flag reporting ConfigureScan command timeout expiration.", ) + """Device attribute.""" assignResourcesMaximumDuration = attribute( dtype='DevFloat', @@ -115,6 +124,7 @@ class CspSubElementSubarray(SKASubarray): unit="sec", doc="The maximum expected command duration.", ) + """Device attribute.""" assignResourcesMeasuredDuration = attribute( dtype='DevFloat', @@ -122,6 +132,7 @@ class CspSubElementSubarray(SKASubarray): unit="sec", doc="The measured command execution duration.", ) + """Device attribute.""" assignResourcesProgress = attribute( dtype='DevUShort', @@ -130,12 +141,14 @@ class CspSubElementSubarray(SKASubarray): min_value=0, doc="The percentage progress of the command in the [0,100].", ) + """Device attribute.""" assignResourcesTimeoutExpiredFlag = attribute( dtype='DevBoolean', label="assignResourcesTimeoutExpiredFlag", doc="Flag reporting AssignResources command timeout expiration.", ) + """Device attribute.""" releaseResourcesMaximumDuration = attribute( dtype='DevFloat', @@ -144,6 +157,7 @@ class CspSubElementSubarray(SKASubarray): unit="sec", doc="The maximum expected command duration.", ) + """Device attribute.""" releaseResourcesMeasuredDuration = attribute( dtype='DevFloat', @@ -151,6 +165,7 @@ class CspSubElementSubarray(SKASubarray): unit="sec", doc="The measured command execution duration.", ) + """Device attribute.""" releaseResourcesProgress = attribute( dtype='DevUShort', @@ -159,12 +174,14 @@ class CspSubElementSubarray(SKASubarray): min_value=0, doc="The percentage progress of the command in the [0,100].", ) + """Device attribute.""" releaseResourcesTimeoutExpiredFlag = attribute( dtype='DevBoolean', label="timeoutExpiredFlag", doc="Flag reporting command timeout expiration.", ) + """Device attribute.""" # --------------- # General methods diff --git a/src/ska_tango_base/master_device.py b/src/ska_tango_base/master_device.py index 224f99ee86ef5637185643eb03779c4a4be7d1eb..0fb64d15716ad97bb76ab66f34b11774bfbcf464 100644 --- a/src/ska_tango_base/master_device.py +++ b/src/ska_tango_base/master_device.py @@ -100,21 +100,25 @@ class SKAMaster(SKABaseDevice): dtype='str', doc="FQDN of Element Logger", ) + """Device attribute.""" elementAlarmAddress = attribute( dtype='str', doc="FQDN of Element Alarm Handlers", ) + """Device attribute.""" elementTelStateAddress = attribute( dtype='str', doc="FQDN of Element TelState device", ) + """Device attribute.""" elementDatabaseAddress = attribute( dtype='str', doc="FQDN of Element Database device", ) + """Device attribute.""" maxCapabilities = attribute( dtype=('str',), @@ -122,6 +126,7 @@ class SKAMaster(SKABaseDevice): doc=("Maximum number of instances of each capability type," " e.g. 'CORRELATOR:512', 'PSS-BEAMS:4'."), ) + """Device attribute.""" availableCapabilities = attribute( dtype=('str',), @@ -129,6 +134,7 @@ class SKAMaster(SKABaseDevice): doc="A list of available number of instances of each capability type, " "e.g. 'CORRELATOR:512', 'PSS-BEAMS:4'.", ) + """Device attribute.""" # --------------- # General methods diff --git a/src/ska_tango_base/obs_device.py b/src/ska_tango_base/obs_device.py index d936d3bbc5199f756bc713dd0593bd96a5e23354..b275530ecc6dfbbbfa0c457c5ba8445f80eb0dc6 100644 --- a/src/ska_tango_base/obs_device.py +++ b/src/ska_tango_base/obs_device.py @@ -51,9 +51,9 @@ class ObsDeviceStateModel(DeviceStateModel): state machine class :type action_breakdown: dictionary defining actions to be performed on the observation state machine and,as needed, on the device state machine. - :param obs_machine_class - :type obs_machine_class: state machine for the observing state of a + :param obs_machine_class: state machine for the observing state of a SKAObsDevice class device. + :type obs_machine_class: :py:class:`transitions.Machine` :param logger: the logger to be used by this state model. :type logger: a logger that implements the standard library logger interface @@ -273,11 +273,13 @@ class SKAObsDevice(SKABaseDevice): dtype=ObsState, doc="Observing State", ) + """Device attribute.""" obsMode = attribute( dtype=ObsMode, doc="Observing Mode", ) + """Device attribute.""" configurationProgress = attribute( dtype='uint16', @@ -286,12 +288,14 @@ class SKAObsDevice(SKABaseDevice): min_value=0, doc="Percentage configuration progress", ) + """Device attribute.""" configurationDelayExpected = attribute( dtype='uint16', unit="seconds", doc="Configuration delay expected in seconds", ) + """Device attribute.""" # --------------- # General methods diff --git a/src/ska_tango_base/subarray_device.py b/src/ska_tango_base/subarray_device.py index 2119d27df1984f76f7fbbcbf02b9572dcd93a5ea..1108c65370c0fa6ba6f6c472d5cd1d8b556ccab8 100644 --- a/src/ska_tango_base/subarray_device.py +++ b/src/ska_tango_base/subarray_device.py @@ -784,12 +784,14 @@ class SKASubarray(SKAObsDevice): display_unit="s", doc="Time of activation in seconds since Unix epoch.", ) + """Device attribute.""" assignedResources = attribute( dtype=('str',), max_dim_x=100, doc="The list of resources assigned to the subarray.", ) + """Device attribute.""" configuredCapabilities = attribute( dtype=('str',), @@ -799,6 +801,7 @@ class SKASubarray(SKAObsDevice): "e.g.\nCorrelators:512, PssBeams:4, " "PstBeams:4, VlbiBeams:0.", ) + """Device attribute.""" # --------------- # General methods