quarchpy 2.1.24.dev5__py2.py3-none-any.whl → 2.1.26__py2.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.
Files changed (124) hide show
  1. quarchpy/__pycache__/__init__.cpython-311.pyc +0 -0
  2. quarchpy/__pycache__/_version.cpython-311.pyc +0 -0
  3. quarchpy/__pycache__/connection.cpython-311.pyc +0 -0
  4. quarchpy/__pycache__/run.cpython-311.pyc +0 -0
  5. quarchpy/_version.py +1 -1
  6. quarchpy/config_files/__pycache__/__init__.cpython-311.pyc +0 -0
  7. quarchpy/config_files/__pycache__/quarch_config_parser.cpython-311.pyc +0 -0
  8. quarchpy/connection_specific/QPS/qis/qis.jar +0 -0
  9. quarchpy/connection_specific/QPS/qis/qis_lib/{CInterface-1.7.9.jar → CInterface-1.8.2.jar} +0 -0
  10. quarchpy/connection_specific/QPS/qis/qis_lib/{CInterface-1.8.0.jar → CInterface-1.9.jar} +0 -0
  11. quarchpy/connection_specific/QPS/{qps_lib/QuarchCommon-0.2.12.jar → qis/qis_lib/QuarchCommon-0.2.13.jar} +0 -0
  12. quarchpy/connection_specific/QPS/qps.jar +0 -0
  13. quarchpy/connection_specific/QPS/{qis/qis_lib/QuarchCommon-0.2.12.jar → qps_lib/QuarchCommon-0.2.13.jar} +0 -0
  14. quarchpy/connection_specific/QPS/qps_lib/{qis-1.41.jar → qis-1.43.jar} +0 -0
  15. quarchpy/connection_specific/QPS/resources/InstallBanner.bmp +0 -0
  16. quarchpy/connection_specific/QPS/resources/QPS.ico +0 -0
  17. quarchpy/connection_specific/QPS/resources/QPS.png +0 -0
  18. quarchpy/connection_specific/QPS/resources/QuarchIcon_128x128.png +0 -0
  19. quarchpy/connection_specific/QPS/resources/QuarchIcon_16x16.png +0 -0
  20. quarchpy/connection_specific/QPS/resources/QuarchIcon_256x256.png +0 -0
  21. quarchpy/connection_specific/QPS/resources/QuarchIcon_32x32.png +0 -0
  22. quarchpy/connection_specific/QPS/resources/QuarchIcon_64x64.png +0 -0
  23. quarchpy/connection_specific/QPS/scriptCommands.txt +17 -2
  24. quarchpy/connection_specific/__pycache__/StreamChannels.cpython-311.pyc +0 -0
  25. quarchpy/connection_specific/__pycache__/__init__.cpython-311.pyc +0 -0
  26. quarchpy/connection_specific/__pycache__/connection_QIS.cpython-311.pyc +0 -0
  27. quarchpy/connection_specific/__pycache__/connection_QPS.cpython-311.pyc +0 -0
  28. quarchpy/connection_specific/__pycache__/connection_ReST.cpython-311.pyc +0 -0
  29. quarchpy/connection_specific/__pycache__/connection_Serial.cpython-311.pyc +0 -0
  30. quarchpy/connection_specific/__pycache__/connection_TCP.cpython-311.pyc +0 -0
  31. quarchpy/connection_specific/__pycache__/connection_USB.cpython-311.pyc +0 -0
  32. quarchpy/connection_specific/__pycache__/mDNS.cpython-311.pyc +0 -0
  33. quarchpy/connection_specific/connection_QPS.py +52 -0
  34. quarchpy/connection_specific/mDNS.py +126 -0
  35. quarchpy/connection_specific/serial/__pycache__/__init__.cpython-311.pyc +0 -0
  36. quarchpy/connection_specific/serial/__pycache__/serialutil.cpython-311.pyc +0 -0
  37. quarchpy/connection_specific/serial/__pycache__/serialwin32.cpython-311.pyc +0 -0
  38. quarchpy/connection_specific/serial/__pycache__/win32.cpython-311.pyc +0 -0
  39. quarchpy/connection_specific/serial/tools/__pycache__/__init__.cpython-311.pyc +0 -0
  40. quarchpy/connection_specific/serial/tools/__pycache__/list_ports.cpython-311.pyc +0 -0
  41. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_common.cpython-311.pyc +0 -0
  42. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_windows.cpython-311.pyc +0 -0
  43. quarchpy/debug/SystemTest.py +2 -6
  44. quarchpy/debug/SystemTest.py.bak +200 -0
  45. quarchpy/debug/__pycache__/SystemTest.cpython-311.pyc +0 -0
  46. quarchpy/debug/__pycache__/__init__.cpython-311.pyc +0 -0
  47. quarchpy/debug/__pycache__/module_debug.cpython-311.pyc +0 -0
  48. quarchpy/debug/__pycache__/simple_terminal.cpython-311.pyc +0 -0
  49. quarchpy/debug/__pycache__/upgrade_quarchpy.cpython-311.pyc +0 -0
  50. quarchpy/debug/__pycache__/versionCompare.cpython-311.pyc +0 -0
  51. quarchpy/device/__pycache__/__init__.cpython-311.pyc +0 -0
  52. quarchpy/device/__pycache__/device.cpython-311.pyc +0 -0
  53. quarchpy/device/__pycache__/quarchArray.cpython-311.pyc +0 -0
  54. quarchpy/device/__pycache__/quarchPPM.cpython-311.pyc +0 -0
  55. quarchpy/device/__pycache__/quarchQPS.cpython-311.pyc +0 -0
  56. quarchpy/device/__pycache__/scanDevices.cpython-311.pyc +0 -0
  57. quarchpy/device/device.py +72 -22
  58. quarchpy/device/scanDevices.py +26 -11
  59. quarchpy/disk_test/__pycache__/AbsDiskFinder.cpython-311.pyc +0 -0
  60. quarchpy/disk_test/__pycache__/DiskTargetSelection.cpython-311.pyc +0 -0
  61. quarchpy/disk_test/__pycache__/__init__.cpython-311.pyc +0 -0
  62. quarchpy/disk_test/__pycache__/iometerDiskFinder.cpython-311.pyc +0 -0
  63. quarchpy/docs/CHANGES.rst +13 -0
  64. quarchpy/docs/_build/doctrees/CHANGES.doctree +0 -0
  65. quarchpy/docs/_build/doctrees/environment.pickle +0 -0
  66. quarchpy/docs/_build/doctrees/source/changelog.doctree +0 -0
  67. quarchpy/docs/_build/doctrees/source/quarchpy.connection_specific.doctree +0 -0
  68. quarchpy/docs/_build/doctrees/source/quarchpy.device.doctree +0 -0
  69. quarchpy/docs/_build/doctrees/source/quarchpy.qps.doctree +0 -0
  70. quarchpy/docs/_build/html/CHANGES.html +138 -119
  71. quarchpy/docs/_build/html/_sources/CHANGES.rst.txt +13 -0
  72. quarchpy/docs/_build/html/genindex.html +4 -0
  73. quarchpy/docs/_build/html/index.html +63 -60
  74. quarchpy/docs/_build/html/objects.inv +0 -0
  75. quarchpy/docs/_build/html/readme.html +6 -7
  76. quarchpy/docs/_build/html/searchindex.js +1 -1
  77. quarchpy/docs/_build/html/source/changelog.html +201 -179
  78. quarchpy/docs/_build/html/source/licenses.html +6 -7
  79. quarchpy/docs/_build/html/source/quarchpy.connection_specific.html +10 -0
  80. quarchpy/docs/_build/html/source/quarchpy.device.html +1 -1
  81. quarchpy/docs/_build/html/source/quarchpy.html +2 -0
  82. quarchpy/docs/_build/html/source/quarchpy.iometer.html +6 -7
  83. quarchpy/docs/_build/html/source/quarchpy.qps.html +2 -2
  84. quarchpy/docs/_build/html/source/quarchpy.utilities.html +6 -7
  85. quarchpy/docs/_build/html/source/readme.html +6 -7
  86. quarchpy/fio/__pycache__/FIO_interface.cpython-311.pyc +0 -0
  87. quarchpy/fio/__pycache__/__init__.cpython-311.pyc +0 -0
  88. quarchpy/iometer/__pycache__/__init__.cpython-311.pyc +0 -0
  89. quarchpy/iometer/__pycache__/gen_iometer_template.cpython-311.pyc +0 -0
  90. quarchpy/iometer/__pycache__/iometerFuncs.cpython-311.pyc +0 -0
  91. quarchpy/qis/__pycache__/StreamHeaderInfo.cpython-311.pyc +0 -0
  92. quarchpy/qis/__pycache__/__init__.cpython-311.pyc +0 -0
  93. quarchpy/qis/__pycache__/qisFuncs.cpython-311.pyc +0 -0
  94. quarchpy/qps/__pycache__/__init__.cpython-311.pyc +0 -0
  95. quarchpy/qps/__pycache__/qpsFuncs.cpython-311.pyc +0 -0
  96. quarchpy/qps/qpsFuncs.py +20 -10
  97. quarchpy/qps/qpsFuncs.py.bak +281 -0
  98. quarchpy/user_interface/__pycache__/__init__.cpython-311.pyc +0 -0
  99. quarchpy/user_interface/__pycache__/user_interface.cpython-311.pyc +0 -0
  100. quarchpy/user_interface/user_interface.py +3 -1
  101. quarchpy/utilities/__pycache__/TestCenter.cpython-311.pyc +0 -0
  102. quarchpy/utilities/__pycache__/TimeValue.cpython-311.pyc +0 -0
  103. quarchpy/utilities/__pycache__/Version.cpython-311.pyc +0 -0
  104. quarchpy/utilities/__pycache__/__init__.cpython-311.pyc +0 -0
  105. {quarchpy-2.1.24.dev5.dist-info → quarchpy-2.1.26.dist-info}/METADATA +15 -2
  106. {quarchpy-2.1.24.dev5.dist-info → quarchpy-2.1.26.dist-info}/RECORD +108 -58
  107. {quarchpy-2.1.24.dev5.dist-info → quarchpy-2.1.26.dist-info}/WHEEL +1 -1
  108. quarchpy/connection_specific/QPS/qis/qis_lib/CInterface-1.7.04.jar +0 -0
  109. quarchpy/connection_specific/QPS/qis/qis_lib/CInterface-1.7.8.jar +0 -0
  110. quarchpy/connection_specific/QPS/qis/qis_lib/CInterface-1.8.1.jar +0 -0
  111. quarchpy/connection_specific/QPS/qis/qis_lib/QuarchCommon-0.2.6.jar +0 -0
  112. quarchpy/connection_specific/QPS/qis/qis_lib/QuarchCommon-0.2.9.jar +0 -0
  113. quarchpy/connection_specific/QPS/qis/qis_lib/commons-csv-1.8.jar +0 -0
  114. quarchpy/connection_specific/QPS/qis/qis_lib/commons-lang3-3.2.1.jar +0 -0
  115. quarchpy/connection_specific/QPS/qis/resources/filters/filters.csv +0 -1004
  116. quarchpy/connection_specific/QPS/qps_lib/QuarchCommon-0.2.6.jar +0 -0
  117. quarchpy/connection_specific/QPS/qps_lib/QuarchCommon-0.2.9.jar +0 -0
  118. quarchpy/connection_specific/QPS/qps_lib/commons-lang3-3.12.0.jar +0 -0
  119. quarchpy/connection_specific/QPS/qps_lib/jfxtras-labs-8.0-r6.jar +0 -0
  120. quarchpy/connection_specific/QPS/qps_lib/opencsv-5.9.jar +0 -0
  121. quarchpy/connection_specific/QPS/qps_lib/qis-1.39.jar +0 -0
  122. quarchpy/connection_specific/QPS/qps_lib/qis-1.40.jar +0 -0
  123. quarchpy/connection_specific/connection_mDNS.py +0 -40
  124. {quarchpy-2.1.24.dev5.dist-info → quarchpy-2.1.26.dist-info}/top_level.txt +0 -0
