quarchpy 2.1.17.dev2__py2.py3-none-any.whl → 2.1.18__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 (83) hide show
  1. quarchpy/.idea/.name +1 -1
  2. quarchpy/.idea/workspace.xml +40 -40
  3. quarchpy/__pycache__/_version.cpython-311.pyc +0 -0
  4. quarchpy/__pycache__/run.cpython-311.pyc +0 -0
  5. quarchpy/_version.py +1 -1
  6. quarchpy/connection_specific/QPS/qis/help.txt +1 -7
  7. quarchpy/connection_specific/QPS/qis/qis.jar +0 -0
  8. quarchpy/connection_specific/QPS/qis/qis_lib/CInterface-1.7.04.jar +0 -0
  9. quarchpy/connection_specific/QPS/qps.jar +0 -0
  10. quarchpy/connection_specific/QPS/scriptCommands.txt +2 -2
  11. quarchpy/connection_specific/__pycache__/connection_QPS.cpython-311.pyc +0 -0
  12. quarchpy/connection_specific/__pycache__/connection_ReST.cpython-311.pyc +0 -0
  13. quarchpy/connection_specific/connection_mDNS.py +4 -7
  14. quarchpy/connection_specific/connection_mDNS.py.bak +48 -0
  15. quarchpy/debug/SystemTest.py +6 -1
  16. quarchpy/debug/SystemTest.py.bak +188 -0
  17. quarchpy/debug/__pycache__/SystemTest.cpython-311.pyc +0 -0
  18. quarchpy/debug/__pycache__/module_debug.cpython-311.pyc +0 -0
  19. quarchpy/device/__pycache__/scanDevices.cpython-311.pyc +0 -0
  20. quarchpy/device/scanDevices.py +7 -26
  21. quarchpy/device/scanDevices.py.bak +645 -0
  22. quarchpy/docs/CHANGES.rst +18 -0
  23. quarchpy/docs/_build/doctrees/CHANGES.doctree +0 -0
  24. quarchpy/docs/_build/doctrees/environment.pickle +0 -0
  25. quarchpy/docs/_build/doctrees/source/changelog.doctree +0 -0
  26. quarchpy/docs/_build/doctrees/source/quarchpy.fio.doctree +0 -0
  27. quarchpy/docs/_build/doctrees/source/quarchpy.qis.doctree +0 -0
  28. quarchpy/docs/_build/doctrees/source/quarchpy.qps.doctree +0 -0
  29. quarchpy/docs/_build/html/CHANGES.html +121 -101
  30. quarchpy/docs/_build/html/_sources/CHANGES.rst.txt +14 -0
  31. quarchpy/docs/_build/html/genindex.html +27 -2
  32. quarchpy/docs/_build/html/index.html +54 -51
  33. quarchpy/docs/_build/html/objects.inv +0 -0
  34. quarchpy/docs/_build/html/py-modindex.html +5 -0
  35. quarchpy/docs/_build/html/searchindex.js +1 -1
  36. quarchpy/docs/_build/html/source/changelog.html +175 -152
  37. quarchpy/docs/_build/html/source/modules.html +1 -1
  38. quarchpy/docs/_build/html/source/quarchpy.fio.html +28 -2
  39. quarchpy/docs/_build/html/source/quarchpy.html +12 -1
  40. quarchpy/docs/_build/html/source/quarchpy.qis.html +12 -0
  41. quarchpy/docs/_build/html/source/quarchpy.qps.html +14 -2
  42. quarchpy/fio/__pycache__/FIO_interface.cpython-311.pyc +0 -0
  43. quarchpy/qis/__pycache__/qisFuncs.cpython-311.pyc +0 -0
  44. quarchpy/qis/qisFuncs.py +54 -12
  45. quarchpy/qps/__pycache__/qpsFuncs.cpython-311.pyc +0 -0
  46. quarchpy/qps/qpsFuncs.py +60 -20
  47. quarchpy/qps/qpsFuncs.py.bak +66 -18
  48. {quarchpy-2.1.17.dev2.dist-info → quarchpy-2.1.18.dist-info}/METADATA +22 -1
  49. {quarchpy-2.1.17.dev2.dist-info → quarchpy-2.1.18.dist-info}/RECORD +51 -80
  50. quarchpy/connection_specific/QPS/qis/qis_lib/CInterface-1.7.02.jar +0 -0
  51. quarchpy/connection_specific/QPS/qis/qis_lib/CInterface-1.7.8.jar +0 -0
  52. quarchpy/connection_specific/QPS/qis/qis_lib/Collections-1.2.jar +0 -0
  53. quarchpy/connection_specific/QPS/qis/qis_lib/Collections-2.4.jar +0 -0
  54. quarchpy/connection_specific/QPS/qis/qis_lib/Desktop-1.0.jar +0 -0
  55. quarchpy/connection_specific/QPS/qis/qis_lib/Desktop-1.1.jar +0 -0
  56. quarchpy/connection_specific/QPS/qis/qis_lib/Executor-3.11.jar +0 -0
  57. quarchpy/connection_specific/QPS/qis/qis_lib/Executor-3.13.jar +0 -0
  58. quarchpy/connection_specific/QPS/qis/qis_lib/JNA-1.0.jar +0 -0
  59. quarchpy/connection_specific/QPS/qis/qis_lib/JNA-1.2.jar +0 -0
  60. quarchpy/connection_specific/QPS/qis/qis_lib/OS-1.6.jar +0 -0
  61. quarchpy/connection_specific/QPS/qis/qis_lib/OS-1.8.jar +0 -0
  62. quarchpy/connection_specific/QPS/qis/qis_lib/QuarchCommon-0.2.9.jar +0 -0
  63. quarchpy/connection_specific/QPS/qis/qis_lib/SystemTray-4.2.1.jar +0 -0
  64. quarchpy/connection_specific/QPS/qis/qis_lib/SystemTray-4.4.jar +0 -0
  65. quarchpy/connection_specific/QPS/qis/qis_lib/Updates-1.1.jar +0 -0
  66. quarchpy/connection_specific/QPS/qis/qis_lib/Utilities-1.39.jar +0 -0
  67. quarchpy/connection_specific/QPS/qis/qis_lib/Utilities-1.46.jar +0 -0
  68. quarchpy/connection_specific/QPS/qis/qis_lib/commons-csv-1.8.jar +0 -0
  69. quarchpy/connection_specific/QPS/qis/qis_lib/javassist-3.29.2-GA.jar +0 -0
  70. quarchpy/connection_specific/QPS/qis/qis_lib/jna-jpms-5.12.1.jar +0 -0
  71. quarchpy/connection_specific/QPS/qis/qis_lib/jna-platform-jpms-5.12.1.jar +0 -0
  72. quarchpy/connection_specific/QPS/qis/qis_lib/kotlin-stdlib-1.7.22.jar +0 -0
  73. quarchpy/connection_specific/QPS/qis/qis_lib/kotlin-stdlib-1.9.21.jar +0 -0
  74. quarchpy/connection_specific/QPS/qis/qis_lib/slf4j-api-2.0.9.jar +0 -0
  75. quarchpy/connection_specific/QPS/qis/qis_lib/slf4j-simple-2.0.9.jar +0 -0
  76. quarchpy/connection_specific/QPS/qis/resources/filters/filters.csv +0 -1004
  77. quarchpy/connection_specific/QPS/qis/resources/filters/iec_filters.xml +0 -21
  78. quarchpy/connection_specific/QPS/qps_lib/QuarchCommon-0.2.11.jar +0 -0
  79. quarchpy/connection_specific/QPS/qps_lib/commons-lang3-3.12.0.jar +0 -0
  80. quarchpy/connection_specific/QPS/qps_lib/opencsv-5.9.jar +0 -0
  81. quarchpy/connection_specific/QPS/qps_lib/qis-1.40.jar +0 -0
  82. {quarchpy-2.1.17.dev2.dist-info → quarchpy-2.1.18.dist-info}/WHEEL +0 -0
  83. {quarchpy-2.1.17.dev2.dist-info → quarchpy-2.1.18.dist-info}/top_level.txt +0 -0
