quarchpy 2.1.13.dev1__py2.py3-none-any.whl → 2.1.14__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.
- quarchpy/.idea/.name +1 -1
- quarchpy/.idea/modules.xml +1 -0
- quarchpy/.idea/quarchpy.iml +4 -1
- quarchpy/.idea/workspace.xml +208 -11
- quarchpy/__pycache__/__init__.cpython-311.pyc +0 -0
- quarchpy/__pycache__/_version.cpython-311.pyc +0 -0
- quarchpy/__pycache__/connection.cpython-311.pyc +0 -0
- quarchpy/__pycache__/run.cpython-311.pyc +0 -0
- quarchpy/_version.py +1 -1
- quarchpy/config_files/__pycache__/__init__.cpython-311.pyc +0 -0
- quarchpy/config_files/__pycache__/quarch_config_parser.cpython-311.pyc +0 -0
- quarchpy/connection_specific/QPS/commandLineOptions.txt +12 -10
- quarchpy/connection_specific/QPS/qis/qis.jar +0 -0
- quarchpy/connection_specific/QPS/qis/qis_lib/{CInterface-1.7.03.jar → CInterface-1.7.04.jar} +0 -0
- quarchpy/connection_specific/QPS/qis/qis_lib/{QuarchCommon-0.2.5.jar → QuarchCommon-0.2.6.jar} +0 -0
- quarchpy/connection_specific/QPS/qis/qis_lib/commons-lang3-3.2.1.jar +0 -0
- quarchpy/connection_specific/QPS/qps.jar +0 -0
- quarchpy/connection_specific/QPS/qps_lib/QuarchCommon-0.2.6.jar +0 -0
- quarchpy/connection_specific/QPS/qps_lib/istack-commons-runtime-3.0.11.jar +0 -0
- quarchpy/connection_specific/QPS/qps_lib/jakarta.activation-api-2.1.0.jar +0 -0
- quarchpy/connection_specific/QPS/qps_lib/jakarta.xml.bind-api-3.0.0.jar +0 -0
- quarchpy/connection_specific/QPS/qps_lib/jaxb-core-3.0.0.jar +0 -0
- quarchpy/connection_specific/QPS/qps_lib/jaxb-impl-3.0.0.jar +0 -0
- quarchpy/connection_specific/QPS/qps_lib/jaxb-runtime-3.0.0.jar +0 -0
- quarchpy/connection_specific/QPS/qps_lib/qis-1.39.jar +0 -0
- quarchpy/connection_specific/QPS/qps_lib/txw2-3.0.0.jar +0 -0
- quarchpy/connection_specific/QPS/scriptCommands.txt +2 -2
- quarchpy/connection_specific/__pycache__/StreamChannels.cpython-311.pyc +0 -0
- quarchpy/connection_specific/__pycache__/__init__.cpython-311.pyc +0 -0
- quarchpy/connection_specific/__pycache__/connection_QIS.cpython-311.pyc +0 -0
- quarchpy/connection_specific/__pycache__/connection_QPS.cpython-311.pyc +0 -0
- quarchpy/connection_specific/__pycache__/connection_ReST.cpython-311.pyc +0 -0
- quarchpy/connection_specific/__pycache__/connection_Serial.cpython-311.pyc +0 -0
- quarchpy/connection_specific/__pycache__/connection_TCP.cpython-311.pyc +0 -0
- quarchpy/connection_specific/__pycache__/connection_Telnet.cpython-311.pyc +0 -0
- quarchpy/connection_specific/__pycache__/connection_USB.cpython-311.pyc +0 -0
- quarchpy/connection_specific/__pycache__/connection_mDNS.cpython-311.pyc +0 -0
- quarchpy/connection_specific/connection_QIS.py +246 -331
- quarchpy/connection_specific/connection_QPS.py +1 -1
- quarchpy/connection_specific/connection_ReST.py +26 -16
- quarchpy/connection_specific/connection_TCP.py +1 -1
- quarchpy/connection_specific/connection_mDNS.py +46 -0
- quarchpy/connection_specific/serial/__pycache__/__init__.cpython-311.pyc +0 -0
- quarchpy/connection_specific/serial/__pycache__/serialutil.cpython-311.pyc +0 -0
- quarchpy/connection_specific/serial/__pycache__/serialwin32.cpython-311.pyc +0 -0
- quarchpy/connection_specific/serial/__pycache__/win32.cpython-311.pyc +0 -0
- quarchpy/connection_specific/serial/tools/__pycache__/__init__.cpython-311.pyc +0 -0
- quarchpy/connection_specific/serial/tools/__pycache__/list_ports.cpython-311.pyc +0 -0
- quarchpy/connection_specific/serial/tools/__pycache__/list_ports_common.cpython-311.pyc +0 -0
- quarchpy/connection_specific/serial/tools/__pycache__/list_ports_windows.cpython-311.pyc +0 -0
- quarchpy/debug/__pycache__/SystemTest.cpython-311.pyc +0 -0
- quarchpy/debug/__pycache__/__init__.cpython-311.pyc +0 -0
- quarchpy/debug/__pycache__/module_debug.cpython-311.pyc +0 -0
- quarchpy/debug/__pycache__/simple_terminal.cpython-311.pyc +0 -0
- quarchpy/debug/__pycache__/upgrade_quarchpy.cpython-311.pyc +0 -0
- quarchpy/debug/__pycache__/versionCompare.cpython-311.pyc +0 -0
- quarchpy/device/__pycache__/__init__.cpython-311.pyc +0 -0
- quarchpy/device/__pycache__/device.cpython-311.pyc +0 -0
- quarchpy/device/__pycache__/quarchArray.cpython-311.pyc +0 -0
- quarchpy/device/__pycache__/quarchPPM.cpython-311.pyc +0 -0
- quarchpy/device/__pycache__/quarchQPS.cpython-311.pyc +0 -0
- quarchpy/device/__pycache__/scanDevices.cpython-311.pyc +0 -0
- quarchpy/device/device.py +2 -0
- quarchpy/device/quarchPPM.py +2 -2
- quarchpy/device/quarchQPS.py +95 -86
- quarchpy/device/scanDevices.py +13 -3
- quarchpy/disk_test/__pycache__/AbsDiskFinder.cpython-311.pyc +0 -0
- quarchpy/disk_test/__pycache__/DiskTargetSelection.cpython-311.pyc +0 -0
- quarchpy/disk_test/__pycache__/__init__.cpython-311.pyc +0 -0
- quarchpy/disk_test/__pycache__/iometerDiskFinder.cpython-311.pyc +0 -0
- quarchpy/docs/CHANGES.rst +11 -1
- quarchpy/docs/_build/doctrees/CHANGES.doctree +0 -0
- quarchpy/docs/_build/doctrees/environment.pickle +0 -0
- quarchpy/docs/_build/doctrees/index.doctree +0 -0
- quarchpy/docs/_build/doctrees/readme.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/changelog.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/licenses.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/modules.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/quarchpy.calibration.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/quarchpy.config_files.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/quarchpy.connection_specific.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/quarchpy.debug.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/quarchpy.device.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/quarchpy.disk_test.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/quarchpy.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/quarchpy.fio.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/quarchpy.iometer.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/quarchpy.qis.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/quarchpy.qps.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/quarchpy.user_interface.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/quarchpy.utilities.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/readme.doctree +0 -0
- quarchpy/docs/_build/html/.buildinfo +1 -1
- quarchpy/docs/_build/html/CHANGES.html +198 -156
- quarchpy/docs/_build/html/_sources/CHANGES.rst.txt +30 -0
- quarchpy/docs/_build/html/_static/alabaster.css +3 -1
- quarchpy/docs/_build/html/_static/basic.css +47 -27
- quarchpy/docs/_build/html/_static/doctools.js +107 -274
- quarchpy/docs/_build/html/_static/documentation_options.js +5 -4
- quarchpy/docs/_build/html/_static/language_data.js +2 -100
- quarchpy/docs/_build/html/_static/pygments.css +1 -0
- quarchpy/docs/_build/html/_static/searchtools.js +440 -395
- quarchpy/docs/_build/html/_static/sphinx_highlight.js +154 -0
- quarchpy/docs/_build/html/genindex.html +263 -87
- quarchpy/docs/_build/html/index.html +68 -63
- quarchpy/docs/_build/html/objects.inv +0 -0
- quarchpy/docs/_build/html/py-modindex.html +9 -11
- quarchpy/docs/_build/html/readme.html +26 -27
- quarchpy/docs/_build/html/search.html +8 -10
- quarchpy/docs/_build/html/searchindex.js +1 -1
- quarchpy/docs/_build/html/source/changelog.html +249 -201
- quarchpy/docs/_build/html/source/licenses.html +23 -24
- quarchpy/docs/_build/html/source/modules.html +24 -17
- quarchpy/docs/_build/html/source/quarchpy.calibration.html +44 -45
- quarchpy/docs/_build/html/source/quarchpy.config_files.html +25 -26
- quarchpy/docs/_build/html/source/quarchpy.connection_specific.html +239 -133
- quarchpy/docs/_build/html/source/quarchpy.debug.html +57 -54
- quarchpy/docs/_build/html/source/quarchpy.device.html +245 -211
- quarchpy/docs/_build/html/source/quarchpy.disk_test.html +75 -76
- quarchpy/docs/_build/html/source/quarchpy.fio.html +33 -34
- quarchpy/docs/_build/html/source/quarchpy.html +518 -61
- quarchpy/docs/_build/html/source/quarchpy.iometer.html +130 -44
- quarchpy/docs/_build/html/source/quarchpy.qis.html +420 -44
- quarchpy/docs/_build/html/source/quarchpy.qps.html +44 -43
- quarchpy/docs/_build/html/source/quarchpy.user_interface.html +70 -120
- quarchpy/docs/_build/html/source/quarchpy.utilities.html +39 -40
- quarchpy/docs/_build/html/source/readme.html +26 -27
- quarchpy/fio/__pycache__/FIO_interface.cpython-311.pyc +0 -0
- quarchpy/fio/__pycache__/__init__.cpython-311.pyc +0 -0
- quarchpy/fio/__pycache__/fioDiskFinder.cpython-311.pyc +0 -0
- quarchpy/iometer/__pycache__/__init__.cpython-311.pyc +0 -0
- quarchpy/iometer/__pycache__/gen_iometer_template.cpython-311.pyc +0 -0
- quarchpy/iometer/__pycache__/iometerFuncs.cpython-311.pyc +0 -0
- quarchpy/qis/__pycache__/StreamHeaderInfo.cpython-311.pyc +0 -0
- quarchpy/qis/__pycache__/__init__.cpython-311.pyc +0 -0
- quarchpy/qis/__pycache__/qisFuncs.cpython-311.pyc +0 -0
- quarchpy/qis/qisFuncs.py +25 -42
- quarchpy/qps/__pycache__/__init__.cpython-311.pyc +0 -0
- quarchpy/qps/__pycache__/qpsFuncs.cpython-311.pyc +0 -0
- quarchpy/qps/qpsFuncs.py +18 -19
- quarchpy/user_interface/__pycache__/__init__.cpython-311.pyc +0 -0
- quarchpy/user_interface/__pycache__/user_interface.cpython-311.pyc +0 -0
- quarchpy/user_interface/user_interface.py +156 -137
- quarchpy/utilities/TestCenter.py +11 -16
- quarchpy/utilities/Version.py +50 -0
- quarchpy/utilities/__pycache__/TestCenter.cpython-311.pyc +0 -0
- quarchpy/utilities/__pycache__/TimeValue.cpython-311.pyc +0 -0
- quarchpy/utilities/__pycache__/Version.cpython-311.pyc +0 -0
- quarchpy/utilities/__pycache__/__init__.cpython-311.pyc +0 -0
- quarchpy/venv/.gitignore +2 -0
- quarchpy/venv/Include/Python-ast.h +535 -0
- quarchpy/venv/Include/Python.h +181 -0
- quarchpy/venv/Include/abstract.h +1396 -0
- quarchpy/venv/Include/asdl.h +45 -0
- quarchpy/venv/Include/ast.h +13 -0
- quarchpy/venv/Include/bitset.h +32 -0
- quarchpy/venv/Include/boolobject.h +36 -0
- quarchpy/venv/Include/bufferobject.h +33 -0
- quarchpy/venv/Include/bytearrayobject.h +57 -0
- quarchpy/venv/Include/bytes_methods.h +75 -0
- quarchpy/venv/Include/bytesobject.h +27 -0
- quarchpy/venv/Include/cStringIO.h +73 -0
- quarchpy/venv/Include/cellobject.h +28 -0
- quarchpy/venv/Include/ceval.h +154 -0
- quarchpy/venv/Include/classobject.h +83 -0
- quarchpy/venv/Include/cobject.h +89 -0
- quarchpy/venv/Include/code.h +116 -0
- quarchpy/venv/Include/codecs.h +212 -0
- quarchpy/venv/Include/compile.h +40 -0
- quarchpy/venv/Include/complexobject.h +66 -0
- quarchpy/venv/Include/datetime.h +239 -0
- quarchpy/venv/Include/descrobject.h +94 -0
- quarchpy/venv/Include/dictobject.h +160 -0
- quarchpy/venv/Include/dtoa.h +15 -0
- quarchpy/venv/Include/enumobject.h +17 -0
- quarchpy/venv/Include/errcode.h +37 -0
- quarchpy/venv/Include/eval.h +25 -0
- quarchpy/venv/Include/fileobject.h +97 -0
- quarchpy/venv/Include/floatobject.h +140 -0
- quarchpy/venv/Include/frameobject.h +89 -0
- quarchpy/venv/Include/funcobject.h +76 -0
- quarchpy/venv/Include/genobject.h +40 -0
- quarchpy/venv/Include/graminit.h +87 -0
- quarchpy/venv/Include/grammar.h +94 -0
- quarchpy/venv/Include/import.h +71 -0
- quarchpy/venv/Include/intobject.h +84 -0
- quarchpy/venv/Include/intrcheck.h +15 -0
- quarchpy/venv/Include/iterobject.h +23 -0
- quarchpy/venv/Include/listobject.h +68 -0
- quarchpy/venv/Include/longintrepr.h +103 -0
- quarchpy/venv/Include/longobject.h +135 -0
- quarchpy/venv/Include/marshal.h +25 -0
- quarchpy/venv/Include/memoryobject.h +74 -0
- quarchpy/venv/Include/metagrammar.h +18 -0
- quarchpy/venv/Include/methodobject.h +93 -0
- quarchpy/venv/Include/modsupport.h +134 -0
- quarchpy/venv/Include/moduleobject.h +24 -0
- quarchpy/venv/Include/node.h +41 -0
- quarchpy/venv/Include/object.h +1046 -0
- quarchpy/venv/Include/objimpl.h +369 -0
- quarchpy/venv/Include/opcode.h +171 -0
- quarchpy/venv/Include/osdefs.h +63 -0
- quarchpy/venv/Include/parsetok.h +64 -0
- quarchpy/venv/Include/patchlevel.h +43 -0
- quarchpy/venv/Include/pgen.h +18 -0
- quarchpy/venv/Include/pgenheaders.h +43 -0
- quarchpy/venv/Include/py_curses.h +177 -0
- quarchpy/venv/Include/pyarena.h +62 -0
- quarchpy/venv/Include/pycapsule.h +56 -0
- quarchpy/venv/Include/pyconfig.h +770 -0
- quarchpy/venv/Include/pyctype.h +31 -0
- quarchpy/venv/Include/pydebug.h +41 -0
- quarchpy/venv/Include/pyerrors.h +329 -0
- quarchpy/venv/Include/pyexpat.h +50 -0
- quarchpy/venv/Include/pyfpe.h +176 -0
- quarchpy/venv/Include/pygetopt.h +18 -0
- quarchpy/venv/Include/pymacconfig.h +102 -0
- quarchpy/venv/Include/pymactoolbox.h +232 -0
- quarchpy/venv/Include/pymath.h +214 -0
- quarchpy/venv/Include/pymem.h +122 -0
- quarchpy/venv/Include/pyport.h +950 -0
- quarchpy/venv/Include/pystate.h +200 -0
- quarchpy/venv/Include/pystrcmp.h +23 -0
- quarchpy/venv/Include/pystrtod.h +45 -0
- quarchpy/venv/Include/pythonrun.h +181 -0
- quarchpy/venv/Include/pythread.h +41 -0
- quarchpy/venv/Include/rangeobject.h +28 -0
- quarchpy/venv/Include/setobject.h +99 -0
- quarchpy/venv/Include/sliceobject.h +50 -0
- quarchpy/venv/Include/stringobject.h +210 -0
- quarchpy/venv/Include/structmember.h +99 -0
- quarchpy/venv/Include/structseq.h +41 -0
- quarchpy/venv/Include/symtable.h +98 -0
- quarchpy/venv/Include/sysmodule.h +31 -0
- quarchpy/venv/Include/timefuncs.h +26 -0
- quarchpy/venv/Include/token.h +85 -0
- quarchpy/venv/Include/traceback.h +31 -0
- quarchpy/venv/Include/tupleobject.h +61 -0
- quarchpy/venv/Include/ucnhash.h +33 -0
- quarchpy/venv/Include/unicodeobject.h +1413 -0
- quarchpy/venv/Include/warnings.h +23 -0
- quarchpy/venv/Include/weakrefobject.h +82 -0
- quarchpy/venv/Lib/os.py +742 -0
- quarchpy/venv/Lib/os.pyc +0 -0
- quarchpy/venv/Lib/site-packages/_virtualenv.pth +1 -0
- quarchpy/venv/Lib/site-packages/_virtualenv.py +130 -0
- quarchpy/venv/Lib/site-packages/_virtualenv.pyc +0 -0
- quarchpy/venv/Lib/site-packages/easy_install.py +5 -0
- quarchpy/venv/Lib/site-packages/pip/__init__.py +18 -0
- quarchpy/venv/Lib/site-packages/pip/__main__.py +26 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/__init__.py +17 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/build_env.py +242 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/cache.py +346 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/cli/__init__.py +4 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/cli/autocompletion.py +164 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/cli/base_command.py +260 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/cli/cmdoptions.py +971 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/cli/command_context.py +36 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/cli/main.py +75 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/cli/main_parser.py +96 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/cli/parser.py +285 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/cli/progress_bars.py +280 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/cli/req_command.py +436 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/cli/spinners.py +173 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/cli/status_codes.py +8 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/commands/__init__.py +123 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/commands/cache.py +234 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/commands/check.py +51 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/commands/completion.py +98 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/commands/configuration.py +280 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/commands/debug.py +230 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/commands/download.py +143 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/commands/freeze.py +116 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/commands/hash.py +63 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/commands/help.py +46 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/commands/install.py +737 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/commands/list.py +327 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/commands/search.py +169 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/commands/show.py +186 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/commands/uninstall.py +95 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/commands/wheel.py +198 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/configuration.py +407 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/distributions/__init__.py +24 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/distributions/base.py +46 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/distributions/installed.py +25 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/distributions/sdist.py +105 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/distributions/wheel.py +37 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/exceptions.py +391 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/index/__init__.py +2 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/index/collector.py +667 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/index/package_finder.py +1015 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/locations.py +193 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/main.py +16 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/models/__init__.py +2 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/models/candidate.py +39 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/models/direct_url.py +243 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/models/format_control.py +92 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/models/index.py +34 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/models/link.py +246 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/models/scheme.py +31 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/models/search_scope.py +135 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/models/selection_prefs.py +50 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/models/target_python.py +117 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/models/wheel.py +78 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/network/__init__.py +2 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/network/auth.py +310 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/network/cache.py +79 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/network/download.py +202 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/network/lazy_wheel.py +231 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/network/session.py +428 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/network/utils.py +97 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/network/xmlrpc.py +53 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/operations/__init__.py +0 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/operations/build/__init__.py +0 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/operations/build/metadata.py +38 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/operations/build/metadata_legacy.py +77 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/operations/build/wheel.py +47 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/operations/build/wheel_legacy.py +113 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/operations/check.py +155 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/operations/freeze.py +277 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/operations/install/__init__.py +2 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/operations/install/editable_legacy.py +52 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/operations/install/legacy.py +130 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/operations/install/wheel.py +846 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/operations/prepare.py +608 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/pyproject.py +196 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/req/__init__.py +103 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/req/constructors.py +476 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/req/req_file.py +574 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/req/req_install.py +907 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/req/req_set.py +204 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/req/req_tracker.py +151 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/req/req_uninstall.py +657 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/resolution/__init__.py +0 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/resolution/base.py +21 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py +0 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py +473 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py +0 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py +156 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py +604 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py +504 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +101 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py +174 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py +84 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py +201 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py +296 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/self_outdated_check.py +197 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/utils/__init__.py +0 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/utils/appdirs.py +44 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/utils/compat.py +293 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/utils/compatibility_tags.py +178 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/utils/datetime.py +14 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/utils/deprecation.py +104 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py +126 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/utils/distutils_args.py +48 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/utils/encoding.py +41 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/utils/entrypoints.py +31 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/utils/filesystem.py +224 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/utils/filetypes.py +26 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/utils/glibc.py +98 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/utils/hashes.py +169 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/utils/inject_securetransport.py +36 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/utils/logging.py +399 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/utils/misc.py +962 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/utils/models.py +44 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/utils/packaging.py +95 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/utils/parallel.py +107 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/utils/pkg_resources.py +44 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/utils/setuptools_build.py +181 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/utils/subprocess.py +299 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/utils/temp_dir.py +284 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/utils/typing.py +38 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/utils/unpacking.py +281 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/utils/urls.py +55 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/utils/virtualenv.py +119 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/utils/wheel.py +225 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/vcs/__init__.py +15 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/vcs/bazaar.py +123 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/vcs/git.py +454 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/vcs/mercurial.py +172 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/vcs/subversion.py +340 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/vcs/versioncontrol.py +735 -0
- quarchpy/venv/Lib/site-packages/pip/_internal/wheel_builder.py +362 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/__init__.py +114 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/appdirs.py +633 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py +11 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py +57 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py +133 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/cache.py +39 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py +2 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py +146 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py +33 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/compat.py +29 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/controller.py +376 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py +80 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py +135 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py +188 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py +29 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/certifi/__init__.py +3 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/certifi/__main__.py +12 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/certifi/cacert.pem +4606 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/certifi/core.py +60 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/__init__.py +39 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/big5freq.py +386 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/big5prober.py +47 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/chardistribution.py +233 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/charsetgroupprober.py +106 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/charsetprober.py +145 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/cli/__init__.py +1 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/cli/chardetect.py +85 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/codingstatemachine.py +88 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/compat.py +34 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/cp949prober.py +49 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/enums.py +76 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/escprober.py +101 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/escsm.py +246 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/eucjpprober.py +92 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/euckrfreq.py +195 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/euckrprober.py +47 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/euctwfreq.py +387 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/euctwprober.py +46 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/gb2312freq.py +283 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/gb2312prober.py +46 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/hebrewprober.py +292 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/jisfreq.py +325 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/jpcntx.py +233 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/langbulgarianmodel.py +228 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/langcyrillicmodel.py +333 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/langgreekmodel.py +225 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/langhebrewmodel.py +200 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/langhungarianmodel.py +225 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/langthaimodel.py +199 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/langturkishmodel.py +193 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/latin1prober.py +145 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/mbcharsetprober.py +91 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/mbcsgroupprober.py +54 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/mbcssm.py +572 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/sbcharsetprober.py +132 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/sbcsgroupprober.py +73 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/sjisprober.py +92 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/universaldetector.py +286 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/utf8prober.py +82 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/chardet/version.py +9 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/colorama/__init__.py +6 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/colorama/ansi.py +102 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/colorama/ansitowin32.py +258 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/colorama/initialise.py +80 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/colorama/win32.py +152 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/colorama/winterm.py +169 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/contextlib2.py +518 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/__init__.py +23 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/_backport/__init__.py +6 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/_backport/misc.py +41 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/_backport/shutil.py +764 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg +84 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/_backport/sysconfig.py +786 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/_backport/tarfile.py +2607 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/compat.py +1120 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/database.py +1339 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/index.py +516 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/locators.py +1302 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/manifest.py +393 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/markers.py +131 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/metadata.py +1056 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/resources.py +355 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/scripts.py +419 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/t32.exe +0 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/t64.exe +0 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/util.py +1761 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/version.py +736 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/w32.exe +0 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/w64.exe +0 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/distlib/wheel.py +1018 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/distro.py +1230 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/__init__.py +35 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/_ihatexml.py +289 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/_inputstream.py +918 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/_tokenizer.py +1735 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/__init__.py +5 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/_base.py +40 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/_trie/py.py +67 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/_utils.py +159 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/constants.py +2946 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/filters/__init__.py +0 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/filters/alphabeticalattributes.py +29 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/filters/base.py +12 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/filters/inject_meta_charset.py +73 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/filters/lint.py +93 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/filters/optionaltags.py +207 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/filters/sanitizer.py +916 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/filters/whitespace.py +38 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/html5parser.py +2795 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/serializer.py +409 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/__init__.py +30 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/genshi.py +54 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treeadapters/sax.py +50 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/__init__.py +88 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/base.py +417 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/dom.py +239 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/etree.py +343 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treebuilders/etree_lxml.py +392 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/__init__.py +154 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/base.py +252 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/dom.py +43 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/etree.py +131 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/etree_lxml.py +215 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/html5lib/treewalkers/genshi.py +69 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/idna/__init__.py +2 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/idna/codec.py +118 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/idna/compat.py +12 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/idna/core.py +400 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/idna/idnadata.py +2050 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/idna/intranges.py +53 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/idna/package_data.py +2 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/idna/uts46data.py +8357 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/ipaddress.py +2420 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/msgpack/__init__.py +54 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/msgpack/_version.py +1 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/msgpack/exceptions.py +48 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/msgpack/ext.py +191 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/msgpack/fallback.py +1063 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/__about__.py +27 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/__init__.py +26 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/_compat.py +38 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/_structures.py +86 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/_typing.py +48 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/markers.py +328 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/requirements.py +151 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/specifiers.py +864 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/tags.py +852 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/utils.py +67 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/packaging/version.py +556 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/pep517/__init__.py +6 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/pep517/_in_process.py +280 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/pep517/build.py +124 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/pep517/check.py +203 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/pep517/colorlog.py +115 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/pep517/compat.py +34 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/pep517/dirtools.py +44 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/pep517/envbuild.py +167 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/pep517/meta.py +92 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/pep517/wrappers.py +327 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py +3296 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/pkg_resources/py31compat.py +23 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/progress/__init__.py +177 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/progress/bar.py +91 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/progress/counter.py +41 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/progress/spinner.py +43 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/pyparsing.py +7107 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/requests/__init__.py +144 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/requests/__version__.py +14 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/requests/_internal_utils.py +42 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/requests/adapters.py +533 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/requests/api.py +161 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/requests/auth.py +305 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/requests/certs.py +18 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/requests/compat.py +76 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/requests/cookies.py +549 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/requests/exceptions.py +123 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/requests/help.py +119 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/requests/hooks.py +34 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/requests/models.py +956 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/requests/packages.py +16 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/requests/sessions.py +781 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/requests/status_codes.py +123 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/requests/structures.py +105 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/requests/utils.py +988 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/resolvelib/__init__.py +26 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/resolvelib/compat/__init__.py +0 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/resolvelib/compat/collections_abc.py +6 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/resolvelib/providers.py +119 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/resolvelib/reporters.py +37 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers.py +454 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/resolvelib/structs.py +149 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/retrying.py +267 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/six.py +982 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/toml/__init__.py +25 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/toml/decoder.py +1057 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/toml/encoder.py +304 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/toml/ordered.py +15 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/toml/tz.py +24 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/__init__.py +85 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/_collections.py +337 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/_version.py +2 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/connection.py +535 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py +1067 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py +0 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py +36 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py +0 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py +519 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py +396 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py +314 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py +121 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +509 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py +920 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py +216 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/exceptions.py +313 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/fields.py +274 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/filepost.py +98 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py +5 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py +0 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py +51 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/packages/six.py +1021 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/__init__.py +22 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py +160 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py +536 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/request.py +170 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/response.py +821 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py +49 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/connection.py +150 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py +56 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/queue.py +22 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/request.py +143 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/response.py +107 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/retry.py +601 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py +474 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py +221 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py +268 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/url.py +430 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/urllib3/util/wait.py +153 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/vendor.txt +24 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/webencodings/__init__.py +342 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/webencodings/labels.py +231 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/webencodings/mklabels.py +59 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/webencodings/tests.py +153 -0
- quarchpy/venv/Lib/site-packages/pip/_vendor/webencodings/x_user_defined.py +325 -0
- quarchpy/venv/Lib/site-packages/pip-20.3.4.dist-info/INSTALLER +1 -0
- quarchpy/venv/Lib/site-packages/pip-20.3.4.dist-info/LICENSE.txt +20 -0
- quarchpy/venv/Lib/site-packages/pip-20.3.4.dist-info/METADATA +94 -0
- quarchpy/venv/Lib/site-packages/pip-20.3.4.dist-info/RECORD +812 -0
- quarchpy/venv/Lib/site-packages/pip-20.3.4.dist-info/WHEEL +6 -0
- quarchpy/venv/Lib/site-packages/pip-20.3.4.dist-info/entry_points.txt +5 -0
- quarchpy/venv/Lib/site-packages/pip-20.3.4.dist-info/top_level.txt +1 -0
- quarchpy/venv/Lib/site-packages/pip-20.3.4.virtualenv +0 -0
- quarchpy/venv/Lib/site-packages/pkg_resources/__init__.py +3296 -0
- quarchpy/venv/Lib/site-packages/pkg_resources/__init__.pyc +0 -0
- quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/__init__.py +0 -0
- quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/__init__.pyc +0 -0
- quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/appdirs.py +608 -0
- quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/appdirs.pyc +0 -0
- quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/__about__.py +21 -0
- quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/__about__.pyc +0 -0
- quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/__init__.py +14 -0
- quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/__init__.pyc +0 -0
- quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/_compat.py +30 -0
- quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/_compat.pyc +0 -0
- quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/_structures.py +68 -0
- quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/_structures.pyc +0 -0
- quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/markers.py +301 -0
- quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/markers.pyc +0 -0
- quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/requirements.py +127 -0
- quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/requirements.pyc +0 -0
- quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/specifiers.py +774 -0
- quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/specifiers.pyc +0 -0
- quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/utils.py +14 -0
- quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/version.py +393 -0
- quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/packaging/version.pyc +0 -0
- quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/pyparsing.py +5742 -0
- quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/pyparsing.pyc +0 -0
- quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/six.py +868 -0
- quarchpy/venv/Lib/site-packages/pkg_resources/_vendor/six.pyc +0 -0
- quarchpy/venv/Lib/site-packages/pkg_resources/extern/__init__.py +73 -0
- quarchpy/venv/Lib/site-packages/pkg_resources/extern/__init__.pyc +0 -0
- quarchpy/venv/Lib/site-packages/pkg_resources/py31compat.py +23 -0
- quarchpy/venv/Lib/site-packages/pkg_resources/py31compat.pyc +0 -0
- quarchpy/venv/Lib/site-packages/setuptools/__init__.py +245 -0
- quarchpy/venv/Lib/site-packages/setuptools/_deprecation_warning.py +7 -0
- quarchpy/venv/Lib/site-packages/setuptools/_imp.py +73 -0
- quarchpy/venv/Lib/site-packages/setuptools/_vendor/__init__.py +0 -0
- quarchpy/venv/Lib/site-packages/setuptools/_vendor/ordered_set.py +488 -0
- quarchpy/venv/Lib/site-packages/setuptools/_vendor/packaging/__about__.py +27 -0
- quarchpy/venv/Lib/site-packages/setuptools/_vendor/packaging/__init__.py +26 -0
- quarchpy/venv/Lib/site-packages/setuptools/_vendor/packaging/_compat.py +31 -0
- quarchpy/venv/Lib/site-packages/setuptools/_vendor/packaging/_structures.py +68 -0
- quarchpy/venv/Lib/site-packages/setuptools/_vendor/packaging/markers.py +296 -0
- quarchpy/venv/Lib/site-packages/setuptools/_vendor/packaging/requirements.py +138 -0
- quarchpy/venv/Lib/site-packages/setuptools/_vendor/packaging/specifiers.py +749 -0
- quarchpy/venv/Lib/site-packages/setuptools/_vendor/packaging/tags.py +404 -0
- quarchpy/venv/Lib/site-packages/setuptools/_vendor/packaging/utils.py +57 -0
- quarchpy/venv/Lib/site-packages/setuptools/_vendor/packaging/version.py +420 -0
- quarchpy/venv/Lib/site-packages/setuptools/_vendor/pyparsing.py +5742 -0
- quarchpy/venv/Lib/site-packages/setuptools/_vendor/six.py +868 -0
- quarchpy/venv/Lib/site-packages/setuptools/archive_util.py +173 -0
- quarchpy/venv/Lib/site-packages/setuptools/build_meta.py +264 -0
- quarchpy/venv/Lib/site-packages/setuptools/cli-32.exe +0 -0
- quarchpy/venv/Lib/site-packages/setuptools/cli-64.exe +0 -0
- quarchpy/venv/Lib/site-packages/setuptools/cli.exe +0 -0
- quarchpy/venv/Lib/site-packages/setuptools/command/__init__.py +17 -0
- quarchpy/venv/Lib/site-packages/setuptools/command/alias.py +80 -0
- quarchpy/venv/Lib/site-packages/setuptools/command/bdist_egg.py +502 -0
- quarchpy/venv/Lib/site-packages/setuptools/command/bdist_rpm.py +43 -0
- quarchpy/venv/Lib/site-packages/setuptools/command/bdist_wininst.py +21 -0
- quarchpy/venv/Lib/site-packages/setuptools/command/build_clib.py +98 -0
- quarchpy/venv/Lib/site-packages/setuptools/command/build_ext.py +327 -0
- quarchpy/venv/Lib/site-packages/setuptools/command/build_py.py +270 -0
- quarchpy/venv/Lib/site-packages/setuptools/command/develop.py +221 -0
- quarchpy/venv/Lib/site-packages/setuptools/command/dist_info.py +36 -0
- quarchpy/venv/Lib/site-packages/setuptools/command/easy_install.py +2347 -0
- quarchpy/venv/Lib/site-packages/setuptools/command/egg_info.py +717 -0
- quarchpy/venv/Lib/site-packages/setuptools/command/install.py +125 -0
- quarchpy/venv/Lib/site-packages/setuptools/command/install_egg_info.py +62 -0
- quarchpy/venv/Lib/site-packages/setuptools/command/install_lib.py +121 -0
- quarchpy/venv/Lib/site-packages/setuptools/command/install_scripts.py +65 -0
- quarchpy/venv/Lib/site-packages/setuptools/command/launcher manifest.xml +15 -0
- quarchpy/venv/Lib/site-packages/setuptools/command/py36compat.py +136 -0
- quarchpy/venv/Lib/site-packages/setuptools/command/register.py +18 -0
- quarchpy/venv/Lib/site-packages/setuptools/command/rotate.py +66 -0
- quarchpy/venv/Lib/site-packages/setuptools/command/saveopts.py +22 -0
- quarchpy/venv/Lib/site-packages/setuptools/command/sdist.py +252 -0
- quarchpy/venv/Lib/site-packages/setuptools/command/setopt.py +149 -0
- quarchpy/venv/Lib/site-packages/setuptools/command/test.py +279 -0
- quarchpy/venv/Lib/site-packages/setuptools/command/upload.py +17 -0
- quarchpy/venv/Lib/site-packages/setuptools/command/upload_docs.py +206 -0
- quarchpy/venv/Lib/site-packages/setuptools/config.py +659 -0
- quarchpy/venv/Lib/site-packages/setuptools/dep_util.py +23 -0
- quarchpy/venv/Lib/site-packages/setuptools/depends.py +176 -0
- quarchpy/venv/Lib/site-packages/setuptools/dist.py +1274 -0
- quarchpy/venv/Lib/site-packages/setuptools/errors.py +16 -0
- quarchpy/venv/Lib/site-packages/setuptools/extension.py +57 -0
- quarchpy/venv/Lib/site-packages/setuptools/extern/__init__.py +73 -0
- quarchpy/venv/Lib/site-packages/setuptools/glob.py +174 -0
- quarchpy/venv/Lib/site-packages/setuptools/gui-32.exe +0 -0
- quarchpy/venv/Lib/site-packages/setuptools/gui-64.exe +0 -0
- quarchpy/venv/Lib/site-packages/setuptools/gui.exe +0 -0
- quarchpy/venv/Lib/site-packages/setuptools/installer.py +150 -0
- quarchpy/venv/Lib/site-packages/setuptools/launch.py +35 -0
- quarchpy/venv/Lib/site-packages/setuptools/lib2to3_ex.py +62 -0
- quarchpy/venv/Lib/site-packages/setuptools/monkey.py +179 -0
- quarchpy/venv/Lib/site-packages/setuptools/msvc.py +1679 -0
- quarchpy/venv/Lib/site-packages/setuptools/namespaces.py +107 -0
- quarchpy/venv/Lib/site-packages/setuptools/package_index.py +1136 -0
- quarchpy/venv/Lib/site-packages/setuptools/py27compat.py +60 -0
- quarchpy/venv/Lib/site-packages/setuptools/py31compat.py +32 -0
- quarchpy/venv/Lib/site-packages/setuptools/py33compat.py +59 -0
- quarchpy/venv/Lib/site-packages/setuptools/py34compat.py +13 -0
- quarchpy/venv/Lib/site-packages/setuptools/sandbox.py +491 -0
- quarchpy/venv/Lib/site-packages/setuptools/script (dev).tmpl +6 -0
- quarchpy/venv/Lib/site-packages/setuptools/script.tmpl +3 -0
- quarchpy/venv/Lib/site-packages/setuptools/site-patch.py +74 -0
- quarchpy/venv/Lib/site-packages/setuptools/ssl_support.py +260 -0
- quarchpy/venv/Lib/site-packages/setuptools/unicode_utils.py +44 -0
- quarchpy/venv/Lib/site-packages/setuptools/version.py +6 -0
- quarchpy/venv/Lib/site-packages/setuptools/wheel.py +220 -0
- quarchpy/venv/Lib/site-packages/setuptools/windows_support.py +29 -0
- quarchpy/venv/Lib/site-packages/setuptools-44.1.1.dist-info/INSTALLER +1 -0
- quarchpy/venv/Lib/site-packages/setuptools-44.1.1.dist-info/LICENSE +19 -0
- quarchpy/venv/Lib/site-packages/setuptools-44.1.1.dist-info/METADATA +86 -0
- quarchpy/venv/Lib/site-packages/setuptools-44.1.1.dist-info/RECORD +207 -0
- quarchpy/venv/Lib/site-packages/setuptools-44.1.1.dist-info/WHEEL +6 -0
- quarchpy/venv/Lib/site-packages/setuptools-44.1.1.dist-info/dependency_links.txt +2 -0
- quarchpy/venv/Lib/site-packages/setuptools-44.1.1.dist-info/entry_points.txt +69 -0
- quarchpy/venv/Lib/site-packages/setuptools-44.1.1.dist-info/top_level.txt +3 -0
- quarchpy/venv/Lib/site-packages/setuptools-44.1.1.dist-info/zip-safe +1 -0
- quarchpy/venv/Lib/site-packages/setuptools-44.1.1.virtualenv +0 -0
- quarchpy/venv/Lib/site-packages/wheel/__init__.py +1 -0
- quarchpy/venv/Lib/site-packages/wheel/__main__.py +19 -0
- quarchpy/venv/Lib/site-packages/wheel/bdist_wheel.py +492 -0
- quarchpy/venv/Lib/site-packages/wheel/cli/__init__.py +88 -0
- quarchpy/venv/Lib/site-packages/wheel/cli/convert.py +269 -0
- quarchpy/venv/Lib/site-packages/wheel/cli/pack.py +82 -0
- quarchpy/venv/Lib/site-packages/wheel/cli/unpack.py +25 -0
- quarchpy/venv/Lib/site-packages/wheel/macosx_libfile.py +428 -0
- quarchpy/venv/Lib/site-packages/wheel/metadata.py +133 -0
- quarchpy/venv/Lib/site-packages/wheel/pkginfo.py +43 -0
- quarchpy/venv/Lib/site-packages/wheel/util.py +46 -0
- quarchpy/venv/Lib/site-packages/wheel/vendored/__init__.py +0 -0
- quarchpy/venv/Lib/site-packages/wheel/vendored/packaging/__init__.py +0 -0
- quarchpy/venv/Lib/site-packages/wheel/vendored/packaging/_typing.py +48 -0
- quarchpy/venv/Lib/site-packages/wheel/vendored/packaging/tags.py +866 -0
- quarchpy/venv/Lib/site-packages/wheel/wheelfile.py +181 -0
- quarchpy/venv/Lib/site-packages/wheel-0.37.1.dist-info/INSTALLER +1 -0
- quarchpy/venv/Lib/site-packages/wheel-0.37.1.dist-info/LICENSE.txt +22 -0
- quarchpy/venv/Lib/site-packages/wheel-0.37.1.dist-info/METADATA +69 -0
- quarchpy/venv/Lib/site-packages/wheel-0.37.1.dist-info/RECORD +49 -0
- quarchpy/venv/Lib/site-packages/wheel-0.37.1.dist-info/WHEEL +6 -0
- quarchpy/venv/Lib/site-packages/wheel-0.37.1.dist-info/entry_points.txt +6 -0
- quarchpy/venv/Lib/site-packages/wheel-0.37.1.dist-info/top_level.txt +1 -0
- quarchpy/venv/Lib/site-packages/wheel-0.37.1.virtualenv +0 -0
- quarchpy/venv/Lib/site.py +190 -0
- quarchpy/venv/Lib/site.pyc +0 -0
- quarchpy/venv/Scripts/activate +83 -0
- quarchpy/venv/Scripts/activate.bat +39 -0
- quarchpy/venv/Scripts/activate.fish +100 -0
- quarchpy/venv/Scripts/activate.nu +41 -0
- quarchpy/venv/Scripts/activate.ps1 +60 -0
- quarchpy/venv/Scripts/activate_this.py +32 -0
- quarchpy/venv/Scripts/deactivate.bat +19 -0
- quarchpy/venv/Scripts/deactivate.nu +11 -0
- quarchpy/venv/Scripts/easy_install-2.7.exe +0 -0
- quarchpy/venv/Scripts/easy_install.exe +0 -0
- quarchpy/venv/Scripts/easy_install2.7.exe +0 -0
- quarchpy/venv/Scripts/easy_install2.exe +0 -0
- quarchpy/venv/Scripts/pip-2.7.exe +0 -0
- quarchpy/venv/Scripts/pip.exe +0 -0
- quarchpy/venv/Scripts/pip2.7.exe +0 -0
- quarchpy/venv/Scripts/pip2.exe +0 -0
- quarchpy/venv/Scripts/pydoc.bat +1 -0
- quarchpy/venv/Scripts/python.exe +0 -0
- quarchpy/venv/Scripts/python27.dll +0 -0
- quarchpy/venv/Scripts/pythonw.exe +0 -0
- quarchpy/venv/Scripts/wheel-2.7.exe +0 -0
- quarchpy/venv/Scripts/wheel.exe +0 -0
- quarchpy/venv/Scripts/wheel2.7.exe +0 -0
- quarchpy/venv/Scripts/wheel2.exe +0 -0
- quarchpy/venv/libs/_bsddb.lib +0 -0
- quarchpy/venv/libs/_ctypes.lib +0 -0
- quarchpy/venv/libs/_ctypes_test.lib +0 -0
- quarchpy/venv/libs/_elementtree.lib +0 -0
- quarchpy/venv/libs/_hashlib.lib +0 -0
- quarchpy/venv/libs/_msi.lib +0 -0
- quarchpy/venv/libs/_multiprocessing.lib +0 -0
- quarchpy/venv/libs/_socket.lib +0 -0
- quarchpy/venv/libs/_sqlite3.lib +0 -0
- quarchpy/venv/libs/_ssl.lib +0 -0
- quarchpy/venv/libs/_testcapi.lib +0 -0
- quarchpy/venv/libs/_tkinter.lib +0 -0
- quarchpy/venv/libs/bz2.lib +0 -0
- quarchpy/venv/libs/libpython27.a +0 -0
- quarchpy/venv/libs/pyexpat.lib +0 -0
- quarchpy/venv/libs/python27.lib +0 -0
- quarchpy/venv/libs/select.lib +0 -0
- quarchpy/venv/libs/unicodedata.lib +0 -0
- quarchpy/venv/libs/winsound.lib +0 -0
- quarchpy/venv/pyvenv.cfg +8 -0
- {quarchpy-2.1.13.dev1.dist-info → quarchpy-2.1.14.dist-info}/METADATA +12 -2
- quarchpy-2.1.14.dist-info/RECORD +1216 -0
- quarchpy/.idea/inspectionProfiles/Project_Default.xml +0 -26
- quarchpy/connection_specific/QPS/qps_lib/QuarchCommon-0.2.4.jar +0 -0
- quarchpy/connection_specific/connection_QIS.py.bak +0 -1821
- quarchpy/connection_specific/usb_libs/__pycache__/libusb1.cpython-311.pyc +0 -0
- quarchpy/connection_specific/usb_libs/__pycache__/usb1.cpython-311.pyc +0 -0
- quarchpy/debug/TextScanIP.py +0 -11
- quarchpy/device/device.py.bak +0 -504
- quarchpy/device/scanDevices.py.bak +0 -661
- quarchpy-2.1.13.dev1.dist-info/RECORD +0 -531
- {quarchpy-2.1.13.dev1.dist-info → quarchpy-2.1.14.dist-info}/WHEEL +0 -0
- {quarchpy-2.1.13.dev1.dist-info → quarchpy-2.1.14.dist-info}/top_level.txt +0 -0
@@ -1,3 +1,4 @@
|
|
1
|
+
import csv
|
1
2
|
import socket
|
2
3
|
import re
|
3
4
|
import time
|
@@ -9,7 +10,7 @@ import threading
|
|
9
10
|
import math
|
10
11
|
import logging
|
11
12
|
import struct
|
12
|
-
from
|
13
|
+
from io import StringIO
|
13
14
|
from quarchpy.user_interface import *
|
14
15
|
import xml.etree.ElementTree as ET
|
15
16
|
from connection_specific.StreamChannels import StreamGroups
|
@@ -46,13 +47,7 @@ class QisInterface:
|
|
46
47
|
self.streamSock.settimeout(5)
|
47
48
|
self.streamSock.connect((self.host, self.port))
|
48
49
|
self.pythonVersion = sys.version[0]
|
49
|
-
|
50
|
-
#time.sleep(3)
|
51
|
-
if self.pythonVersion == '3':
|
52
|
-
temp = '>'
|
53
|
-
self.cursor = temp.encode()
|
54
|
-
else:
|
55
|
-
self.cursor = '>'
|
50
|
+
self.cursor = '>'
|
56
51
|
#clear packets
|
57
52
|
welcomeString = self.streamSock.recv(self.maxRxBytes).rstrip()
|
58
53
|
|
@@ -111,19 +106,15 @@ class QisInterface:
|
|
111
106
|
def closeConnection(self, sock=None, conString=None):
|
112
107
|
if sock == None:
|
113
108
|
sock = self.sock
|
114
|
-
|
115
109
|
if conString is None:
|
116
110
|
cmd="close"
|
117
111
|
else:
|
118
112
|
cmd =conString+" close"
|
119
113
|
|
120
|
-
|
121
|
-
response = self.sendAndReceiveText(sock, cmd).decode()
|
122
|
-
else:
|
123
|
-
response = self.sendAndReceiveText(sock, cmd)
|
114
|
+
response = self.sendAndReceiveText(sock, cmd)
|
124
115
|
return response
|
125
116
|
|
126
|
-
def startStream(self, module, fileName, fileMaxMB, streamName, streamAverage, releaseOnData, separator, streamDuration = None):
|
117
|
+
def startStream(self, module, fileName, fileMaxMB, streamName, streamAverage, releaseOnData, separator, streamDuration = None, inMemoryData = None):
|
127
118
|
self.StreamRunSentSemaphore.acquire()
|
128
119
|
self.deviceDictSetup('QIS')
|
129
120
|
i = self.deviceMulti(module)
|
@@ -133,7 +124,7 @@ class QisInterface:
|
|
133
124
|
|
134
125
|
# Create the thread
|
135
126
|
t1 = threading.Thread(target=self.startStreamThread, name=module,
|
136
|
-
args=(module, fileName, fileMaxMB, streamName, streamAverage, releaseOnData, separator, streamDuration))
|
127
|
+
args=(module, fileName, fileMaxMB, streamName, streamAverage, releaseOnData, separator, streamDuration, inMemoryData))
|
137
128
|
# Start the thread
|
138
129
|
t1.start()
|
139
130
|
|
@@ -163,7 +154,6 @@ class QisInterface:
|
|
163
154
|
pass
|
164
155
|
# just wait until event is cleared
|
165
156
|
|
166
|
-
|
167
157
|
def stopStream(self, module, blocking = True):
|
168
158
|
moduleName=module.ConString
|
169
159
|
i = self.deviceMulti(moduleName)
|
@@ -191,15 +181,20 @@ class QisInterface:
|
|
191
181
|
else:
|
192
182
|
running = False
|
193
183
|
time.sleep(0.1)
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
184
|
+
|
185
|
+
def startStreamThread(self, module, fileName, fileMaxMB, streamName, streamAverage, releaseOnData, separator, streamDuration = None, inMemoryData = None):
|
186
|
+
# This is the function that is run when t1 is created. It is run in a seperate thread from
|
187
|
+
# the main application so streaming can happen without blocking the main application from
|
188
|
+
# doing other things. Within this function/thread you have to be very careful not to try
|
189
|
+
# and 'communicate' with anything from other threads. If you do, you MUST use a thread safe
|
190
|
+
# way of communicating. The thread creates it's own socket and should use that, NOT the objects socket
|
191
|
+
# (which some of the comms with module functions will use by default).
|
192
|
+
|
202
193
|
#Start module streaming and then read stream data
|
194
|
+
if inMemoryData is not None:
|
195
|
+
if not isinstance(inMemoryData, StringIO):
|
196
|
+
print("Error! The parameter 'inMemoryData' is NOT of type StringIO")
|
197
|
+
exit()
|
203
198
|
|
204
199
|
stripes = ['Empty Header']
|
205
200
|
#Send stream command so module starts streaming data into the backends buffer
|
@@ -234,6 +229,9 @@ class QisInterface:
|
|
234
229
|
formatHeader = self.streamHeaderFormat(device=module, sock=self.streamSock)
|
235
230
|
formatHeader = formatHeader.replace(", ", separator)
|
236
231
|
f.write(formatHeader + '\n')
|
232
|
+
if inMemoryData is not None:
|
233
|
+
inMemoryData.write(formatHeader + '\n')
|
234
|
+
|
237
235
|
numStripesPerRead = 4096
|
238
236
|
maxFileExceeded = False
|
239
237
|
openAttempts = 0
|
@@ -263,23 +261,22 @@ class QisInterface:
|
|
263
261
|
|
264
262
|
baseSamplePeriodS = int(re.search('^\d*\.?\d*', baseSamplePeriod).group())*(10**baseSampleUnitExponent)
|
265
263
|
|
266
|
-
# TODO: MD Thinks this implements software averaging, is unused and now performed in QIS
|
267
|
-
if streamAverage != None:
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
stripesPerAverage = float(streamAverage) / (float(baseSamplePeriod) * 4e-6)
|
264
|
+
# # TODO: MD Thinks this implements software averaging, is unused and now performed in QIS
|
265
|
+
# if streamAverage != None:
|
266
|
+
# #Matt converting streamAveraging into number
|
267
|
+
# streamAverage = self.convertStreamAverage(streamAverage)
|
268
|
+
# stripesPerAverage = float(streamAverage) / (float(baseSamplePeriodS) * 4e-6)
|
272
269
|
isRun = True
|
273
270
|
while isRun:
|
274
271
|
try:
|
275
|
-
with open(fileName, '
|
272
|
+
with open(fileName, 'a', newline='') as f: #changed from ab to a as all data should be in string format now regardless of py2 or py3
|
276
273
|
# Until the event threadRunEvent is set externally to this thread,
|
277
274
|
# loop and read from the stream
|
278
275
|
i = self.deviceMulti(module)
|
279
276
|
while self.stopFlagList[i] and (not streamOverrun) and (not streamComplete):
|
280
277
|
#now = time.time()
|
281
278
|
streamOverrun, removeChar, newStripes = self.streamGetStripesText(self.streamSock, module, numStripesPerRead)
|
282
|
-
newStripes = newStripes.replace(
|
279
|
+
newStripes = newStripes.replace(' ', separator)
|
283
280
|
#print (time.time() - now)
|
284
281
|
if streamOverrun:
|
285
282
|
self.deviceDict[module][0:3] = [True, 'Stopped', 'Device buffer overrun']
|
@@ -309,22 +306,31 @@ class QisInterface:
|
|
309
306
|
if streamDuration != None:
|
310
307
|
# Get the last data line in the file
|
311
308
|
lastLine = newStripes.splitlines()[-3] # the last data line is followed by 'eof' and '>'
|
312
|
-
lastTime = lastLine.
|
309
|
+
lastTime = lastLine.split(separator)[0] # get the first (time) entry
|
313
310
|
|
314
311
|
# if the last entry is still within the required stream length, write the whole lot
|
315
312
|
if int(lastTime) < int(streamDuration/(10**baseSampleUnitExponent)): # < rather than <= because we start at 0
|
313
|
+
newStripes = newStripes.replace(' ', separator)
|
316
314
|
f.write(newStripes[:removeChar])
|
315
|
+
if inMemoryData is not None:
|
316
|
+
inMemoryData.write(newStripes[:removeChar])
|
317
|
+
|
317
318
|
# else write each line individually until we have reached the desired endpoint
|
318
319
|
else:
|
319
320
|
for thisLine in newStripes.splitlines()[:-2]:
|
320
|
-
lastTime = thisLine.
|
321
|
+
lastTime = thisLine.split(separator)[0]
|
321
322
|
if int(lastTime) < int(streamDuration/(10**baseSampleUnitExponent)):
|
322
|
-
f.write(thisLine +
|
323
|
+
f.write(thisLine + '\r\n') # Put the CR back on the end
|
324
|
+
if inMemoryData is not None:
|
325
|
+
inMemoryData.write(thisLine + '\r\n')
|
323
326
|
else:
|
324
327
|
streamComplete = True
|
325
328
|
break
|
326
329
|
else:
|
330
|
+
newStripes = newStripes.replace(' ', separator)
|
327
331
|
f.write(newStripes[:removeChar])
|
332
|
+
if inMemoryData is not None:
|
333
|
+
inMemoryData.write(newStripes[:removeChar])
|
328
334
|
|
329
335
|
else:
|
330
336
|
maxFileExceeded = True
|
@@ -332,6 +338,9 @@ class QisInterface:
|
|
332
338
|
maxFileStatus = self.streamBufferStatus(device=module, sock=self.streamSock)
|
333
339
|
f.write('Warning: Max file size exceeded before end of stream.\n')
|
334
340
|
f.write('Unrecorded stripes in buffer when file full: ' + maxFileStatus + '.')
|
341
|
+
if inMemoryData is not None:
|
342
|
+
inMemoryData.write('Warning: Max file size exceeded before end of stream.\n')
|
343
|
+
inMemoryData.write('Unrecorded stripes in buffer when file full: ' + maxFileStatus + '.')
|
335
344
|
self.deviceDict[module][0:3] = [True, 'Stopped', 'User defined max filesize reached']
|
336
345
|
break
|
337
346
|
else:
|
@@ -379,8 +388,10 @@ class QisInterface:
|
|
379
388
|
if(streamAverage != None):
|
380
389
|
leftover, remainingStripes = self.averageStripes(leftover, stripesPerAverage, newStripes[:removeChar], f, remainingStripes)
|
381
390
|
else:
|
382
|
-
newStripes = newStripes.replace(
|
391
|
+
newStripes = newStripes.replace(' ',separator)
|
383
392
|
f.write(newStripes[:removeChar])
|
393
|
+
if inMemoryData is not None:
|
394
|
+
inMemoryData.write(newStripes[:removeChar])
|
384
395
|
else:
|
385
396
|
if not maxFileExceeded:
|
386
397
|
maxFileStatus = self.streamBufferStatus(device=module, sock=self.streamSock)
|
@@ -395,6 +406,9 @@ class QisInterface:
|
|
395
406
|
if maxFileExceeded:
|
396
407
|
f.write(b'Warning: Max file size exceeded before end of stream.\n')
|
397
408
|
f.write(b'Unrecorded stripes in buffer when file full: ' + maxFileStatus + '.')
|
409
|
+
if inMemoryData is not None:
|
410
|
+
inMemoryData.write(b'Warning: Max file size exceeded before end of stream.\n')
|
411
|
+
inMemoryData.write(b'Unrecorded stripes in buffer when file full: ' + maxFileStatus + '.')
|
398
412
|
logging.warning('Max file size exceeded. Some data has not been saved to file: ' + maxFileStatus + '.')
|
399
413
|
|
400
414
|
#printText('Stripes in buffer now: ' + self.streamBufferStatus(device=module, sock=self.streamSock))
|
@@ -466,11 +480,10 @@ class QisInterface:
|
|
466
480
|
leftover = 0
|
467
481
|
remainingStripes = []
|
468
482
|
streamOverrun = False
|
469
|
-
if streamAverage != None:
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
stripesPerAverage = float(streamAverage) / (float(baseSamplePeriod) * 4e-6)
|
483
|
+
# if streamAverage != None:
|
484
|
+
# # Matt converting streamAveraging into number
|
485
|
+
# streamAverage = self.convertStreamAverage(streamAverage)
|
486
|
+
# stripesPerAverage = float(streamAverage) / (float(baseSamplePeriodS) * 4e-6)
|
474
487
|
|
475
488
|
isRun = True
|
476
489
|
|
@@ -486,7 +499,7 @@ class QisInterface:
|
|
486
499
|
# now = time.time()
|
487
500
|
streamOverrun, removeChar, newStripes = self.streamGetStripesText(self.streamSock, module,
|
488
501
|
numStripesPerRead)
|
489
|
-
newStripes = newStripes.replace(
|
502
|
+
newStripes = newStripes.replace(' ',separator)
|
490
503
|
# print(newStripes)
|
491
504
|
# print(len(newStripes))
|
492
505
|
|
@@ -500,11 +513,7 @@ class QisInterface:
|
|
500
513
|
if isEmpty == False:
|
501
514
|
# Writes in file if not too big else stops streaming
|
502
515
|
# print(newStripes)
|
503
|
-
|
504
|
-
x = newStripes[:removeChar]
|
505
|
-
y = x.decode("utf-8")
|
506
|
-
|
507
|
-
print("decoded stripe : " + y)
|
516
|
+
print("decoded stripe : " + newStripes[:removeChar])
|
508
517
|
|
509
518
|
# Writing multiple stripes
|
510
519
|
if "\r\n" in y:
|
@@ -583,7 +592,7 @@ class QisInterface:
|
|
583
592
|
continue
|
584
593
|
with open(os.path.join(self.qps_record_dir_path, "data000",
|
585
594
|
"data000_00" + index - 1 + "_000000000"),
|
586
|
-
"
|
595
|
+
"a") as file1:#changed from ab to a as all data should be in string format now regardless of py2 or py3
|
587
596
|
|
588
597
|
x = struct.pack(">d", int(item))
|
589
598
|
# logging.debug(item, x)
|
@@ -606,7 +615,7 @@ class QisInterface:
|
|
606
615
|
|
607
616
|
with open(os.path.join(self.qps_record_dir_path, "data000",
|
608
617
|
"data000_"+x+"_000000000"),
|
609
|
-
"
|
618
|
+
"a") as file1:#changed from ab to a as all data should be in string format now regardless of py2 or py3
|
610
619
|
x = struct.pack(">d", int(stripe[counter]))
|
611
620
|
# logging.debug(item, x)
|
612
621
|
file1.write(x)
|
@@ -614,195 +623,10 @@ class QisInterface:
|
|
614
623
|
# Write all in group 1 to digital
|
615
624
|
with open(os.path.join(self.qps_record_dir_path, "data101",
|
616
625
|
"data101_"+x+"_000000000"),
|
617
|
-
"
|
626
|
+
"a") as file1:#changed from ab to a as all data should be in string format now regardless of py2 or py3
|
618
627
|
x = struct.pack(">d", int(stripe[counter]))
|
619
628
|
# logging.debug(item, x)
|
620
629
|
file1.write(x)
|
621
|
-
|
622
|
-
|
623
|
-
# Send text and get the backends response. - acts as wrapper to the sendAndReceiveText, intended to provide some extra convenience
|
624
|
-
# when sending commands to module (as opposed to back end)
|
625
|
-
# If read until cursor is set to True (which is default) then keep reading response until a cursor is returned as the last character of result string
|
626
|
-
# After command is sent wait for betweenCommandDelay which defaults to 0 but can be specified to add a delay between commands
|
627
|
-
# The objects connection needs to be opened (connect()) before this is used
|
628
|
-
def sendCmd(self, device='', cmd='$help', sock=None, readUntilCursor=True, betweenCommandDelay=0.0, expectedResponse = True):
|
629
|
-
if sock==None:
|
630
|
-
sock = self.sock
|
631
|
-
if not (device == ''):
|
632
|
-
self.deviceDictSetup(device)
|
633
|
-
|
634
|
-
if expectedResponse is False:
|
635
|
-
self.sendText(sock, cmd, device)
|
636
|
-
return
|
637
|
-
|
638
|
-
res = self.sendAndReceiveText(sock, cmd, device, readUntilCursor)
|
639
|
-
if (betweenCommandDelay > 0):
|
640
|
-
time.sleep(betweenCommandDelay)
|
641
|
-
#If ends with cursor get rid of it
|
642
|
-
if res[-1:] == self.cursor:
|
643
|
-
res = res[:-3] #remove last three chars - hopefully '\r\n>'
|
644
|
-
# time.sleep(0.1)
|
645
|
-
return res.decode()
|
646
|
-
|
647
|
-
|
648
|
-
def sendAndReceiveCmd(self, sock=None, cmd='$help', device='', readUntilCursor=True, betweenCommandDelay=0.0):
|
649
|
-
if sock==None:
|
650
|
-
sock = self.sock
|
651
|
-
if not (device == ''):
|
652
|
-
self.deviceDictSetup(device)
|
653
|
-
if self.pythonVersion == '3':
|
654
|
-
res = self.sendAndReceiveText(sock, cmd, device, readUntilCursor).decode()
|
655
|
-
else:
|
656
|
-
res = self.sendAndReceiveText(sock, cmd, device, readUntilCursor)
|
657
|
-
if (betweenCommandDelay > 0):
|
658
|
-
time.sleep(betweenCommandDelay)
|
659
|
-
#If ends with cursor get rid of it
|
660
|
-
if res[-1:] == '>':
|
661
|
-
res = res[:-3] #remove last three chars - hopefully '\r\n>'
|
662
|
-
return cmd + ' : ' + res
|
663
|
-
|
664
|
-
# Send text to the back end then read it's response
|
665
|
-
# The objects connection needs to be opened (connect()) before this is used
|
666
|
-
# If read until cursor is set to True (which is default) then keep reading response until a cursor is returned as the last character of result string
|
667
|
-
def sendAndReceiveText(self, sock, sentText='$help', device='', readUntilCursor=True):
|
668
|
-
self.sockSemaphore.acquire()
|
669
|
-
try:
|
670
|
-
self.sendText(sock, sentText, device)
|
671
|
-
if self.pythonVersion == '3':
|
672
|
-
res = bytearray()
|
673
|
-
res.extend(self.rxBytes(sock))
|
674
|
-
#Somtimes we just get one cursor back of currently unknown origins
|
675
|
-
#If that happens discard it and read again
|
676
|
-
if len(res)==0:
|
677
|
-
logging.warning("empty response from QIS. Retrying.")
|
678
|
-
streamResp=self.sendAndReceiveText(sock, "stream?",device,readUntilCursor).lower()
|
679
|
-
if len(streamResp)==0:
|
680
|
-
raise("Empty response from QIS twice in a row")
|
681
|
-
else:
|
682
|
-
logging.warning("Response recovered Successfully. Continuing.")
|
683
|
-
res = bytearray()
|
684
|
-
res.extend(self.rxBytes(sock))
|
685
|
-
if len(res) == 0:
|
686
|
-
raise ("empty response from QIS after second ")
|
687
|
-
if res[0] == self.cursor:
|
688
|
-
#res[0] = self.rxBytes(sock)
|
689
|
-
logging.warning('Only Returned Cursor!!!!!')
|
690
|
-
#If create socked fail (between backend and tcp/ip module)
|
691
|
-
cba = 'Create Socket Fail'
|
692
|
-
if cba.encode() == res[0]:
|
693
|
-
logging.warning(res[0].decode())
|
694
|
-
cba = 'Connection Timeout'
|
695
|
-
if cba.encode() == res[0]:
|
696
|
-
logging.warning(res[0].decode())
|
697
|
-
#If reading until a cursor comes back then keep reading until a cursor appears or max tries exceeded
|
698
|
-
if readUntilCursor:
|
699
|
-
maxReads = 1000
|
700
|
-
count = 1
|
701
|
-
#check for cursor at end of read and if not there read again
|
702
|
-
while res[-1:] != self.cursor:
|
703
|
-
res.extend(self.rxBytes(sock))
|
704
|
-
count += 1
|
705
|
-
if count >= maxReads:
|
706
|
-
raise Exception(' Count = Error: max reads exceeded before cursor returned')
|
707
|
-
return res
|
708
|
-
else:
|
709
|
-
res = self.rxBytes(sock)
|
710
|
-
#Somtimes we just get one cursor back of currently unknown origins
|
711
|
-
#If that happens discard it and read again
|
712
|
-
if res == self.cursor:
|
713
|
-
#printText(" CURSOR ONLY")
|
714
|
-
res = self.rxBytes(sock)
|
715
|
-
#If create socked fail (between backend and tcp/ip module)
|
716
|
-
if 'Create Socket Fail' in res:
|
717
|
-
raise Exception(res)
|
718
|
-
if 'Connection Timeout' in res:
|
719
|
-
raise Exception(res)
|
720
|
-
#If reading until a cursor comes back then keep reading until a cursor appears or max tries exceeded
|
721
|
-
if readUntilCursor:
|
722
|
-
maxReads = 1000
|
723
|
-
count = 1
|
724
|
-
#check for cursor at end of read and if not there read again
|
725
|
-
while res[-1:] != self.cursor:
|
726
|
-
res += self.rxBytes(sock)
|
727
|
-
count += 1
|
728
|
-
if count >= maxReads:
|
729
|
-
raise Exception(' Count = Error: max reads exceeded before cursor returned')
|
730
|
-
return res
|
731
|
-
|
732
|
-
except Exception as e:
|
733
|
-
raise e
|
734
|
-
finally:
|
735
|
-
self.sockSemaphore.release()
|
736
|
-
|
737
|
-
def rxBytes(self,sock):
|
738
|
-
#sock.setblocking(0) #make socket non-blocking
|
739
|
-
#printText('rxBytes')
|
740
|
-
maxExceptions=10
|
741
|
-
exceptions=0
|
742
|
-
maxReadRepeats=50
|
743
|
-
readRepeats=0
|
744
|
-
timeout_in_seconds = 10
|
745
|
-
#Keep trying to read bytes until we get some, unless number of read repeads or exceptions is exceeded
|
746
|
-
while True:
|
747
|
-
try:
|
748
|
-
#select.select returns a list of waitable objects which are ready. On windows it has to be sockets.
|
749
|
-
#The first arguement is a list of objects to wait for reading, second writing, third 'exceptional condition'
|
750
|
-
#We only use the read list and our socket to check if it is readable. if no timeout is specified then it blocks until it becomes readable.
|
751
|
-
ready = select.select([sock], [], [], timeout_in_seconds)
|
752
|
-
#time.sleep(0.1)
|
753
|
-
#ready = [1,2]
|
754
|
-
if ready[0]:
|
755
|
-
ret = sock.recv(self.maxRxBytes)
|
756
|
-
#time.sleep(0.1)
|
757
|
-
return ret
|
758
|
-
else:
|
759
|
-
#printText('rxBytes - readRepeats + 1')
|
760
|
-
|
761
|
-
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
762
|
-
sock.connect((self.host, self.port))
|
763
|
-
sock.settimeout(5)
|
764
|
-
|
765
|
-
try:
|
766
|
-
welcomeString = self.sock.recv(self.maxRxBytes).rstrip()
|
767
|
-
welcomeString = 'Connected@' + self.host + ':' + str(self.port) + ' ' + '\n ' + welcomeString
|
768
|
-
printText('New Welcome:' + welcomeString)
|
769
|
-
except Exception as e:
|
770
|
-
logging.error('tried and failed to get new welcome')
|
771
|
-
raise e
|
772
|
-
|
773
|
-
readRepeats=readRepeats+1
|
774
|
-
time.sleep(0.5)
|
775
|
-
|
776
|
-
except Exception as e:
|
777
|
-
#printText('rxBytes - exceptions + 1')
|
778
|
-
exceptions=exceptions+1
|
779
|
-
time.sleep(0.5)
|
780
|
-
raise e
|
781
|
-
|
782
|
-
#If read repeats has been exceeded we failed to get any data on this read.
|
783
|
-
# !!! This is likely to break whatever called us !!!
|
784
|
-
if readRepeats >= maxReadRepeats:
|
785
|
-
logging.error('Max read repeats exceeded - returning.')
|
786
|
-
return 'No data received from QIS'
|
787
|
-
#If number of exceptions exceeded then give up by exiting
|
788
|
-
if exceptions >= maxExceptions:
|
789
|
-
logging.error('Max exceptions exceeded - exiting') #exceptions are probably 10035 non-blocking socket could not complete immediatley
|
790
|
-
exit()
|
791
|
-
|
792
|
-
# Send text to the back end don't read it's response
|
793
|
-
# The objects connection needs to be opened (connect()) before this is used
|
794
|
-
def sendText(self, sock, message='$help', device=''):
|
795
|
-
if device != '':
|
796
|
-
specialTimeout = '%500000'
|
797
|
-
message = device + specialTimeout + ' ' + message
|
798
|
-
#printText('Sending: "' + message + '" ' + self.host + ':' + str(self.port))
|
799
|
-
|
800
|
-
if self.pythonVersion == 2:
|
801
|
-
sock.sendall(message + '\r\n')
|
802
|
-
else:
|
803
|
-
convM = message + '\r\n'
|
804
|
-
sock.sendall(convM.encode('utf-8'))
|
805
|
-
return 'Sent:' + message
|
806
630
|
|
807
631
|
# Query the backend for a list of connected modules. A $scan command is sent to refresh the list of devices,
|
808
632
|
# Then a wait occurs while the backend discovers devices (network ones can take a while) and then a list of device name strings is returned
|
@@ -811,21 +635,9 @@ class QisInterface:
|
|
811
635
|
|
812
636
|
if sock == None:
|
813
637
|
sock = self.sock
|
814
|
-
|
815
|
-
#printText('Scanning for devices and waiting ' + str(scanWait) + ' seconds.')
|
816
|
-
if self.pythonVersion == '3':
|
817
|
-
#devString = self.sendAndReceiveText(sock, '$scan').decode
|
818
|
-
#time.sleep(scanWait)
|
819
|
-
devString = self.sendAndReceiveText(sock, '$list').decode()
|
820
|
-
else:
|
821
|
-
#devString = self.sendAndReceiveText(sock, '$scan')
|
822
|
-
#time.sleep(scanWait)
|
823
|
-
devString = self.sendAndReceiveText(sock, '$list')
|
824
|
-
|
638
|
+
devString = self.sendAndReceiveText(sock, '$list')
|
825
639
|
devString = devString.replace('>', '')
|
826
|
-
devString = devString.replace(r'\d+\) ', '')
|
827
|
-
|
828
|
-
#printText('"' + devString + '"')
|
640
|
+
devString = devString.replace(r'\d+\) ', '')
|
829
641
|
devString = devString.split('\r\n')
|
830
642
|
devString = filter(None, devString) #remove empty elements
|
831
643
|
return devString
|
@@ -833,21 +645,10 @@ class QisInterface:
|
|
833
645
|
def get_list_details(self, sock=None):
|
834
646
|
if sock == None:
|
835
647
|
sock = self.sock
|
836
|
-
scanWait = 2
|
837
|
-
# printText('Scanning for devices and waiting ' + str(scanWait) + ' seconds.')
|
838
|
-
if self.pythonVersion == '3':
|
839
|
-
# devString = self.sendAndReceiveText(sock, '$scan').decode
|
840
|
-
# time.sleep(scanWait)
|
841
|
-
devString = self.sendAndReceiveText(sock, '$list details').decode()
|
842
|
-
else:
|
843
|
-
# devString = self.sendAndReceiveText(sock, '$scan')
|
844
|
-
# time.sleep(scanWait)
|
845
|
-
devString = self.sendAndReceiveText(sock, '$list details')
|
846
648
|
|
649
|
+
devString = self.sendAndReceiveText(sock, '$list details')
|
847
650
|
devString = devString.replace('>', '')
|
848
651
|
devString = devString.replace(r'\d+\) ', '')
|
849
|
-
|
850
|
-
# printText('"' + devString + '"')
|
851
652
|
devString = devString.split('\r\n')
|
852
653
|
devString = [x for x in devString if x] # remove empty elements
|
853
654
|
return devString
|
@@ -886,9 +687,6 @@ class QisInterface:
|
|
886
687
|
logging.warning(e)
|
887
688
|
logging.warning("No module found at " + ipAddress)
|
888
689
|
|
889
|
-
|
890
|
-
|
891
|
-
|
892
690
|
def GetQisModuleSelection(self, favouriteOnly=True , additionalOptions=['rescan', 'all con types', 'ip scan'], scan=True):
|
893
691
|
tableHeaders =["Modules"]
|
894
692
|
ip_address = None
|
@@ -924,33 +722,19 @@ class QisInterface:
|
|
924
722
|
foundDevices = "1"
|
925
723
|
foundDevices2 = "2" # this is used to check if new modules are being discovered or if all have been found.
|
926
724
|
scanWait = 2 # The number of seconds waited between the two scans.
|
927
|
-
if self.pythonVersion == '3':
|
928
|
-
if scan:
|
929
|
-
if ipAddress == None:
|
930
|
-
devString = self.sendAndReceiveText(self.sock, '$scan').decode
|
931
|
-
else:
|
932
|
-
devString = self.sendAndReceiveText(self.sock, '$scan TCP::' + ipAddress).decode
|
933
|
-
time.sleep(scanWait)
|
934
|
-
while foundDevices not in foundDevices2:
|
935
|
-
foundDevices = self.sendAndReceiveText(self.sock, '$list').decode()
|
936
|
-
time.sleep(scanWait)
|
937
|
-
foundDevices2 = self.sendAndReceiveText(self.sock, '$list').decode()
|
938
|
-
else:
|
939
|
-
foundDevices = self.sendAndReceiveText(self.sock, '$list').decode()
|
940
725
|
|
941
|
-
|
942
|
-
if
|
943
|
-
|
944
|
-
devString = self.sendAndReceiveText(self.sock, '$scan').decode
|
945
|
-
else:
|
946
|
-
devString = self.sendAndReceiveText(self.sock, '$scan TCP::' + ipAddress).decode
|
947
|
-
time.sleep(scanWait)
|
948
|
-
while foundDevices not in foundDevices2:
|
949
|
-
foundDevices = self.sendAndReceiveText(self.sock, '$list')
|
950
|
-
time.sleep(scanWait)
|
951
|
-
foundDevices2 = self.sendAndReceiveText(self.sock, '$list')
|
726
|
+
if scan:
|
727
|
+
if ipAddress == None:
|
728
|
+
devString = self.sendAndReceiveText(self.sock, '$scan')
|
952
729
|
else:
|
730
|
+
devString = self.sendAndReceiveText(self.sock, '$scan TCP::' + ipAddress)
|
731
|
+
time.sleep(scanWait)
|
732
|
+
while foundDevices not in foundDevices2:
|
953
733
|
foundDevices = self.sendAndReceiveText(self.sock, '$list')
|
734
|
+
time.sleep(scanWait)
|
735
|
+
foundDevices2 = self.sendAndReceiveText(self.sock, '$list')
|
736
|
+
else:
|
737
|
+
foundDevices = self.sendAndReceiveText(self.sock, '$list')
|
954
738
|
|
955
739
|
if not "no devices found" in foundDevices.lower():
|
956
740
|
foundDevices = foundDevices.replace('>', '')
|
@@ -1000,10 +784,7 @@ class QisInterface:
|
|
1000
784
|
if sock == None:
|
1001
785
|
sock = self.sock
|
1002
786
|
index = 0 # index of relevant line in split string
|
1003
|
-
|
1004
|
-
streamStatus = self.sendAndReceiveText(sock, 'stream?', device).decode()
|
1005
|
-
else:
|
1006
|
-
streamStatus = self.sendAndReceiveText(sock, 'stream?', device)
|
787
|
+
streamStatus = self.sendAndReceiveText(sock, 'stream?', device)
|
1007
788
|
streamStatus = streamStatus.split('\r\n')
|
1008
789
|
streamStatus[index] = re.sub(r':', '', streamStatus[index]) #remove :
|
1009
790
|
return streamStatus[index]
|
@@ -1014,10 +795,7 @@ class QisInterface:
|
|
1014
795
|
if sock == None:
|
1015
796
|
sock = self.sock
|
1016
797
|
index = 1 # index of relevant line in split string
|
1017
|
-
|
1018
|
-
streamStatus = self.sendAndReceiveText(sock, 'stream?', device).decode()
|
1019
|
-
else:
|
1020
|
-
streamStatus = self.sendAndReceiveText(sock, 'stream?', device)
|
798
|
+
streamStatus = self.sendAndReceiveText(sock, 'stream?', device)
|
1021
799
|
streamStatus = streamStatus.split('\r\n')
|
1022
800
|
streamStatus[index] = re.sub(r'^Stripes Buffered: ', '', streamStatus[index])
|
1023
801
|
return streamStatus[index]
|
@@ -1032,10 +810,7 @@ class QisInterface:
|
|
1032
810
|
if sock == None:
|
1033
811
|
sock = self.sock
|
1034
812
|
index = 2 # index of relevant line in split string
|
1035
|
-
|
1036
|
-
streamStatus = self.sendAndReceiveText(sock, sentText='stream text header', device=device).decode()
|
1037
|
-
else:
|
1038
|
-
streamStatus = self.sendAndReceiveText(sock, sentText='stream text header', device=device)
|
813
|
+
streamStatus = self.sendAndReceiveText(sock, sentText='stream text header', device=device)
|
1039
814
|
|
1040
815
|
self.qps_stream_header = streamStatus
|
1041
816
|
|
@@ -1076,10 +851,7 @@ class QisInterface:
|
|
1076
851
|
if sock == None:
|
1077
852
|
sock = self.sock
|
1078
853
|
index = 0 # index of relevant line in split string
|
1079
|
-
|
1080
|
-
streamStatus = self.sendAndReceiveText(sock,'stream text header', device).decode()
|
1081
|
-
else:
|
1082
|
-
streamStatus = self.sendAndReceiveText(sock,'stream text header', device)
|
854
|
+
streamStatus = self.sendAndReceiveText(sock,'stream text header', device)
|
1083
855
|
streamStatus = streamStatus.split('\r\n')
|
1084
856
|
if 'Header Not Available' in streamStatus[0]:
|
1085
857
|
str = streamStatus[0] + '. Check stream has been ran on device.'
|
@@ -1106,10 +878,7 @@ class QisInterface:
|
|
1106
878
|
if sock == None:
|
1107
879
|
sock = self.sock
|
1108
880
|
index = 1 # index of relevant line in split string STREAM MODE HEADER [?|V1,V2,V3]
|
1109
|
-
|
1110
|
-
streamStatus = self.sendAndReceiveText(sock,'stream text header', device).decode()
|
1111
|
-
else:
|
1112
|
-
streamStatus = self.sendAndReceiveText(sock,'stream text header', device)
|
881
|
+
streamStatus = self.sendAndReceiveText(sock,'stream text header', device)
|
1113
882
|
# Check if this is a new XML form header
|
1114
883
|
if (self.isXmlHeader (streamStatus)):
|
1115
884
|
# Get the basic averaging rate (V3 header)
|
@@ -1144,12 +913,8 @@ class QisInterface:
|
|
1144
913
|
str = streamStatus[0] + '. Check stream has been ran on device.'
|
1145
914
|
logging.error(str)
|
1146
915
|
return str
|
1147
|
-
|
1148
|
-
|
1149
|
-
powerMode = self.sendAndReceiveText(sock,'stream mode power?', device).decode()
|
1150
|
-
else:
|
1151
|
-
outputMode = self.sendAndReceiveText(sock,'Config Output Mode?', device)
|
1152
|
-
powerMode = self.sendAndReceiveText(sock,'stream mode power?', device)
|
916
|
+
outputMode = self.sendAndReceiveText(sock,'Config Output Mode?', device)
|
917
|
+
powerMode = self.sendAndReceiveText(sock,'stream mode power?', device)
|
1153
918
|
format = int(re.sub(r'^Format: ', '', streamStatus[index]))
|
1154
919
|
b0 = 1 #12V_I
|
1155
920
|
b1 = 1 << 1 #12V_V
|
@@ -1190,10 +955,7 @@ class QisInterface:
|
|
1190
955
|
bufferStatus = False
|
1191
956
|
# Allows the status check to be skipped when emptying the buffer after streaming has stopped (saving time)
|
1192
957
|
if (skipStatusCheck == False):
|
1193
|
-
|
1194
|
-
streamStatus = self.sendAndReceiveText(sock, 'stream?', device).decode()
|
1195
|
-
else:
|
1196
|
-
streamStatus = self.sendAndReceiveText(sock, 'stream?', device)
|
958
|
+
streamStatus = self.sendAndReceiveText(sock, 'stream?', device)
|
1197
959
|
if ('Overrun' in streamStatus) or ('8388608 of 8388608' in streamStatus):
|
1198
960
|
bufferStatus = True
|
1199
961
|
stripes = self.sendAndReceiveText(sock, 'stream text all', device, readUntilCursor=True)
|
@@ -1201,11 +963,7 @@ class QisInterface:
|
|
1201
963
|
if stripes[-1:] != self.cursor:
|
1202
964
|
return "Error no cursor returned."
|
1203
965
|
else:
|
1204
|
-
|
1205
|
-
endOfFile = 'eof\r\n>'
|
1206
|
-
genEndOfFile = endOfFile.encode()
|
1207
|
-
else:
|
1208
|
-
genEndOfFile = 'eof\r\n>'
|
966
|
+
genEndOfFile = 'eof\r\n>'
|
1209
967
|
if stripes[-6:] == genEndOfFile:
|
1210
968
|
removeChar = -6
|
1211
969
|
else:
|
@@ -1266,8 +1024,6 @@ class QisInterface:
|
|
1266
1024
|
finalAverage = splitList[0:2] + [str(round(x / streamAverage)) for x in runningAverage]
|
1267
1025
|
for counter in xrange(len(finalAverage)-1):
|
1268
1026
|
finalAverage[counter] = finalAverage[counter] + ' '
|
1269
|
-
if self.pythonVersion == '3':
|
1270
|
-
finalAverage = finalAverage.encode
|
1271
1027
|
for x in finalAverage:
|
1272
1028
|
f.write(x)
|
1273
1029
|
f.write('\r\n')
|
@@ -1352,10 +1108,7 @@ class QisInterface:
|
|
1352
1108
|
sock = self.sock
|
1353
1109
|
|
1354
1110
|
# Get the raw data
|
1355
|
-
|
1356
|
-
headerData = self.sendAndReceiveText(sock, sentText='stream text header', device=device).decode()
|
1357
|
-
else:
|
1358
|
-
headerData = self.sendAndReceiveText(sock, sentText='stream text header', device=device)
|
1111
|
+
headerData = self.sendAndReceiveText(sock, sentText='stream text header', device=device)
|
1359
1112
|
|
1360
1113
|
# The XML can contain the cursor on the end! Trap and remove it here TODO: Needs fixed in the command layer above
|
1361
1114
|
if ('\r\n>' in headerData):
|
@@ -1482,10 +1235,10 @@ class QisInterface:
|
|
1482
1235
|
folder_name = None
|
1483
1236
|
# Checking if there was a directory passed; and if it's a valid directory
|
1484
1237
|
if not directory:
|
1485
|
-
directory = os.path.join(
|
1238
|
+
directory = os.path.join(os.path.expanduser("~"), "AppData", "Local", "Quarch", "QPS", "Recordings")
|
1486
1239
|
logging.debug("No directory specified")
|
1487
1240
|
elif not os.path.isdir(directory):
|
1488
|
-
new_dir = os.path.join(str(
|
1241
|
+
new_dir = os.path.join(str(os.path.expanduser("~"), "AppData", "Local", "Quarch", "QPS", "Recordings"))
|
1489
1242
|
logging.warning(directory+" was not a valid directory, streaming to default location: \n"+new_dir)
|
1490
1243
|
directory = new_dir
|
1491
1244
|
else:
|
@@ -1810,6 +1563,168 @@ class QisInterface:
|
|
1810
1563
|
f.write("Saved: "+x+ "\n")
|
1811
1564
|
|
1812
1565
|
|
1566
|
+
# when sending commands to module (as opposed to back end)
|
1567
|
+
# If read until cursor is set to True (which is default) then keep reading response until a cursor is returned as the last character of result string
|
1568
|
+
# After command is sent wait for betweenCommandDelay which defaults to 0 but can be specified to add a delay between commands
|
1569
|
+
# The objects connection needs to be opened (connect()) before this is used
|
1570
|
+
def sendCmd(self, device='', cmd='$help', sock=None, readUntilCursor=True, betweenCommandDelay=0.0, expectedResponse = True):
|
1571
|
+
'''Send command is used to send a command to QIS and as far as I can see it has no difference than sendAndReceiveCmd'''
|
1572
|
+
if expectedResponse is True:
|
1573
|
+
res = self.sendAndReceiveCmd(device=device, cmd=cmd, sock=sock, readUntilCursor=readUntilCursor, betweenCommandDelay=betweenCommandDelay)
|
1574
|
+
#If ends with cursor get rid of it
|
1575
|
+
if res[-1:] == self.cursor:
|
1576
|
+
res = res[:-3] #remove last three chars - hopefully '\r\n>'
|
1577
|
+
return res
|
1578
|
+
else :
|
1579
|
+
self.sendText(sock, cmd, device)
|
1580
|
+
return
|
1581
|
+
|
1582
|
+
def sendAndReceiveCmd(self, sock=None, cmd='$help', device='', readUntilCursor=True, betweenCommandDelay=0.0):
|
1583
|
+
if sock==None:
|
1584
|
+
sock = self.sock
|
1585
|
+
if not (device == ''):
|
1586
|
+
self.deviceDictSetup(device)
|
1587
|
+
res = self.sendAndReceiveText(sock, cmd, device, readUntilCursor)
|
1588
|
+
if (betweenCommandDelay > 0):
|
1589
|
+
time.sleep(betweenCommandDelay)
|
1590
|
+
#If ends with cursor get rid of it
|
1591
|
+
if res[-1:] == '>':
|
1592
|
+
res = res[:-3] #remove last three chars - hopefully '\r\n>'
|
1593
|
+
return cmd + ' : ' + res
|
1594
|
+
|
1595
|
+
def sendAndReceiveText(self, sock, sentText='$help', device='', readUntilCursor=True):
|
1596
|
+
# Send text to QIS
|
1597
|
+
# The objects connection needs to be opened (connect()) before this is used
|
1598
|
+
# If read until cursor is set to True (which is default) then keep reading response until a cursor is returned as the last character of result string
|
1599
|
+
|
1600
|
+
# do sendText
|
1601
|
+
self.sockSemaphore.acquire()
|
1602
|
+
try:
|
1603
|
+
#Send Text
|
1604
|
+
self.sendText(sock, sentText, device)
|
1605
|
+
#Receive Response
|
1606
|
+
res = self.receiveText(sock)
|
1607
|
+
# Error Check / validate response
|
1608
|
+
if len(res) == 0:
|
1609
|
+
#logging.error("Empty response from QIS.")
|
1610
|
+
self.sendText(sock, "stream?", device)
|
1611
|
+
res = self.receiveText(sock)
|
1612
|
+
if len(res) != 0:
|
1613
|
+
self.sendText(sock, sentText, device)
|
1614
|
+
res = self.receiveText(sock)
|
1615
|
+
if len(res) == 0:
|
1616
|
+
raise (Exception("Empty response from QIS. Sent: " + sentText))
|
1617
|
+
else:
|
1618
|
+
raise (Exception("Empty response from QIS. Sent: " + sentText))
|
1619
|
+
|
1620
|
+
if res[0] == self.cursor:
|
1621
|
+
logging.warning('Only Returned Cursor!!!!!')
|
1622
|
+
if 'Create Socket Fail' == res[0]: # If create socked fail (between QIS and tcp/ip module)
|
1623
|
+
logging.warning(res[0])
|
1624
|
+
if 'Connection Timeout' == res[0]:
|
1625
|
+
logging.warning(res[0])
|
1626
|
+
# If reading until a cursor comes back then keep reading until a cursor appears or max tries exceeded
|
1627
|
+
if readUntilCursor:
|
1628
|
+
maxReads = 1000
|
1629
|
+
count = 1
|
1630
|
+
# check for cursor at end of read and if not there read again
|
1631
|
+
while res[-1:] != self.cursor:
|
1632
|
+
res+= self.receiveText(sock) #TODO Confirm this works with multi response CMD Like a $get stats on a large stream with many annos. test with py2 and py3
|
1633
|
+
#res.extend(self.rxBytes(sock))
|
1634
|
+
count += 1
|
1635
|
+
if count >= maxReads:
|
1636
|
+
raise Exception(' Count = Error: max reads exceeded before cursor returned')
|
1637
|
+
return res
|
1638
|
+
|
1639
|
+
except Exception as e:
|
1640
|
+
#something went wrong during send qis cmd
|
1641
|
+
logging.error(e)
|
1642
|
+
raise e
|
1643
|
+
finally:
|
1644
|
+
self.sockSemaphore.release()
|
1645
|
+
|
1646
|
+
|
1647
|
+
def receiveText(self, sock):
|
1648
|
+
if self.pythonVersion == '3':
|
1649
|
+
res = bytearray()
|
1650
|
+
res.extend(self.rxBytes(sock))
|
1651
|
+
res = res.decode()
|
1652
|
+
else:
|
1653
|
+
res = self.rxBytes(sock)
|
1654
|
+
return res
|
1655
|
+
|
1656
|
+
def sendText(self, sock, message='$help', device=''):
|
1657
|
+
# Send text to QIS, don't read it's response
|
1658
|
+
# The objects connection needs to be opened (connect()) before this is used
|
1659
|
+
if device != '':
|
1660
|
+
#specialTimeout = '%500000'
|
1661
|
+
#message = device + ' ' + specialTimeout + ' ' + message
|
1662
|
+
message = device + ' ' + message
|
1663
|
+
#printText('Sending: "' + message + '" ' + self.host + ':' + str(self.port))
|
1664
|
+
|
1665
|
+
if self.pythonVersion == 2:
|
1666
|
+
sock.sendall(message + '\r\n')
|
1667
|
+
else:
|
1668
|
+
convM = message + '\r\n'
|
1669
|
+
sock.sendall(convM.encode('utf-8'))
|
1670
|
+
return 'Sent:' + message
|
1671
|
+
|
1672
|
+
def rxBytes(self,sock):
|
1673
|
+
#sock.setblocking(0) #make socket non-blocking
|
1674
|
+
#printText('rxBytes')
|
1675
|
+
maxExceptions=10
|
1676
|
+
exceptions=0
|
1677
|
+
maxReadRepeats=50
|
1678
|
+
readRepeats=0
|
1679
|
+
timeout_in_seconds = 10
|
1680
|
+
#Keep trying to read bytes until we get some, unless number of read repeads or exceptions is exceeded
|
1681
|
+
while True:
|
1682
|
+
try:
|
1683
|
+
#select.select returns a list of waitable objects which are ready. On windows it has to be sockets.
|
1684
|
+
#The first arguement is a list of objects to wait for reading, second writing, third 'exceptional condition'
|
1685
|
+
#We only use the read list and our socket to check if it is readable. if no timeout is specified then it blocks until it becomes readable.
|
1686
|
+
ready = select.select([sock], [], [], timeout_in_seconds)
|
1687
|
+
#time.sleep(0.1)
|
1688
|
+
#ready = [1,2]
|
1689
|
+
if ready[0]:
|
1690
|
+
ret = sock.recv(self.maxRxBytes)
|
1691
|
+
#time.sleep(0.1)
|
1692
|
+
return ret
|
1693
|
+
else:
|
1694
|
+
#printText('rxBytes - readRepeats + 1')
|
1695
|
+
|
1696
|
+
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
1697
|
+
sock.connect((self.host, self.port))
|
1698
|
+
sock.settimeout(5)
|
1699
|
+
|
1700
|
+
try:
|
1701
|
+
welcomeString = self.sock.recv(self.maxRxBytes).rstrip()
|
1702
|
+
welcomeString = 'Connected@' + self.host + ':' + str(self.port) + ' ' + '\n ' + welcomeString
|
1703
|
+
printText('New Welcome:' + welcomeString)
|
1704
|
+
except Exception as e:
|
1705
|
+
logging.error('tried and failed to get new welcome')
|
1706
|
+
raise e
|
1707
|
+
|
1708
|
+
readRepeats=readRepeats+1
|
1709
|
+
time.sleep(0.5)
|
1710
|
+
|
1711
|
+
except Exception as e:
|
1712
|
+
#printText('rxBytes - exceptions + 1')
|
1713
|
+
exceptions=exceptions+1
|
1714
|
+
time.sleep(0.5)
|
1715
|
+
raise e
|
1716
|
+
|
1717
|
+
#If read repeats has been exceeded we failed to get any data on this read.
|
1718
|
+
# !!! This is likely to break whatever called us !!!
|
1719
|
+
if readRepeats >= maxReadRepeats:
|
1720
|
+
logging.error('Max read repeats exceeded - returning.')
|
1721
|
+
return 'No data received from QIS'
|
1722
|
+
#If number of exceptions exceeded then give up by exiting
|
1723
|
+
if exceptions >= maxExceptions:
|
1724
|
+
logging.error('Max exceptions exceeded - exiting') #exceptions are probably 10035 non-blocking socket could not complete immediatley
|
1725
|
+
exit()
|
1726
|
+
|
1727
|
+
|
1813
1728
|
def strToBb(string_in, add_length=True):
|
1814
1729
|
length = len(str(string_in))
|
1815
1730
|
b_array = []
|