iris-pex-embedded-python 3.1.3__tar.gz → 3.1.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of iris-pex-embedded-python might be problematic. Click here for more details.
- {iris_pex_embedded_python-3.1.3/src/iris_pex_embedded_python.egg-info → iris_pex_embedded_python-3.1.4}/PKG-INFO +1 -1
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/pyproject.toml +1 -1
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_ConnectionInformation.py +22 -20
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/dbapi/_DBAPI.py +6 -1
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/dbapi/_ResultSetRow.py +26 -15
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/dbapi/preparser/_PreParser.py +4 -1
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4/src/iris_pex_embedded_python.egg-info}/PKG-INFO +1 -1
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iris_pex_embedded_python.egg-info/SOURCES.txt +0 -6
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iris_pex_embedded_python.egg-info/top_level.txt +0 -1
- iris_pex_embedded_python-3.1.3/src/iris/__init__.py +0 -60
- iris_pex_embedded_python-3.1.3/src/iris/__init__.pyi +0 -236
- iris_pex_embedded_python-3.1.3/src/iris/_cli.py +0 -38
- iris_pex_embedded_python-3.1.3/src/iris/iris_ipm.py +0 -40
- iris_pex_embedded_python-3.1.3/src/iris/iris_ipm.pyi +0 -17
- iris_pex_embedded_python-3.1.3/src/iris/iris_utils.py +0 -336
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/LICENSE +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/README.md +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/setup.cfg +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/setup.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/grongier/__init__.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/grongier/cls/Grongier/PEX/BusinessOperation.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/grongier/cls/Grongier/PEX/BusinessProcess.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/grongier/cls/Grongier/PEX/BusinessService.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/grongier/cls/Grongier/PEX/Common.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/grongier/cls/Grongier/PEX/Director.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/grongier/cls/Grongier/PEX/Duplex/Operation.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/grongier/cls/Grongier/PEX/Duplex/Process.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/grongier/cls/Grongier/PEX/Duplex/Service.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/grongier/cls/Grongier/PEX/InboundAdapter.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/grongier/cls/Grongier/PEX/Message.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/grongier/cls/Grongier/PEX/OutboundAdapter.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/grongier/cls/Grongier/PEX/PickleMessage.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/grongier/cls/Grongier/PEX/PrivateSession/Duplex.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Ack.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Poll.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Start.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/grongier/cls/Grongier/PEX/PrivateSession/Message/Stop.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/grongier/cls/Grongier/PEX/Test.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/grongier/cls/Grongier/PEX/Utils.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/grongier/cls/Grongier/Service/WSGI.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/grongier/pex/__init__.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/grongier/pex/__main__.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/grongier/pex/_business_host.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/grongier/pex/_cli.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/grongier/pex/_common.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/grongier/pex/_director.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/grongier/pex/_utils.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/grongier/pex/wsgi/handlers.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_BufferReader.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_BufferWriter.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_ConnectionParameters.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_Constant.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_DBList.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_Device.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_GatewayContext.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_GatewayException.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_GatewayUtility.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_IRIS.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_IRISConnection.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_IRISEmbedded.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_IRISGlobalNode.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_IRISGlobalNodeView.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_IRISIterator.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_IRISList.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_IRISNative.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_IRISOREF.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_IRISObject.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_IRISReference.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_InStream.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_LegacyIterator.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_ListItem.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_ListReader.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_ListWriter.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_LogFileStream.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_MessageHeader.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_OutStream.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_PrintStream.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_PythonGateway.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/_SharedMemorySocket.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/__init__.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/__main__.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/dbapi/_Column.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/dbapi/_Descriptor.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/dbapi/_IRISStream.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/dbapi/_Message.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/dbapi/_Parameter.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/dbapi/_ParameterCollection.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/dbapi/_SQLType.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/dbapi/__init__.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/dbapi/preparser/_Scanner.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/dbapi/preparser/_Token.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/dbapi/preparser/_TokenList.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/dbapi/preparser/__init__.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/pex/_BusinessHost.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/pex/_BusinessOperation.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/pex/_BusinessProcess.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/pex/_BusinessService.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/pex/_Common.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/pex/_Director.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/pex/_IRISBusinessOperation.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/pex/_IRISBusinessService.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/pex/_IRISInboundAdapter.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/pex/_IRISOutboundAdapter.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/pex/_InboundAdapter.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/pex/_Message.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/pex/_OutboundAdapter.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/intersystems_iris/pex/__init__.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/__init__.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/__main__.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/_business_host.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/_business_operation.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/_business_process.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/_business_service.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/_cli.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/_common.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/_director.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/_inbound_adapter.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/_message.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/_outbound_adapter.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/_pickle_message.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/_private_session_duplex.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/_private_session_process.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/_utils.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/cls/IOP/BusinessOperation.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/cls/IOP/BusinessProcess.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/cls/IOP/BusinessService.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/cls/IOP/Common.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/cls/IOP/Director.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/cls/IOP/Duplex/Operation.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/cls/IOP/Duplex/Process.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/cls/IOP/Duplex/Service.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/cls/IOP/InboundAdapter.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/cls/IOP/Message.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/cls/IOP/OutboundAdapter.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/cls/IOP/PickleMessage.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/cls/IOP/PrivateSession/Duplex.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/cls/IOP/PrivateSession/Message/Ack.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/cls/IOP/PrivateSession/Message/Poll.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/cls/IOP/PrivateSession/Message/Start.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/cls/IOP/PrivateSession/Message/Stop.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/cls/IOP/Service/WSGI.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/cls/IOP/Test.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/cls/IOP/Utils.cls +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iop/wsgi/handlers.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iris_pex_embedded_python.egg-info/dependency_links.txt +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iris_pex_embedded_python.egg-info/entry_points.txt +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/iris_pex_embedded_python.egg-info/requires.txt +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/irisnative/_IRISNative.py +0 -0
- {iris_pex_embedded_python-3.1.3 → iris_pex_embedded_python-3.1.4}/src/irisnative/__init__.py +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import intersystems_iris._Constant
|
|
2
2
|
|
|
3
|
-
class _ConnectionInformation(object):
|
|
4
3
|
|
|
4
|
+
class _ConnectionInformation(object):
|
|
5
5
|
def __init__(self):
|
|
6
6
|
self.protocol_version = intersystems_iris._Constant._Constant.PROTOCOL_VERSION
|
|
7
7
|
self._is_unicode = True
|
|
@@ -20,9 +20,10 @@ class _ConnectionInformation(object):
|
|
|
20
20
|
def _parse_server_version(self, server_version):
|
|
21
21
|
split_1 = server_version.split("|")
|
|
22
22
|
self._server_version = split_1[0]
|
|
23
|
-
if len(split_1)>1:
|
|
23
|
+
if len(split_1) > 1:
|
|
24
|
+
self._iris_install_dir = split_1[1]
|
|
24
25
|
if self._server_version.find("Version") > 0:
|
|
25
|
-
version = server_version[server_version.find("Version")+8:]
|
|
26
|
+
version = server_version[server_version.find("Version") + 8 :]
|
|
26
27
|
self._server_version_major = version.split(".")[0]
|
|
27
28
|
self._server_version_minor = version.split(".")[1]
|
|
28
29
|
return
|
|
@@ -31,24 +32,25 @@ class _ConnectionInformation(object):
|
|
|
31
32
|
def _map_server_locale(locale):
|
|
32
33
|
# we need to map IRIS locale literals to Python locale literals
|
|
33
34
|
_locales = {
|
|
34
|
-
"LATIN1": "latin_1",
|
|
35
|
-
"LATIN2": "iso8859_2",
|
|
36
|
-
"LATINC": "iso8859_5",
|
|
37
|
-
"LATINA": "iso8859_6",
|
|
38
|
-
"LATING": "iso8859_7",
|
|
39
|
-
"LATINH": "iso8859_8",
|
|
40
|
-
"LATINT": "iso8859_11",
|
|
41
|
-
"LATIN9": "iso8859_15",
|
|
42
|
-
"CP1250": "cp1250",
|
|
43
|
-
"CP1251": "cp1251",
|
|
44
|
-
"CP1252": "cp1252",
|
|
45
|
-
"CP1253": "cp1253",
|
|
46
|
-
"CP1255": "cp1255",
|
|
47
|
-
"CP1256": "cp1256",
|
|
48
|
-
"CP1257": "cp1257",
|
|
49
|
-
"CP874": "cp874",
|
|
35
|
+
"LATIN1": "latin_1",
|
|
36
|
+
"LATIN2": "iso8859_2",
|
|
37
|
+
"LATINC": "iso8859_5",
|
|
38
|
+
"LATINA": "iso8859_6",
|
|
39
|
+
"LATING": "iso8859_7",
|
|
40
|
+
"LATINH": "iso8859_8",
|
|
41
|
+
"LATINT": "iso8859_11",
|
|
42
|
+
"LATIN9": "iso8859_15",
|
|
43
|
+
"CP1250": "cp1250",
|
|
44
|
+
"CP1251": "cp1251",
|
|
45
|
+
"CP1252": "cp1252",
|
|
46
|
+
"CP1253": "cp1253",
|
|
47
|
+
"CP1255": "cp1255",
|
|
48
|
+
"CP1256": "cp1256",
|
|
49
|
+
"CP1257": "cp1257",
|
|
50
|
+
"CP874": "cp874",
|
|
50
51
|
"UNICODE": "utf-8",
|
|
51
52
|
}
|
|
52
53
|
return _locales[locale.upper()] if locale.upper() in _locales else locale
|
|
53
54
|
|
|
54
|
-
|
|
55
|
+
def __repr__(self) -> str:
|
|
56
|
+
return f"<{self._server_version}>"
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
from typing import Union
|
|
1
2
|
import struct
|
|
2
3
|
import copy
|
|
3
4
|
import enum
|
|
@@ -25,6 +26,7 @@ from ._SQLType import SQLType
|
|
|
25
26
|
|
|
26
27
|
from .._IRISNative import connect as native_connect
|
|
27
28
|
from .._IRISEmbedded import _IRISEmbedded
|
|
29
|
+
from intersystems_iris._IRISConnection import _IRISConnection
|
|
28
30
|
|
|
29
31
|
|
|
30
32
|
def NotImplementedErrorDBAPI(msg=None):
|
|
@@ -42,7 +44,7 @@ def embedded_connect(*args, hostname=None, port=None, namespace=None, username=N
|
|
|
42
44
|
return connection
|
|
43
45
|
|
|
44
46
|
|
|
45
|
-
def connect(*args, embedded=False, hostname=None, port=None, namespace=None, username=None, password=None, **kw):
|
|
47
|
+
def connect(*args, embedded=False, hostname=None, port=None, namespace=None, username=None, password=None, **kw) -> Union[_IRISConnection, _IRISEmbedded]:
|
|
46
48
|
try:
|
|
47
49
|
if not embedded:
|
|
48
50
|
return native_connect(
|
|
@@ -1180,6 +1182,8 @@ class Cursor(_BaseCursor):
|
|
|
1180
1182
|
sets = self._parameter_sets or 1
|
|
1181
1183
|
self.params = list(self.params).copy()
|
|
1182
1184
|
param_types = [param.type for param in self._params._params_list]
|
|
1185
|
+
if not self.params:
|
|
1186
|
+
return
|
|
1183
1187
|
|
|
1184
1188
|
for i in range(sets):
|
|
1185
1189
|
params = self._params.collect(i)
|
|
@@ -2149,6 +2153,7 @@ class Cursor(_BaseCursor):
|
|
|
2149
2153
|
|
|
2150
2154
|
if retval is None:
|
|
2151
2155
|
return retval
|
|
2156
|
+
# print('retval', retval[:])
|
|
2152
2157
|
return retval.as_tuple()
|
|
2153
2158
|
# return tuple(retval[:])
|
|
2154
2159
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import uuid
|
|
2
|
-
from datetime import datetime, date, time
|
|
2
|
+
from datetime import datetime, date, time, timezone
|
|
3
3
|
from collections import namedtuple
|
|
4
4
|
from ._SQLType import SQLType
|
|
5
5
|
from .._DBList import _DBList
|
|
@@ -11,20 +11,26 @@ from ._Column import _Column
|
|
|
11
11
|
def from_timestamp_posix(posix):
|
|
12
12
|
time = int(posix)
|
|
13
13
|
if time > 0:
|
|
14
|
-
time ^= 0x1000000000000000
|
|
14
|
+
time ^= 0x1000000000000000
|
|
15
15
|
else:
|
|
16
|
-
time |= 0xF000000000000000
|
|
16
|
+
time |= 0xF000000000000000
|
|
17
17
|
|
|
18
18
|
time /= 1000000
|
|
19
19
|
|
|
20
|
-
value = datetime.
|
|
20
|
+
value = datetime.fromtimestamp(time, timezone.utc).replace(tzinfo=None)
|
|
21
21
|
return value
|
|
22
22
|
|
|
23
|
+
|
|
23
24
|
class _ResultSetRow:
|
|
24
25
|
_locale = "latin-1"
|
|
25
26
|
_connection = None
|
|
26
27
|
|
|
27
|
-
def __init__(
|
|
28
|
+
def __init__(
|
|
29
|
+
self,
|
|
30
|
+
connection,
|
|
31
|
+
columns=None,
|
|
32
|
+
rowcount=0,
|
|
33
|
+
):
|
|
28
34
|
self._connection = connection
|
|
29
35
|
# index from user-inputted columns to columns received from server
|
|
30
36
|
self.col_index = []
|
|
@@ -55,7 +61,7 @@ class _ResultSetRow:
|
|
|
55
61
|
self.colCount = len(columns) if columns != None else 0
|
|
56
62
|
|
|
57
63
|
# number of columns received from server, aka number of items per row
|
|
58
|
-
#self.colCount = rowcount
|
|
64
|
+
# self.colCount = rowcount
|
|
59
65
|
|
|
60
66
|
# list of _ListItems corresponding to the various entries in the row, plus the offset of next row's first _ListItem
|
|
61
67
|
self.rowItems = None
|
|
@@ -126,9 +132,9 @@ class _ResultSetRow:
|
|
|
126
132
|
|
|
127
133
|
def get(self):
|
|
128
134
|
return self[:]
|
|
129
|
-
|
|
135
|
+
|
|
130
136
|
def as_tuple(self):
|
|
131
|
-
row = namedtuple(
|
|
137
|
+
row = namedtuple("Row", [col.name for col in self._columns], rename=True)
|
|
132
138
|
values = self[:]
|
|
133
139
|
return row(*values)
|
|
134
140
|
|
|
@@ -164,15 +170,18 @@ class _ResultSetRow:
|
|
|
164
170
|
HOROLOG_ORDINAL = date(1840, 12, 31).toordinal()
|
|
165
171
|
if item:
|
|
166
172
|
item = date.fromordinal(HOROLOG_ORDINAL + item)
|
|
173
|
+
if ctype == SQLType.TIMESTAMP and item:
|
|
174
|
+
item = item + '.000' if '.' not in item else item
|
|
175
|
+
item = datetime.strptime(item, '%Y-%m-%d %H:%M:%S.%f')
|
|
167
176
|
if ctype == SQLType.TIME_HOROLOG:
|
|
168
177
|
if item:
|
|
169
178
|
item = time(item // 3600, item % 3600 // 60, item % 3600 % 60)
|
|
170
179
|
if ctype == SQLType.GUID:
|
|
171
180
|
item = uuid.UUID(item)
|
|
172
|
-
if ctype == SQLType.TIMESTAMP_POSIX:
|
|
181
|
+
if ctype == SQLType.TIMESTAMP_POSIX and item:
|
|
173
182
|
item = from_timestamp_posix(item)
|
|
174
183
|
|
|
175
|
-
if _column.tableName ==
|
|
184
|
+
if _column.tableName == "None" and _column.schema == "None":
|
|
176
185
|
# Ignore for anonymous tables
|
|
177
186
|
pass
|
|
178
187
|
elif item is None:
|
|
@@ -285,8 +294,9 @@ class _ResultSetRow:
|
|
|
285
294
|
rowItems[i] = curr_offset
|
|
286
295
|
prev_offset = curr_offset
|
|
287
296
|
except IndexError:
|
|
288
|
-
raise IndexError(
|
|
289
|
-
|
|
297
|
+
raise IndexError(
|
|
298
|
+
"Row incomplete: " + str(self.colCount) + " items expected, but " + str(i) + " were found"
|
|
299
|
+
)
|
|
290
300
|
self.update(rowItems)
|
|
291
301
|
return True
|
|
292
302
|
|
|
@@ -319,8 +329,9 @@ class _ResultSetRow:
|
|
|
319
329
|
rowItems[i] = curr_offset
|
|
320
330
|
prev_offset = curr_offset
|
|
321
331
|
except IndexError:
|
|
322
|
-
raise IndexError(
|
|
323
|
-
|
|
332
|
+
raise IndexError(
|
|
333
|
+
"Row incomplete: " + str(self.colCount) + " items expected, but " + str(i) + " were found"
|
|
334
|
+
)
|
|
324
335
|
return self.update(rowItems)
|
|
325
336
|
|
|
326
337
|
def update(self, rowItems):
|
|
@@ -330,7 +341,7 @@ class _ResultSetRow:
|
|
|
330
341
|
colIndexOffsets[idx] = rowItems[i]
|
|
331
342
|
colIndexOffsets[-1] = self._last_list_item.next_offset
|
|
332
343
|
self.rowItems = colIndexOffsets
|
|
333
|
-
return self.rowItems[:self.colCount]
|
|
344
|
+
return self.rowItems[: self.colCount]
|
|
334
345
|
self.rowItems = rowItems
|
|
335
346
|
self._offsets = self.DataRow(self)
|
|
336
347
|
self._new_buffer = False
|
|
@@ -580,7 +580,10 @@ class _PreParser(object):
|
|
|
580
580
|
break
|
|
581
581
|
if token.TokenType is TOKEN.CONSTANT:
|
|
582
582
|
values += '?'
|
|
583
|
-
|
|
583
|
+
param = token.Lexeme
|
|
584
|
+
if param.__len__ and param[0] == "'" and param[0] == param[-1]:
|
|
585
|
+
param = param[1: -1]
|
|
586
|
+
params += [param]
|
|
584
587
|
else:
|
|
585
588
|
values += token.Lexeme
|
|
586
589
|
values += ' '
|
|
@@ -131,12 +131,6 @@ src/iop/cls/IOP/PrivateSession/Message/Start.cls
|
|
|
131
131
|
src/iop/cls/IOP/PrivateSession/Message/Stop.cls
|
|
132
132
|
src/iop/cls/IOP/Service/WSGI.cls
|
|
133
133
|
src/iop/wsgi/handlers.py
|
|
134
|
-
src/iris/__init__.py
|
|
135
|
-
src/iris/__init__.pyi
|
|
136
|
-
src/iris/_cli.py
|
|
137
|
-
src/iris/iris_ipm.py
|
|
138
|
-
src/iris/iris_ipm.pyi
|
|
139
|
-
src/iris/iris_utils.py
|
|
140
134
|
src/iris_pex_embedded_python.egg-info/PKG-INFO
|
|
141
135
|
src/iris_pex_embedded_python.egg-info/SOURCES.txt
|
|
142
136
|
src/iris_pex_embedded_python.egg-info/dependency_links.txt
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
from sys import path as __syspath
|
|
2
|
-
import os
|
|
3
|
-
from .iris_ipm import ipm
|
|
4
|
-
|
|
5
|
-
# check for install dir in environment
|
|
6
|
-
# environment to check is IRISINSTALLDIR
|
|
7
|
-
# if not found, raise exception and exit
|
|
8
|
-
# ISC_PACKAGE_INSTALLDIR - defined by default in Docker images
|
|
9
|
-
installdir = os.environ.get('IRISINSTALLDIR') or os.environ.get('ISC_PACKAGE_INSTALLDIR')
|
|
10
|
-
if installdir is None:
|
|
11
|
-
raise Exception("""Cannot find InterSystems IRIS installation directory
|
|
12
|
-
Please set IRISINSTALLDIR environment variable to the InterSystems IRIS installation directory""")
|
|
13
|
-
|
|
14
|
-
# join the install dir with the bin directory
|
|
15
|
-
__syspath.append(os.path.join(installdir, 'bin'))
|
|
16
|
-
# also append lib/python
|
|
17
|
-
__syspath.append(os.path.join(installdir, 'lib', 'python'))
|
|
18
|
-
|
|
19
|
-
# save working directory
|
|
20
|
-
__ospath = os.getcwd()
|
|
21
|
-
|
|
22
|
-
from pythonint import *
|
|
23
|
-
|
|
24
|
-
# restore working directory
|
|
25
|
-
os.chdir(__ospath)
|
|
26
|
-
|
|
27
|
-
# TODO: Figure out how to hide __syspath and __ospath from anyone that
|
|
28
|
-
# imports iris. Tried __all__ but that only applies to this:
|
|
29
|
-
# from iris import *
|
|
30
|
-
|
|
31
|
-
#
|
|
32
|
-
# End-of-file
|
|
33
|
-
#
|
|
34
|
-
|
|
35
|
-
def __getattr__(name):
|
|
36
|
-
try:
|
|
37
|
-
return globals()[name]
|
|
38
|
-
except KeyError:
|
|
39
|
-
return __get_iris_object__(name)
|
|
40
|
-
|
|
41
|
-
def __get_iris_object__(name:str):
|
|
42
|
-
try:
|
|
43
|
-
# replace '_' with '%'
|
|
44
|
-
name = name.replace('_', '%')
|
|
45
|
-
return cls(name)
|
|
46
|
-
except RuntimeError:
|
|
47
|
-
return __get_iris_package__(name)
|
|
48
|
-
|
|
49
|
-
def __get_iris_package__(name:str):
|
|
50
|
-
return IrisPackage(name)
|
|
51
|
-
|
|
52
|
-
class IrisPackage:
|
|
53
|
-
def __init__(self, name:str):
|
|
54
|
-
self.name = name
|
|
55
|
-
|
|
56
|
-
def __getattr__(self, name):
|
|
57
|
-
try:
|
|
58
|
-
return globals()[f"{self.name}.{name}"]
|
|
59
|
-
except KeyError:
|
|
60
|
-
return __get_iris_object__(f"{self.name}.{name}")
|
|
@@ -1,236 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
from typing import Any
|
|
3
|
-
from iris.iris_ipm import ipm
|
|
4
|
-
from . import iris_ipm
|
|
5
|
-
__all__ = [ 'check_status', 'cls', 'execute', 'gref', 'ipm', 'iris_ipm', 'lock', 'os', 'ref', 'routine', 'sql', 'system', 'tcommit', 'tlevel', 'trollback', 'trollbackone', 'tstart', 'unlock', 'utils']
|
|
6
|
-
def check_status(self, status):
|
|
7
|
-
"""
|
|
8
|
-
Raises an exception on an error status, or returns None if no error condition occurs.
|
|
9
|
-
Example: iris.check_status(st) checks the status code st to see if it contains an error.
|
|
10
|
-
"""
|
|
11
|
-
def cls(self, class_name):
|
|
12
|
-
"""
|
|
13
|
-
Returns a reference to an InterSystems IRIS class.
|
|
14
|
-
Example: iris.cls("%SYSTEM.INetInfo").LocalHostName() calls a method in the class %SYSTEM.INetInfo.
|
|
15
|
-
"""
|
|
16
|
-
def execute(self, statements):
|
|
17
|
-
"""
|
|
18
|
-
execute IRIS statements.
|
|
19
|
-
Example: iris.execute("set x="Hello"\nw x,!\n") returns nothing.
|
|
20
|
-
"""
|
|
21
|
-
def gref(self, global_name) -> global_ref:
|
|
22
|
-
"""
|
|
23
|
-
Returns a reference to an InterSystems IRIS global.
|
|
24
|
-
Example: g = iris.gref("^foo") sets g to a reference to global ^foo
|
|
25
|
-
"""
|
|
26
|
-
def lock(self, lock_list, timeout_value, locktype):
|
|
27
|
-
"""
|
|
28
|
-
Sets locks, given a list of lock names, an optional timeout value (in seconds), and an optional locktype.
|
|
29
|
-
Example: iris.lock(["^foo","^bar"], 30, "S") sets locks "^foo" and "^bar", waiting up to 30 seconds, and using shared locks.
|
|
30
|
-
"""
|
|
31
|
-
def ref(self, value):
|
|
32
|
-
"""
|
|
33
|
-
Creates an iris.ref object with a specified value.
|
|
34
|
-
Example: iris.ref("hello") creates an iris.ref object with the value "hello"
|
|
35
|
-
"""
|
|
36
|
-
def routine(self, routine, args):
|
|
37
|
-
"""
|
|
38
|
-
Invokes an InterSystems IRIS routine, optionally at a given tag.
|
|
39
|
-
Example: iris.routine("Stop^SystemPerformance", "20211221_160620_test") calls tag Stop in routine ^SystemPerformance.
|
|
40
|
-
"""
|
|
41
|
-
def tcommit(self):
|
|
42
|
-
"""
|
|
43
|
-
Marks a successful end of an InterSystems IRIS transaction.
|
|
44
|
-
Example: iris.commit() marks the successful end of a transaction and decrements the nesting level by 1
|
|
45
|
-
"""
|
|
46
|
-
def tlevel(self):
|
|
47
|
-
"""
|
|
48
|
-
Detects whether a transaction is currently in progress and returns the nesting level. Zero means not in a transaction.
|
|
49
|
-
Example: iris.tlevel() returns the current transaction nesting level, or zero if not in a transaction
|
|
50
|
-
"""
|
|
51
|
-
def trollback(self):
|
|
52
|
-
"""
|
|
53
|
-
Terminates the current transaction and restores all journaled database values to their values at the start of the transaction.
|
|
54
|
-
Example: iris.trollback() rolls back all current transactions in progress and resets the transaction nesting level to 0
|
|
55
|
-
"""
|
|
56
|
-
def trollbackone(self):
|
|
57
|
-
"""
|
|
58
|
-
Rolls back the current level of nested transactions, that is, the one initiated by the most recent tstart().
|
|
59
|
-
Example: iris.trollbackone() rolls back the current level of nested transactions and decrements the nesting level by 1
|
|
60
|
-
"""
|
|
61
|
-
def tstart(self):
|
|
62
|
-
"""
|
|
63
|
-
Starts an InterSystems IRIS transaction.
|
|
64
|
-
Example: iris.tstart() marks the beginning of a transaction.
|
|
65
|
-
"""
|
|
66
|
-
def unlock(self, lock_list, timout_value, locktype):
|
|
67
|
-
"""
|
|
68
|
-
Removes locks, given a list of lock names, an optional timeout value (in seconds), and an optional locktype.
|
|
69
|
-
Example: iris.unlock(["^foo","^bar"], 30, "S") removes locks "^foo" and "^bar", waiting up to 30 seconds, and using shared locks.
|
|
70
|
-
"""
|
|
71
|
-
def utils(self):
|
|
72
|
-
"""
|
|
73
|
-
Returns a reference to the InterSystems IRIS utilities class.
|
|
74
|
-
Example: iris.utils().$Job() returns the current job number.
|
|
75
|
-
"""
|
|
76
|
-
# Stubs for the gref object
|
|
77
|
-
class global_ref:
|
|
78
|
-
def data(self, key):
|
|
79
|
-
"""
|
|
80
|
-
Checks if a node of a global contains data and/or has descendants. The key of the node is passed as a list. Passing a key with the
|
|
81
|
-
value None (or an empty list) indicates the root node of the global.\n
|
|
82
|
-
You can use data() to inspect a node to see if it contains data before attempting to access that data and possibly encountering an error.
|
|
83
|
-
The method returns 0 if the node is undefined (contains no data), 1 if the node is defined (contains data), 10 if the node is undefined
|
|
84
|
-
but has descendants, or 11 if the node is defined and has descendants.
|
|
85
|
-
"""
|
|
86
|
-
def get(self, key):
|
|
87
|
-
"""
|
|
88
|
-
Gets the value stored at a node of a global. The key of the node is passed as a list. Passing a key with the value None (or an empty list)
|
|
89
|
-
indicates the root node of the global.
|
|
90
|
-
"""
|
|
91
|
-
def getAsBytes(self, key):
|
|
92
|
-
"""
|
|
93
|
-
Gets a string value stored at a node of a global and converts it to the Python bytes data type. The key of the node is passed as a list.
|
|
94
|
-
Passing a key with the value None (or an empty list) indicates the root node of the global.
|
|
95
|
-
"""
|
|
96
|
-
def keys(self, key):
|
|
97
|
-
"""
|
|
98
|
-
Returns the keys of a global, starting from a given key. The starting key is passed as a list. Passing an empty list indicates the root node of the global.
|
|
99
|
-
"""
|
|
100
|
-
def kill(self, key):
|
|
101
|
-
"""
|
|
102
|
-
Deletes the node of a global, if it exists. The key of the node is passed as a list. This also deletes any descendants of the node.
|
|
103
|
-
Passing a key with the value None (or an empty list) indicates the root node of the global.
|
|
104
|
-
"""
|
|
105
|
-
def order(self, key):
|
|
106
|
-
"""
|
|
107
|
-
Returns the next key in that level of the global, starting from a given key. The starting key is passed as a list.
|
|
108
|
-
If no key follows the starting key, order() returns None.
|
|
109
|
-
"""
|
|
110
|
-
def orderiter(self, key):
|
|
111
|
-
"""
|
|
112
|
-
Returns the keys and values of a global, starting from a given key, down to the next leaf node.
|
|
113
|
-
The starting key is passed as a list. Passing an empty list indicates the root node of the global.
|
|
114
|
-
"""
|
|
115
|
-
def query(self, key):
|
|
116
|
-
"""
|
|
117
|
-
Traverses a global starting at the specified key, returning each key and value.
|
|
118
|
-
The starting key is passed as a list. Passing an empty list indicates the root node of the global.
|
|
119
|
-
"""
|
|
120
|
-
def set(self, key, value):
|
|
121
|
-
"""
|
|
122
|
-
Sets a node in a global to a given value. The key of the node is passed as a list, and value is the value to be stored.
|
|
123
|
-
Passing a key with the value None (or an empty list) indicates the root node of the global.
|
|
124
|
-
"""
|
|
125
|
-
# stubs for the sql object
|
|
126
|
-
class sql:
|
|
127
|
-
"""
|
|
128
|
-
The sql object provides access to the InterSystems IRIS SQL API.
|
|
129
|
-
"""
|
|
130
|
-
def exec(self, query: str) -> Any:
|
|
131
|
-
"""
|
|
132
|
-
Execute a query
|
|
133
|
-
"""
|
|
134
|
-
def prepare(self, query: str) -> PreparedQuery:
|
|
135
|
-
"""
|
|
136
|
-
Prepare a query
|
|
137
|
-
"""
|
|
138
|
-
class PreparedQuery:
|
|
139
|
-
def execute(self, **kwargs) -> Any:
|
|
140
|
-
"""
|
|
141
|
-
Execute a prepared query, you can pass values
|
|
142
|
-
"""
|
|
143
|
-
# stubs for the system object
|
|
144
|
-
class system:
|
|
145
|
-
"""
|
|
146
|
-
The system object provides access to the InterSystems IRIS system API.
|
|
147
|
-
The following classes are available:
|
|
148
|
-
'DocDB', 'Encryption', 'Error', 'Event', 'Monitor', 'Process', 'Python', 'SQL', 'SYS', 'Security', 'Semaphore', 'Status', 'Util', 'Version'
|
|
149
|
-
"""
|
|
150
|
-
class DocDB:
|
|
151
|
-
"""
|
|
152
|
-
The DocDB class provides access to the InterSystems IRIS Document Database API.
|
|
153
|
-
The following methods are available:
|
|
154
|
-
'CreateDatabase', 'DropAllDatabases', 'DropDatabase', 'Exists', 'GetAllDatabases', 'GetDatabase', 'Help'
|
|
155
|
-
"""
|
|
156
|
-
def CreateDatabase(self, name: str, path: str, **kwargs) -> Any:
|
|
157
|
-
"""
|
|
158
|
-
Create a database
|
|
159
|
-
"""
|
|
160
|
-
def DropAllDatabases(self) -> Any:
|
|
161
|
-
"""
|
|
162
|
-
Drop all databases
|
|
163
|
-
"""
|
|
164
|
-
def DropDatabase(self, name: str) -> Any:
|
|
165
|
-
"""
|
|
166
|
-
Drop a database
|
|
167
|
-
"""
|
|
168
|
-
def Exists(self, name: str) -> Any:
|
|
169
|
-
"""
|
|
170
|
-
Check if a database exists
|
|
171
|
-
"""
|
|
172
|
-
def GetAllDatabases(self) -> Any:
|
|
173
|
-
"""
|
|
174
|
-
Get all databases
|
|
175
|
-
"""
|
|
176
|
-
def GetDatabase(self, name: str) -> Any:
|
|
177
|
-
"""
|
|
178
|
-
Get a database
|
|
179
|
-
"""
|
|
180
|
-
def Help(self) -> Any:
|
|
181
|
-
"""
|
|
182
|
-
Get help
|
|
183
|
-
"""
|
|
184
|
-
def Encryption(self) -> Any:
|
|
185
|
-
"""
|
|
186
|
-
The Encryption class provides access to the InterSystems IRIS Encryption API.
|
|
187
|
-
"""
|
|
188
|
-
def Error(self) -> Any:
|
|
189
|
-
"""
|
|
190
|
-
The Error class provides access to the InterSystems IRIS Error API.
|
|
191
|
-
"""
|
|
192
|
-
def Event(self) -> Any:
|
|
193
|
-
"""
|
|
194
|
-
The Event class provides access to the InterSystems IRIS Event API.
|
|
195
|
-
"""
|
|
196
|
-
def Monitor(self) -> Any:
|
|
197
|
-
"""
|
|
198
|
-
The Monitor class provides access to the InterSystems IRIS Monitor API.
|
|
199
|
-
"""
|
|
200
|
-
def Process(self) -> Any:
|
|
201
|
-
"""
|
|
202
|
-
The Process class provides access to the InterSystems IRIS Process API.
|
|
203
|
-
"""
|
|
204
|
-
def Python(self) -> Any:
|
|
205
|
-
"""
|
|
206
|
-
The Python class provides access to the InterSystems IRIS Python API.
|
|
207
|
-
"""
|
|
208
|
-
def SQL(self) -> Any:
|
|
209
|
-
"""
|
|
210
|
-
The SQL class provides access to the InterSystems IRIS SQL API.
|
|
211
|
-
"""
|
|
212
|
-
def SYS(self) -> Any:
|
|
213
|
-
"""
|
|
214
|
-
The SYS class provides access to the InterSystems IRIS SYS API.
|
|
215
|
-
"""
|
|
216
|
-
def Security(self) -> Any:
|
|
217
|
-
"""
|
|
218
|
-
The Security class provides access to the InterSystems IRIS Security API.
|
|
219
|
-
"""
|
|
220
|
-
def Semaphore(self) -> Any:
|
|
221
|
-
"""
|
|
222
|
-
The Semaphore class provides access to the InterSystems IRIS Semaphore API.
|
|
223
|
-
"""
|
|
224
|
-
def Status(self) -> Any:
|
|
225
|
-
"""
|
|
226
|
-
The Status class provides access to the InterSystems IRIS Status API.
|
|
227
|
-
"""
|
|
228
|
-
def Util(self) -> Any:
|
|
229
|
-
"""
|
|
230
|
-
The Util class provides access to the InterSystems IRIS Util API.
|
|
231
|
-
"""
|
|
232
|
-
def Version(self) -> Any:
|
|
233
|
-
"""
|
|
234
|
-
The Version class provides access to the InterSystems IRIS Version API.
|
|
235
|
-
"""
|
|
236
|
-
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import os
|
|
2
|
-
import sys
|
|
3
|
-
import argparse
|
|
4
|
-
|
|
5
|
-
from . import iris_utils
|
|
6
|
-
import iris
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
def bind():
|
|
10
|
-
parser = argparse.ArgumentParser()
|
|
11
|
-
parser.add_argument("--namespace", default="")
|
|
12
|
-
|
|
13
|
-
args = parser.parse_args()
|
|
14
|
-
|
|
15
|
-
libpython = iris_utils.find_libpython()
|
|
16
|
-
if not libpython:
|
|
17
|
-
raise RuntimeError("libpython not found")
|
|
18
|
-
|
|
19
|
-
iris.system.Process.SetNamespace("%SYS")
|
|
20
|
-
config = iris.cls("Config.config").Open()
|
|
21
|
-
|
|
22
|
-
# Set the new libpython path
|
|
23
|
-
config.PythonRuntimeLibrary = libpython
|
|
24
|
-
# Set the new PythonPath to VIRTUAL_ENV + "/lib" + "/python+" + sys.version[:4] + "/site-packages
|
|
25
|
-
config.PythonPath = os.path.join(os.environ["VIRTUAL_ENV"], "lib", "python" + sys.version[:4], "site-packages")
|
|
26
|
-
|
|
27
|
-
config._Save()
|
|
28
|
-
|
|
29
|
-
def unbind():
|
|
30
|
-
iris.system.Process.SetNamespace("%SYS")
|
|
31
|
-
config = iris.cls("Config.config").Open()
|
|
32
|
-
|
|
33
|
-
# Set the new libpython path
|
|
34
|
-
config.PythonRuntimeLibrary = ""
|
|
35
|
-
# Set the new PythonPath to VIRTUAL_ENV + "/lib" + "/python+" + sys.version[:4] + "/site-packages
|
|
36
|
-
config.PythonPath = ""
|
|
37
|
-
|
|
38
|
-
config._Save()
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
def ipm(cmd, *args):
|
|
2
|
-
"""
|
|
3
|
-
Executes shell command with IPM:
|
|
4
|
-
Parameters
|
|
5
|
-
----------
|
|
6
|
-
cmd : str
|
|
7
|
-
The command to execute
|
|
8
|
-
Examples
|
|
9
|
-
--------
|
|
10
|
-
`ipm('help')`
|
|
11
|
-
`ipm('load /home/irisowner/dev -v')`
|
|
12
|
-
`ipm('install webterminal')`
|
|
13
|
-
"""
|
|
14
|
-
|
|
15
|
-
import multiprocessing
|
|
16
|
-
import iris
|
|
17
|
-
|
|
18
|
-
def shell(cmd, status):
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
status.put(True)
|
|
22
|
-
|
|
23
|
-
res = iris.cls("%ZPM.PackageManager").Shell(cmd)
|
|
24
|
-
print('')
|
|
25
|
-
if res != 1:
|
|
26
|
-
status.get()
|
|
27
|
-
status.put(False)
|
|
28
|
-
|
|
29
|
-
manager = multiprocessing.Manager()
|
|
30
|
-
status = manager.Queue()
|
|
31
|
-
process = multiprocessing.Process(
|
|
32
|
-
target=shell,
|
|
33
|
-
args=(
|
|
34
|
-
cmd,
|
|
35
|
-
status,
|
|
36
|
-
),
|
|
37
|
-
)
|
|
38
|
-
process.start()
|
|
39
|
-
process.join()
|
|
40
|
-
return status.get()
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
__all__ = ['ipm']
|
|
3
|
-
def ipm(cmd, *args):
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
Executes shell command with IPM:
|
|
7
|
-
Parameters
|
|
8
|
-
----------
|
|
9
|
-
cmd : str
|
|
10
|
-
The command to execute
|
|
11
|
-
Examples
|
|
12
|
-
--------
|
|
13
|
-
`ipm('help')`
|
|
14
|
-
`ipm('load /home/irisowner/dev -v')`
|
|
15
|
-
`ipm('install webterminal')`
|
|
16
|
-
|
|
17
|
-
"""
|