@@ -102,7 +102,7 @@
102
102
  <li class="toctree-l3"><a class="reference internal" href="quarchpy.fio.html">quarchpy.fio package</a><ul>
103
103
  <li class="toctree-l4"><a class="reference internal" href="quarchpy.fio.html#submodules">Submodules</a></li>
104
104
  <li class="toctree-l4"><a class="reference internal" href="quarchpy.fio.html#module-quarchpy.fio.FIO_interface">quarchpy.fio.FIO_interface module</a></li>
105
- <li class="toctree-l4"><a class="reference internal" href="quarchpy.fio.html#quarchpy-fio-fiodiskfinder-module">quarchpy.fio.fioDiskFinder module</a></li>
105
+ <li class="toctree-l4"><a class="reference internal" href="quarchpy.fio.html#module-quarchpy.fio.fioDiskFinder">quarchpy.fio.fioDiskFinder module</a></li>
106
106
  <li class="toctree-l4"><a class="reference internal" href="quarchpy.fio.html#module-quarchpy.fio">Module contents</a></li>
107
107
  </ul>
108
108
  </li>
@@ -69,8 +69,34 @@
69
69
  <dd></dd></dl>
70
70
 
71
71
  </section>
72
- <section id="quarchpy-fio-fiodiskfinder-module">
73
- <h2>quarchpy.fio.fioDiskFinder module<a class="headerlink" href="#quarchpy-fio-fiodiskfinder-module" title="Link to this heading">¶</a></h2>
72
+ <section id="module-quarchpy.fio.fioDiskFinder">
73
+ <span id="quarchpy-fio-fiodiskfinder-module"></span><h2>quarchpy.fio.fioDiskFinder module<a class="headerlink" href="#module-quarchpy.fio.fioDiskFinder" title="Link to this heading">¶</a></h2>
74
+ <dl class="py class">
75
+ <dt class="sig sig-object py" id="quarchpy.fio.fioDiskFinder.fioDiskFinder">
76
+ <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quarchpy.fio.fioDiskFinder.</span></span><span class="sig-name descname"><span class="pre">fioDiskFinder</span></span><a class="headerlink" href="#quarchpy.fio.fioDiskFinder.fioDiskFinder" title="Link to this definition">¶</a></dt>
77
+ <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">AbsDiskFinder</span></code></p>
78
+ <dl class="py method">
79
+ <dt class="sig sig-object py" id="quarchpy.fio.fioDiskFinder.fioDiskFinder.bytes2human">
80
+ <span class="sig-name descname"><span class="pre">bytes2human</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#quarchpy.fio.fioDiskFinder.fioDiskFinder.bytes2human" title="Link to this definition">¶</a></dt>
81
+ <dd></dd></dl>
82
+
83
+ <dl class="py method">
84
+ <dt class="sig sig-object py" id="quarchpy.fio.fioDiskFinder.fioDiskFinder.findDevices">
85
+ <span class="sig-name descname"><span class="pre">findDevices</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#quarchpy.fio.fioDiskFinder.fioDiskFinder.findDevices" title="Link to this definition">¶</a></dt>
86
+ <dd></dd></dl>
87
+
88
+ <dl class="py method">
89
+ <dt class="sig sig-object py" id="quarchpy.fio.fioDiskFinder.fioDiskFinder.formatList">
90
+ <span class="sig-name descname"><span class="pre">formatList</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">deviceList</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quarchpy.fio.fioDiskFinder.fioDiskFinder.formatList" title="Link to this definition">¶</a></dt>
91
+ <dd></dd></dl>
92
+
93
+ <dl class="py method">
94
+ <dt class="sig sig-object py" id="quarchpy.fio.fioDiskFinder.fioDiskFinder.returnDisk">
95
+ <span class="sig-name descname"><span class="pre">returnDisk</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#quarchpy.fio.fioDiskFinder.fioDiskFinder.returnDisk" title="Link to this definition">¶</a></dt>
96
+ <dd></dd></dl>
97
+
98
+ </dd></dl>
99
+
74
100
  </section>
75
101
  <section id="module-quarchpy.fio">
76
102
  <span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-quarchpy.fio" title="Link to this heading">¶</a></h2>
@@ -205,6 +205,7 @@
205
205
  <li class="toctree-l3"><a class="reference internal" href="quarchpy.qis.html#quarchpy.qis.qisFuncs.check_remote_qis"><code class="docutils literal notranslate"><span class="pre">check_remote_qis()</span></code></a></li>
206
206
  <li class="toctree-l3"><a class="reference internal" href="quarchpy.qis.html#quarchpy.qis.qisFuncs.closeQis"><code class="docutils literal notranslate"><span class="pre">closeQis()</span></code></a></li>
207
207
  <li class="toctree-l3"><a class="reference internal" href="quarchpy.qis.html#quarchpy.qis.qisFuncs.isQisRunning"><code class="docutils literal notranslate"><span class="pre">isQisRunning()</span></code></a></li>
208
+ <li class="toctree-l3"><a class="reference internal" href="quarchpy.qis.html#quarchpy.qis.qisFuncs.reader"><code class="docutils literal notranslate"><span class="pre">reader()</span></code></a></li>
208
209
  <li class="toctree-l3"><a class="reference internal" href="quarchpy.qis.html#quarchpy.qis.qisFuncs.startLocalQis"><code class="docutils literal notranslate"><span class="pre">startLocalQis()</span></code></a></li>
209
210
  </ul>
210
211
  </li>
@@ -286,6 +287,7 @@
286
287
  <li class="toctree-l3"><a class="reference internal" href="quarchpy.qps.html#quarchpy.qps.qpsFuncs.closeQps"><code class="docutils literal notranslate"><span class="pre">closeQps()</span></code></a></li>
