pymscada 0.1.11b3__py3-none-any.whl → 0.1.11b5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pymscada might be problematic. Click here for more details.

pymscada/checkout.py CHANGED
@@ -58,8 +58,9 @@ def make_config(overwrite: bool):
58
58
  continue
59
59
  print(f'{rt} {target}')
60
60
  rd_bytes = config_file.read_bytes()
61
- for k, v in PATH.items():
62
- rd_bytes = rd_bytes.replace(k.encode(), str(v).encode())
61
+ if target.name.lower() != 'readme.md':
62
+ for k, v in PATH.items():
63
+ rd_bytes = rd_bytes.replace(k.encode(), str(v).encode())
63
64
  target.write_bytes(rd_bytes)
64
65
 
65
66
 
pymscada/demo/files.yaml CHANGED
@@ -1,11 +1,10 @@
1
1
  bus_ip: 127.0.0.1
2
2
  bus_port: 1324
3
- path: __HOME__/pymscada
3
+ path: __HOME__
4
4
  files:
5
5
  - path: pdf/one.pdf
6
6
  desc: PDF
7
7
  - path: pdf/two.pdf
8
- desc: PDF writeable
9
- mode: rw
8
+ desc: PDF
10
9
  - path: config/*.yaml
11
10
  - path: history/*.dat
@@ -1,5 +1,5 @@
1
1
  bus_ip: 127.0.0.1
2
2
  bus_port: 1324
3
3
  rta_tag: __opnotes__
4
- db: __HOME__/pymscada/pymscada.sqlite
4
+ db: __HOME__/config/pymscada.sqlite
5
5
  table: opnotes
@@ -5,11 +5,11 @@
5
5
 
6
6
  [Service]
7
7
  WorkingDirectory=__DIR__
8
- ExecStart=__PYMSCADA__ ping --config __DIR__/config/ping.yaml
8
+ ExecStart=__PYMSCADA__ pingclient --config __DIR__/config/ping.yaml
9
9
  Restart=always
10
10
  RestartSec=5
11
- User=__USER__
12
- Group=__USER__
11
+ User=root
12
+ Group=root
13
13
 
14
14
  [Install]
15
15
  WantedBy=multi-user.target
pymscada/demo/tags.yaml CHANGED
@@ -111,9 +111,9 @@ FloatSelect:
111
111
  locks: [0, 1, 0, 0]
112
112
  localhost_ping:
113
113
  desc: Ping time to localhost
114
- type: int
114
+ type: float
115
115
  units: ms
116
116
  google_ping:
117
117
  desc: Ping time to google
118
- type: int
118
+ type: float
119
119
  units: ms
@@ -51,7 +51,6 @@ pages:
51
51
  - {desc: Default tags, type: h1}
52
52
  - {tagname: localhost_ping, type: value}
53
53
  - {tagname: google_ping, type: value}
54
- - {tagname: electronet_ping, type: value}
55
54
  - name: Ping Trend
56
55
  parent:
57
56
  items:
@@ -66,7 +65,7 @@ pages:
66
65
  - scale: x
67
66
  range: [-86400, 0] # 86400 172800 1209600
68
67
  - scale: mS
69
- range: [0.0, 1.0]
68
+ range: [0.0, 100.0]
70
69
  dp: 1
71
70
  series:
72
71
  - tagname: localhost_ping
pymscada/module_config.py CHANGED
@@ -1,6 +1,7 @@
1
1
  """Module configuration and factory system."""
2
2
  from typing import Any, Optional, Type
3
3
  import argparse
4
+ from textwrap import dedent
4
5
  from importlib.metadata import version
5
6
  import logging
6
7
  from pymscada.config import Config
@@ -77,8 +78,13 @@ def create_module_registry():
77
78
  module_class='pymscada.checkout:checkout',
78
79
  config=False,
79
80
  tags=False,
80
- epilog="""To add to systemd `f="pymscada-bus" && cp config/$f.service
81
- /lib/systemd/system && systemctl enable $f && systemctl start $f`""",
81
+ epilog=dedent("""
82
+ To add to systemd:
83
+ su -
84
+ cd /lib/systemd/system
85
+ cp config/pymscada-bus.service .
86
+ systemctl enable pymscada-bus
87
+ systemctl start pymscada-bus"""),
82
88
  extra_args=[
83
89
  ModuleArgument(
84
90
  ('--overwrite',),
@@ -120,7 +126,12 @@ def create_module_registry():
120
126
  name='openweatherclient',
121
127
  help='poll OpenWeather current and forecast data',
122
128
  module_class='pymscada.iodrivers.openweather:OpenWeatherClient',
123
- tags=False
129
+ tags=False,
130
+ epilog=dedent("""
131
+ OPENWEATHERMAP_API_KEY can be set in the openweathermap.yaml
132
+ or as an environment variable:
133
+ vi ~/.bashrc
134
+ export OPENWEATHERMAP_API_KEY='1234567890'""")
124
135
  ),
125
136
  ModuleDefinition(
126
137
  name='pingclient',
@@ -140,6 +151,9 @@ def create_module_registry():
140
151
  module_class='pymscada.console:Console',
141
152
  config=False,
142
153
  await_future=False,
154
+ epilog=dedent("""
155
+ --tags tag.yaml is not strictly necessary, unless you'd
156
+ like to see correctly typed values and set values."""),
143
157
  extra_args=[
144
158
  ModuleArgument(
145
159
  ('-p', '--port'),
@@ -167,7 +181,8 @@ class ModuleFactory:
167
181
  parser = subparser.add_parser(
168
182
  module_def.name,
169
183
  help=module_def.help,
170
- epilog=module_def.epilog
184
+ epilog=module_def.epilog,
185
+ formatter_class=argparse.RawDescriptionHelpFormatter
171
186
  )
172
187
  if module_def.config:
173
188
  parser.add_argument(
pymscada/www_server.py CHANGED
@@ -56,15 +56,27 @@ class WSHandler():
56
56
  try:
57
57
  while True:
58
58
  as_bytes, message = await self.queue.get()
59
- if as_bytes:
60
- # logging.debug(f'{self.rta_id} as bytes {message}')
61
- await self.ws.send_bytes(message)
62
- else:
63
- # logging.debug(f'{self.rta_id} as json {message}')
64
- await self.ws.send_json(message)
59
+ if self.ws.closed:
60
+ logging.debug(f'{self.rta_id}: WebSocket closed, stopping send_queue')
61
+ break
62
+ try:
63
+ if as_bytes:
64
+ await self.ws.send_bytes(message)
65
+ else:
66
+ await self.ws.send_json(message)
67
+ except ConnectionResetError:
68
+ logging.debug(f'{self.rta_id}: Connection reset, stopping send_queue')
69
+ break
70
+ except Exception as e:
71
+ logging.warning(f'{self.rta_id}: Error sending message: {e}')
72
+ break
65
73
  except asyncio.CancelledError:
66
- logging.warning(f'{self.rta_id}: send queue error, close '
67
- f'{self.ws.exception()}')
74
+ logging.debug(f'{self.rta_id}: Send queue cancelled')
75
+ finally:
76
+ # Clean up subscriptions when the connection ends
77
+ for tag in self.tag_by_id.values():
78
+ tag.del_callback_id(self.notify_id)
79
+ tag.del_callback(self.publish)
68
80
 
69
81
  def publish(self, tag: Tag):
70
82
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pymscada
3
- Version: 0.1.11b3
3
+ Version: 0.1.11b5
4
4
  Summary: Shared tag value SCADA with python backup and Angular UI
5
5
  Author-Email: Jamie Walton <jamie@walton.net.nz>
6
6
  License: GPL-3.0-or-later
@@ -1,26 +1,26 @@
1
- pymscada-0.1.11b3.dist-info/METADATA,sha256=NoaJr_vTpI9iLRVzAtqAKOeBbYQ6JiroiT9_kNTfUHI,2349
2
- pymscada-0.1.11b3.dist-info/WHEEL,sha256=thaaA2w1JzcGC48WYufAs8nrYZjJm8LqNfnXFOFyCC4,90
3
- pymscada-0.1.11b3.dist-info/entry_points.txt,sha256=j_UgZmqFhNquuFC2M8g5-8X9FCpp2RaDb7NrExzkj1c,72
4
- pymscada-0.1.11b3.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
1
+ pymscada-0.1.11b5.dist-info/METADATA,sha256=sGcwgBSNTGbqI0_xvxmaFbuIpA03SC6lo34wOw8gG8o,2349
2
+ pymscada-0.1.11b5.dist-info/WHEEL,sha256=thaaA2w1JzcGC48WYufAs8nrYZjJm8LqNfnXFOFyCC4,90
3
+ pymscada-0.1.11b5.dist-info/entry_points.txt,sha256=j_UgZmqFhNquuFC2M8g5-8X9FCpp2RaDb7NrExzkj1c,72
4
+ pymscada-0.1.11b5.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
5
5
  pymscada/__init__.py,sha256=NV_cIIwe66Ugp8ns426rtfJIIyskWbqwImD9p_5p0bQ,739
6
6
  pymscada/__main__.py,sha256=WcyVlrYOoDdktJhOoyubTOycMwpayksFdxwelRU5xpQ,272
7
7
  pymscada/bus_client.py,sha256=ZUCynJtEvmHruzLS6ZAzp-_0dv1A1u_POgemb38kHuc,8989
8
8
  pymscada/bus_server.py,sha256=8F1beP4NRCBpGJQ0u9NZI1mP6P29HSl6mm9GoGMTCJA,11795
9
- pymscada/checkout.py,sha256=ue40KXJlbgKCU2PMA5X7xwhjP5Q8XQOZiXAYKURtNzA,3318
9
+ pymscada/checkout.py,sha256=1Al29nVqCebupYvMgcY5boz772PtsVp1MVbYaQajV5Q,3373
10
10
  pymscada/config.py,sha256=vwGxieaJBYXiHNQEOYVDFaPuGmnUlCnbNm_W9bugKlc,1851
11
11
  pymscada/console.py,sha256=b4gm7cuhYKGFNtHoxygWkrqiN42mU8DM4KUi-Q74M4U,8793
12
12
  pymscada/demo/README.md,sha256=iNcVbCTkq-d4agLV-979lNRaqf_hbJCn3OFzY-6qfU8,880
13
13
  pymscada/demo/__init__.py,sha256=WsDDgkWnZBJbt2-cJCdc2NvRAv_T4a7WOC1Q0k_l0gI,29
14
14
  pymscada/demo/accuweather.yaml,sha256=rJIiBTUHfaxuYqLLuyKtAe5dqXVdQyEeHJgIy7z-qXo,322
15
15
  pymscada/demo/bus.yaml,sha256=zde5JDo2Yv5s7NvJ569gAEoTDvsvgBwRPxfrYhsxj3w,26
16
- pymscada/demo/files.yaml,sha256=pP9K2f8_DuWlF2pey72SsV74Hq5USKdDL_YguLms_LY,193
16
+ pymscada/demo/files.yaml,sha256=XWtmGDJxtD4qdl2h7miUfJYkDKsvwNTgQjlGpR6LQNs,163
17
17
  pymscada/demo/history.yaml,sha256=c0OuYe8LbTeZqJGU2WKGgTEkOA0IYAjO3e046ddQB8E,55
18
18
  pymscada/demo/logixclient.yaml,sha256=G_NlJhBYwT1a9ceHDgO6fCNKFmBM2pVO_t9Xa1NqlRY,912
19
19
  pymscada/demo/modbus_plc.py,sha256=3zZHHbyrdxyryEHBeNIw-fpcDGcS1MaJiqEwQDr6zWI,2397
20
20
  pymscada/demo/modbusclient.yaml,sha256=geeCsUJZkkEj7jjXR_Yk6R5zA5Ta9IczrHsARz7ZgXY,1099
21
21
  pymscada/demo/modbusserver.yaml,sha256=67_mED6jXgtnzlDIky9Cg4j-nXur06iz9ve3JUwSyG8,1133
22
22
  pymscada/demo/openweather.yaml,sha256=NQ2HL_RlTQ8amYuNQhk09bC7w_rTmIeQ1RsxX1LLtKU,430
23
- pymscada/demo/opnotes.yaml,sha256=9z8dO_S6JErMuGQHivR584UPln-5jW8Qzq7gdhTNcxM,107
23
+ pymscada/demo/opnotes.yaml,sha256=gdT8DKaAV4F6u9trLCPyBgf449wYaP_FF8GCbjXm9-k,105
24
24
  pymscada/demo/ping.yaml,sha256=fm3eUdR2BwnPI_lU_V07qgmDxjSoPP6lPazYB6ZgpVg,149
25
25
  pymscada/demo/pymscada-bus.service,sha256=F3ViriRXyMKdCY3tHa3wXAnv2Fo2_16-EScTLsYnSOA,261
26
26
  pymscada/demo/pymscada-demo-modbus_plc.service,sha256=EtbWDwqAs4nLNLKScUiHcUWU1b6_tRBeAAVGi9q95hY,320
@@ -30,13 +30,13 @@ pymscada/demo/pymscada-io-accuweather.service,sha256=M_dnPYwmvTpYGF5AbMStbYL6VCW
30
30
  pymscada/demo/pymscada-io-logixclient.service,sha256=mn4UzkiOfYqHvgfTFSkUeoPFQQXZboet5I0m7-L5SAY,348
31
31
  pymscada/demo/pymscada-io-modbusclient.service,sha256=eTgNdK10dJCs2lLPhmHBh-3j6Ltx2oyU_MNl2f3xnhg,348
32
32
  pymscada/demo/pymscada-io-modbusserver.service,sha256=g7Rzm6zGLq_qvTJRL_pcLl4Ps7CNIa2toeGhPNp_oEc,348
33
- pymscada/demo/pymscada-io-ping.service,sha256=ShNx97EORZ1CuML8reR34vnX_16S88zubCKyP6TY2w0,331
33
+ pymscada/demo/pymscada-io-ping.service,sha256=Fm8qR4IVq0NupEvHLGONXGwjjQsx5VqaBYPewhg7-k4,329
34
34
  pymscada/demo/pymscada-io-snmpclient.service,sha256=Rsm8uiwnoGx-1MkXqYgtj4UP9-r7AEEeB9yoR0y0oVA,343
35
35
  pymscada/demo/pymscada-opnotes.service,sha256=TlrTRgP3rzrlXT8isAGT_Wy38ScDjT1VvnlgW84XiS8,354
36
36
  pymscada/demo/pymscada-wwwserver.service,sha256=7Qy2wsMmFEsQn-b5mgAcsrAQZgXynkv8SpHD6hLvRGc,370
37
37
  pymscada/demo/snmpclient.yaml,sha256=z8iACrFvMftYUtqGrRjPZYZTpn7aOXI-Kp675NAM8cU,2013
38
- pymscada/demo/tags.yaml,sha256=k7xe4V3_W5DhActB0Qfxb8sFlkxughamOC-bU-YKk4U,1831
39
- pymscada/demo/wwwserver.yaml,sha256=D17L6lgI1BZPZ5QzOjvMlQEx_heEb_14ZVkQpzKXTI4,1831
38
+ pymscada/demo/tags.yaml,sha256=G1d6whGAg41l1meBmxJWrOA47opF-LLRbg2nqFOZzvs,1835
39
+ pymscada/demo/wwwserver.yaml,sha256=Bx7yn2GplDsqh2hzjjuHK_aIZSoTEBTPDL6hGlUTmhQ,1789
40
40
  pymscada/files.py,sha256=MisnKoWvkffPMSj6sGVmm-4fh866x4UX3t9LJg4oCfk,2400
41
41
  pymscada/history.py,sha256=G079gHfzasmGtI5ANS8MdETD4bdZg5vHE_yTKk7atHw,9504
42
42
  pymscada/iodrivers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -53,7 +53,7 @@ pymscada/iodrivers/snmp_client.py,sha256=66-IDzddeKcSnqOzNXIZ8wuuAqhIxZjyLNrDwDv
53
53
  pymscada/iodrivers/snmp_map.py,sha256=sDdIR5ZPAETpozDfBt_XQiZ-f4t99UCPlzj7BxFxQyM,2369
54
54
  pymscada/main.py,sha256=XtASmPZoQMuzDCHlH3P9XwgYskeLtNdl-hc1tDI7ljc,1875
55
55
  pymscada/misc.py,sha256=0Cj6OFhQonyhyk9x0BG5MiS-6EPk_w6zvavt8o_Hlf0,622
56
- pymscada/module_config.py,sha256=kXRvPm0tjM5xS7ak2CgIDBOjiO5-R8GZdRzUIIdz6Ls,7836
56
+ pymscada/module_config.py,sha256=Sq9DDND0WotxwdY7mRHG8G-WNPYqWp9fxvx38--kwr0,8462
57
57
  pymscada/opnotes.py,sha256=pxjFgy4uMnAmJcfrk8BX4Gl5j0z4fFb5waXcqI6UJ_M,5133
58
58
  pymscada/pdf/__init__.py,sha256=WsDDgkWnZBJbt2-cJCdc2NvRAv_T4a7WOC1Q0k_l0gI,29
59
59
  pymscada/pdf/one.pdf,sha256=eoJ45DrAjVZrwmwdA_EAz1fwmT44eRnt_tkc2pmMrKY,1488
@@ -65,5 +65,5 @@ pymscada/tag.py,sha256=Oxh70q2MrPAEI94v4QsWt4gD8QP6BlfzNv9xXeeUFys,10103
65
65
  pymscada/tools/snmp_client2.py,sha256=pdn5dYyEv4q-ubA0zQ8X-3tQDYxGC7f7Xexa7QPaL40,1675
66
66
  pymscada/tools/walk.py,sha256=OgpprUbKLhEWMvJGfU1ckUt_PFEpwZVOD8HucCgzmOc,1625
67
67
  pymscada/validate.py,sha256=fPMlP6RscYuTIgdEJjJ0ZZI0OyVSat1lpqg254wqpdE,13140
68
- pymscada/www_server.py,sha256=rV1Vsk3J1wBhFMBCnK33SziNuTGgVwNc5zLjQQFxJ-s,12021
69
- pymscada-0.1.11b3.dist-info/RECORD,,
68
+ pymscada/www_server.py,sha256=-sAKAD_Vk8PKMb1tHVvfrhjX0Agu3fZfd_c_Wrh-xq8,12541
69
+ pymscada-0.1.11b5.dist-info/RECORD,,