@@ -6,8 +6,8 @@
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
7
7
 
8
8
  <title>LICENSES &#8212; quarchpy documentation</title>
9
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=61cd365c" />
10
- <link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=12dfc556" />
9
+ <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=b3523f8e" />
10
+ <link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=039e1c02" />
11
11
  <script src="../_static/documentation_options.js?v=5929fcd5"></script>
12
12
  <script src="../_static/doctools.js?v=888ff710"></script>
13
13
  <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
@@ -17,9 +17,8 @@
17
17
 
18
18
  <link rel="stylesheet" href="../_static/custom.css" type="text/css" />
19
19
 
20
-
21
-
22
20
 
21
+ <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
23
22
 
24
23
  </head><body>
25
24
 
@@ -164,11 +163,11 @@ License Identifiers that are here available: <a class="reference external" href=
164
163
  <div class="clearer"></div>
165
164
  </div>
166
165
  <div class="footer">
167
- &#169;2020, Quarch Technology Ltd.
166
+ &copy;2020, Quarch Technology Ltd.
168
167
 
169
168
  |
170
- Powered by <a href="https://www.sphinx-doc.org/">Sphinx 7.2.6</a>
171
- &amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
169
+ Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a>
170
+ &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a>
172
171
 
173
172
  |
174
173
  <a href="../_sources/source/licenses.rst.txt"