287
288
  <li class="toctree-l3"><a class="reference internal" href="quarchpy.qps.html#quarchpy.qps.qpsFuncs.isQpsRunning"><code class="docutils literal notranslate"><span class="pre">isQpsRunning()</span></code></a></li>
288
289
  <li class="toctree-l3"><a class="reference internal" href="quarchpy.qps.html#quarchpy.qps.qpsFuncs.legacyAdjustTime"><code class="docutils literal notranslate"><span class="pre">legacyAdjustTime()</span></code></a></li>
290
+ <li class="toctree-l3"><a class="reference internal" href="quarchpy.qps.html#quarchpy.qps.qpsFuncs.reader"><code class="docutils literal notranslate"><span class="pre">reader()</span></code></a></li>
289
291
  <li class="toctree-l3"><a class="reference internal" href="quarchpy.qps.html#quarchpy.qps.qpsFuncs.startLocalQps"><code class="docutils literal notranslate"><span class="pre">startLocalQps()</span></code></a></li>
290
292
  <li class="toctree-l3"><a class="reference internal" href="quarchpy.qps.html#quarchpy.qps.qpsFuncs.toQpsTimeStamp"><code class="docutils literal notranslate"><span class="pre">toQpsTimeStamp()</span></code></a></li>
291
293
  </ul>
@@ -506,7 +508,16 @@
506
508
  <li class="toctree-l3"><a class="reference internal" href="quarchpy.fio.html#quarchpy.fio.FIO_interface.timeNow"><code class="docutils literal notranslate"><span class="pre">timeNow()</span></code></a></li>
507
509
  </ul>
508
510
  </li>
509
- <li class="toctree-l2"><a class="reference internal" href="quarchpy.fio.html#quarchpy-fio-fiodiskfinder-module">quarchpy.fio.fioDiskFinder module</a></li>
511
+ <li class="toctree-l2"><a class="reference internal" href="quarchpy.fio.html#module-quarchpy.fio.fioDiskFinder">quarchpy.fio.fioDiskFinder module</a><ul>
512
+ <li class="toctree-l3"><a class="reference internal" href="quarchpy.fio.html#quarchpy.fio.fioDiskFinder.fioDiskFinder"><code class="docutils literal notranslate"><span class="pre">fioDiskFinder</span></code></a><ul>
513
+ <li class="toctree-l4"><a class="reference internal" href="quarchpy.fio.html#quarchpy.fio.fioDiskFinder.fioDiskFinder.bytes2human"><code class="docutils literal notranslate"><span class="pre">fioDiskFinder.bytes2human()</span></code></a></li>
514
+ <li class="toctree-l4"><a class="reference internal" href="quarchpy.fio.html#quarchpy.fio.fioDiskFinder.fioDiskFinder.findDevices"><code class="docutils literal notranslate"><span class="pre">fioDiskFinder.findDevices()</span></code></a></li>
515
+ <li class="toctree-l4"><a class="reference internal" href="quarchpy.fio.html#quarchpy.fio.fioDiskFinder.fioDiskFinder.formatList"><code class="docutils literal notranslate"><span class="pre">fioDiskFinder.formatList()</span></code></a></li>
516
+ <li class="toctree-l4"><a class="reference internal" href="quarchpy.fio.html#quarchpy.fio.fioDiskFinder.fioDiskFinder.returnDisk"><code class="docutils literal notranslate"><span class="pre">fioDiskFinder.returnDisk()</span></code></a></li>
517
+ </ul>
518
+ </li>
519
+ </ul>
520
+ </li>
510
521
  <li class="toctree-l2"><a class="reference internal" href="quarchpy.fio.html#module-quarchpy.fio">Module contents</a><ul>
511
522
  <li class="toctree-l3"><a class="reference internal" href="quarchpy.fio.html#quarchpy.fio.runFIO"><code class="docutils literal notranslate"><span class="pre">runFIO()</span></code></a></li>
512
523
  </ul>
@@ -97,6 +97,18 @@ an address can be specified for remote systems.</p>
97
97
  </dl>
98
98
  </dd></dl>
99
99
 
