Skip to content
Snippets Groups Projects
Commit 5a297e01 authored by Davide Ricci's avatar Davide Ricci
Browse files

Update .gitlab-ci.yml file

  - Source Commit: af49a272
  - Date: 2025-06-19 08:26:47
  - Job ID: 119316
  - Pipeline ID: 29566
  - [skip ci]
parent af49a272
No related branches found
No related tags found
No related merge requests found
Pipeline #29567 skipped
Showing
with 3765 additions and 2 deletions
...@@ -55,6 +55,7 @@ def content_errors(content): ...@@ -55,6 +55,7 @@ def content_errors(content):
return content_errors_inner return content_errors_inner
def request_errors(func): def request_errors(func):
''' '''
Decorator for handling exceptions on a class method. Decorator for handling exceptions on a class method.
...@@ -77,12 +78,14 @@ def request_errors(func): ...@@ -77,12 +78,14 @@ def request_errors(func):
res = e.response res = e.response
if res.status_code == 400: if res.status_code == 400:
# API returns body like: '0x8000100a\r\nParameter(s) missing.\r\n' # API returns body like: '0x8000100a\r\nParameter(s)
# missing.\r\n'
try: try:
# Attempt to parse the API-specific error # Attempt to parse the API-specific error
body_lines = res.text.strip().split('\r\n') body_lines = res.text.strip().split('\r\n')
error_code = body_lines[0] error_code = body_lines[0]
error_message = body_lines[1] if len(body_lines) > 1 else "No error message provided." error_message = body_lines[1] if len(
body_lines) > 1 else "No error message provided."
msg = f"{name}: Bad Request - API Error {error_code}: {error_message}" msg = f"{name}: Bad Request - API Error {error_code}: {error_message}"
log.error(msg) log.error(msg)
this.error.append(msg) this.error.append(msg)
......
# Sphinx build info version 1
# This file records the configuration used when building these files. When it is not found, a full rebuild will be done.
config: d212d744616d270066e51cd9c17679a8
tags: 645f666f9bcd5a90fca523b33c5a78b7
File added
File added
File added
File added
File added
File added
File added
File added
This diff is collapsed.
<!DOCTYPE html>
<html class="writer-html5" lang="en" data-content_root="../">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Overview: module code &mdash; Noctua 0.1 documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css?v=e59714d7" />
<script src="../_static/jquery.js?v=5d32c60e"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../_static/documentation_options.js?v=2709fde1"></script>
<script src="../_static/doctools.js?v=9bcbadda"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home">
Noctua
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../modules.html">noctua</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">Noctua</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">Overview: module code</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>All modules for which code is available</h1>
<ul><li><a href="astropy/modeling/parameters.html">astropy.modeling.parameters</a></li>
<li><a href="noctua/devices.html">noctua.devices</a></li>
<ul><li><a href="noctua/devices/alpaca.html">noctua.devices.alpaca</a></li>
<li><a href="noctua/devices/astelco.html">noctua.devices.astelco</a></li>
<li><a href="noctua/devices/basedevice.html">noctua.devices.basedevice</a></li>
<li><a href="noctua/devices/domotics.html">noctua.devices.domotics</a></li>
<li><a href="noctua/devices/ipcam.html">noctua.devices.ipcam</a></li>
<li><a href="noctua/devices/meteo.html">noctua.devices.meteo</a></li>
<li><a href="noctua/devices/siemens.html">noctua.devices.siemens</a></li>
<li><a href="noctua/devices/stx.html">noctua.devices.stx</a></li>
<li><a href="noctua/devices/stx2.html">noctua.devices.stx2</a></li>
</ul><li><a href="noctua/sequencer.html">noctua.sequencer</a></li>
<li><a href="noctua/templates/acquisition.html">noctua.templates.acquisition</a></li>
<li><a href="noctua/templates/basetemplate.html">noctua.templates.basetemplate</a></li>
<li><a href="noctua/templates/bias.html">noctua.templates.bias</a></li>
<li><a href="noctua/templates/box.html">noctua.templates.box</a></li>
<li><a href="noctua/templates/fillheader.html">noctua.templates.fillheader</a></li>
<li><a href="noctua/templates/flat.html">noctua.templates.flat</a></li>
<li><a href="noctua/templates/focus2.html">noctua.templates.focus2</a></li>
<li><a href="noctua/templates/lampsoff.html">noctua.templates.lampsoff</a></li>
<li><a href="noctua/templates/observation.html">noctua.templates.observation</a></li>
<li><a href="noctua/templates/skyflat.html">noctua.templates.skyflat</a></li>
<li><a href="noctua/templates/testlamp.html">noctua.templates.testlamp</a></li>
<li><a href="noctua/templates/testoutput.html">noctua.templates.testoutput</a></li>
<li><a href="noctua/templates/testpause.html">noctua.templates.testpause</a></li>
<li><a href="noctua/templates/testsonoff.html">noctua.templates.testsonoff</a></li>
<li><a href="noctua/utils/analysis.html">noctua.utils.analysis</a></li>
<li><a href="noctua/utils/check.html">noctua.utils.check</a></li>
<li><a href="noctua/utils/coordinates.html">noctua.utils.coordinates</a></li>
<li><a href="noctua/utils/data_access_object.html">noctua.utils.data_access_object</a></li>
<li><a href="noctua/utils/logger.html">noctua.utils.logger</a></li>
<li><a href="noctua/utils/structure.html">noctua.utils.structure</a></li>
<li><a href="noctua/utils/url_stuff.html">noctua.utils.url_stuff</a></li>
</ul>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2025, Davide Ricci.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html class="writer-html5" lang="en" data-content_root="../../">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>noctua.devices &mdash; Noctua 0.1 documentation</title>
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../_static/css/theme.css?v=e59714d7" />
<script src="../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../_static/documentation_options.js?v=2709fde1"></script>
<script src="../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../index.html" class="icon icon-home">
Noctua
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">noctua</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../index.html">Noctua</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="../index.html">Module code</a></li>
<li class="breadcrumb-item active">noctua.devices</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for noctua.devices</h1><div class="highlight"><pre>
<span></span><span class="ch">#!/usr/bin/env python3</span>
<span class="c1"># -*- coding: utf-8 -*-</span>
<span class="sd">&#39;&#39;&#39;</span>
<span class="sd">Import devices using configuration files</span>
<span class="sd">&#39;&#39;&#39;</span>
<span class="c1"># System modules</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">configparser</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">importlib</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">sys</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">pathlib</span><span class="w"> </span><span class="kn">import</span> <span class="n">Path</span>
<span class="c1"># Other templates</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">..utils.url_stuff</span><span class="w"> </span><span class="kn">import</span> <span class="n">build_url</span>
<span class="n">this_module</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">modules</span><span class="p">[</span><span class="vm">__name__</span><span class="p">]</span>
<span class="n">nodes</span> <span class="o">=</span> <span class="n">configparser</span><span class="o">.</span><span class="n">ConfigParser</span><span class="p">()</span>
<span class="n">devs</span> <span class="o">=</span> <span class="n">configparser</span><span class="o">.</span><span class="n">ConfigParser</span><span class="p">()</span>
<span class="n">nodes</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">Path</span><span class="p">(</span><span class="vm">__file__</span><span class="p">)</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">parent</span> <span class="o">/</span> <span class="s1">&#39;config&#39;</span> <span class="o">/</span> <span class="s1">&#39;nodes.ini&#39;</span><span class="p">)</span>
<span class="n">devs</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">Path</span><span class="p">(</span><span class="vm">__file__</span><span class="p">)</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">parent</span> <span class="o">/</span> <span class="s1">&#39;config&#39;</span> <span class="o">/</span> <span class="s1">&#39;devices.ini&#39;</span><span class="p">)</span>
<div class="viewcode-block" id="dynamic_import">
<a class="viewcode-back" href="../../noctua.devices.html#noctua.devices.dynamic_import">[docs]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">dynamic_import</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">dev</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Dynamically import into this module the devices</span>
<span class="sd"> from the nodes.ini and devices.ini files.</span>
<span class="sd"> Old way:</span>
<span class="sd"> # from config.addresses import ASCOM_REMOTE</span>
<span class="sd"> # from devices import ascom</span>
<span class="sd"> # lamp = ascom.Switch(ASCOM_REMOTE, 2)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">module</span> <span class="o">=</span> <span class="n">importlib</span><span class="o">.</span><span class="n">import_module</span><span class="p">(</span>
<span class="n">__package__</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">devs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">dev</span><span class="p">,</span> <span class="s2">&quot;module&quot;</span><span class="p">))</span>
<span class="bp">cls</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">devs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">dev</span><span class="p">,</span> <span class="s2">&quot;class&quot;</span><span class="p">))</span>
<span class="n">node</span> <span class="o">=</span> <span class="n">devs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">dev</span><span class="p">,</span> <span class="s2">&quot;node&quot;</span><span class="p">)</span>
<span class="n">itn</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="n">nodes</span><span class="o">.</span><span class="n">items</span><span class="p">(</span><span class="n">node</span><span class="p">))</span>
<span class="n">url</span> <span class="o">=</span> <span class="n">build_url</span><span class="p">(</span><span class="n">itn</span><span class="p">)</span>
<span class="n">instance_name</span> <span class="o">=</span> <span class="n">dev</span>
<span class="c1"># Extract additional parameters based on device type</span>
<span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="vm">__name__</span> <span class="o">==</span> <span class="s2">&quot;Sensor&quot;</span><span class="p">:</span>
<span class="n">outlet1</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">devs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">dev</span><span class="p">,</span> <span class="s1">&#39;outlet1&#39;</span><span class="p">))</span>
<span class="n">outlet2</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">devs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">dev</span><span class="p">,</span> <span class="s1">&#39;outlet2&#39;</span><span class="p">))</span>
<span class="n">instance</span> <span class="o">=</span> <span class="bp">cls</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">outlet1</span><span class="p">,</span> <span class="n">outlet2</span><span class="p">)</span>
<span class="k">elif</span> <span class="bp">cls</span><span class="o">.</span><span class="vm">__name__</span> <span class="o">==</span> <span class="s2">&quot;Switch&quot;</span><span class="p">:</span>
<span class="n">outlet</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">devs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">dev</span><span class="p">,</span> <span class="s1">&#39;outlet&#39;</span><span class="p">))</span>
<span class="n">instance</span> <span class="o">=</span> <span class="bp">cls</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">outlet</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">instance</span> <span class="o">=</span> <span class="bp">cls</span><span class="p">(</span><span class="n">url</span><span class="p">)</span>
<span class="c1"># Set the instance as an attribute of the current object</span>
<span class="nb">setattr</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">instance_name</span><span class="p">,</span> <span class="n">instance</span><span class="p">)</span></div>
<span class="k">for</span> <span class="n">dev</span> <span class="ow">in</span> <span class="n">devs</span><span class="o">.</span><span class="n">sections</span><span class="p">():</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;importing </span><span class="si">{</span><span class="n">dev</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">dynamic_import</span><span class="p">(</span><span class="n">this_module</span><span class="p">,</span> <span class="n">dev</span><span class="p">)</span>
</pre></div>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2025, Davide Ricci.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
<!DOCTYPE html>
<html class="writer-html5" lang="en" data-content_root="../../../">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>noctua.devices.basedevice &mdash; Noctua 0.1 documentation</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css?v=e59714d7" />
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../_static/documentation_options.js?v=2709fde1"></script>
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home">
Noctua
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../../modules.html">noctua</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">Noctua</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="../../index.html">Module code</a></li>
<li class="breadcrumb-item"><a href="../devices.html">noctua.devices</a></li>
<li class="breadcrumb-item active">noctua.devices.basedevice</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for noctua.devices.basedevice</h1><div class="highlight"><pre>
<span></span><span class="ch">#!/usr/bin/env python3</span>
<span class="c1"># -*- coding: utf-8 -*-</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Base device. Other devices inherit from this</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="c1"># System modules</span>
<span class="c1"># Other templates</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">..utils.logger</span><span class="w"> </span><span class="kn">import</span> <span class="n">log</span>
<div class="viewcode-block" id="BaseDevice">
<a class="viewcode-back" href="../../../noctua.devices.html#noctua.devices.basedevice.BaseDevice">[docs]</a>
<span class="k">class</span><span class="w"> </span><span class="nc">BaseDevice</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&#39;&#39;&#39;Base device class for our devices&#39;&#39;&#39;</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&#39;&#39;&#39;Constructor.&#39;&#39;&#39;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">url</span>
<span class="bp">self</span><span class="o">.</span><span class="n">error</span> <span class="o">=</span> <span class="p">[]</span>
<div class="viewcode-block" id="BaseDevice.get">
<a class="viewcode-back" href="../../../noctua.devices.html#noctua.devices.basedevice.BaseDevice.get">[docs]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&#39;&#39;&#39;Implement a getter method to obtain info from your device.&#39;&#39;&#39;</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">error</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">return</span> <span class="n">message</span>
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
<span class="k">return</span> <span class="n">message</span></div>
<div class="viewcode-block" id="BaseDevice.put">
<a class="viewcode-back" href="../../../noctua.devices.html#noctua.devices.basedevice.BaseDevice.put">[docs]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">put</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&#39;&#39;&#39;Implement a setter method to send info to your device.&#39;&#39;&#39;</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">error</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">return</span> <span class="n">message</span>
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
<span class="k">return</span> <span class="n">message</span></div>
<span class="nd">@property</span>
<span class="k">def</span><span class="w"> </span><span class="nf">test_attribute</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&#39;&#39;&#39;res = self.get(&quot;&quot;)</span>
<span class="sd"> self._test_attribute = res</span>
<span class="sd"> return self._test_attribute</span>
<span class="sd"> &#39;&#39;&#39;</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_test_attribute</span>
<span class="k">except</span> <span class="ne">AttributeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_test_attribute</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">log</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">&quot;Still no test attribute. Set to None&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_test_attribute</span>
<span class="nd">@test_attribute</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span><span class="w"> </span><span class="nf">test_attribute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&#39;&#39;&#39;res = self.put(value)</span>
<span class="sd"> self._test_attribute = self.test_attribute</span>
<span class="sd"> &#39;&#39;&#39;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_test_attribute</span> <span class="o">=</span> <span class="n">value</span>
<span class="c1"># self._test_attribute = self.test_attribute</span>
<div class="viewcode-block" id="BaseDevice.test_method">
<a class="viewcode-back" href="../../../noctua.devices.html#noctua.devices.basedevice.BaseDevice.test_method">[docs]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">test_method</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;Method tested&quot;</span></div>
</div>
</pre></div>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2025, Davide Ricci.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
<!DOCTYPE html>
<html class="writer-html5" lang="en" data-content_root="../../../">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>noctua.devices.siemens &mdash; Noctua 0.1 documentation</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css?v=e59714d7" />
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../_static/documentation_options.js?v=2709fde1"></script>
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home">
Noctua
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../../modules.html">noctua</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">Noctua</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="../../index.html">Module code</a></li>
<li class="breadcrumb-item"><a href="../devices.html">noctua.devices</a></li>
<li class="breadcrumb-item active">noctua.devices.siemens</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for noctua.devices.siemens</h1><div class="highlight"><pre>
<span></span><span class="ch">#!/usr/bin/env python3</span>
<span class="c1"># -*- coding: utf-8 -*-</span>
<span class="c1"># System modules</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">urllib.parse</span><span class="w"> </span><span class="kn">import</span> <span class="n">urlencode</span>
<span class="c1"># Third-party modules</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">requests</span>
<span class="c1"># Other templates</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">..utils</span><span class="w"> </span><span class="kn">import</span> <span class="n">check</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">..utils.logger</span><span class="w"> </span><span class="kn">import</span> <span class="n">log</span>
<div class="viewcode-block" id="Switch">
<a class="viewcode-back" href="../../../noctua.devices.html#noctua.devices.siemens.Switch">[docs]</a>
<span class="k">class</span><span class="w"> </span><span class="nc">Switch</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&#39;&#39;&#39;Base wrapper class for the Siemens PLC switch</span>
<span class="sd"> managing the Telescope cabinet.&#39;&#39;&#39;</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&#39;&#39;&#39;Constructor. id for compatibility with other switches&#39;&#39;&#39;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">id</span> <span class="o">=</span> <span class="nb">id</span>
<span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">url</span>
<span class="bp">self</span><span class="o">.</span><span class="n">addr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">url</span>
<span class="bp">self</span><span class="o">.</span><span class="n">timeout</span> <span class="o">=</span> <span class="mi">3</span>
<span class="bp">self</span><span class="o">.</span><span class="n">error</span> <span class="o">=</span> <span class="kc">None</span>
<span class="nd">@check</span><span class="o">.</span><span class="n">request_errors</span>
<span class="k">def</span><span class="w"> </span><span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">method</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&#39;&#39;&#39;Send a HTTP GET request to request information</span>
<span class="sd"> from the device address.&#39;&#39;&#39;</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">addr</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">method</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
<span class="n">timeout</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">timeout</span><span class="p">)</span>
<span class="n">res</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="n">res</span>
<span class="k">except</span> <span class="ne">AttributeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="k">return</span> <span class="n">res</span>
<span class="k">except</span> <span class="ne">KeyError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="k">return</span> <span class="n">res</span>
<span class="nd">@check</span><span class="o">.</span><span class="n">request_errors</span>
<span class="k">def</span><span class="w"> </span><span class="nf">put</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">method</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="p">{}):</span>
<span class="w"> </span><span class="sd">&#39;&#39;&#39;Send a HTTP GET request to put information</span>
<span class="sd"> at the device address.&#39;&#39;&#39;</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">addr</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">method</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
<span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
<span class="n">timeout</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">timeout</span><span class="p">)</span>
<span class="n">res</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
<span class="k">return</span> <span class="n">res</span>
<span class="nd">@property</span>
<span class="k">def</span><span class="w"> </span><span class="nf">all</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&#39;&#39;&#39;Requesting all the avaible status information.&#39;&#39;&#39;</span>
<span class="n">res</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;vstatus&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">:</span>
<span class="n">vstatus</span> <span class="o">=</span> <span class="n">res</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;&lt;br&gt;&quot;</span><span class="p">)[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="c1"># cutting last empty line</span>
<span class="n">vdict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">([</span><span class="n">v</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot; is &quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">vstatus</span><span class="p">])</span>
<span class="k">return</span> <span class="n">vdict</span>
<span class="nd">@property</span>
<span class="k">def</span><span class="w"> </span><span class="nf">state</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&#39;&#39;&#39;Requesting just the state information: the cabinet is on or off?&#39;&#39;&#39;</span>
<span class="n">res</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">all</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">res</span><span class="p">:</span>
<span class="k">return</span> <span class="n">res</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">=</span> <span class="kc">True</span> <span class="k">if</span> <span class="n">res</span><span class="p">[</span><span class="s2">&quot;Cabinet&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;ON&#39;</span> <span class="k">else</span> <span class="kc">False</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_state</span>
<span class="nd">@state</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span><span class="w"> </span><span class="nf">state</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&#39;&#39;&#39;Switch the on/off state of the cabinet.&#39;&#39;&#39;</span>
<span class="n">start_stop</span> <span class="o">=</span> <span class="s2">&quot;on&quot;</span> <span class="k">if</span> <span class="n">s</span> <span class="k">else</span> <span class="s2">&quot;off&quot;</span>
<span class="n">params</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;startstop&quot;</span><span class="p">:</span> <span class="n">start_stop</span><span class="p">}</span>
<span class="c1"># params = {&quot;tstart&quot;: start_stop} # Temp 17h</span>
<span class="bp">self</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="s2">&quot;apikey=bigrip&quot;</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_state</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span></div>
</pre></div>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2025, Davide Ricci.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment