quarchpy 2.1.13.dev2__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/__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 +237 -320
- 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/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/run.py +1 -1
- quarchpy/user_interface/__pycache__/__init__.cpython-311.pyc +0 -0
- quarchpy/user_interface/__pycache__/user_interface.cpython-311.pyc +0 -0
- quarchpy/utilities/TestCenter.py +1 -1
- 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.dev2.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/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/user_interface/user_interface.py.bak +0 -749
- quarchpy/utilities/TestCenter.py.bak +0 -150
- quarchpy-2.1.13.dev2.dist-info/RECORD +0 -542
- {quarchpy-2.1.13.dev2.dist-info → quarchpy-2.1.14.dist-info}/WHEEL +0 -0
- {quarchpy-2.1.13.dev2.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
|
@@ -271,14 +269,14 @@ class QisInterface:
|
|
271
269
|
isRun = True
|
272
270
|
while isRun:
|
273
271
|
try:
|
274
|
-
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
|
275
273
|
# Until the event threadRunEvent is set externally to this thread,
|
276
274
|
# loop and read from the stream
|
277
275
|
i = self.deviceMulti(module)
|
278
276
|
while self.stopFlagList[i] and (not streamOverrun) and (not streamComplete):
|
279
277
|
#now = time.time()
|
280
278
|
streamOverrun, removeChar, newStripes = self.streamGetStripesText(self.streamSock, module, numStripesPerRead)
|
281
|
-
newStripes = newStripes.replace(
|
279
|
+
newStripes = newStripes.replace(' ', separator)
|
282
280
|
#print (time.time() - now)
|
283
281
|
if streamOverrun:
|
284
282
|
self.deviceDict[module][0:3] = [True, 'Stopped', 'Device buffer overrun']
|
@@ -308,22 +306,31 @@ class QisInterface:
|
|
308
306
|
if streamDuration != None:
|
309
307
|
# Get the last data line in the file
|
310
308
|
lastLine = newStripes.splitlines()[-3] # the last data line is followed by 'eof' and '>'
|
311
|
-
lastTime = lastLine.
|
309
|
+
lastTime = lastLine.split(separator)[0] # get the first (time) entry
|
312
310
|
|
313
311
|
# if the last entry is still within the required stream length, write the whole lot
|
314
312
|
if int(lastTime) < int(streamDuration/(10**baseSampleUnitExponent)): # < rather than <= because we start at 0
|
313
|
+
newStripes = newStripes.replace(' ', separator)
|
315
314
|
f.write(newStripes[:removeChar])
|
315
|
+
if inMemoryData is not None:
|
316
|
+
inMemoryData.write(newStripes[:removeChar])
|
317
|
+
|
316
318
|
# else write each line individually until we have reached the desired endpoint
|
317
319
|
else:
|
318
320
|
for thisLine in newStripes.splitlines()[:-2]:
|
319
|
-
lastTime = thisLine.
|
321
|
+
lastTime = thisLine.split(separator)[0]
|
320
322
|
if int(lastTime) < int(streamDuration/(10**baseSampleUnitExponent)):
|
321
|
-
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')
|
322
326
|
else:
|
323
327
|
streamComplete = True
|
324
328
|
break
|
325
329
|
else:
|
330
|
+
newStripes = newStripes.replace(' ', separator)
|
326
331
|
f.write(newStripes[:removeChar])
|
332
|
+
if inMemoryData is not None:
|
333
|
+
inMemoryData.write(newStripes[:removeChar])
|
327
334
|
|
328
335
|
else:
|
329
336
|
maxFileExceeded = True
|
@@ -331,6 +338,9 @@ class QisInterface:
|
|
331
338
|
maxFileStatus = self.streamBufferStatus(device=module, sock=self.streamSock)
|
332
339
|
f.write('Warning: Max file size exceeded before end of stream.\n')
|
333
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 + '.')
|
334
344
|
self.deviceDict[module][0:3] = [True, 'Stopped', 'User defined max filesize reached']
|
335
345
|
break
|
336
346
|
else:
|
@@ -378,8 +388,10 @@ class QisInterface:
|
|
378
388
|
if(streamAverage != None):
|
379
389
|
leftover, remainingStripes = self.averageStripes(leftover, stripesPerAverage, newStripes[:removeChar], f, remainingStripes)
|
380
390
|
else:
|
381
|
-
newStripes = newStripes.replace(
|
391
|
+
newStripes = newStripes.replace(' ',separator)
|
382
392
|
f.write(newStripes[:removeChar])
|
393
|
+
if inMemoryData is not None:
|
394
|
+
inMemoryData.write(newStripes[:removeChar])
|
383
395
|
else:
|
384
396
|
if not maxFileExceeded:
|
385
397
|
maxFileStatus = self.streamBufferStatus(device=module, sock=self.streamSock)
|
@@ -394,6 +406,9 @@ class QisInterface:
|
|
394
406
|
if maxFileExceeded:
|
395
407
|
f.write(b'Warning: Max file size exceeded before end of stream.\n')
|
396
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 + '.')
|
397
412
|
logging.warning('Max file size exceeded. Some data has not been saved to file: ' + maxFileStatus + '.')
|
398
413
|
|
399
414
|
#printText('Stripes in buffer now: ' + self.streamBufferStatus(device=module, sock=self.streamSock))
|
@@ -484,7 +499,7 @@ class QisInterface:
|
|
484
499
|
# now = time.time()
|
485
500
|
streamOverrun, removeChar, newStripes = self.streamGetStripesText(self.streamSock, module,
|
486
501
|
numStripesPerRead)
|
487
|
-
newStripes = newStripes.replace(
|
502
|
+
newStripes = newStripes.replace(' ',separator)
|
488
503
|
# print(newStripes)
|
489
504
|
# print(len(newStripes))
|
490
505
|
|
@@ -498,11 +513,7 @@ class QisInterface:
|
|
498
513
|
if isEmpty == False:
|
499
514
|
# Writes in file if not too big else stops streaming
|
500
515
|
# print(newStripes)
|
501
|
-
|
502
|
-
x = newStripes[:removeChar]
|
503
|
-
y = x.decode("utf-8")
|
504
|
-
|
505
|
-
print("decoded stripe : " + y)
|
516
|
+
print("decoded stripe : " + newStripes[:removeChar])
|
506
517
|
|
507
518
|
# Writing multiple stripes
|
508
519
|
if "\r\n" in y:
|
@@ -581,7 +592,7 @@ class QisInterface:
|
|
581
592
|
continue
|
582
593
|
with open(os.path.join(self.qps_record_dir_path, "data000",
|
583
594
|
"data000_00" + index - 1 + "_000000000"),
|
584
|
-
"
|
595
|
+
"a") as file1:#changed from ab to a as all data should be in string format now regardless of py2 or py3
|
585
596
|
|
586
597
|
x = struct.pack(">d", int(item))
|
587
598
|
# logging.debug(item, x)
|
@@ -604,7 +615,7 @@ class QisInterface:
|
|
604
615
|
|
605
616
|
with open(os.path.join(self.qps_record_dir_path, "data000",
|
606
617
|
"data000_"+x+"_000000000"),
|
607
|
-
"
|
618
|
+
"a") as file1:#changed from ab to a as all data should be in string format now regardless of py2 or py3
|
608
619
|
x = struct.pack(">d", int(stripe[counter]))
|
609
620
|
# logging.debug(item, x)
|
610
621
|
file1.write(x)
|
@@ -612,195 +623,10 @@ class QisInterface:
|
|
612
623
|
# Write all in group 1 to digital
|
613
624
|
with open(os.path.join(self.qps_record_dir_path, "data101",
|
614
625
|
"data101_"+x+"_000000000"),
|
615
|
-
"
|
626
|
+
"a") as file1:#changed from ab to a as all data should be in string format now regardless of py2 or py3
|
616
627
|
x = struct.pack(">d", int(stripe[counter]))
|
617
628
|
# logging.debug(item, x)
|
618
629
|
file1.write(x)
|
619
|
-
|
620
|
-
|
621
|
-
# Send text and get the backends response. - acts as wrapper to the sendAndReceiveText, intended to provide some extra convenience
|
622
|
-
# when sending commands to module (as opposed to back end)
|
623
|
-
# 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
|
624
|
-
# After command is sent wait for betweenCommandDelay which defaults to 0 but can be specified to add a delay between commands
|
625
|
-
# The objects connection needs to be opened (connect()) before this is used
|
626
|
-
def sendCmd(self, device='', cmd='$help', sock=None, readUntilCursor=True, betweenCommandDelay=0.0, expectedResponse = True):
|
627
|
-
if sock==None:
|
628
|
-
sock = self.sock
|
629
|
-
if not (device == ''):
|
630
|
-
self.deviceDictSetup(device)
|
631
|
-
|
632
|
-
if expectedResponse is False:
|
633
|
-
self.sendText(sock, cmd, device)
|
634
|
-
return
|
635
|
-
|
636
|
-
res = self.sendAndReceiveText(sock, cmd, device, readUntilCursor)
|
637
|
-
if (betweenCommandDelay > 0):
|
638
|
-
time.sleep(betweenCommandDelay)
|
639
|
-
#If ends with cursor get rid of it
|
640
|
-
if res[-1:] == self.cursor:
|
641
|
-
res = res[:-3] #remove last three chars - hopefully '\r\n>'
|
642
|
-
# time.sleep(0.1)
|
643
|
-
return res.decode()
|
644
|
-
|
645
|
-
|
646
|
-
def sendAndReceiveCmd(self, sock=None, cmd='$help', device='', readUntilCursor=True, betweenCommandDelay=0.0):
|
647
|
-
if sock==None:
|
648
|
-
sock = self.sock
|
649
|
-
if not (device == ''):
|
650
|
-
self.deviceDictSetup(device)
|
651
|
-
if self.pythonVersion == '3':
|
652
|
-
res = self.sendAndReceiveText(sock, cmd, device, readUntilCursor).decode()
|
653
|
-
else:
|
654
|
-
res = self.sendAndReceiveText(sock, cmd, device, readUntilCursor)
|
655
|
-
if (betweenCommandDelay > 0):
|
656
|
-
time.sleep(betweenCommandDelay)
|
657
|
-
#If ends with cursor get rid of it
|
658
|
-
if res[-1:] == '>':
|
659
|
-
res = res[:-3] #remove last three chars - hopefully '\r\n>'
|
660
|
-
return cmd + ' : ' + res
|
661
|
-
|
662
|
-
# Send text to the back end then read it's response
|
663
|
-
# The objects connection needs to be opened (connect()) before this is used
|
664
|
-
# 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
|
665
|
-
def sendAndReceiveText(self, sock, sentText='$help', device='', readUntilCursor=True):
|
666
|
-
self.sockSemaphore.acquire()
|
667
|
-
try:
|
668
|
-
self.sendText(sock, sentText, device)
|
669
|
-
if self.pythonVersion == '3':
|
670
|
-
res = bytearray()
|
671
|
-
res.extend(self.rxBytes(sock))
|
672
|
-
#Somtimes we just get one cursor back of currently unknown origins
|
673
|
-
#If that happens discard it and read again
|
674
|
-
if len(res)==0:
|
675
|
-
logging.warning("empty response from QIS. Retrying.")
|
676
|
-
streamResp=self.sendAndReceiveText(sock, "stream?",device,readUntilCursor).lower()
|
677
|
-
if len(streamResp)==0:
|
678
|
-
raise("Empty response from QIS twice in a row")
|
679
|
-
else:
|
680
|
-
logging.warning("Response recovered Successfully. Continuing.")
|
681
|
-
res = bytearray()
|
682
|
-
res.extend(self.rxBytes(sock))
|
683
|
-
if len(res) == 0:
|
684
|
-
raise ("empty response from QIS after second ")
|
685
|
-
if res[0] == self.cursor:
|
686
|
-
#res[0] = self.rxBytes(sock)
|
687
|
-
logging.warning('Only Returned Cursor!!!!!')
|
688
|
-
#If create socked fail (between backend and tcp/ip module)
|
689
|
-
cba = 'Create Socket Fail'
|
690
|
-
if cba.encode() == res[0]:
|
691
|
-
logging.warning(res[0].decode())
|
692
|
-
cba = 'Connection Timeout'
|
693
|
-
if cba.encode() == res[0]:
|
694
|
-
logging.warning(res[0].decode())
|
695
|
-
#If reading until a cursor comes back then keep reading until a cursor appears or max tries exceeded
|
696
|
-
if readUntilCursor:
|
697
|
-
maxReads = 1000
|
698
|
-
count = 1
|
699
|
-
#check for cursor at end of read and if not there read again
|
700
|
-
while res[-1:] != self.cursor:
|
701
|
-
res.extend(self.rxBytes(sock))
|
702
|
-
count += 1
|
703
|
-
if count >= maxReads:
|
704
|
-
raise Exception(' Count = Error: max reads exceeded before cursor returned')
|
705
|
-
return res
|
706
|
-
else:
|
707
|
-
res = self.rxBytes(sock)
|
708
|
-
#Somtimes we just get one cursor back of currently unknown origins
|
709
|
-
#If that happens discard it and read again
|
710
|
-
if res == self.cursor:
|
711
|
-
#printText(" CURSOR ONLY")
|
712
|
-
res = self.rxBytes(sock)
|
713
|
-
#If create socked fail (between backend and tcp/ip module)
|
714
|
-
if 'Create Socket Fail' in res:
|
715
|
-
raise Exception(res)
|
716
|
-
if 'Connection Timeout' in res:
|
717
|
-
raise Exception(res)
|
718
|
-
#If reading until a cursor comes back then keep reading until a cursor appears or max tries exceeded
|
719
|
-
if readUntilCursor:
|
720
|
-
maxReads = 1000
|
721
|
-
count = 1
|
722
|
-
#check for cursor at end of read and if not there read again
|
723
|
-
while res[-1:] != self.cursor:
|
724
|
-
res += self.rxBytes(sock)
|
725
|
-
count += 1
|
726
|
-
if count >= maxReads:
|
727
|
-
raise Exception(' Count = Error: max reads exceeded before cursor returned')
|
728
|
-
return res
|
729
|
-
|
730
|
-
except Exception as e:
|
731
|
-
raise e
|
732
|
-
finally:
|
733
|
-
self.sockSemaphore.release()
|
734
|
-
|
735
|
-
def rxBytes(self,sock):
|
736
|
-
#sock.setblocking(0) #make socket non-blocking
|
737
|
-
#printText('rxBytes')
|
738
|
-
maxExceptions=10
|
739
|
-
exceptions=0
|
740
|
-
maxReadRepeats=50
|
741
|
-
readRepeats=0
|
742
|
-
timeout_in_seconds = 10
|
743
|
-
#Keep trying to read bytes until we get some, unless number of read repeads or exceptions is exceeded
|
744
|
-
while True:
|
745
|
-
try:
|
746
|
-
#select.select returns a list of waitable objects which are ready. On windows it has to be sockets.
|
747
|
-
#The first arguement is a list of objects to wait for reading, second writing, third 'exceptional condition'
|
748
|
-
#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.
|
749
|
-
ready = select.select([sock], [], [], timeout_in_seconds)
|
750
|
-
#time.sleep(0.1)
|
751
|
-
#ready = [1,2]
|
752
|
-
if ready[0]:
|
753
|
-
ret = sock.recv(self.maxRxBytes)
|
754
|
-
#time.sleep(0.1)
|
755
|
-
return ret
|
756
|
-
else:
|
757
|
-
#printText('rxBytes - readRepeats + 1')
|
758
|
-
|
759
|
-
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
760
|
-
sock.connect((self.host, self.port))
|
761
|
-
sock.settimeout(5)
|
762
|
-
|
763
|
-
try:
|
764
|
-
welcomeString = self.sock.recv(self.maxRxBytes).rstrip()
|
765
|
-
welcomeString = 'Connected@' + self.host + ':' + str(self.port) + ' ' + '\n ' + welcomeString
|
766
|
-
printText('New Welcome:' + welcomeString)
|
767
|
-
except Exception as e:
|
768
|
-
logging.error('tried and failed to get new welcome')
|
769
|
-
raise e
|
770
|
-
|
771
|
-
readRepeats=readRepeats+1
|
772
|
-
time.sleep(0.5)
|
773
|
-
|
774
|
-
except Exception as e:
|
775
|
-
#printText('rxBytes - exceptions + 1')
|
776
|
-
exceptions=exceptions+1
|
777
|
-
time.sleep(0.5)
|
778
|
-
raise e
|
779
|
-
|
780
|
-
#If read repeats has been exceeded we failed to get any data on this read.
|
781
|
-
# !!! This is likely to break whatever called us !!!
|
782
|
-
if readRepeats >= maxReadRepeats:
|
783
|
-
logging.error('Max read repeats exceeded - returning.')
|
784
|
-
return 'No data received from QIS'
|
785
|
-
#If number of exceptions exceeded then give up by exiting
|
786
|
-
if exceptions >= maxExceptions:
|
787
|
-
logging.error('Max exceptions exceeded - exiting') #exceptions are probably 10035 non-blocking socket could not complete immediatley
|
788
|
-
exit()
|
789
|
-
|
790
|
-
# Send text to the back end don't read it's response
|
791
|
-
# The objects connection needs to be opened (connect()) before this is used
|
792
|
-
def sendText(self, sock, message='$help', device=''):
|
793
|
-
if device != '':
|
794
|
-
specialTimeout = '%500000'
|
795
|
-
message = device + specialTimeout + ' ' + message
|
796
|
-
#printText('Sending: "' + message + '" ' + self.host + ':' + str(self.port))
|
797
|
-
|
798
|
-
if self.pythonVersion == 2:
|
799
|
-
sock.sendall(message + '\r\n')
|
800
|
-
else:
|
801
|
-
convM = message + '\r\n'
|
802
|
-
sock.sendall(convM.encode('utf-8'))
|
803
|
-
return 'Sent:' + message
|
804
630
|
|
805
631
|
# Query the backend for a list of connected modules. A $scan command is sent to refresh the list of devices,
|
806
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
|
@@ -809,21 +635,9 @@ class QisInterface:
|
|
809
635
|
|
810
636
|
if sock == None:
|
811
637
|
sock = self.sock
|
812
|
-
|
813
|
-
#printText('Scanning for devices and waiting ' + str(scanWait) + ' seconds.')
|
814
|
-
if self.pythonVersion == '3':
|
815
|
-
#devString = self.sendAndReceiveText(sock, '$scan').decode
|
816
|
-
#time.sleep(scanWait)
|
817
|
-
devString = self.sendAndReceiveText(sock, '$list').decode()
|
818
|
-
else:
|
819
|
-
#devString = self.sendAndReceiveText(sock, '$scan')
|
820
|
-
#time.sleep(scanWait)
|
821
|
-
devString = self.sendAndReceiveText(sock, '$list')
|
822
|
-
|
638
|
+
devString = self.sendAndReceiveText(sock, '$list')
|
823
639
|
devString = devString.replace('>', '')
|
824
|
-
devString = devString.replace(r'\d+\) ', '')
|
825
|
-
|
826
|
-
#printText('"' + devString + '"')
|
640
|
+
devString = devString.replace(r'\d+\) ', '')
|
827
641
|
devString = devString.split('\r\n')
|
828
642
|
devString = filter(None, devString) #remove empty elements
|
829
643
|
return devString
|
@@ -831,21 +645,10 @@ class QisInterface:
|
|
831
645
|
def get_list_details(self, sock=None):
|
832
646
|
if sock == None:
|
833
647
|
sock = self.sock
|
834
|
-
scanWait = 2
|
835
|
-
# printText('Scanning for devices and waiting ' + str(scanWait) + ' seconds.')
|
836
|
-
if self.pythonVersion == '3':
|
837
|
-
# devString = self.sendAndReceiveText(sock, '$scan').decode
|
838
|
-
# time.sleep(scanWait)
|
839
|
-
devString = self.sendAndReceiveText(sock, '$list details').decode()
|
840
|
-
else:
|
841
|
-
# devString = self.sendAndReceiveText(sock, '$scan')
|
842
|
-
# time.sleep(scanWait)
|
843
|
-
devString = self.sendAndReceiveText(sock, '$list details')
|
844
648
|
|
649
|
+
devString = self.sendAndReceiveText(sock, '$list details')
|
845
650
|
devString = devString.replace('>', '')
|
846
651
|
devString = devString.replace(r'\d+\) ', '')
|
847
|
-
|
848
|
-
# printText('"' + devString + '"')
|
849
652
|
devString = devString.split('\r\n')
|
850
653
|
devString = [x for x in devString if x] # remove empty elements
|
851
654
|
return devString
|
@@ -884,9 +687,6 @@ class QisInterface:
|
|
884
687
|
logging.warning(e)
|
885
688
|
logging.warning("No module found at " + ipAddress)
|
886
689
|
|
887
|
-
|
888
|
-
|
889
|
-
|
890
690
|
def GetQisModuleSelection(self, favouriteOnly=True , additionalOptions=['rescan', 'all con types', 'ip scan'], scan=True):
|
891
691
|
tableHeaders =["Modules"]
|
892
692
|
ip_address = None
|
@@ -922,33 +722,19 @@ class QisInterface:
|
|
922
722
|
foundDevices = "1"
|
923
723
|
foundDevices2 = "2" # this is used to check if new modules are being discovered or if all have been found.
|
924
724
|
scanWait = 2 # The number of seconds waited between the two scans.
|
925
|
-
if self.pythonVersion == '3':
|
926
|
-
if scan:
|
927
|
-
if ipAddress == None:
|
928
|
-
devString = self.sendAndReceiveText(self.sock, '$scan').decode
|
929
|
-
else:
|
930
|
-
devString = self.sendAndReceiveText(self.sock, '$scan TCP::' + ipAddress).decode
|
931
|
-
time.sleep(scanWait)
|
932
|
-
while foundDevices not in foundDevices2:
|
933
|
-
foundDevices = self.sendAndReceiveText(self.sock, '$list').decode()
|
934
|
-
time.sleep(scanWait)
|
935
|
-
foundDevices2 = self.sendAndReceiveText(self.sock, '$list').decode()
|
936
|
-
else:
|
937
|
-
foundDevices = self.sendAndReceiveText(self.sock, '$list').decode()
|
938
725
|
|
939
|
-
|
940
|
-
if
|
941
|
-
|
942
|
-
devString = self.sendAndReceiveText(self.sock, '$scan').decode
|
943
|
-
else:
|
944
|
-
devString = self.sendAndReceiveText(self.sock, '$scan TCP::' + ipAddress).decode
|
945
|
-
time.sleep(scanWait)
|
946
|
-
while foundDevices not in foundDevices2:
|
947
|
-
foundDevices = self.sendAndReceiveText(self.sock, '$list')
|
948
|
-
time.sleep(scanWait)
|
949
|
-
foundDevices2 = self.sendAndReceiveText(self.sock, '$list')
|
726
|
+
if scan:
|
727
|
+
if ipAddress == None:
|
728
|
+
devString = self.sendAndReceiveText(self.sock, '$scan')
|
950
729
|
else:
|
730
|
+
devString = self.sendAndReceiveText(self.sock, '$scan TCP::' + ipAddress)
|
731
|
+
time.sleep(scanWait)
|
732
|
+
while foundDevices not in foundDevices2:
|
951
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')
|
952
738
|
|
953
739
|
if not "no devices found" in foundDevices.lower():
|
954
740
|
foundDevices = foundDevices.replace('>', '')
|
@@ -998,10 +784,7 @@ class QisInterface:
|
|
998
784
|
if sock == None:
|
999
785
|
sock = self.sock
|
1000
786
|
index = 0 # index of relevant line in split string
|
1001
|
-
|
1002
|
-
streamStatus = self.sendAndReceiveText(sock, 'stream?', device).decode()
|
1003
|
-
else:
|
1004
|
-
streamStatus = self.sendAndReceiveText(sock, 'stream?', device)
|
787
|
+
streamStatus = self.sendAndReceiveText(sock, 'stream?', device)
|
1005
788
|
streamStatus = streamStatus.split('\r\n')
|
1006
789
|
streamStatus[index] = re.sub(r':', '', streamStatus[index]) #remove :
|
1007
790
|
return streamStatus[index]
|
@@ -1012,10 +795,7 @@ class QisInterface:
|
|
1012
795
|
if sock == None:
|
1013
796
|
sock = self.sock
|
1014
797
|
index = 1 # index of relevant line in split string
|
1015
|
-
|
1016
|
-
streamStatus = self.sendAndReceiveText(sock, 'stream?', device).decode()
|
1017
|
-
else:
|
1018
|
-
streamStatus = self.sendAndReceiveText(sock, 'stream?', device)
|
798
|
+
streamStatus = self.sendAndReceiveText(sock, 'stream?', device)
|
1019
799
|
streamStatus = streamStatus.split('\r\n')
|
1020
800
|
streamStatus[index] = re.sub(r'^Stripes Buffered: ', '', streamStatus[index])
|
1021
801
|
return streamStatus[index]
|
@@ -1030,10 +810,7 @@ class QisInterface:
|
|
1030
810
|
if sock == None:
|
1031
811
|
sock = self.sock
|
1032
812
|
index = 2 # index of relevant line in split string
|
1033
|
-
|
1034
|
-
streamStatus = self.sendAndReceiveText(sock, sentText='stream text header', device=device).decode()
|
1035
|
-
else:
|
1036
|
-
streamStatus = self.sendAndReceiveText(sock, sentText='stream text header', device=device)
|
813
|
+
streamStatus = self.sendAndReceiveText(sock, sentText='stream text header', device=device)
|
1037
814
|
|
1038
815
|
self.qps_stream_header = streamStatus
|
1039
816
|
|
@@ -1074,10 +851,7 @@ class QisInterface:
|
|
1074
851
|
if sock == None:
|
1075
852
|
sock = self.sock
|
1076
853
|
index = 0 # index of relevant line in split string
|
1077
|
-
|
1078
|
-
streamStatus = self.sendAndReceiveText(sock,'stream text header', device).decode()
|
1079
|
-
else:
|
1080
|
-
streamStatus = self.sendAndReceiveText(sock,'stream text header', device)
|
854
|
+
streamStatus = self.sendAndReceiveText(sock,'stream text header', device)
|
1081
855
|
streamStatus = streamStatus.split('\r\n')
|
1082
856
|
if 'Header Not Available' in streamStatus[0]:
|
1083
857
|
str = streamStatus[0] + '. Check stream has been ran on device.'
|
@@ -1104,10 +878,7 @@ class QisInterface:
|
|
1104
878
|
if sock == None:
|
1105
879
|
sock = self.sock
|
1106
880
|
index = 1 # index of relevant line in split string STREAM MODE HEADER [?|V1,V2,V3]
|
1107
|
-
|
1108
|
-
streamStatus = self.sendAndReceiveText(sock,'stream text header', device).decode()
|
1109
|
-
else:
|
1110
|
-
streamStatus = self.sendAndReceiveText(sock,'stream text header', device)
|
881
|
+
streamStatus = self.sendAndReceiveText(sock,'stream text header', device)
|
1111
882
|
# Check if this is a new XML form header
|
1112
883
|
if (self.isXmlHeader (streamStatus)):
|
1113
884
|
# Get the basic averaging rate (V3 header)
|
@@ -1142,12 +913,8 @@ class QisInterface:
|
|
1142
913
|
str = streamStatus[0] + '. Check stream has been ran on device.'
|
1143
914
|
logging.error(str)
|
1144
915
|
return str
|
1145
|
-
|
1146
|
-
|
1147
|
-
powerMode = self.sendAndReceiveText(sock,'stream mode power?', device).decode()
|
1148
|
-
else:
|
1149
|
-
outputMode = self.sendAndReceiveText(sock,'Config Output Mode?', device)
|
1150
|
-
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)
|
1151
918
|
format = int(re.sub(r'^Format: ', '', streamStatus[index]))
|
1152
919
|
b0 = 1 #12V_I
|
1153
920
|
b1 = 1 << 1 #12V_V
|
@@ -1188,10 +955,7 @@ class QisInterface:
|
|
1188
955
|
bufferStatus = False
|
1189
956
|
# Allows the status check to be skipped when emptying the buffer after streaming has stopped (saving time)
|
1190
957
|
if (skipStatusCheck == False):
|
1191
|
-
|
1192
|
-
streamStatus = self.sendAndReceiveText(sock, 'stream?', device).decode()
|
1193
|
-
else:
|
1194
|
-
streamStatus = self.sendAndReceiveText(sock, 'stream?', device)
|
958
|
+
streamStatus = self.sendAndReceiveText(sock, 'stream?', device)
|
1195
959
|
if ('Overrun' in streamStatus) or ('8388608 of 8388608' in streamStatus):
|
1196
960
|
bufferStatus = True
|
1197
961
|
stripes = self.sendAndReceiveText(sock, 'stream text all', device, readUntilCursor=True)
|
@@ -1199,11 +963,7 @@ class QisInterface:
|
|
1199
963
|
if stripes[-1:] != self.cursor:
|
1200
964
|
return "Error no cursor returned."
|
1201
965
|
else:
|
1202
|
-
|
1203
|
-
endOfFile = 'eof\r\n>'
|
1204
|
-
genEndOfFile = endOfFile.encode()
|
1205
|
-
else:
|
1206
|
-
genEndOfFile = 'eof\r\n>'
|
966
|
+
genEndOfFile = 'eof\r\n>'
|
1207
967
|
if stripes[-6:] == genEndOfFile:
|
1208
968
|
removeChar = -6
|
1209
969
|
else:
|
@@ -1264,8 +1024,6 @@ class QisInterface:
|
|
1264
1024
|
finalAverage = splitList[0:2] + [str(round(x / streamAverage)) for x in runningAverage]
|
1265
1025
|
for counter in xrange(len(finalAverage)-1):
|
1266
1026
|
finalAverage[counter] = finalAverage[counter] + ' '
|
1267
|
-
if self.pythonVersion == '3':
|
1268
|
-
finalAverage = finalAverage.encode
|
1269
1027
|
for x in finalAverage:
|
1270
1028
|
f.write(x)
|
1271
1029
|
f.write('\r\n')
|
@@ -1350,10 +1108,7 @@ class QisInterface:
|
|
1350
1108
|
sock = self.sock
|
1351
1109
|
|
1352
1110
|
# Get the raw data
|
1353
|
-
|
1354
|
-
headerData = self.sendAndReceiveText(sock, sentText='stream text header', device=device).decode()
|
1355
|
-
else:
|
1356
|
-
headerData = self.sendAndReceiveText(sock, sentText='stream text header', device=device)
|
1111
|
+
headerData = self.sendAndReceiveText(sock, sentText='stream text header', device=device)
|
1357
1112
|
|
1358
1113
|
# The XML can contain the cursor on the end! Trap and remove it here TODO: Needs fixed in the command layer above
|
1359
1114
|
if ('\r\n>' in headerData):
|
@@ -1480,10 +1235,10 @@ class QisInterface:
|
|
1480
1235
|
folder_name = None
|
1481
1236
|
# Checking if there was a directory passed; and if it's a valid directory
|
1482
1237
|
if not directory:
|
1483
|
-
directory = os.path.join(
|
1238
|
+
directory = os.path.join(os.path.expanduser("~"), "AppData", "Local", "Quarch", "QPS", "Recordings")
|
1484
1239
|
logging.debug("No directory specified")
|
1485
1240
|
elif not os.path.isdir(directory):
|
1486
|
-
new_dir = os.path.join(str(
|
1241
|
+
new_dir = os.path.join(str(os.path.expanduser("~"), "AppData", "Local", "Quarch", "QPS", "Recordings"))
|
1487
1242
|
logging.warning(directory+" was not a valid directory, streaming to default location: \n"+new_dir)
|
1488
1243
|
directory = new_dir
|
1489
1244
|
else:
|
@@ -1808,6 +1563,168 @@ class QisInterface:
|
|
1808
1563
|
f.write("Saved: "+x+ "\n")
|
1809
1564
|
|
1810
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
|
+
|
1811
1728
|
def strToBb(string_in, add_length=True):
|
1812
1729
|
length = len(str(string_in))
|
1813
1730
|
b_array = []
|