100
+ <dl class="py function">
101
+ <dt class="sig sig-object py" id="quarchpy.qis.qisFuncs.reader">
102
+ <span class="sig-prename descclassname"><span class="pre">quarchpy.qis.qisFuncs.</span></span><span class="sig-name descname"><span class="pre">reader</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">stream</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">q</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">source</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lock</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">stop_flag</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quarchpy.qis.qisFuncs.reader" title="Link to this definition">¶</a></dt>
103
+ <dd><p>Used to read output and place it in a queue for multithreaded reading
104
+ :param stream:
105
+ :param q:
106
+ :param source:
107
+ :param lock: The lock for the queue
108
+ :param stop_flag: Flag to exit the loop and close the thread
109
+ :return: None</p>
110
+ </dd></dl>
111
+
100
112
  <dl class="py function">
101
113
  <dt class="sig sig-object py" id="quarchpy.qis.qisFuncs.startLocalQis">
102
114
  <span class="sig-prename descclassname"><span class="pre">quarchpy.qis.qisFuncs.</span></span><span class="sig-name descname"><span class="pre">startLocalQis</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">terminal</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">headless</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">args</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.qis.qisFuncs.startLocalQis" title="Link to this definition">¶</a></dt>
@@ -59,9 +59,21 @@
59
59
  <span class="sig-prename descclassname"><span class="pre">quarchpy.qps.qpsFuncs.</span></span><span class="sig-name descname"><span class="pre">legacyAdjustTime</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">timestamp</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quarchpy.qps.qpsFuncs.legacyAdjustTime" title="Link to this definition">¶</a></dt>
60
60
  <dd></dd></dl>
61
61
 
62
+ <dl class="py function">
63
+ <dt class="sig sig-object py" id="quarchpy.qps.qpsFuncs.reader">
64
+ <span class="sig-prename descclassname"><span class="pre">quarchpy.qps.qpsFuncs.</span></span><span class="sig-name descname"><span class="pre">reader</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">stream</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">q</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">source</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lock</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">stop_flag</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quarchpy.qps.qpsFuncs.reader" title="Link to this definition">¶</a></dt>
65
+ <dd><p>Used to read output and place it in a queue for multithreaded reading
66
+ :param stream:
67
+ :param q:
68
+ :param source:
69
+ :param lock: The lock for the queue
70
+ :param stop_flag: Flag to exit the loop and close the thread
71
+ :return: None</p>
72
+ </dd></dl>
73
+
62
74
  <dl class="py function">
63
75
  <dt class="sig sig-object py" id="quarchpy.qps.qpsFuncs.startLocalQps">
64
- <span class="sig-prename descclassname"><span class="pre">quarchpy.qps.qpsFuncs.</span></span><span class="sig-name descname"><span class="pre">startLocalQps</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">keepQisRunning</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">args</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[]</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quarchpy.qps.qpsFuncs.startLocalQps" title="Link to this definition">¶</a></dt>
76
+ <span class="sig-prename descclassname"><span class="pre">quarchpy.qps.qpsFuncs.</span></span><span class="sig-name descname"><span class="pre">startLocalQps</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">keepQisRunning</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">args</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[]</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">30</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quarchpy.qps.qpsFuncs.startLocalQps" title="Link to this definition">¶</a></dt>
65
77
  <dd></dd></dl>
66
78
 
67
79
  <dl class="py function">
@@ -109,7 +121,7 @@ Assumes</p>
109
121
 
110
122
  <dl class="py function">
111
123
  <dt class="sig sig-object py" id="quarchpy.qps.startLocalQps">
112
- <span class="sig-prename descclassname"><span class="pre">quarchpy.qps.</span></span><span class="sig-name descname"><span class="pre">startLocalQps</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">keepQisRunning</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">args</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[]</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quarchpy.qps.startLocalQps" title="Link to this definition">¶</a></dt>
124
+ <span class="sig-prename descclassname"><span class="pre">quarchpy.qps.</span></span><span class="sig-name descname"><span class="pre">startLocalQps</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">keepQisRunning</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">args</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[]</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">30</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quarchpy.qps.startLocalQps" title="Link to this definition">¶</a></dt>
113
125
  <dd></dd></dl>
114
126
 
115
127
  <dl class="py function">