@@ -370,6 +370,16 @@ Current implementation assumes only 1 of each data file are made.</p>
370
370
  <span class="sig-name descname"><span class="pre">getDeviceList</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">scan</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ipAddress</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quarchpy.connection_specific.connection_QPS.QpsInterface.getDeviceList" title="Link to this definition">¶</a></dt>
371
371
  <dd></dd></dl>
372
372
 
373
+ <dl class="py method">
374
+ <dt class="sig sig-object py" id="quarchpy.connection_specific.connection_QPS.QpsInterface.get_list_details">
375
+ <span class="sig-name descname"><span class="pre">get_list_details</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">sock</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quarchpy.connection_specific.connection_QPS.QpsInterface.get_list_details" title="Link to this definition">¶</a></dt>
376
+ <dd></dd></dl>
377
+
378
+ <dl class="py method">
379
+ <dt class="sig sig-object py" id="quarchpy.connection_specific.connection_QPS.QpsInterface.open_recording">
380
+ <span class="sig-name descname"><span class="pre">open_recording</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">file_path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">cmdTimeout</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pollInterval</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">startOpenTimout</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quarchpy.connection_specific.connection_QPS.QpsInterface.open_recording" title="Link to this definition">¶</a></dt>
381
+ <dd></dd></dl>
382
+
373
383
  <dl class="py method">
374
384
  <dt class="sig sig-object py" id="quarchpy.connection_specific.connection_QPS.QpsInterface.recv">
375
385
  <span class="sig-name descname"><span class="pre">recv</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#quarchpy.connection_specific.connection_QPS.QpsInterface.recv" title="Link to this definition">¶</a></dt>
@@ -578,7 +578,7 @@ Defaults to “USB”, “TCP”, “SERIAL”, “REST”, “TELNET” in that
578
578
 
579
579
  <dl class="py function">
580
580
  <dt class="sig sig-object py" id="quarchpy.device.scanDevices.scan_mDNS">
581
- <span class="sig-prename descclassname"><span class="pre">quarchpy.device.scanDevices.</span></span><span class="sig-name descname"><span class="pre">scan_mDNS</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">mdnsListener</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quarchpy.device.scanDevices.scan_mDNS" title="Link to this definition">¶</a></dt>
581
+ <span class="sig-prename descclassname"><span class="pre">quarchpy.device.scanDevices.</span></span><span class="sig-name descname"><span class="pre">scan_mDNS</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">mdnsListener</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">zeroconf</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quarchpy.device.scanDevices.scan_mDNS" title="Link to this definition">¶</a></dt>
582
582
  <dd></dd></dl>
583
583
 
584
584
  <dl class="py function">
@@ -393,6 +393,8 @@
393
393
  <li class="toctree-l4"><a class="reference internal" href="quarchpy.connection_specific.html#quarchpy.connection_specific.connection_QPS.QpsInterface.connect"><code class="docutils literal notranslate"><span class="pre">QpsInterface.connect()</span></code></a></li>
394
394
  <li class="toctree-l4"><a class="reference internal" href="quarchpy.connection_specific.html#quarchpy.connection_specific.connection_QPS.QpsInterface.disconnect"><code class="docutils literal notranslate"><span class="pre">QpsInterface.disconnect()</span></code></a></li>
395
395
  <li class="toctree-l4"><a class="reference internal" href="quarchpy.connection_specific.html#quarchpy.connection_specific.connection_QPS.QpsInterface.getDeviceList"><code class="docutils literal notranslate"><span class="pre">QpsInterface.getDeviceList()</span></code></a></li>
396
+ <li class="toctree-l4"><a class="reference internal" href="quarchpy.connection_specific.html#quarchpy.connection_specific.connection_QPS.QpsInterface.get_list_details"><code class="docutils literal notranslate"><span class="pre">QpsInterface.get_list_details()</span></code></a></li>
397
+ <li class="toctree-l4"><a class="reference internal" href="quarchpy.connection_specific.html#quarchpy.connection_specific.connection_QPS.QpsInterface.open_recording"><code class="docutils literal notranslate"><span class="pre">QpsInterface.open_recording()</span></code></a></li>
396
398
  <li class="toctree-l4"><a class="reference internal" href="quarchpy.connection_specific.html#quarchpy.connection_specific.connection_QPS.QpsInterface.recv"><code class="docutils literal notranslate"><span class="pre">QpsInterface.recv()</span></code></a></li>
397
399
  <li class="toctree-l4"><a class="reference internal" href="quarchpy.connection_specific.html#quarchpy.connection_specific.connection_QPS.QpsInterface.scanIP"><code class="docutils literal notranslate"><span class="pre">QpsInterface.scanIP()</span></code></a></li>
398
400
  <li class="toctree-l4"><a class="reference internal" href="quarchpy.connection_specific.html#quarchpy.connection_specific.connection_QPS.QpsInterface.send"><code class="docutils literal notranslate"><span class="pre">QpsInterface.send()</span></code></a></li>
@@ -6,8 +6,8 @@
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
7
7
 
8
8
  <title>quarchpy.iometer package &#8212; quarchpy documentation</title>
9
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=61cd365c" />
10
- <link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=12dfc556" />
9
+ <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=b3523f8e" />
10
+ <link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=039e1c02" />
11
11
  <script src="../_static/documentation_options.js?v=5929fcd5"></script>
12
12
  <script src="../_static/doctools.js?v=888ff710"></script>
13
13
  <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
@@ -18,9 +18,8 @@
18
18
 
19
19
  <link rel="stylesheet" href="../_static/custom.css" type="text/css" />
20
20
 
21
-
22
-
23
21
 
22
+ <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
24
23
 
25
24
  </head><body>
26
25
 
@@ -254,11 +253,11 @@ Reads the data into a dictionary</p>
254
253
  <div class="clearer"></div>
255
254
  </div>
256
255
  <div class="footer">
257
- &#169;2020, Quarch Technology Ltd.
256
+ &copy;2020, Quarch Technology Ltd.
258
257
 
259
258
  |
260
- Powered by <a href="https://www.sphinx-doc.org/">Sphinx 7.2.6</a>
261
- &amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
259
+ Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a>
260
+ &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a>
262
261
 
263
262
  |
