iris-pex-embedded-python 2.3.25b2__py3-none-any.whl → 3.2.1b2__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.
- grongier/cls/Grongier/PEX/BusinessOperation.cls +1 -28
- grongier/cls/Grongier/PEX/BusinessProcess.cls +1 -101
- grongier/cls/Grongier/PEX/BusinessService.cls +1 -28
- grongier/cls/Grongier/PEX/Common.cls +1 -194
- grongier/cls/Grongier/PEX/Director.cls +1 -48
- grongier/cls/Grongier/PEX/Duplex/Operation.cls +1 -26
- grongier/cls/Grongier/PEX/Duplex/Process.cls +1 -217
- grongier/cls/Grongier/PEX/Duplex/Service.cls +1 -6
- grongier/cls/Grongier/PEX/InboundAdapter.cls +1 -15
- grongier/cls/Grongier/PEX/Message.cls +1 -116
- grongier/cls/Grongier/PEX/OutboundAdapter.cls +1 -29
- grongier/cls/Grongier/PEX/PickleMessage.cls +1 -46
- grongier/cls/Grongier/PEX/PrivateSession/Duplex.cls +1 -253
- grongier/cls/Grongier/PEX/PrivateSession/Message/Ack.cls +1 -19
- grongier/cls/Grongier/PEX/PrivateSession/Message/Poll.cls +1 -19
- grongier/cls/Grongier/PEX/PrivateSession/Message/Start.cls +1 -19
- grongier/cls/Grongier/PEX/PrivateSession/Message/Stop.cls +1 -35
- grongier/cls/Grongier/PEX/Test.cls +1 -53
- grongier/cls/Grongier/PEX/Utils.cls +1 -365
- grongier/cls/Grongier/Service/WSGI.cls +1 -307
- grongier/pex/__init__.py +11 -11
- grongier/pex/__main__.py +1 -1
- grongier/pex/_business_host.py +1 -481
- grongier/pex/_cli.py +2 -150
- grongier/pex/_common.py +1 -347
- grongier/pex/_director.py +1 -286
- grongier/pex/_utils.py +1 -369
- intersystems_iris/_ConnectionInformation.py +22 -20
- intersystems_iris/dbapi/_DBAPI.py +6 -1
- intersystems_iris/dbapi/_ResultSetRow.py +26 -15
- intersystems_iris/dbapi/preparser/_PreParser.py +4 -1
- iop/__init__.py +24 -0
- iop/__main__.py +4 -0
- iop/_business_host.py +675 -0
- iop/_business_operation.py +71 -0
- iop/_business_process.py +220 -0
- {grongier/pex → iop}/_business_service.py +2 -2
- iop/_cli.py +141 -0
- iop/_common.py +352 -0
- iop/_director.py +301 -0
- {grongier/pex → iop}/_inbound_adapter.py +1 -1
- iop/_log_manager.py +81 -0
- {grongier/pex → iop}/_message.py +1 -1
- {grongier/pex → iop}/_outbound_adapter.py +1 -1
- {grongier/pex → iop}/_private_session_duplex.py +4 -3
- {grongier/pex → iop}/_private_session_process.py +2 -2
- iop/_utils.py +458 -0
- iop/cls/IOP/BusinessOperation.cls +35 -0
- iop/cls/IOP/BusinessProcess.cls +124 -0
- iop/cls/IOP/BusinessService.cls +35 -0
- iop/cls/IOP/Common.cls +344 -0
- iop/cls/IOP/Director.cls +62 -0
- iop/cls/IOP/Duplex/Operation.cls +29 -0
- iop/cls/IOP/Duplex/Process.cls +229 -0
- iop/cls/IOP/Duplex/Service.cls +9 -0
- iop/cls/IOP/InboundAdapter.cls +22 -0
- iop/cls/IOP/Message/JSONSchema.cls +125 -0
- iop/cls/IOP/Message.cls +729 -0
- iop/cls/IOP/OutboundAdapter.cls +36 -0
- iop/cls/IOP/PickleMessage.cls +58 -0
- iop/cls/IOP/PrivateSession/Duplex.cls +260 -0
- iop/cls/IOP/PrivateSession/Message/Ack.cls +32 -0
- iop/cls/IOP/PrivateSession/Message/Poll.cls +32 -0
- iop/cls/IOP/PrivateSession/Message/Start.cls +32 -0
- iop/cls/IOP/PrivateSession/Message/Stop.cls +48 -0
- iop/cls/IOP/Service/WSGI.cls +310 -0
- iop/cls/IOP/Test.cls +85 -0
- iop/cls/IOP/Utils.cls +378 -0
- iop/wsgi/handlers.py +104 -0
- iris_pex_embedded_python-3.2.1b2.dist-info/METADATA +90 -0
- iris_pex_embedded_python-3.2.1b2.dist-info/RECORD +139 -0
- {iris_pex_embedded_python-2.3.25b2.dist-info → iris_pex_embedded_python-3.2.1b2.dist-info}/WHEEL +1 -1
- iris_pex_embedded_python-3.2.1b2.dist-info/entry_points.txt +2 -0
- {iris_pex_embedded_python-2.3.25b2.dist-info → iris_pex_embedded_python-3.2.1b2.dist-info}/top_level.txt +1 -1
- grongier/pex/_business_operation.py +0 -70
- grongier/pex/_business_process.py +0 -215
- iris/__init__.py +0 -60
- iris/__init__.pyi +0 -236
- iris/iris_ipm.py +0 -40
- iris/iris_ipm.pyi +0 -17
- iris_pex_embedded_python-2.3.25b2.dist-info/METADATA +0 -1384
- iris_pex_embedded_python-2.3.25b2.dist-info/RECORD +0 -113
- iris_pex_embedded_python-2.3.25b2.dist-info/entry_points.txt +0 -2
- {grongier/pex → iop}/_pickle_message.py +0 -0
- {iris_pex_embedded_python-2.3.25b2.dist-info → iris_pex_embedded_python-3.2.1b2.dist-info}/LICENSE +0 -0
|
@@ -2,34 +2,7 @@
|
|
|
2
2
|
Cambridge, Massachusetts, U.S.A. All rights reserved.
|
|
3
3
|
Confidential property of InterSystems Corporation. */
|
|
4
4
|
|
|
5
|
-
Class Grongier.PEX.BusinessOperation Extends
|
|
5
|
+
Class Grongier.PEX.BusinessOperation Extends IOP.BusinessOperation [ Inheritance = right, ProcedureBlock, System = 4 ]
|
|
6
6
|
{
|
|
7
7
|
|
|
8
|
-
Parameter SETTINGS = "%classname:Python BusinessOperation,%module:Python BusinessOperation,%settings:Python BusinessOperation,%classpaths:Python BusinessOperation";
|
|
9
|
-
|
|
10
|
-
Method OnMessage(
|
|
11
|
-
request As %Library.Persistent,
|
|
12
|
-
Output response As %Library.Persistent) As %Status
|
|
13
|
-
{
|
|
14
|
-
set tSC = $$$OK
|
|
15
|
-
try {
|
|
16
|
-
set response = ..%class."_dispatch_on_message"(request)
|
|
17
|
-
} catch ex {
|
|
18
|
-
set tSC = ex.AsStatus()
|
|
19
|
-
}
|
|
20
|
-
quit tSC
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
Method OnKeepalive(pStatus As %Status = {$$$OK}) As %Status
|
|
24
|
-
{
|
|
25
|
-
set tSC = $$$OK
|
|
26
|
-
try {
|
|
27
|
-
$$$ThrowOnError(##super(pStatus))
|
|
28
|
-
do ..%class."on_keepalive"()
|
|
29
|
-
} catch ex {
|
|
30
|
-
set tSC = ex.AsStatus()
|
|
31
|
-
}
|
|
32
|
-
quit tSC
|
|
33
|
-
}
|
|
34
|
-
|
|
35
8
|
}
|
|
@@ -2,111 +2,11 @@
|
|
|
2
2
|
Cambridge, Massachusetts, U.S.A. All rights reserved.
|
|
3
3
|
Confidential property of InterSystems Corporation. */
|
|
4
4
|
|
|
5
|
-
Class Grongier.PEX.BusinessProcess Extends
|
|
5
|
+
Class Grongier.PEX.BusinessProcess Extends IOP.BusinessProcess [ Inheritance = right, ProcedureBlock, System = 4 ]
|
|
6
6
|
{
|
|
7
7
|
|
|
8
|
-
Parameter SETTINGS = "%classname:Python BusinessProcess,%module:Python BusinessProcess,%settings:Python BusinessProcess,%classpaths:Python BusinessProcess";
|
|
9
|
-
|
|
10
|
-
Property persistentProperties As array Of %String(MAXLEN = "");
|
|
11
|
-
|
|
12
|
-
Method dispatchReply(response)
|
|
13
|
-
{
|
|
14
|
-
set tSC = ..Reply(response)
|
|
15
|
-
if $$$ISERR(tSC) throw ##class(%Exception.StatusException).CreateFromStatus(tSC)
|
|
16
|
-
quit
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
Method dispatchSetTimer(
|
|
20
|
-
timeout,
|
|
21
|
-
completionKey)
|
|
22
|
-
{
|
|
23
|
-
set tSC = ..SetTimer(timeout,$g(completionKey))
|
|
24
|
-
if $$$ISERR(tSC) throw ##class(%Exception.StatusException).CreateFromStatus(tSC)
|
|
25
|
-
quit
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
Method OnRequest(
|
|
29
|
-
request As %Persistent,
|
|
30
|
-
Output response As %Persistent) As %Status
|
|
31
|
-
{
|
|
32
|
-
set tSC = $$$OK
|
|
33
|
-
try {
|
|
34
|
-
set response = ..%class."_dispatch_on_request"($this,request)
|
|
35
|
-
} catch ex {
|
|
36
|
-
set tSC = ex.AsStatus()
|
|
37
|
-
}
|
|
38
|
-
quit tSC
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/// Handle a 'Response'
|
|
42
|
-
Method OnResponse(
|
|
43
|
-
request As %Persistent,
|
|
44
|
-
Output response As %Persistent,
|
|
45
|
-
callRequest As %Persistent,
|
|
46
|
-
callResponse As %Persistent,
|
|
47
|
-
pCompletionKey As %String) As %Status
|
|
48
|
-
{
|
|
49
|
-
set tSC = $$$OK
|
|
50
|
-
try {
|
|
51
|
-
set response = ..%class."_dispatch_on_response"($this,request,response,callRequest,callResponse,pCompletionKey)
|
|
52
|
-
} catch ex {
|
|
53
|
-
set tSC = ex.AsStatus()
|
|
54
|
-
}
|
|
55
|
-
quit tSC
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
Method OnComplete(
|
|
59
|
-
request As %Library.Persistent,
|
|
60
|
-
ByRef response As %Library.Persistent) As %Status
|
|
61
|
-
{
|
|
62
|
-
set tSC = $$$OK
|
|
63
|
-
try {
|
|
64
|
-
set tSC = ..Connect() quit:$$$ISERR(tSC)
|
|
65
|
-
set response = ..%class."_dispatch_on_complete"($this,request,response)
|
|
66
|
-
} catch ex {
|
|
67
|
-
set tSC = ex.AsStatus()
|
|
68
|
-
}
|
|
69
|
-
quit tSC
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
Method getPersistentProperty(name)
|
|
73
|
-
{
|
|
74
|
-
quit ..persistentProperties.GetAt(name)
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
Method setPersistentProperty(
|
|
78
|
-
name,
|
|
79
|
-
value)
|
|
80
|
-
{
|
|
81
|
-
quit ..persistentProperties.SetAt(value,name)
|
|
82
|
-
}
|
|
83
|
-
|
|
84
8
|
Storage Default
|
|
85
9
|
{
|
|
86
|
-
<Data name="BusinessProcessDefaultData1">
|
|
87
|
-
<Subscript>"BusinessProcess"</Subscript>
|
|
88
|
-
<Value name="1">
|
|
89
|
-
<Value>%classpaths</Value>
|
|
90
|
-
</Value>
|
|
91
|
-
<Value name="2">
|
|
92
|
-
<Value>%classname</Value>
|
|
93
|
-
</Value>
|
|
94
|
-
<Value name="3">
|
|
95
|
-
<Value>%module</Value>
|
|
96
|
-
</Value>
|
|
97
|
-
<Value name="4">
|
|
98
|
-
<Value>%settings</Value>
|
|
99
|
-
</Value>
|
|
100
|
-
<Value name="5">
|
|
101
|
-
<Value>%class</Value>
|
|
102
|
-
</Value>
|
|
103
|
-
</Data>
|
|
104
|
-
<Data name="persistentProperties">
|
|
105
|
-
<Attribute>persistentProperties</Attribute>
|
|
106
|
-
<Structure>subnode</Structure>
|
|
107
|
-
<Subscript>"Grongier.PEX.BusinessProcess.persistentProperties"</Subscript>
|
|
108
|
-
</Data>
|
|
109
|
-
<DefaultData>BusinessProcessDefaultData1</DefaultData>
|
|
110
10
|
<Type>%Storage.Persistent</Type>
|
|
111
11
|
}
|
|
112
12
|
|
|
@@ -2,34 +2,7 @@
|
|
|
2
2
|
Cambridge, Massachusetts, U.S.A. All rights reserved.
|
|
3
3
|
Confidential property of InterSystems Corporation. */
|
|
4
4
|
|
|
5
|
-
Class Grongier.PEX.BusinessService Extends
|
|
5
|
+
Class Grongier.PEX.BusinessService Extends IOP.BusinessService [ Inheritance = right, ProcedureBlock, System = 4 ]
|
|
6
6
|
{
|
|
7
7
|
|
|
8
|
-
Parameter SETTINGS = "%classname:Python BusinessService,%module:Python BusinessService,%settings:Python BusinessService,%classpaths:Python BusinessService";
|
|
9
|
-
|
|
10
|
-
Method dispatchProcessInput(pInput As %RegisteredObject) As %RegisteredObject
|
|
11
|
-
{
|
|
12
|
-
|
|
13
|
-
quit ..%class."on_process_input"(pInput)
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
Method OnProcessInput(
|
|
17
|
-
request As %RegisteredObject,
|
|
18
|
-
Output response As %RegisteredObject) As %Status
|
|
19
|
-
{
|
|
20
|
-
set tSC = $$$OK
|
|
21
|
-
try {
|
|
22
|
-
try {
|
|
23
|
-
set ..%class."_wait_for_next_call_interval" = ..%WaitForNextCallInterval
|
|
24
|
-
} catch {}
|
|
25
|
-
set response = ..%class."_dispatch_on_process_input"(request)
|
|
26
|
-
try {
|
|
27
|
-
set ..%WaitForNextCallInterval = ..%class."_wait_for_next_call_interval"
|
|
28
|
-
} catch {}
|
|
29
|
-
} catch ex {
|
|
30
|
-
set tSC = ex.AsStatus()
|
|
31
|
-
}
|
|
32
|
-
quit tSC
|
|
33
|
-
}
|
|
34
|
-
|
|
35
8
|
}
|
|
@@ -4,200 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
Include Ensemble
|
|
6
6
|
|
|
7
|
-
Class Grongier.PEX.Common [ Abstract, ClassType = "", ProcedureBlock, System = 4 ]
|
|
7
|
+
Class Grongier.PEX.Common Extends IOP.Common [ Abstract, ClassType = "", ProcedureBlock, System = 4 ]
|
|
8
8
|
{
|
|
9
9
|
|
|
10
|
-
/// One or more Classpaths (separated by '|' character) needed in addition to the ones configured in the Java Gateway Service
|
|
11
|
-
Property %classpaths As %String(MAXLEN = "");
|
|
12
|
-
|
|
13
|
-
Property %classname As %String(MAXLEN = "");
|
|
14
|
-
|
|
15
|
-
Property %module As %String(MAXLEN = "");
|
|
16
|
-
|
|
17
|
-
Property %settings As %String(MAXLEN = "");
|
|
18
|
-
|
|
19
|
-
/// Instance of class
|
|
20
|
-
Property %class As %SYS.Python;
|
|
21
|
-
|
|
22
|
-
/// Get Class
|
|
23
|
-
Method GetClass() As %SYS.Python
|
|
24
|
-
{
|
|
25
|
-
Return ..%class
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/// Get Classname
|
|
29
|
-
Method GetClassname() As %String
|
|
30
|
-
{
|
|
31
|
-
Return ..%classname
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/// Get Classname
|
|
35
|
-
Method GetModule() As %String
|
|
36
|
-
{
|
|
37
|
-
Return ..%module
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
Method OnInit() As %Status
|
|
41
|
-
{
|
|
42
|
-
set tSC = $$$OK
|
|
43
|
-
try {
|
|
44
|
-
$$$ThrowOnError(..Connect())
|
|
45
|
-
do ..%class."_dispatch_on_init"($this)
|
|
46
|
-
} catch ex {
|
|
47
|
-
set tSC = ex.AsStatus()
|
|
48
|
-
}
|
|
49
|
-
quit tSC
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
ClassMethod SetPythonPath(pClasspaths)
|
|
53
|
-
{
|
|
54
|
-
set sys = ##class(%SYS.Python).Import("sys")
|
|
55
|
-
|
|
56
|
-
for i=0:1:(sys.path."__len__"()-1) {
|
|
57
|
-
Try {
|
|
58
|
-
if sys.path."__getitem__"(i) = pClasspaths {
|
|
59
|
-
do sys.path."__delitem__"(i)
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
Catch ex {
|
|
63
|
-
// do nothing
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
do sys.path.insert(0, pClasspaths)
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
Method Connect() As %Status
|
|
71
|
-
{
|
|
72
|
-
set tSC = $$$OK
|
|
73
|
-
try {
|
|
74
|
-
|
|
75
|
-
set container = $this
|
|
76
|
-
|
|
77
|
-
//set classpass
|
|
78
|
-
if ..%classpaths '="" {
|
|
79
|
-
set delimiter = $s($system.Version.GetOS()="Windows":";",1:":")
|
|
80
|
-
set extraClasspaths = $tr(container.%classpaths,delimiter,"|")
|
|
81
|
-
for i=1:1:$l(extraClasspaths,"|") {
|
|
82
|
-
set onePath = $p(extraClasspaths,"|",i)
|
|
83
|
-
set onePath = ##class(%File).NormalizeDirectory(onePath)
|
|
84
|
-
do ..SetPythonPath(onePath)
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
if $isObject(..%class)=0 {
|
|
88
|
-
set importlib = ##class(%SYS.Python).Import("importlib")
|
|
89
|
-
set builtins = ##class(%SYS.Python).Import("builtins")
|
|
90
|
-
set module = importlib."import_module"(..%module)
|
|
91
|
-
set class = builtins.getattr(module, ..%classname)
|
|
92
|
-
set ..%class = class."__new__"(class)
|
|
93
|
-
}
|
|
94
|
-
;
|
|
95
|
-
if ..%Extends("Grongier.PEX.InboundAdapter") || ..%Extends("Grongier.PEX.OutboundAdapter") {
|
|
96
|
-
do ..%class."_set_iris_handles"($this,..BusinessHost)
|
|
97
|
-
} elseif $this.%Extends("Grongier.PEX.BusinessProcess") {
|
|
98
|
-
do ..%class."_set_iris_handles"($this,$$$NULLOREF)
|
|
99
|
-
} else {
|
|
100
|
-
do ..%class."_set_iris_handles"($this,..Adapter)
|
|
101
|
-
}
|
|
102
|
-
;
|
|
103
|
-
do ..SetPropertyValues()
|
|
104
|
-
;
|
|
105
|
-
try {
|
|
106
|
-
do ..%class."_dispatch_on_connected"($this)
|
|
107
|
-
} catch ex {
|
|
108
|
-
$$$LOGWARNING(ex.DisplayString())
|
|
109
|
-
}
|
|
110
|
-
;
|
|
111
|
-
} catch ex {
|
|
112
|
-
set msg = $System.Status.GetOneStatusText(ex.AsStatus(),1)
|
|
113
|
-
set tSC = $$$ERROR($$$EnsErrGeneral,msg)
|
|
114
|
-
}
|
|
115
|
-
quit tSC
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
Method OnTearDown() As %Status
|
|
119
|
-
{
|
|
120
|
-
set tSC = $$$OK
|
|
121
|
-
do ..%class."_dispatch_on_tear_down"()
|
|
122
|
-
quit tSC
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
Method SetPropertyValues()
|
|
126
|
-
{
|
|
127
|
-
set remoteSettings = $tr(..%settings,$c(13))
|
|
128
|
-
for i=1:1:$l(remoteSettings,$c(10)) {
|
|
129
|
-
set oneLine = $p(remoteSettings,$c(10),i)
|
|
130
|
-
set property = $p(oneLine,"=",1) continue:property=""
|
|
131
|
-
set value = $p(oneLine,"=",2,*)
|
|
132
|
-
try {
|
|
133
|
-
set $property(..%class,property) = value
|
|
134
|
-
} catch ex {
|
|
135
|
-
$$$LOGWARNING(ex.DisplayString())
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
quit
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
Method dispatchSendRequestSync(
|
|
142
|
-
target,
|
|
143
|
-
request,
|
|
144
|
-
timeout,
|
|
145
|
-
description) As %String
|
|
146
|
-
{
|
|
147
|
-
set tSC = ..SendRequestSync(target,request,.objResponse,timeout,description)
|
|
148
|
-
if $$$ISERR(tSC) throw ##class(%Exception.StatusException).CreateFromStatus(tSC)
|
|
149
|
-
quit $g(objResponse)
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
Method dispatchSendRequestAsync(
|
|
153
|
-
target,
|
|
154
|
-
request,
|
|
155
|
-
description)
|
|
156
|
-
{
|
|
157
|
-
set tSC = ..SendRequestAsync(target,request,description)
|
|
158
|
-
if $$$ISERR(tSC) throw ##class(%Exception.StatusException).CreateFromStatus(tSC)
|
|
159
|
-
quit
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
ClassMethod OnGetConnections(
|
|
163
|
-
Output pArray As %String,
|
|
164
|
-
pItem As Ens.Config.Item)
|
|
165
|
-
{
|
|
166
|
-
// finds any settings of type Ens.DataType.ConfigName
|
|
167
|
-
do ..GetPropertyConnections(.pArray,pItem)
|
|
168
|
-
|
|
169
|
-
// Get settings
|
|
170
|
-
do pItem.GetModifiedSetting("%classpaths", .tClasspaths)
|
|
171
|
-
do pItem.GetModifiedSetting("%classname", .tClassname)
|
|
172
|
-
do pItem.GetModifiedSetting("%module", .tModule)
|
|
173
|
-
|
|
174
|
-
// try to instantiate class
|
|
175
|
-
if tClasspaths '="" {
|
|
176
|
-
set sys = ##class(%SYS.Python).Import("sys")
|
|
177
|
-
set delimiter = $s($system.Version.GetOS()="Windows":";",1:":")
|
|
178
|
-
set extraClasspaths = $tr(tClasspaths,delimiter,"|")
|
|
179
|
-
for i=1:1:$l(extraClasspaths,"|") {
|
|
180
|
-
set onePath = $p(extraClasspaths,"|",i)
|
|
181
|
-
set onePath = ##class(%File).NormalizeDirectory(onePath)
|
|
182
|
-
if onePath?1"$$IRISHOME"1P.E set onePath = $e($system.Util.InstallDirectory(),1,*-1)_$e(onePath,11,*)
|
|
183
|
-
if onePath'="" do sys.path.append(onePath)
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
set importlib = ##class(%SYS.Python).Import("importlib")
|
|
187
|
-
set builtins = ##class(%SYS.Python).Import("builtins")
|
|
188
|
-
set module = importlib."import_module"(tModule)
|
|
189
|
-
set class = builtins.getattr(module, tClassname)
|
|
190
|
-
set tClass = class."__new__"(class)
|
|
191
|
-
|
|
192
|
-
set tPythonList = tClass."on_get_connections"()
|
|
193
|
-
set tPythonListLen = tPythonList."__len__"()
|
|
194
|
-
for i=0:1:(tPythonListLen-1) {
|
|
195
|
-
set tPythonItem = tPythonList."__getitem__"(i)
|
|
196
|
-
set pArray(tPythonItem) = ""
|
|
197
|
-
#; set ^AALog(pItem.Name,tPythonItem) = ""
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
quit
|
|
201
|
-
}
|
|
202
|
-
|
|
203
10
|
}
|
|
@@ -4,54 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
Include (%occInclude, Ensemble)
|
|
6
6
|
|
|
7
|
-
Class Grongier.PEX.Director [ Inheritance = right, ProcedureBlock, System = 4 ]
|
|
7
|
+
Class Grongier.PEX.Director Extends IOP.Director [ Inheritance = right, ProcedureBlock, System = 4 ]
|
|
8
8
|
{
|
|
9
9
|
|
|
10
|
-
ClassMethod dispatchCreateBusinessService(pTargetDispatchName As %String) As Ens.BusinessService
|
|
11
|
-
{
|
|
12
|
-
set tSC = ##class(Ens.Director).CreateBusinessService(pTargetDispatchName,.service)
|
|
13
|
-
if $$$ISERR(tSC) throw ##class(%Exception.StatusException).CreateFromStatus(tSC)
|
|
14
|
-
quit service
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
ClassMethod dispatchListProductions() As %String
|
|
18
|
-
{
|
|
19
|
-
// Loop over the productions in this namespace
|
|
20
|
-
Set tRS = ##class(%ResultSet).%New("Ens.Config.Production:ProductionStatus")
|
|
21
|
-
If '$IsObject(tRS) Set tSC = %objlasterror Quit
|
|
22
|
-
|
|
23
|
-
Set tSC = tRS.Execute()
|
|
24
|
-
Quit:$$$ISERR(tSC)
|
|
25
|
-
|
|
26
|
-
set tDict = ##class(%SYS.Python).Import("builtins").dict()
|
|
27
|
-
|
|
28
|
-
While (tRS.Next()) {
|
|
29
|
-
Set tProduction = tRS.Data("Production")
|
|
30
|
-
Set tInfo = ##class(%SYS.Python).Import("builtins").dict()
|
|
31
|
-
do tInfo."__setitem__"("Status",tRS.Data("Status"))
|
|
32
|
-
do tInfo."__setitem__"("LastStartTime",tRS.Data("LastStartTime"))
|
|
33
|
-
do tInfo."__setitem__"("LastStopTime",tRS.Data("LastStopTime"))
|
|
34
|
-
do tInfo."__setitem__"("AutoStart",$G(^Ens.AutoStart)=tProduction)
|
|
35
|
-
do tDict."__setitem__"(tProduction,tInfo)
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
Kill tRS
|
|
39
|
-
|
|
40
|
-
return tDict
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
ClassMethod StatusProduction() As %String
|
|
44
|
-
{
|
|
45
|
-
Set sc = $$$OK
|
|
46
|
-
Set tInfo = ##class(%SYS.Python).Import("builtins").dict()
|
|
47
|
-
$$$ThrowOnError(##class(Ens.Director).GetProductionStatus(.tProdName,.tStatus))
|
|
48
|
-
do tInfo."__setitem__"("Production",tProdName)
|
|
49
|
-
do tInfo."__setitem__"("Status",$CASE(tStatus,$$$eProductionStateRunning:"running",
|
|
50
|
-
$$$eProductionStateStopped:"stopped",
|
|
51
|
-
$$$eProductionStateSuspended:"suspended",
|
|
52
|
-
$$$eProductionStateTroubled:"toubled",
|
|
53
|
-
:"unknown"))
|
|
54
|
-
Return tInfo
|
|
55
|
-
}
|
|
56
|
-
|
|
57
10
|
}
|
|
@@ -1,29 +1,4 @@
|
|
|
1
|
-
Class Grongier.PEX.DuplexOperation Extends
|
|
1
|
+
Class Grongier.PEX.DuplexOperation Extends IOP.DuplexOperation
|
|
2
2
|
{
|
|
3
3
|
|
|
4
|
-
ClassMethod OnBusinessType(pItem As Ens.Config.Item) As %Integer
|
|
5
|
-
{
|
|
6
|
-
Quit $$$eHostTypeOperation
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
XData MessageMap
|
|
10
|
-
{
|
|
11
|
-
<MapItems>
|
|
12
|
-
<MapItem MessageType="Ens.Request"><Method>OnMessage</Method></MapItem>
|
|
13
|
-
</MapItems>
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
Method OnMessage(
|
|
17
|
-
request As %Library.Persistent,
|
|
18
|
-
Output response As %Library.Persistent) As %Status
|
|
19
|
-
{
|
|
20
|
-
set tSC = $$$OK
|
|
21
|
-
try {
|
|
22
|
-
set response = ..%class."_dispatch_on_message"(request)
|
|
23
|
-
} catch ex {
|
|
24
|
-
set tSC = ex.AsStatus()
|
|
25
|
-
}
|
|
26
|
-
quit tSC
|
|
27
|
-
}
|
|
28
|
-
|
|
29
4
|
}
|
|
@@ -2,227 +2,11 @@
|
|
|
2
2
|
Cambridge, Massachusetts, U.S.A. All rights reserved.
|
|
3
3
|
Confidential property of InterSystems Corporation. */
|
|
4
4
|
|
|
5
|
-
Class Grongier.PEX.DuplexProcess Extends
|
|
5
|
+
Class Grongier.PEX.DuplexProcess Extends IOP.BusinessProcess [ ClassType = persistent, ProcedureBlock, System = 4 ]
|
|
6
6
|
{
|
|
7
7
|
|
|
8
|
-
/// Domain for Text localization
|
|
9
|
-
Parameter DOMAIN = "PrivateSession";
|
|
10
|
-
|
|
11
|
-
/// The Duplex Service name. This property is set at runtime after receiving the primary request
|
|
12
|
-
Property ServiceDuplexName As %String;
|
|
13
|
-
|
|
14
|
-
/// Indicates if a given ConfigItem is in private session or not
|
|
15
|
-
Property %IsInPrivateSession As array Of %Boolean(STORAGEDEFAULT = "list");
|
|
16
|
-
|
|
17
|
-
/// This method is always called asynchronously ONCE at the beginning of the process
|
|
18
|
-
Method OnRequest(
|
|
19
|
-
pRequest As %Library.Persistent,
|
|
20
|
-
Output pResponse As Ens.Response) As %Status
|
|
21
|
-
{
|
|
22
|
-
#dim tSC As %Status = $$$OK
|
|
23
|
-
try {
|
|
24
|
-
If $IsObject(pRequest)&&($classname(pRequest)="Grongier.PEX.PrivateSession.Message.Start") {
|
|
25
|
-
Set tSC=..Reply(##class(Grongier.PEX.PrivateSession.Message.Ack).%New()) Quit:$$$ISERR(tSC)
|
|
26
|
-
Set ..ServiceDuplexName = ..%PrimaryRequestHeader.SourceConfigName
|
|
27
|
-
Do ..IsInPrivateSessionSet(..ServiceDuplexName,1)
|
|
28
|
-
Set tSC=..SendRequestAsync(..ServiceDuplexName,##class(Grongier.PEX.PrivateSession.Message.Poll).%New(),1) Quit:$$$ISERR(tSC)
|
|
29
|
-
Set tSC=..OnPrivateSessionStarted(..ServiceDuplexName,0) Quit:$$$ISERR(tSC)
|
|
30
|
-
} Else {
|
|
31
|
-
Set tSC=..OnDocument(..%PrimaryRequestHeader.SourceConfigName,pRequest)
|
|
32
|
-
}
|
|
33
|
-
} catch {
|
|
34
|
-
Set tSC=$$$EnsSystemError
|
|
35
|
-
}
|
|
36
|
-
Quit tSC
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/// Handle a 'Response'
|
|
40
|
-
Method OnResponse(
|
|
41
|
-
request As %Library.Persistent,
|
|
42
|
-
ByRef response As %Library.Persistent,
|
|
43
|
-
callrequest As %Library.Persistent,
|
|
44
|
-
callresponse As %Library.Persistent,
|
|
45
|
-
pCompletionKey As %String) As %Status
|
|
46
|
-
{
|
|
47
|
-
#dim tSC As %Status = $$$OK
|
|
48
|
-
#dim tSourceConfigName, tOneConfigName As %String
|
|
49
|
-
try {
|
|
50
|
-
; get the SourceConfigName of this message
|
|
51
|
-
Set tSourceConfigName=..%CurrentResponseHeader.SourceConfigName
|
|
52
|
-
; handle SessionStop message
|
|
53
|
-
If $IsObject(callresponse)&&($classname(callresponse)="Grongier.PEX.PrivateSession.Message.Ack") {
|
|
54
|
-
Do ..IsInPrivateSessionSet(tSourceConfigName,1)
|
|
55
|
-
Set tSC=..SendRequestAsync(tSourceConfigName,##class(Grongier.PEX.PrivateSession.Message.Poll).%New(),1) Quit:$$$ISERR(tSC)
|
|
56
|
-
Set tSC=..OnPrivateSessionStarted(tSourceConfigName,1) Quit:$$$ISERR(tSC)
|
|
57
|
-
Quit
|
|
58
|
-
}
|
|
59
|
-
; handle SessionStop message
|
|
60
|
-
If $IsObject(callresponse)&&($classname(callresponse)="Grongier.PEX.PrivateSession.Message.Stop") {
|
|
61
|
-
Set tSC=..UnRegisterPrivateSession(tSourceConfigName) Quit:$$$ISERR(tSC)
|
|
62
|
-
Set tSC=..OnPrivateSessionStopped(tSourceConfigName,0,callresponse.AttachedMessage) Quit:$$$ISERR(tSC)
|
|
63
|
-
Quit
|
|
64
|
-
}
|
|
65
|
-
; send poll request again back to the same ConfigItem if this this is in response to a poll request
|
|
66
|
-
If $IsObject(callrequest)&&($classname(callrequest)="Grongier.PEX.PrivateSession.Message.Poll") {
|
|
67
|
-
If ..IsInPrivateSession(tSourceConfigName) {
|
|
68
|
-
Set tSC=..SendRequestAsync(tSourceConfigName,##class(Grongier.PEX.PrivateSession.Message.Poll).%New(),1) If $$$ISERR(tSC)
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
; call OnDocument
|
|
72
|
-
Set tSC=..OnDocument(tSourceConfigName,callresponse) Quit:$$$ISERR(tSC)
|
|
73
|
-
} catch {
|
|
74
|
-
Set tSC=$$$EnsSystemError
|
|
75
|
-
}
|
|
76
|
-
Quit tSC
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
Method StartPrivateSession(pDuplexConfigName As %String = "") As %Status
|
|
80
|
-
{
|
|
81
|
-
#dim tSC As %Status = $$$OK
|
|
82
|
-
try {
|
|
83
|
-
If pDuplexConfigName="" Set tSC=$$$EnsError($$$EnsErrGeneral,"Duplex configuration name is missing") Quit
|
|
84
|
-
If ..IsInPrivateSession(pDuplexConfigName) Quit
|
|
85
|
-
Set tSC=..SendRequestAsync(pDuplexConfigName,##class(Grongier.PEX.PrivateSession.Message.Start).%New()) Quit:$$$ISERR(tSC)
|
|
86
|
-
} catch {
|
|
87
|
-
Set tSC=$$$EnsSystemError
|
|
88
|
-
}
|
|
89
|
-
Quit tSC
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
Method StopPrivateSession(
|
|
93
|
-
pDuplexConfigName As %String = "",
|
|
94
|
-
pAttachedMessage As %Persistent = "") As %Status
|
|
95
|
-
{
|
|
96
|
-
#dim tSC As %Status = $$$OK
|
|
97
|
-
try {
|
|
98
|
-
If pDuplexConfigName="" Set tSC=$$$EnsError($$$EnsErrGeneral,"Duplex configuration name is missing") Quit
|
|
99
|
-
If '..IsInPrivateSession(pDuplexConfigName) Quit
|
|
100
|
-
Set tSC=..SendRequestAsync(pDuplexConfigName,##class(Grongier.PEX.PrivateSession.Message.Stop).%New(pAttachedMessage),0) Quit:$$$ISERR(tSC)
|
|
101
|
-
Set tSC=..UnRegisterPrivateSession(pDuplexConfigName)
|
|
102
|
-
Set tSC=..OnPrivateSessionStopped(pDuplexConfigName,1) Quit:$$$ISERR(tSC)
|
|
103
|
-
} catch {
|
|
104
|
-
Set tSC=$$$EnsSystemError
|
|
105
|
-
}
|
|
106
|
-
Quit tSC
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
Method StopAllPrivateSessions(pAttachedMessage As %Persistent = "") As %Status
|
|
110
|
-
{
|
|
111
|
-
#dim tSC As %Status = $$$OK
|
|
112
|
-
#dim tItem As %String
|
|
113
|
-
try {
|
|
114
|
-
Set tItem="" For {
|
|
115
|
-
Set tItem=..%IsInPrivateSession.Next(tItem) Quit:tItem=""
|
|
116
|
-
Set tSC=..StopPrivateSession(tItem,pAttachedMessage) Quit:$$$ISERR(tSC)
|
|
117
|
-
}
|
|
118
|
-
} catch {
|
|
119
|
-
Set tSC=$$$EnsSystemError
|
|
120
|
-
}
|
|
121
|
-
Quit tSC
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
Method UnRegisterPrivateSession(pDuplexConfigName As %String) As %String
|
|
125
|
-
{
|
|
126
|
-
#dim tSC As %Status = $$$OK
|
|
127
|
-
try {
|
|
128
|
-
For i=..%MasterPendingResponses.Count():-1:1 {
|
|
129
|
-
Set tRequestHeader=##class(Ens.MessageHeader).%OpenId($li(..%MasterPendingResponses.GetAt(i),1))
|
|
130
|
-
If $IsObject(tRequestHeader),tRequestHeader.TargetConfigName=pDuplexConfigName,tRequestHeader.MessageBodyClassName="Grongier.PEX.PrivateSession.Message.Poll" {
|
|
131
|
-
Do ..%MasterPendingResponses.RemoveAt(i)
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
Do ..IsInPrivateSessionSet(pDuplexConfigName,0)
|
|
135
|
-
} catch {
|
|
136
|
-
Set tSC=$$$EnsSystemError
|
|
137
|
-
}
|
|
138
|
-
Quit tSC
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
Method IsInPrivateSessionSet(
|
|
142
|
-
pDuplexConfigName As %String,
|
|
143
|
-
pInPrivateSession As %Boolean)
|
|
144
|
-
{
|
|
145
|
-
If pInPrivateSession {
|
|
146
|
-
Do ..%IsInPrivateSession.SetAt(1,pDuplexConfigName)
|
|
147
|
-
} Else {
|
|
148
|
-
Do ..%IsInPrivateSession.RemoveAt(pDuplexConfigName)
|
|
149
|
-
}
|
|
150
|
-
Quit
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
Method IsInPrivateSession(pDuplexConfigName As %String) As %Boolean
|
|
154
|
-
{
|
|
155
|
-
If pDuplexConfigName="" Quit 0
|
|
156
|
-
Quit ..%IsInPrivateSession.IsDefined(pDuplexConfigName)
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
Method OnDocument(
|
|
160
|
-
pSourceConfigName As %String,
|
|
161
|
-
pInput As %Library.Persistent) As %Status
|
|
162
|
-
{
|
|
163
|
-
set tSC = $$$OK
|
|
164
|
-
try {
|
|
165
|
-
set response = ..%class."_dispatch_on_document"($this,pSourceConfigName,pInput)
|
|
166
|
-
} catch ex {
|
|
167
|
-
set tSC = ex.AsStatus()
|
|
168
|
-
}
|
|
169
|
-
quit tSC
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
Method OnPrivateSessionStarted(
|
|
173
|
-
pSourceConfigName As %String,
|
|
174
|
-
pSelfGenerated As %Boolean) As %Status
|
|
175
|
-
{
|
|
176
|
-
set tSC = $$$OK
|
|
177
|
-
try {
|
|
178
|
-
set response = ..%class."_dispatch_on_private_session_started"($this,pSourceConfigName,pSelfGenerated)
|
|
179
|
-
} catch ex {
|
|
180
|
-
set tSC = ex.AsStatus()
|
|
181
|
-
}
|
|
182
|
-
quit tSC
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
Method OnPrivateSessionStopped(
|
|
186
|
-
pSourceConfigName As %String,
|
|
187
|
-
pSelfGenerated As %Boolean,
|
|
188
|
-
pAttachedMessage As %Persistent = "") As %Status
|
|
189
|
-
{
|
|
190
|
-
set tSC = $$$OK
|
|
191
|
-
try {
|
|
192
|
-
set response = ..%class."_dispatch_on_private_session_stopped"($this,pSourceConfigName,pSelfGenerated,pAttachedMessage)
|
|
193
|
-
} catch ex {
|
|
194
|
-
set tSC = ex.AsStatus()
|
|
195
|
-
}
|
|
196
|
-
quit tSC
|
|
197
|
-
}
|
|
198
|
-
|
|
199
8
|
Storage Default
|
|
200
9
|
{
|
|
201
|
-
<Data name="ProcessDefaultData">
|
|
202
|
-
<Subscript>"Process"</Subscript>
|
|
203
|
-
<Value name="1">
|
|
204
|
-
<Value>ServiceDuplexName</Value>
|
|
205
|
-
</Value>
|
|
206
|
-
<Value name="2">
|
|
207
|
-
<Value>%IsInPrivateSession</Value>
|
|
208
|
-
</Value>
|
|
209
|
-
<Value name="3">
|
|
210
|
-
<Value>%classpaths</Value>
|
|
211
|
-
</Value>
|
|
212
|
-
<Value name="4">
|
|
213
|
-
<Value>%classname</Value>
|
|
214
|
-
</Value>
|
|
215
|
-
<Value name="5">
|
|
216
|
-
<Value>%module</Value>
|
|
217
|
-
</Value>
|
|
218
|
-
<Value name="6">
|
|
219
|
-
<Value>%settings</Value>
|
|
220
|
-
</Value>
|
|
221
|
-
<Value name="7">
|
|
222
|
-
<Value>%class</Value>
|
|
223
|
-
</Value>
|
|
224
|
-
</Data>
|
|
225
|
-
<DefaultData>ProcessDefaultData</DefaultData>
|
|
226
10
|
<Type>%Storage.Persistent</Type>
|
|
227
11
|
}
|
|
228
12
|
|