quarchpy/qis/qisFuncs.py CHANGED
@@ -3,7 +3,9 @@ Contains general functions for starting and stopping QIS processes
3
3
  """
4
4
 
5
5
  import os, sys
6
- import time, platform
6
+ import time, platform
7
+ from threading import Thread, Lock, Event, active_count
8
+ from queue import Queue, Empty
7
9
  from quarchpy.connection_specific.connection_QIS import QisInterface
8
10
  from quarchpy.user_interface.user_interface import printText
9
11
  import subprocess
@@ -97,15 +99,7 @@ def startLocalQis(terminal=False, headless=False, args=None):
97
99
  last_error = ""
98
100
  last_out = ""
99
101
  while not isQisRunning():
100
- time.sleep(0.2)
101
- stdout, stderr = process.communicate()
102
- if stderr is not None and stderr != last_error:
103
- logging.error(str(stderr))
104
- last_error = stderr
105
-
106
- if stdout is not None and stdout != last_out:
107
- printText(str(stdout))
108
- last_out = stdout
102
+ _get_std_msg_and_err_from_QIS_process(process)
109
103
 
110
104
  if time.time() - startTime > timeout:
111
105
  raise TimeoutError("QIS failed to launch within timelimit of " + str(timeout) + " sec.")
@@ -115,6 +109,55 @@ def startLocalQis(terminal=False, headless=False, args=None):
115
109
  os.chdir(current_direc)
116
110
 
117
111
 
112
+ def reader(stream, q, source, lock,stop_flag):
113
+ '''
114
+ Used to read output and place it in a queue for multithreaded reading
115
+ :param stream:
116
+ :param q:
117
+ :param source:
118
+ :param lock: The lock for the queue
119
+ :param stop_flag: Flag to exit the loop and close the thread
120
+ :return: None
121
+ '''
122
+ while not stop_flag.is_set():
123
+ line = stream.readline()
124
+ if not line:
125
+ break
126
+ with lock:
127
+ q.put((source, line.strip()))
128
+
129
+
130
+ def _get_std_msg_and_err_from_QIS_process(process):
131
+ '''
132
+ Uses multithreading to check for stderr and stdmsg passed by the process that launches QPS
133
+ This allows the user to understand why QPS might not have appeared.
134
+ :param process: The Process Used to launch QPS
135
+ :return: None
136
+ '''
137
+ # Read back stdmsg and stderr in seperate threads so they are non blocking
138
+ q = Queue()
139
+ lock = Lock()
140
+ stop_flag = Event()
141
+
142
+ t1 = Thread(target=reader, args=[process.stdout, q, 'stdout', lock, stop_flag])
143
+ t2 = Thread(target=reader, args=[process.stderr, q, 'stderr', lock, stop_flag])
144
+ t1.start()
145
+ t2.start()
146
+ counter = 0
147
+ # check for stderr or stdmsg from the queue
148
+ while counter <= 3: # If 3 empty reads from the queue then move on to see if QPS is running.
149
+ try:
150
+ source, line = q.get(timeout=1) # Wait for 1 second for new lines
151
+ counter = 0
152
+ if source == "stderr":
153
+ logging.error(f"{source}: {line}")
154
+ else:
155
+ printText(f"{source}: {line}")
156
+ except Empty:
157
+ counter += 1
158
+ stop_flag.set() #Close the threads and return to the main loop where QPS is check to see if its started yet
159
+
160
+
118
161
  def check_remote_qis(host='127.0.0.1', port=9722, timeout=0):
119
162
  """
120
163
  Checks if a local or specified instance of QIS is running and responding
@@ -219,5 +262,4 @@ def GetQisModuleSelection (QisConnection):
219
262
  myDeviceID = None
220
263
 
221
264
  return myDeviceID
222
-
223
-
265
+
quarchpy/qps/qpsFuncs.py CHANGED
@@ -1,6 +1,9 @@
1
+ from threading import Thread, Lock, Event, active_count
2
+ from queue import Queue, Empty
3
+ import time
1
4
  import os, sys
2
5
  import datetime
3
- import time, platform
6
+ import platform
4
7
  from quarchpy.qis import isQisRunning, startLocalQis
5
8
  from quarchpy.connection_specific.connection_QIS import QisInterface
6
9
  from quarchpy.connection_specific.connection_QPS import QpsInterface
@@ -65,7 +68,8 @@ def isQpsRunning(host='127.0.0.1', port=9822, timeout=0):
65
68
  logging.debug("$list: " + str(answer))
66
69
  return False
67
70
 
68
- def startLocalQps(keepQisRunning=False, args=[]):
71
+
72
+ def startLocalQps(keepQisRunning=False, args=[], timeout=30):
69
73
  if keepQisRunning:
70
74
  if not isQisRunning():
71
75
  startLocalQis()
@@ -87,28 +91,64 @@ def startLocalQps(keepQisRunning=False, args=[]):
87
91
  else:
88
92
  process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, shell=True)
89
93
 