264
263
  <a href="../_sources/source/quarchpy.iometer.rst.txt"
@@ -51,7 +51,7 @@
51
51
  <dl class="py function">
52
52
  <dt class="sig sig-object py" id="quarchpy.qps.qpsFuncs.isQpsRunning">
53
53
  <span class="sig-prename descclassname"><span class="pre">quarchpy.qps.qpsFuncs.</span></span><span class="sig-name descname"><span class="pre">isQpsRunning</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">host</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'127.0.0.1'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">port</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">9822</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timeout</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quarchpy.qps.qpsFuncs.isQpsRunning" title="Link to this definition">¶</a></dt>
54
- <dd><p>This func will return true if QPS is running with a working QIS connection. This is becuase</p>
54
+ <dd><p>This func will return true if QPS is running with a working QIS connection.</p>
55
55
  </dd></dl>
56
56
 
57
57
  <dl class="py function">
@@ -110,7 +110,7 @@ Assumes</p>
110
110
  <dl class="py function">
111
111
  <dt class="sig sig-object py" id="quarchpy.qps.isQpsRunning">
112
112
  <span class="sig-prename descclassname"><span class="pre">quarchpy.qps.</span></span><span class="sig-name descname"><span class="pre">isQpsRunning</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">host</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'127.0.0.1'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">port</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">9822</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timeout</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quarchpy.qps.isQpsRunning" title="Link to this definition">¶</a></dt>
113
- <dd><p>This func will return true if QPS is running with a working QIS connection. This is becuase</p>
113
+ <dd><p>This func will return true if QPS is running with a working QIS connection.</p>
114
114
  </dd></dl>
115
115
 
116
116
  <dl class="py attribute">
@@ -6,8 +6,8 @@
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
7
7
 
8
8
  <title>quarchpy.utilities package &#8212; quarchpy documentation</title>
9
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=61cd365c" />
10
- <link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=12dfc556" />
9
+ <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=b3523f8e" />
10
+ <link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=039e1c02" />
11
11
  <script src="../_static/documentation_options.js?v=5929fcd5"></script>
12
12
  <script src="../_static/doctools.js?v=888ff710"></script>
13
13
  <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
@@ -18,9 +18,8 @@
18
18
 
19
19
  <link rel="stylesheet" href="../_static/custom.css" type="text/css" />
20
20
 
21
-
22
-
23
21
 
22
+ <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
24
23
 
25
24
  </head><body>
26
25
 
@@ -194,11 +193,11 @@ on the reporting of the results.</p>
194
193
  <div class="clearer"></div>
195
194
  </div>
196
195
  <div class="footer">
197
- &#169;2020, Quarch Technology Ltd.
196
+ &copy;2020, Quarch Technology Ltd.
198
197
 
199
198
  |
200
- Powered by <a href="https://www.sphinx-doc.org/">Sphinx 7.2.6</a>
201
- &amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
199
+ Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a>
200
+ &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a>
202
201
 
203
202
  |
204
203
  <a href="../_sources/source/quarchpy.utilities.rst.txt"
@@ -6,8 +6,8 @@
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
7
7
 
8
8
  <title>Quarchpy - Readme &#8212; quarchpy documentation</title>
9
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=61cd365c" />
10
- <link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=12dfc556" />
9
+ <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=b3523f8e" />
10
+ <link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=039e1c02" />
11
11
  <script src="../_static/documentation_options.js?v=5929fcd5"></script>
12
12
  <script src="../_static/doctools.js?v=888ff710"></script>
13
13
  <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
@@ -18,9 +18,8 @@
18
18
 
19
19
  <link rel="stylesheet" href="../_static/custom.css" type="text/css" />
20
20
 
21
-
22
-
23
21
 
22
+ <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
24
23
 
25
24
  </head><body>
26
25
 
@@ -130,11 +129,11 @@
130
129
  <div class="clearer"></div>
131
130
  </div>
132
131
  <div class="footer">
133
- &#169;2020, Quarch Technology Ltd.
132
+ &copy;2020, Quarch Technology Ltd.
134
133
 
135
134
  |
136
- Powered by <a href="https://www.sphinx-doc.org/">Sphinx 7.2.6</a>
137
- &amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
135
+ Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a>
136
+ &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a>
138
137
 
139
138
  |
140
139
  <a href="../_sources/source/readme.rst.txt"
quarchpy/qps/qpsFuncs.py CHANGED
@@ -14,7 +14,7 @@ import logging
14
14
 
15
15
  def isQpsRunning(host='127.0.0.1', port=9822, timeout=0):
16
16
  '''
17
- This func will return true if QPS is running with a working QIS connection. This is becuase
17
+ This func will return true if QPS is running with a working QIS connection.
18
18
  '''
19
19
  myQps=None
20
20
  logging.debug("Checking if QPS is running")
