From 94bfb1a0a8dafae90660bd9bc3499c96b61a20a5 Mon Sep 17 00:00:00 2001 From: Anton Joubert <ajoubert@ska.ac.za> Date: Fri, 26 Feb 2021 12:54:50 +0200 Subject: [PATCH] Improve Sphinx documentation Building on newer Sphinx versions was not working correctly. E.g., Tango commands, attributes and properties were omitted. The commands which use decorators are now working. Device attributes defined like `myAttr = attribute(..)` are now visible, using a workaround in the autodoc mock. Similarly, device properties also use the workaround. Removed some duplication, and an unused requirement: `future`. Improved layout and updated to be more like the SKA theme, based on ska-mccs-low. This includes links to the source code. Added a make target to build locally: `make docs-in-docker` --- Makefile | 9 + docs/Makefile | 183 +--- docs/requirements.txt | 2 + docs/source/Commands.rst | 2 +- docs/source/CspSubElementMaster.rst | 6 +- docs/source/CspSubElementObsDevice.rst | 6 +- docs/source/CspSubElementSubarray.rst | 6 +- docs/source/SKAAlarmHandler.rst | 6 +- docs/source/SKABaseDevice.rst | 12 +- docs/source/SKACapability.rst | 6 +- docs/source/SKALogger.rst | 6 +- docs/source/SKAMaster.rst | 6 +- docs/source/SKAObsDevice.rst | 13 +- docs/source/SKASubarray.rst | 20 +- docs/source/SKATelState.rst | 6 +- docs/source/State_Machine.rst | 11 - docs/source/_static/css/custom.css | 78 ++ docs/source/_static/dummy | 0 docs/source/_static/img/favicon.ico | Bin 0 -> 1406 bytes docs/source/_static/img/logo.jpg | Bin 0 -> 14772 bytes docs/source/_static/img/logo.svg | 949 ++++++++++++++++++ docs/source/_static/js/gitlab.js | 10 + docs/source/_templates/footer.html | 48 + docs/source/_templates/layout.html | 43 + docs/source/conf.py | 123 ++- docs/source/index.rst | 38 +- setup.py | 2 +- src/ska_tango_base/alarm_handler_device.py | 7 + src/ska_tango_base/base_device.py | 72 ++ src/ska_tango_base/capability_device.py | 3 + src/ska_tango_base/csp_subelement_master.py | 15 + .../csp_subelement_obsdevice.py | 8 + src/ska_tango_base/csp_subelement_subarray.py | 17 + src/ska_tango_base/master_device.py | 6 + src/ska_tango_base/obs_device.py | 8 +- src/ska_tango_base/subarray_device.py | 3 + 36 files changed, 1477 insertions(+), 253 deletions(-) create mode 100644 docs/requirements.txt create mode 100644 docs/source/_static/css/custom.css delete mode 100644 docs/source/_static/dummy create mode 100644 docs/source/_static/img/favicon.ico create mode 100644 docs/source/_static/img/logo.jpg create mode 100644 docs/source/_static/img/logo.svg create mode 100644 docs/source/_static/js/gitlab.js create mode 100644 docs/source/_templates/footer.html create mode 100644 docs/source/_templates/layout.html diff --git a/Makefile b/Makefile index b69e60e0..d120dd29 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 5f44cc48..d0c3cbf1 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 00000000..e4e2f8ea --- /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 1da962ae..134d62ce 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 1c88c268..6128b98d 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 b17da7d3..859d6e2c 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 ee08f12a..78863176 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 fd8f8548..fde7bbc1 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 2d3e2576..6fe03c19 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 91ba5dad..1f465f8f 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 2f628ef1..1ef5114f 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 3356684f..adfb37d2 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 89166e8c..6f8322a9 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 29c354be..7b4a3b6e 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 fac3623c..4a1ba646 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 4b57eacd..ed542bfd 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 00000000..4ee45f4c --- /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 e69de29b..00000000 diff --git a/docs/source/_static/img/favicon.ico b/docs/source/_static/img/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..31871e8982a9724ccff281ab86276932b2595abf GIT binary patch literal 1406 zcmZQzU}Ruq5D;JhgA7&%1~CQ(1`P%V29S^f14y0&EXTkIp}-`ReQk+0!`p|u8Gb!o z%&@!Nk>OCECd08caSXqo?O^!*Vjsibzke8xENfzTejtb8-`_tB=ND8me0%qZ;qX)j zhI?B>87^-uV|aLE4#R_Eix~FTIWf$R<zv{_<;3vs_dA9oi^>`1CW$a?nG?eBdKWjt zrRCWSmzQTV+}^&J;q{HZ3}4^AWZ2l`#_(`01H;+rehhnSY#Dw&T*Pp5b1lQ;Q_C1G zF9>INdUid-i|srNXJ*tf+}k&m;p>~{3}4?rXZZPW7Q^=suNY2Fj$?RuXcfct4Rs99 z&rD+Y`Q<Ic^^J`T-@kuj`1S2G!_6&?47awmGu+%Vnc=|}4Td$<HVjt}&15(?r-|X( zs%VDY{mcxjGI$woED~p!8p_1*^}{2Eef7EwSJ##?yt;Li;q=TfhKENNG2B@$%W!nh zVunvA^cXglDly#N*}?GV_b-OeFV8XDT)@dNHH3lT(z05HOB)&(9v)rHaAR`=!@oaY z8P3kCV>q?Ch2iy$Qw%qcZD6={Yy-o-9jh7EwlFZ9-7<|~e}fCdn}?Sf{{DEy@Z(l0 z!|$Kp82<hF#&ERTi(yNZ7Q_Gl{~7j7U|=}6vW(%+`{N7`4$WaWGL3=Z=$uG~N9&mw zzJB@0Fe#s#VSk@D!~18q7*<zWG2GeJ$8crOT!z`@91MTno@ThXq>ACn+6;y#*N!oK zImW?oWEvyG!y~g8E-mR{IM`~)@bmL~hMQ}f86KWo$?)jpN`}ARUoza<-o|iXc{Rh+ zGn*JL?wrT)@83U$TU!<~Tv%AmaCv1u!{_q>3@<MqXP8-|$ngFB6NU*%j0`Iq7#JQN znGH@}qr}h%feZxb>gwu3@G>$AV!h1}{8T2%^2w}l1>wnk6XJ4fT_y?&3f4^#oWk$L zP?)Ki&nTxITIyz`VcDDGIf>6lDu6dkTE@apHPFevt=&P<np;0XSy|XhsYYG7Qr?zD zEkj4Pv9Z3piOa5EOG_)lJj0~HHO;_~rzff_xWm*VBg5TMs3of^U6h$4q{z29BO}q- zrX(m&L02NO*jXecBcrQ~Q(V9}I-@$?zcU8p+UyE8l_U@YipBKUTcJz{h3ZL4V+jE9 C35a0; literal 0 HcmV?d00001 diff --git a/docs/source/_static/img/logo.jpg b/docs/source/_static/img/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..495034a869903e5114264dbbabc5b4adc5e3dfa8 GIT binary patch literal 14772 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 UP%|ENX)qiY*&!0>Apid+0IcT<oB#j- literal 0 HcmV?d00001 diff --git a/docs/source/_static/img/logo.svg b/docs/source/_static/img/logo.svg new file mode 100644 index 00000000..0130216c --- /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 00000000..bb4314df --- /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 00000000..2ae1d851 --- /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 00000000..a69a86a0 --- /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 5a69f8f6..7f7c596a 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 b82d7f1f..036121da 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 10ca6a16..8a1b1755 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 10c8c881..d1e74161 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 6986253c..b78fac15 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 5c7dba6a..3ede5b04 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 ddd9fe3e..7bd30eb5 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 c378502c..ebdec295 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 a9c1fb00..541cc8d4 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 224f99ee..0fb64d15 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 d936d3bb..b275530e 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 2119d27d..1108c653 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 -- GitLab