90
- startTime = time.time() #Checks for Popen launch only
91
- timeout = 10
92
- last_error = ""
93
- last_out = ""
94
- while not isQpsRunning():
95
- time.sleep(0.2)
96
- stdout, stderr = process.communicate()
97
- if stderr is not None and stderr != last_error:
98
- logging.error(str(stderr))
99
- last_error = stderr
100
-
101
- if stdout is not None and stdout != last_out:
102
- printText(str(stdout))
103
- last_out = stdout
104
-
105
- if time.time() - startTime > timeout:
106
- raise TimeoutError("QPS failed to launch within timelimit of " + str(timeout) + " sec.")
107
- pass
94
+ startTime = time.time()
95
+ while not isQpsRunning():
96
+ time.sleep(0.2)
97
+ _get_std_msg_and_err_from_QPS_process(process)
108
98
 
99
+ if time.time() - startTime > timeout:
100
+ os.chdir(current_dir)
101
+ raise TimeoutError("QPS failed to launch within timelimit of " + str(timeout) + " sec.")
109
102
  # return current working directory
110
103
  os.chdir(current_dir)
111
104
 
105
+ def reader(stream, q, source, lock,stop_flag):
106
+ '''
107
+ Used to read output and place it in a queue for multithreaded reading
108
+ :param stream:
109
+ :param q:
110
+ :param source:
111
+ :param lock: The lock for the queue
112
+ :param stop_flag: Flag to exit the loop and close the thread
113
+ :return: None
114
+ '''
115
+ while not stop_flag.is_set():
116
+ line = stream.readline()
117
+ if not line:
118
+ break
119
+ with lock:
120
+ q.put((source, line.strip()))
121
+
122
+ def _get_std_msg_and_err_from_QPS_process(process):
123
+ '''
124
+ Uses multithreading to check for stderr and stdmsg passed by the process that launches QPS
125
+ This allows the user to understand why QPS might not have appeared.
126
+ :param process: The Process Used to launch QPS
127
+ :return: None
128
+ '''
129
+ # Read back stdmsg and stderr in seperate threads so they are non blocking
130
+ q = Queue()
131
+ lock = Lock()
132
+ stop_flag = Event()
133
+
134
+ t1 = Thread(target=reader, args=[process.stdout, q, 'stdout', lock, stop_flag])
135
+ t2 = Thread(target=reader, args=[process.stderr, q, 'stderr', lock, stop_flag])
136
+ t1.start()
137
+ t2.start()
138
+ counter = 0
139
+ # check for stderr or stdmsg from the queue
140
+ while counter <= 3: # If 3 empty reads from the queue then move on to see if QPS is running.
141
+ try:
142
+ source, line = q.get(timeout=1) # Wait for 1 second for new lines
143
+ counter = 0
144
+ if source == "stderr":
145
+ logging.error(f"{source}: {line}")
146
+ else:
147
+ printText(f"{source}: {line}")
148
+ except Empty:
149
+ counter += 1
150
+ stop_flag.set() #Close the threads and return to the main loop where QPS is check to see if its started yet
151
+
112
152
 
113
153
  def closeQps(host='127.0.0.1', port=9822):
114
154
  myQps = QpsInterface(host, port)
@@ -1,6 +1,9 @@
1
+ from threading import Thread, Lock, Event, active_count
2
+ from queue import Queue, Empty
3
+ import time
1
4
  import os, sys
2
5
  import datetime
3
- import time, platform
6
+ import platform
4
7
  from quarchpy.qis import isQisRunning, startLocalQis
5
8
  from quarchpy.connection_specific.connection_QIS import QisInterface
6
9
  from quarchpy.connection_specific.connection_QPS import QpsInterface
@@ -66,7 +69,7 @@ def isQpsRunning(host='127.0.0.1', port=9822, timeout=0):
66
69
  return False
67
70
 
68
71
 
69
- def startLocalQps(keepQisRunning=False, args=[]):
72
+ def startLocalQps(keepQisRunning=False, args=[], timeout=30):
70
73
  if keepQisRunning:
71
74
  if not isQisRunning():
72
75
  startLocalQis()
@@ -76,7 +79,7 @@ def startLocalQps(keepQisRunning=False, args=[]):
76
79
  QpsPath = os.path.dirname(os.path.abspath(__file__))
77
80
  QpsPath, junk = os.path.split(QpsPath)
78
81
  QpsPath = os.path.join(QpsPath, "connection_specific", "QPS", "qps.jar")
79
- current_direc = os.getcwd()
82
+ current_dir = os.getcwd()
80
83
  os.chdir(os.path.dirname(QpsPath))
81
84
 
82
85
  command = "java -jar \"" + QpsPath + "\"" + " " + str(args)
@@ -84,23 +87,68 @@ def startLocalQps(keepQisRunning=False, args=[]):
84
87
  os.system(command)
85
88
  else:
86
89
  if sys.version_info[0] < 3:
87
- sp=os.popen2(command + " 2>&1")
90
+ process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
88
91
  else:
