iris-pex-embedded-python 3.4.1b8__py3-none-any.whl → 3.4.1b9__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.
Potentially problematic release.
This version of iris-pex-embedded-python might be problematic. Click here for more details.
- iop/_business_operation.py +1 -0
- iop/_business_process.py +1 -0
- iop/_business_service.py +9 -0
- iop/_common.py +72 -0
- iop/_debugpy.py +69 -0
- iop/cls/IOP/Utils.cls +59 -9
- {iris_pex_embedded_python-3.4.1b8.dist-info → iris_pex_embedded_python-3.4.1b9.dist-info}/METADATA +2 -1
- {iris_pex_embedded_python-3.4.1b8.dist-info → iris_pex_embedded_python-3.4.1b9.dist-info}/RECORD +12 -11
- {iris_pex_embedded_python-3.4.1b8.dist-info → iris_pex_embedded_python-3.4.1b9.dist-info}/WHEEL +1 -1
- {iris_pex_embedded_python-3.4.1b8.dist-info → iris_pex_embedded_python-3.4.1b9.dist-info}/entry_points.txt +0 -0
- {iris_pex_embedded_python-3.4.1b8.dist-info → iris_pex_embedded_python-3.4.1b9.dist-info}/licenses/LICENSE +0 -0
- {iris_pex_embedded_python-3.4.1b8.dist-info → iris_pex_embedded_python-3.4.1b9.dist-info}/top_level.txt +0 -0
iop/_business_operation.py
CHANGED
iop/_business_process.py
CHANGED
|
@@ -141,6 +141,7 @@ class _BusinessProcess(_BusinessHost):
|
|
|
141
141
|
def _dispatch_on_init(self, host_object: Any) -> None:
|
|
142
142
|
"""For internal use only."""
|
|
143
143
|
self._restore_persistent_properties(host_object)
|
|
144
|
+
self._debugpy(host_object=host_object)
|
|
144
145
|
create_dispatch(self)
|
|
145
146
|
self.on_init()
|
|
146
147
|
self._save_persistent_properties(host_object)
|
iop/_business_service.py
CHANGED
|
@@ -16,6 +16,15 @@ class _BusinessService(_BusinessHost):
|
|
|
16
16
|
Adapter = adapter = None
|
|
17
17
|
_wait_for_next_call_interval = False
|
|
18
18
|
|
|
19
|
+
def _dispatch_on_init(self, host_object) -> None:
|
|
20
|
+
"""For internal use only."""
|
|
21
|
+
|
|
22
|
+
self._debugpy(host_object=host_object)
|
|
23
|
+
|
|
24
|
+
self.on_init()
|
|
25
|
+
|
|
26
|
+
return
|
|
27
|
+
|
|
19
28
|
def on_process_input(self, message_input):
|
|
20
29
|
""" Receives the message from the inbond adapter via the PRocessInput method and is responsible for forwarding it to target business processes or operations.
|
|
21
30
|
If the business service does not specify an adapter, then the default adapter calls this method with no message
|
iop/_common.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import abc
|
|
2
2
|
import inspect
|
|
3
3
|
import traceback
|
|
4
|
+
|
|
4
5
|
from typing import Any, ClassVar, List, Optional, Tuple
|
|
5
6
|
|
|
6
7
|
from . import _iris
|
|
@@ -57,8 +58,79 @@ class _Common(metaclass=abc.ABCMeta):
|
|
|
57
58
|
self.on_connected()
|
|
58
59
|
|
|
59
60
|
def _dispatch_on_init(self, host_object: Any) -> None:
|
|
61
|
+
"""Initialize component when started."""
|
|
62
|
+
self._debugpy(host_object)
|
|
60
63
|
self.on_init()
|
|
61
64
|
|
|
65
|
+
def _debugpy(self, host_object: Any) -> None:
|
|
66
|
+
"""Enable debugpy for debugging purposes."""
|
|
67
|
+
# iris.cls('%SYS.Python').Debugging(1)
|
|
68
|
+
from iop._debugpy import enable_debugpy, wait_for_debugpy_connected, find_free_port, is_debugpy_installed
|
|
69
|
+
import sys, os
|
|
70
|
+
|
|
71
|
+
# hack to set __file__ for os module in debugpy
|
|
72
|
+
# This is a workaround for the issue where debugpy cannot find the __file__ attribute of the os module.
|
|
73
|
+
if not hasattr(os, '__file__'):
|
|
74
|
+
setattr(os, '__file__', __file__)
|
|
75
|
+
|
|
76
|
+
if host_object is not None:
|
|
77
|
+
port = host_object.port
|
|
78
|
+
timeout = host_object.timeout
|
|
79
|
+
enabled = host_object.enable
|
|
80
|
+
python_interpreter_path = host_object.PythonInterpreterPath
|
|
81
|
+
else:
|
|
82
|
+
self.log_alert("No host object found, cannot enable debugpy.")
|
|
83
|
+
return
|
|
84
|
+
|
|
85
|
+
if python_interpreter_path != "":
|
|
86
|
+
# the user has set a specific python interpreter path, so we need to set the path to the python executable
|
|
87
|
+
# to the one that is running this script
|
|
88
|
+
if os.path.exists(python_interpreter_path):
|
|
89
|
+
sys.executable = python_interpreter_path
|
|
90
|
+
else:
|
|
91
|
+
self.log_alert(f"Python path {python_interpreter_path} does not exist, cannot set python path for debugpy.")
|
|
92
|
+
return
|
|
93
|
+
elif sys.executable.find('irisdb') > 0:
|
|
94
|
+
# the executable is the IRIS executable, so we need to set the path to the python executable
|
|
95
|
+
# to the one that is running this script
|
|
96
|
+
installdir = os.environ.get('IRISINSTALLDIR') or os.environ.get('ISC_PACKAGE_INSTALLDIR')
|
|
97
|
+
if installdir is not None:
|
|
98
|
+
if sys.platform == 'win32':
|
|
99
|
+
python_path = os.path.join(installdir, 'bin', 'irispython.exe')
|
|
100
|
+
else:
|
|
101
|
+
python_path = os.path.join(installdir, 'bin', 'irispython')
|
|
102
|
+
if os.path.exists(python_path):
|
|
103
|
+
sys.executable = python_path
|
|
104
|
+
else:
|
|
105
|
+
self.log_alert(f"Python path {python_path} does not exist, cannot set python path for debugpy.")
|
|
106
|
+
return
|
|
107
|
+
else:
|
|
108
|
+
self.log_alert("IRISINSTALLDIR or ISC_PACKAGE_INSTALLDIR not set, cannot set python path for debugpy.")
|
|
109
|
+
return
|
|
110
|
+
|
|
111
|
+
if enabled:
|
|
112
|
+
self.log_info(f"Debugpy is running in {sys.executable}.")
|
|
113
|
+
if is_debugpy_installed():
|
|
114
|
+
if port is None or port <= 0:
|
|
115
|
+
port = find_free_port()
|
|
116
|
+
self.log_info(f"Debugpy enabled.")
|
|
117
|
+
try:
|
|
118
|
+
enable_debugpy(port=port, address=None)
|
|
119
|
+
except Exception as e:
|
|
120
|
+
self.log_alert(f"Error enabling debugpy: {e}")
|
|
121
|
+
return
|
|
122
|
+
|
|
123
|
+
self.trace(f"Waiting for {timeout} sec to debugpy connection on port {port}...")
|
|
124
|
+
if wait_for_debugpy_connected(timeout=timeout, port=port):
|
|
125
|
+
self.log_info("Debugpy connected.")
|
|
126
|
+
else:
|
|
127
|
+
self.log_alert(f"Debugpy connection timed out after {timeout} seconds.")
|
|
128
|
+
else:
|
|
129
|
+
self.log_alert("Debugpy is not installed.")
|
|
130
|
+
else:
|
|
131
|
+
self.log_info("Debugpy is not enabled.")
|
|
132
|
+
|
|
133
|
+
|
|
62
134
|
def _dispatch_on_tear_down(self, host_object: Any) -> None:
|
|
63
135
|
self.on_tear_down()
|
|
64
136
|
|
iop/_debugpy.py
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
|
|
2
|
+
import threading
|
|
3
|
+
import time
|
|
4
|
+
import contextlib
|
|
5
|
+
import socket
|
|
6
|
+
from contextlib import closing
|
|
7
|
+
|
|
8
|
+
from typing import Optional, Tuple, Union, Sequence, cast, Callable, TypeVar, Dict, Any
|
|
9
|
+
|
|
10
|
+
def find_free_port(start: Optional[int] = None, end: Optional[int] = None) -> int:
|
|
11
|
+
port = start
|
|
12
|
+
if port is None:
|
|
13
|
+
port = 0
|
|
14
|
+
if end is None:
|
|
15
|
+
end = port
|
|
16
|
+
|
|
17
|
+
try:
|
|
18
|
+
with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as s:
|
|
19
|
+
with contextlib.suppress(Exception):
|
|
20
|
+
s.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 0)
|
|
21
|
+
|
|
22
|
+
s.bind(("0.0.0.0", port))
|
|
23
|
+
|
|
24
|
+
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|
25
|
+
return cast(int, s.getsockname()[1])
|
|
26
|
+
except (SystemExit, KeyboardInterrupt):
|
|
27
|
+
raise
|
|
28
|
+
except BaseException:
|
|
29
|
+
if port and end > port:
|
|
30
|
+
return find_free_port(port + 1, end)
|
|
31
|
+
if start and start > 0:
|
|
32
|
+
return find_free_port(None)
|
|
33
|
+
raise
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def is_debugpy_installed() -> bool:
|
|
37
|
+
try:
|
|
38
|
+
__import__("debugpy")
|
|
39
|
+
except ImportError:
|
|
40
|
+
return False
|
|
41
|
+
return True
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def wait_for_debugpy_connected(timeout: float = 30,port=0) -> bool:
|
|
45
|
+
import debugpy # noqa: T100
|
|
46
|
+
|
|
47
|
+
if not is_debugpy_installed():
|
|
48
|
+
return False
|
|
49
|
+
|
|
50
|
+
class T(threading.Thread):
|
|
51
|
+
daemon = True
|
|
52
|
+
def run(self):
|
|
53
|
+
time.sleep(timeout)
|
|
54
|
+
debugpy.wait_for_client.cancel()
|
|
55
|
+
T().start()
|
|
56
|
+
debugpy.wait_for_client()
|
|
57
|
+
if debugpy.is_client_connected():
|
|
58
|
+
return True
|
|
59
|
+
|
|
60
|
+
return False
|
|
61
|
+
|
|
62
|
+
def enable_debugpy(port: int, address = None) -> bool:
|
|
63
|
+
|
|
64
|
+
import debugpy # noqa: T100
|
|
65
|
+
|
|
66
|
+
if address is None:
|
|
67
|
+
address = "0.0.0.0"
|
|
68
|
+
|
|
69
|
+
debugpy.listen((address, port))
|
iop/cls/IOP/Utils.cls
CHANGED
|
@@ -61,7 +61,7 @@ ClassMethod DeleteComponentProxy(pClassname As %String = "") As %Status
|
|
|
61
61
|
{
|
|
62
62
|
#dim tSC As %Status = $$$OK
|
|
63
63
|
#dim ex As %Exception.AbstractException
|
|
64
|
-
#dim
|
|
64
|
+
#dim tIsIOP As %Boolean = 0
|
|
65
65
|
#dim tClass As %Dictionary.CompiledClass
|
|
66
66
|
|
|
67
67
|
Quit:(""=pClassname) $$$ERROR($$$EnsErrGeneral,"Remote class name must be specified.")
|
|
@@ -79,16 +79,16 @@ ClassMethod DeleteComponentProxy(pClassname As %String = "") As %Status
|
|
|
79
79
|
Set tSC = $$$ERROR($$$EnsErrGeneral,$$$FormatText("Proxy class for remote class '%1' could not be opened.",pClassname))
|
|
80
80
|
Quit
|
|
81
81
|
}
|
|
82
|
-
Set
|
|
82
|
+
Set tIsIOP = ("IOP.Utils" = tClass.GeneratedBy)
|
|
83
83
|
}
|
|
84
|
-
If
|
|
84
|
+
If tIsIOP {
|
|
85
85
|
Set tSC = ##class(%Dictionary.ClassDefinition).%DeleteId(pClassname)
|
|
86
86
|
If $$$ISERR(tSC) {
|
|
87
87
|
Set tSC = $$$ERROR($$$EnsErrGeneral,$$$FormatText("Unable to delete proxy class for remote class '%1' : '%2'.",pClassname,$System.Status.GetErrorText(tSC)))
|
|
88
88
|
Quit
|
|
89
89
|
}
|
|
90
90
|
} Else {
|
|
91
|
-
Set tSC = $$$ERROR($$$EnsErrGeneral,$$$FormatText("Cannot delete class '%1' because it is not a
|
|
91
|
+
Set tSC = $$$ERROR($$$EnsErrGeneral,$$$FormatText("Cannot delete class '%1' because it is not a IOP proxy class.",pClassname))
|
|
92
92
|
Quit
|
|
93
93
|
}
|
|
94
94
|
|
|
@@ -179,23 +179,23 @@ ClassMethod GenerateProxyClass(
|
|
|
179
179
|
Set tSC = $$$ERROR($$$EnsErrGeneral,$$$FormatText("Proxy class '%1' already exists.",pClassname))
|
|
180
180
|
Quit
|
|
181
181
|
} Else {
|
|
182
|
-
#dim
|
|
182
|
+
#dim tIsIOP As %Boolean = 0
|
|
183
183
|
If $classmethod(pClassname,"%Extends","IOP.Common") {
|
|
184
184
|
#dim tClass As %Dictionary.CompiledClass = ##class(%Dictionary.CompiledClass).%OpenId(pClassname)
|
|
185
185
|
If '$IsObject(tClass) {
|
|
186
186
|
Set tSC = $$$ERROR($$$EnsErrGeneral,"Class not found")
|
|
187
187
|
Quit
|
|
188
188
|
}
|
|
189
|
-
Set
|
|
189
|
+
Set tIsIOP = ("IOP.Utils" = tClass.GeneratedBy)
|
|
190
190
|
}
|
|
191
|
-
If
|
|
191
|
+
If tIsIOP {
|
|
192
192
|
Set tSC = ##class(%Dictionary.ClassDefinition).%DeleteId(pClassname)
|
|
193
193
|
If $$$ISERR(tSC) {
|
|
194
194
|
Set tSC = $$$ERROR($$$EnsErrGeneral,$$$FormatText("Unable to delete existing proxy class '%1' : '%2'.",pClassname,$System.Status.GetErrorText(tSC)))
|
|
195
195
|
Quit
|
|
196
196
|
}
|
|
197
197
|
} Else {
|
|
198
|
-
Set tSC = $$$ERROR($$$EnsErrGeneral,$$$FormatText("Cannot overwrite class '%1' because it is not a
|
|
198
|
+
Set tSC = $$$ERROR($$$EnsErrGeneral,$$$FormatText("Cannot overwrite class '%1' because it is not a IOP proxy class.",pClassname))
|
|
199
199
|
Quit
|
|
200
200
|
}
|
|
201
201
|
}
|
|
@@ -208,7 +208,7 @@ ClassMethod GenerateProxyClass(
|
|
|
208
208
|
|
|
209
209
|
#dim tSuperClass As %String = pClassDetails."__getitem__"(0)
|
|
210
210
|
If (""=tSuperClass) {
|
|
211
|
-
Set tSC = $$$ERROR($$$EnsErrGeneral,"No
|
|
211
|
+
Set tSC = $$$ERROR($$$EnsErrGeneral,"No IOP superclass found.")
|
|
212
212
|
Quit
|
|
213
213
|
}
|
|
214
214
|
If '$Case($P(tSuperClass,".",*),"DuplexProcess":1,"DuplexService":1,"DuplexOperation":1,"InboundAdapter":1,"OutboundAdapter":1,"BusinessService":1,"BusinessProcess":1,"BusinessOperation":1,:0) {
|
|
@@ -323,6 +323,56 @@ ClassMethod GenerateProxyClass(
|
|
|
323
323
|
}
|
|
324
324
|
Quit:$$$ISERR(tSC)
|
|
325
325
|
|
|
326
|
+
#; Add debug settings, three settings are always available debug a boolean, port an integer and a timeout an integer
|
|
327
|
+
Set tPropCat = "Python Debug"
|
|
328
|
+
#; Debug property
|
|
329
|
+
Set tPropDebug = ##class(%Dictionary.PropertyDefinition).%New()
|
|
330
|
+
Set tPropDebug.Name = "enable"
|
|
331
|
+
Set tPropDebug.Type = "%Boolean"
|
|
332
|
+
Set tPropDebug.InitialExpression = $$$quote(0)
|
|
333
|
+
Set tPropDebug.Description = "Enable or disable debug"
|
|
334
|
+
|
|
335
|
+
Set tSC = tCOSClass.Properties.Insert(tPropDebug)
|
|
336
|
+
Quit:$$$ISERR(tSC)
|
|
337
|
+
|
|
338
|
+
#; Add the settings parameter
|
|
339
|
+
Set tSETTINGSParamValue = tSETTINGSParamValue_",enable:"_tPropCat
|
|
340
|
+
|
|
341
|
+
#; Port property
|
|
342
|
+
Set tPropPort = ##class(%Dictionary.PropertyDefinition).%New()
|
|
343
|
+
Set tPropPort.Name = "port"
|
|
344
|
+
Set tPropPort.Type = "%Integer"
|
|
345
|
+
Set tPropPort.InitialExpression = $$$quote(0)
|
|
346
|
+
Set tPropPort.Description = "Port to use for the debug connection, if 0 an random port will be used"
|
|
347
|
+
Set tSC = tCOSClass.Properties.Insert(tPropPort)
|
|
348
|
+
Quit:$$$ISERR(tSC)
|
|
349
|
+
|
|
350
|
+
#; Add the settings parameter
|
|
351
|
+
Set tSETTINGSParamValue = tSETTINGSParamValue_",port:"_tPropCat
|
|
352
|
+
|
|
353
|
+
#; Timeout property
|
|
354
|
+
Set tPropTimeout = ##class(%Dictionary.PropertyDefinition).%New()
|
|
355
|
+
Set tPropTimeout.Name = "timeout"
|
|
356
|
+
Set tPropTimeout.Type = "%Integer"
|
|
357
|
+
Set tPropTimeout.InitialExpression = $$$quote(30)
|
|
358
|
+
Set tSC = tCOSClass.Properties.Insert(tPropTimeout)
|
|
359
|
+
Quit:$$$ISERR(tSC)
|
|
360
|
+
|
|
361
|
+
#; Add the settings parameter
|
|
362
|
+
Set tSETTINGSParamValue = tSETTINGSParamValue_",timeout:"_tPropCat
|
|
363
|
+
|
|
364
|
+
#; PythonInterpreterPath property
|
|
365
|
+
Set tPropInterpre = ##class(%Dictionary.PropertyDefinition).%New()
|
|
366
|
+
Set tPropInterpre.Name = "PythonInterpreterPath"
|
|
367
|
+
Set tPropInterpre.Type = "%String"
|
|
368
|
+
Set tPropInterpre.Description = "Path to the Python interpreter, if not set the default one will be used"
|
|
369
|
+
Do tPropInterpre.Parameters.SetAt("255","MAXLEN")
|
|
370
|
+
Set tSC = tCOSClass.Properties.Insert(tPropInterpre)
|
|
371
|
+
Quit:$$$ISERR(tSC)
|
|
372
|
+
|
|
373
|
+
#; Add the settings parameter
|
|
374
|
+
Set tSETTINGSParamValue = tSETTINGSParamValue_",PythonInterpreterPath:"_tPropCat
|
|
375
|
+
|
|
326
376
|
#dim tSETTINGSParam As %Dictionary.ParameterDefinition = ##class(%Dictionary.ParameterDefinition).%New()
|
|
327
377
|
Set tSETTINGSParam.Name = "SETTINGS"
|
|
328
378
|
Set tSETTINGSParam.Default = tSETTINGSParamValue
|
{iris_pex_embedded_python-3.4.1b8.dist-info → iris_pex_embedded_python-3.4.1b9.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: iris_pex_embedded_python
|
|
3
|
-
Version: 3.4.
|
|
3
|
+
Version: 3.4.1b9
|
|
4
4
|
Summary: Iris Interoperability based on Embedded Python
|
|
5
5
|
Author-email: grongier <guillaume.rongier@intersystems.com>
|
|
6
6
|
License: MIT License
|
|
@@ -49,6 +49,7 @@ Requires-Dist: xmltodict>=0.12.0
|
|
|
49
49
|
Requires-Dist: iris-embedded-python-wrapper>=0.0.6
|
|
50
50
|
Requires-Dist: setuptools>=40.8.0
|
|
51
51
|
Requires-Dist: jsonpath-ng>=1.7.0
|
|
52
|
+
Requires-Dist: debugpy>=1.8.0
|
|
52
53
|
Dynamic: license-file
|
|
53
54
|
|
|
54
55
|
# IoP (Interoperability On Python)
|
{iris_pex_embedded_python-3.4.1b8.dist-info → iris_pex_embedded_python-3.4.1b9.dist-info}/RECORD
RENAMED
|
@@ -31,11 +31,12 @@ iop/__init__.py,sha256=1C589HojSVK0yJf1KuTPA39ZjrOYO0QFLv45rqbZpA4,1183
|
|
|
31
31
|
iop/__main__.py,sha256=pQzVtkDhAeI6dpNRC632dVk2SGZZIEDwDufdgZe8VWs,98
|
|
32
32
|
iop/_async_request.py,sha256=ae950UFSlOHjmXGifbjHV4SFiJAMefrTVLs6lGEkgXE,2242
|
|
33
33
|
iop/_business_host.py,sha256=x9wMNfs_IXBczEeGHsrnAo8mgFrlAhwtrWkSC-W9vqA,9699
|
|
34
|
-
iop/_business_operation.py,sha256=
|
|
35
|
-
iop/_business_process.py,sha256=
|
|
36
|
-
iop/_business_service.py,sha256=
|
|
34
|
+
iop/_business_operation.py,sha256=2k7TY-Cjv3zOsTPdwYUT7mEpF33dpVFP8aQjVnbo6nQ,3086
|
|
35
|
+
iop/_business_process.py,sha256=cWaqhJSiPyH36evjCIcHQn6Zt6_VGScbVXA5hhBBUO8,8596
|
|
36
|
+
iop/_business_service.py,sha256=Nb4vK-kR3QPe5PfOGukQuj3tz2giT1OpO-SKamVKKPU,4040
|
|
37
37
|
iop/_cli.py,sha256=fhaUpq3rTb4P2QPuuqoeatsphMLBPj9xtbvFPJv-2Mo,7941
|
|
38
|
-
iop/_common.py,sha256=
|
|
38
|
+
iop/_common.py,sha256=TWMC0hlWewi2Ynoxk9oIJ3d0HltCHdizSrwAJwyXAa4,16999
|
|
39
|
+
iop/_debugpy.py,sha256=-6BZYU_IV9iesTlunogKqDimV7PRtUkNMfOZCjFdI5k,1732
|
|
39
40
|
iop/_decorators.py,sha256=ZpgEETLdKWv58AoSMfXnm3_mA-6qPphIegjG-npDgwg,2324
|
|
40
41
|
iop/_director.py,sha256=d1XXJn8T8VF9rmT-joJdz_ElS2UR6myRaXaMFC_2brA,11498
|
|
41
42
|
iop/_dispatch.py,sha256=I3TAhvTuk8j4VcROI9vAitJ0a7Nk1BYAWKRrLeNsjr0,3203
|
|
@@ -59,7 +60,7 @@ iop/cls/IOP/Message.cls,sha256=ZrYQHosgfTG9wv7i-WQ8j71YXZMmL4_mN16xtIDwcRg,25180
|
|
|
59
60
|
iop/cls/IOP/OutboundAdapter.cls,sha256=9eOwy5ojwcTzwrHs6LNrFQvUD8aqcoNCZrILN1ycdDM,958
|
|
60
61
|
iop/cls/IOP/PickleMessage.cls,sha256=S3y7AClQ8mAILjxPuHdCjGosBZYzGbUQ5WTv4mYPNMQ,1673
|
|
61
62
|
iop/cls/IOP/Test.cls,sha256=gAC9PEfMZsvAEWIa241-ug2FWAhITbN1SOispZzJPnI,2094
|
|
62
|
-
iop/cls/IOP/Utils.cls,sha256=
|
|
63
|
+
iop/cls/IOP/Utils.cls,sha256=_6d1qRNVbWH8GMrjA7xHudCJWw28ZXdRhVeEOcvCsRc,17744
|
|
63
64
|
iop/cls/IOP/Duplex/Operation.cls,sha256=K_fmgeLjPZQbHgNrc0kd6DUQoW0fDn1VHQjJxHo95Zk,525
|
|
64
65
|
iop/cls/IOP/Duplex/Process.cls,sha256=xbefZ4z84a_IUhavWN6P_gZBzqkdJ5XRTXxro6iDvAg,6986
|
|
65
66
|
iop/cls/IOP/Duplex/Service.cls,sha256=sTMOQUCMBgVitmQkM8bbsrmrRtCdj91VlctJ3I7b8WU,161
|
|
@@ -71,9 +72,9 @@ iop/cls/IOP/PrivateSession/Message/Start.cls,sha256=uk-WTe66GicCshgmVy3F5ugHiAyP
|
|
|
71
72
|
iop/cls/IOP/PrivateSession/Message/Stop.cls,sha256=7g3gKFUjNg0WXBLuWnj-VnCs5G6hSE09YTzGEp0zbGc,1390
|
|
72
73
|
iop/cls/IOP/Service/WSGI.cls,sha256=VLNCXEwmHW9dBnE51uGE1nvGX6T4HjhqePT3LVhsjAE,10440
|
|
73
74
|
iop/wsgi/handlers.py,sha256=NrFLo_YbAh-x_PlWhAiWkQnUUN2Ss9HoEm63dDWCBpQ,2947
|
|
74
|
-
iris_pex_embedded_python-3.4.
|
|
75
|
-
iris_pex_embedded_python-3.4.
|
|
76
|
-
iris_pex_embedded_python-3.4.
|
|
77
|
-
iris_pex_embedded_python-3.4.
|
|
78
|
-
iris_pex_embedded_python-3.4.
|
|
79
|
-
iris_pex_embedded_python-3.4.
|
|
75
|
+
iris_pex_embedded_python-3.4.1b9.dist-info/licenses/LICENSE,sha256=rZSiBFId_sfbJ6RL0GjjPX-InNLkNS9ou7eQsikciI8,1089
|
|
76
|
+
iris_pex_embedded_python-3.4.1b9.dist-info/METADATA,sha256=NU02nEfoQUtxznuO6Hc5TwfK9uZonh7CZBoXtAgmnw0,4449
|
|
77
|
+
iris_pex_embedded_python-3.4.1b9.dist-info/WHEEL,sha256=ck4Vq1_RXyvS4Jt6SI0Vz6fyVs4GWg7AINwpsaGEgPE,91
|
|
78
|
+
iris_pex_embedded_python-3.4.1b9.dist-info/entry_points.txt,sha256=pj-i4LSDyiSP6xpHlVjMCbg1Pik7dC3_sdGY3Yp9Vhk,38
|
|
79
|
+
iris_pex_embedded_python-3.4.1b9.dist-info/top_level.txt,sha256=4p0q6hCATmYIVMVi3I8hOUcJE1kwzyBeHygWv_rGvrU,13
|
|
80
|
+
iris_pex_embedded_python-3.4.1b9.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|