@@ -73,10 +73,11 @@ def startLocalQps(keepQisRunning=False, args=[], timeout=30, startQPSMinimised=T
73
73
  if keepQisRunning:
74
74
  if not isQisRunning():
75
75
  startLocalQis()
76
- # if startQPSMinimised == True: #TODO add to release for QPS 1.38
77
- # args.append("CCS=MIN")
78
76
  temp =""
79
77
  args = temp.join(args)
78
+ if startQPSMinimised == True: #TODO add to release for QPS 1.38
79
+ if "-ccs=" not in args.lower():
80
+ args +=" -ccs=MIN"
80
81
 
81
82
  QpsPath = os.path.dirname(os.path.abspath(__file__))
82
83
  QpsPath, junk = os.path.split(QpsPath)
@@ -93,16 +94,25 @@ def startLocalQps(keepQisRunning=False, args=[], timeout=30, startQPSMinimised=T
93
94
  else:
94
95
  process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, shell=True)
95
96
 
96
- startTime = time.time()
97
- while not isQpsRunning():
98
- time.sleep(0.2)
99
- _get_std_msg_and_err_from_QPS_process(process)
97
+ startTime = time.time()
98
+ while not isQpsRunning():
99
+ time.sleep(0.2)
100
+ _get_std_msg_and_err_from_QPS_process(process)
101
+ if time.time() - startTime > timeout:
102
+ os.chdir(current_dir)
103
+ raise TimeoutError("QPS failed to launch within timelimit of " + str(timeout) + " sec.")
104
+ logging.debug("QPS detected after " + str(time.time() - startTime) + "s")
105
+
106
+ while not isQisRunning():
107
+ if time.time() - startTime > timeout:
108
+ raise TimeoutError(
109
+ "QPS did launch but QIS did not respond during the timeout time of " + str(timeout) + " sec.")
110
+ time.sleep(0.2)
111
+ logging.debug("QIS detected after " + str(time.time() - startTime) + "s")
100
112
 
101
- if time.time() - startTime > timeout:
102
- os.chdir(current_dir)
103
- raise TimeoutError("QPS failed to launch within timelimit of " + str(timeout) + " sec.")
104
113
  # return current working directory
105
114
  os.chdir(current_dir)
115
+ return
106
116
 
107
117
  def reader(stream, q, source, lock,stop_flag):
108
118
  '''
@@ -0,0 +1,281 @@
1
+ from threading import Thread, Lock, Event, active_count
2
+ from queue import Queue, Empty
3
+ import time
4
+ import os, sys
5
+ import datetime
6
+ import platform
7
+ from quarchpy.qis import isQisRunning, startLocalQis
8
+ from quarchpy.connection_specific.connection_QIS import QisInterface
9
+ from quarchpy.connection_specific.connection_QPS import QpsInterface
10
+ from quarchpy.user_interface import *
11
+ import subprocess
12
+ import logging
13
+
14
+
15
+ def isQpsRunning(host='127.0.0.1', port=9822, timeout=0):
16
+ '''
17
+ This func will return true if QPS is running with a working QIS connection.
18
+ '''
19
+ myQps=None
20
+ logging.debug("Checking if QPS is running")
21
+ start = time.time()
22
+ while True:
23
+ try:
24
+ myQps = QpsInterface(host, port)
25
+ break
26
+ except Exception as e:
27
+ logging.debug("Error when making QPS interface. QPS may not be running.")
28
+ logging.debug(e)
29
+ if (time.time() - start) > timeout:
30
+ break
31
+ if myQps is None:
32
+ logging.debug("QPS is not running")
33
+ return False
34
+
35
+ logging.debug("Checking if QPS reports a QIS connection") # "$qis status" returns connected if it has ever had a QIS connection.
36
+ answer=0
37
+ counter=0
38
+ while True:
39
+ answer = myQps.sendCmdVerbose(cmd="$qis status")
40
+ if answer.lower()=="connected":
41
+ logging.debug("QPS Running With QIS Connected")
42
+ break
43
+ else:
44
+ logging.debug("QPS Running QIS NOT found. Waiting and retrying.")
45
+ time.sleep(0.5)
46
+ counter += 1
47
+ if counter > 5:
48
+ logging.debug("QPS Running QIS NOT found after "+str(counter)+" attempts.")
49
+ return False
50
+
51
+ logging.debug("Checking if QPS/QIS comms are running")
52
+ start = time.time()
53
+ while True:
54
+ try:
55
+ answer = myQps.sendCmdVerbose(cmd="$list")
56
+ break
57
+ except:
58
+ pass
59
+ if (time.time() - start) > timeout:
60
+ break
61
+
62
+ # check for a 1 showing the first module to be displayed, or a no module/device error message.
63
+ if answer[0] == "1" or "no device" in str(answer).lower() or "no module" in str(answer).lower():
64
+ logging.debug("QPS and QIS are running and responding with valid $list info")
65
+ return True
66
+ else:
67
+ logging.debug("QPS did not return expected output from $list")
68
+ logging.debug("$list: " + str(answer))
69
+ return False
70
+
71
+
72
+ def startLocalQps(keepQisRunning=False, args=[], timeout=30, startQPSMinimised=True):
73
+ if keepQisRunning:
74
+ if not isQisRunning():
75
+ startLocalQis()
76
+ if startQPSMinimised == True: #TODO add to release for QPS 1.38
77
+ args.append("CCS=MIN")
78
+ temp =""
79
+ args = temp.join(args)
80
+
81
+ QpsPath = os.path.dirname(os.path.abspath(__file__))
82
+ QpsPath, junk = os.path.split(QpsPath)
83
+ QpsPath = os.path.join(QpsPath, "connection_specific", "QPS", "qps.jar")
84
+ current_dir = os.getcwd()
85
+ os.chdir(os.path.dirname(QpsPath))
86
+
87
+ command = "java -jar \"" + QpsPath + "\"" + " " + str(args)
88
+ if "-logging=ON" in str(args): #If logging to a terminal window is on then os.system should be used to keep a window open to view logging.
89
+ os.system(command)
90
+ else:
91
+ if sys.version_info[0] < 3:
92
+ process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
93
+ else:
94
+ process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, shell=True)
95
+
96
+ startTime = time.time()
97
+ while not isQpsRunning():
98
+ time.sleep(0.2)
99
+ _get_std_msg_and_err_from_QPS_process(process)
100
+ if time.time() - startTime > timeout:
101
+ os.chdir(current_dir)
102
+ raise TimeoutError("QPS failed to launch within timelimit of " + str(timeout) + " sec.")
103
+ logging.debug("QPS detected after " + str(time.time() - startTime) + "s")
104
+
105
+ while not isQisRunning():
106
+ if time.time() - startTime > timeout:
107
+ raise TimeoutError(
108
+ "QPS did launch but QIS did not respond during the timeout time of " + str(timeout) + " sec.")
109
+ time.sleep(0.2)
110
+ logging.debug("QIS detected after " + str(time.time() - startTime) + "s")
111
+
112
+ # return current working directory
113
+ os.chdir(current_dir)
114
+ return
115
+
116
+ def reader(stream, q, source, lock,stop_flag):
117
+ '''
118
+ Used to read output and place it in a queue for multithreaded reading
119
+ :param stream:
120
+ :param q:
121
+ :param source:
122
+ :param lock: The lock for the queue
123
+ :param stop_flag: Flag to exit the loop and close the thread
124
+ :return: None
125
+ '''
126
+ while not stop_flag.is_set():
127
+ line = stream.readline()
128
+ if not line:
129
+ break
130
+ with lock:
131
+ q.put((source, line.strip()))
132
+
133
+ def _get_std_msg_and_err_from_QPS_process(process):
134
+ '''
135
+ Uses multithreading to check for stderr and stdmsg passed by the process that launches QPS
136
+ This allows the user to understand why QPS might not have appeared.
137
+ :param process: The Process Used to launch QPS
138
+ :return: None
139
+ '''
140
+ # Read back stdmsg and stderr in seperate threads so they are non blocking
141
+ q = Queue()
142
+ lock = Lock()
143
+ stop_flag = Event()
144
+
145
+ t1 = Thread(target=reader, args=[process.stdout, q, 'stdout', lock, stop_flag])
146
+ t2 = Thread(target=reader, args=[process.stderr, q, 'stderr', lock, stop_flag])
147
+ t1.start()
148
+ t2.start()
149
+ counter = 0
150
+ # check for stderr or stdmsg from the queue
151
+ while counter <= 3: # If 3 empty reads from the queue then move on to see if QPS is running.
152
+ try:
153
+ source, line = q.get(timeout=1) # Wait for 1 second for new lines
154
+ counter = 0
155
+ if source == "stderr":
156
+ logging.error(f"{source}: {line}")
157
+ else:
158
+ printText(f"{source}: {line}")
159
+ except Empty:
160
+ counter += 1
161
+ stop_flag.set() #Close the threads and return to the main loop where QPS is check to see if its started yet
162
+
163
+
164
+ def closeQps(host='127.0.0.1', port=9822):
165
+ myQps = QpsInterface(host, port)
166
+ myQps.sendCmdVerbose("$shutdown")
167
+ del myQps
168
+ time.sleep(1) #needed as calling "isQpsRunning()" will throw an error if it ties to connect while shutdown is in progress.
169
+
170
+ def GetQpsModuleSelection(QpsConnection, favouriteOnly=True, additionalOptions=['rescan', 'all con types', 'ip scan'], scan=True):
171
+ favourite = favouriteOnly
172
+ ip_address = None
173
+ while True:
174
+ printText("QPS scanning for devices")
175
+ tableHeaders = ["Module"]
176
+ # Request a list of all USB and LAN accessible power modules
177
+ if ip_address == None:
178
+ devList = QpsConnection.getDeviceList(scan=scan)
179
+ else:
180
+ devList = QpsConnection.getDeviceList(scan=scan, ipAddress=ip_address)
181
+ if "no device" in devList[0].lower() or "no module" in devList[0].lower():
182
+ favourite = False # If no device found conPref wont match and will bugout
183
+
184
+ # Removes rest devices
185
+ devList = [x for x in devList if "rest" not in x]
186
+ message = "Select a quarch module"
187
+
188
+ if (favourite):
189
+ index = 0
190
+ sortedDevList = []
191
+ conPref = ["USB", "TCP", "SERIAL", "REST", "TELNET"]
192
+ while len(sortedDevList) != len(devList):
193
+ for device in devList:
194
+ if conPref[index] in device.upper():
195
+ sortedDevList.append(device)
196
+ index += 1
197
+ devList = sortedDevList
198
+
199
+ # new dictionary only containing one favourite connection to each device.
200
+ favConDevList = []
201
+ index = 0
202
+ for device in sortedDevList:
203
+ if (favConDevList == [] or not device.split("::")[1] in str(favConDevList)):
204
+ favConDevList.append(device)
205
+ devList = favConDevList
206
+
207
+ if User_interface.instance != None and User_interface.instance.selectedInterface == "testcenter":
208
+ tempString = ""
209
+ for module in devList:
210
+ tempString+=module+"="+module+","
211
+ devList = tempString[0:-1]
212
+
213
+
214
+ myDeviceID = listSelection(title=message, message=message, selectionList=devList,
215
+ additionalOptions=additionalOptions, nice=True, tableHeaders=tableHeaders, indexReq=True)
216
+
217
+ if myDeviceID in 'rescan':
218
+ ip_address = None
219
+ favourite = True
220
+ continue
221
+ elif myDeviceID in 'all con types':
222
+ printText('Displaying all conection types...')
223
+ favourite = False
224
+ continue
225
+ elif myDeviceID in 'ip scan':
226
+ ip_address = requestDialog("Please input IP Address of the module you would like to connect to: ")
227
+ favourite = False
228
+ continue
229
+ else:
230
+ return myDeviceID
231
+
232
+
233
+
234
+
235
+ '''
236
+ Legacy function to handle old scripts which call an adjustTime function to get QPS format time.
237
+ This is now done in the QPS module level, so this function returns a integer linux millisecond value
238
+ as per the old one
239
+ '''
240
+
241
+
242
+ def legacyAdjustTime(timestamp):
243
+ return timestamp
244
+
245
+
246
+ '''
247
+ Simple function to convert a timestamp or Python datetime object into QPS format time
248
+ QPS requires time in mS with no decimal point, so this is converted here
249
+ '''
250
+
251
+
252
+ def toQpsTimeStamp(timestamp):
253
+ """
254
+ DEPRECATED - QPS expects time passed as a string and error handling is done in QPS.
255
+ Returns the parameter passed as a valid qps timestamp
256
+ Assumes
257
+
258
+ # 1620817118182 - ACCEPTED value for QPS - Milliseconds, 13 chars
259
+
260
+ # 1620817126 - time.time() Value - Seconds
261
+
262
+ :param int/float/datetime: Timestamp, mS
263
+ :return: int : QPS valid time, mS
264
+ """
265
+
266
+ # Python datetime object
267
+ if (type(timestamp) is datetime):
268
+ newTime = time.mktime(timestamp.timetuple())
269
+ return int(newTime * 1000)
270
+ # If numeric, assume standard unix time in milliseconds
271
+ elif (type(timestamp) is float or type(timestamp) is int):
272
+ return int(timestamp)
273
+ else:
274
+ # Try if its a numeric value string first (assumed to be milliseconds)
275
+ try:
276
+ timestamp = float(timestamp)
277
+ return int(timestamp)
278
+ # Fall back to assuming a standard format time string
279
+ except:
280
+ newTime = time.mktime(datetime.datetime.strptime(timestamp, "%Y-%m-%d %H:%M:%S:%f").timetuple())
281
+ return int(newTime * 1000)
@@ -292,13 +292,15 @@ printProgressBar (iteration,total,prefix='',suffix='',decimals=1,length=100,fill
292
292
 
293
293
  '''
294
294
  def progressBar(iteration, total, prefix='', suffix='', decimals=1, fill='█', fullWidth=100):
295
+ iteration = float(iteration)
296
+ total = float(total)
295
297
  if iteration >= 0 and total > 0:
296
298
 
297
299
  if User_interface.instance != None and User_interface.instance.selectedInterface == "testcenter":
298
300
  TestCenter.testPoint ("Quarch_Host.ShowTaskProgress","Title=Task Progress", "Iteration="+str(int(iteration)), "Total="+str(int(total)), stack_level=2);
299
301
 
300
302
  else:
301
- percent = ("{0:." + str(decimals) + "f}").format(100 * (iteration / float(total)))
303
+ percent = ("{0:." + str(decimals) + "f}").format(100 * (iteration / total))
302
304
  length = fullWidth - (len(prefix)+len(suffix)+len(percent) +4) #the length of the bar must scale acording to anything else on the line
303
305
 
304
306
  filledLength = int(length * iteration // total)