89
- sp=os.popen(command + " 2>&1")
90
- startTime = time.time() #Checks for Popen launch only
91
- timeout = 10
92
- while not isQpsRunning():
93
- retval=str(sp.read())
94
- if str(retval)!="":
95
- logging.debug(retval)
96
- if "fail" or "error" in retval.lower():
97
- raise Exception(retval)
98
- time.sleep(0.2)
99
- if time.time() - startTime > timeout:
100
- raise TimeoutError("QPS failed to launch within timelimit of " + str(timeout) + " sec.")
101
- pass
92
+ process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, shell=True)
93
+
94
+ startTime = time.time()
95
+ while not isQpsRunning():
96
+ time.sleep(0.2)
97
+ _get_std_msg_and_err_from_QPS_process(process)
98
+
99
+ if time.time() - startTime > timeout:
100
+ os.chdir(current_dir)
101
+ raise TimeoutError("QPS failed to launch within timelimit of " + str(timeout) + " sec.")
102
+ # return current working directory
103
+ os.chdir(current_dir)
102
104
 
103
- os.chdir(current_direc)
105
+ def reader(stream, q, source, lock,stop_flag):
106
+ '''
107
+ Used to read output and place it in a queue for multithreaded reading
108
+ :param stream:
109
+ :param q:
110
+ :param source:
111
+ :param lock: The lock for the queue
112
+ :param stop_flag: Flag to exit the loop and close the thread
113
+ :return: None
114
+ '''
115
+ while not stop_flag.is_set():
116
+ line = stream.readline()
117
+ if not line:
118
+ break
119
+ with lock:
120
+ q.put((source, line.strip()))
121
+
122
+ def _get_std_msg_and_err_from_QPS_process(process):
123
+ '''
124
+ Uses multithreading to check for stderr and stdmsg passed by the process that launches QPS
125
+ This allows the user to understand why QPS might not have appeared.
126
+ :param process: The Process Used to launch QPS
127
+ :return: None
128
+ '''
129
+ # Read back stdmsg and stderr in seperate threads so they are non blocking
130
+ q = Queue()
131
+ lock = Lock()
132
+ stop_flag = Event()
133
+
134
+ t1 = Thread(target=reader, args=[process.stdout, q, 'stdout', lock, stop_flag])
135
+ t2 = Thread(target=reader, args=[process.stderr, q, 'stderr', lock, stop_flag])
136
+ t1.start()
137
+ t2.start()
138
+ counter = 0
139
+ # check for stderr or stdmsg from the queue
140
+ while counter <= 3: # If 3 empty reads from the queue then move on to see if QPS is running.
141
+ try:
142
+ source, line = q.get(timeout=1) # Wait for 1 second for new lines
143
+ counter = 0
144
+ if source == "stderr":
145
+ logging.error(f"{source}: {line}")
146
+ else:
147
+ print(f"{source}: {line}")
148
+ except Empty:
149
+ counter += 1
150
+ time.sleep(3)
151
+ stop_flag.set() #Close the threads and return to the main loop where QPS is check to see if its started yet
104
152
 
105
153
 
106
154
  def closeQps(host='127.0.0.1', port=9822):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: quarchpy
3
- Version: 2.1.17.dev2
3
+ Version: 2.1.18
4
4
  Summary: This packpage offers Python support for Quarch Technology modules.
5
5
  Author: Quarch Technology ltd
6
6
  Author-email: support@quarch.com
@@ -17,6 +17,9 @@ Classifier: Topic :: Scientific/Engineering :: Information Analysis
17
17
  Classifier: Topic :: System
18
18
  Classifier: Topic :: System :: Power (UPS)
19
19
  Description-Content-Type: text/x-rst
20
+ Requires-Dist: zeroconf (>=0.23.0)
21
+ Requires-Dist: numpy
22
+ Requires-Dist: pandas
20
23
 
21
24
  ====================
22
25
  Changelog (Quarchpy)
@@ -33,6 +36,24 @@ Quarchpy
33
36
  Change Log
34
37
  ----------
35
38
 
39
+ 2.1.18
40
+ ------
41
+ - Minor bug fix
42
+
43
+ 2.1.17
44
+ ------
45
+ - Improved QIS QPS launching on Linux sytems
46
+ - System debug for linux systems
47
+
48
+ 2.1.16
49
+ ------
50
+ - FIO mb/s parsing
51
+ - Improved QIS QPS launching
52
+
53
+ 2.1.15
54
+ ------
55
+ - minor bug fix
56
+
36
57
  2.1.14
37
58
  ------
38
59
  - minor bug fixes and logging improvements.