Basic JS remove GUIDStr from Activity Items

Create def to restore Orchestrator session - you can setup this when you want to restore
dev-linux
Ivan Maslov 4 years ago
parent cfe6a70c25
commit 8e7e7f171d

@ -21,6 +21,9 @@ if __name__ == "__main__": # New init way - allow run as module -m PyOpenRPA.Orc
# TEST Add Supertoken for the all access between robots # TEST Add Supertoken for the all access between robots
Orchestrator.UACSuperTokenUpdate(inGSettings=gSettings, inSuperTokenStr="1992-04-03-0643-ru-b4ff-openrpa52zzz") Orchestrator.UACSuperTokenUpdate(inGSettings=gSettings, inSuperTokenStr="1992-04-03-0643-ru-b4ff-openrpa52zzz")
# Restore DUMP
Orchestrator.OrchestratorSessionRestore(inGSettings=gSettings)
# INFO Relative/Absolute import see below - after settings init # INFO Relative/Absolute import see below - after settings init
# Template for import CP - Control Panels # Template for import CP - Control Panels
# ATTENTION - Pay attention to CP names! Orchestrator is one for the all control panels per one machine # ATTENTION - Pay attention to CP names! Orchestrator is one for the all control panels per one machine
@ -56,7 +59,7 @@ if __name__ == "__main__": # New init way - allow run as module -m PyOpenRPA.Orc
gSettings["Logger"].exception(f"Exception when init CP. See below.") gSettings["Logger"].exception(f"Exception when init CP. See below.")
# Call the orchestrator def # Call the orchestrator def
Orchestrator.Orchestrator(inGSettings=gSettings) Orchestrator.Orchestrator(inGSettings=gSettings, inDumpRestoreBool=False)
else: else:
print("!WARNING! Current orchestrator settings do not support old type of the Orchestrator start. Use new Orchestrator type start (see v1.2.0)") print("!WARNING! Current orchestrator settings do not support old type of the Orchestrator start. Use new Orchestrator type start (see v1.2.0)")

@ -64,6 +64,16 @@ Work with activity scheduling.
:autosummary: :autosummary:
**************************************************
pyOpenRPA.Orchestrator.Web.Basic
**************************************************
.. automodule:: pyOpenRPA.Orchestrator.Web.Basic
:members:
:autosummary:
********** **********
References References
********** **********

@ -1,4 +1,4 @@
import json import json, copy
from .. import __Orchestrator__ from .. import __Orchestrator__
from .. import Processor from .. import Processor
# Escape JS to the safe JS for the inline JS in HTML tags ATTENTION! Use it only if want to paste JS into HTML tag - not in <script> # Escape JS to the safe JS for the inline JS in HTML tags ATTENTION! Use it only if want to paste JS into HTML tag - not in <script>
@ -7,22 +7,42 @@ def JSEscapeForHTMLInline(inJSStr):
lResult = inJSStr.replace("\"","&quot;") lResult = inJSStr.replace("\"","&quot;")
return lResult return lResult
# Create JS for send activity list/ activity to the processor def JSProcessorActivityListAdd(inActivityList, inGUIDRemoveBool = True):
# USAGE: Orchestrator.Web.Basic.JSProcessorActivityListAdd(inActivityList) """
def JSProcessorActivityListAdd(inActivityList): # Create JS for send activity list/ activity to the processor
# USAGE: Orchestrator.Web.Basic.JSProcessorActivityListAdd(inActivityList)
:param inActivityList: List of the activities (See __Orchestrator__.ProcessorActivityItemCreate)
:param inGUIDRemoveBool: True - remove GUID before generate JS (if GUID is not important)
:return: JavaScript string for the front end
"""
Processor.__ActivityListVerify__(inActivityList=inActivityList) # DO VERIFICATION FOR THE inActivityList Processor.__ActivityListVerify__(inActivityList=inActivityList) # DO VERIFICATION FOR THE inActivityList
inActivityList = copy.deepcopy(inActivityList)
# Check if no def function is here - if exist - replace to alias # Check if no def function is here - if exist - replace to alias
for lActivityItem in inActivityList: for lActivityItem in inActivityList:
if "GUIDStr" in lActivityItem and inGUIDRemoveBool == True: del lActivityItem["GUIDStr"] # Remove GUID from activity items if exists
lDef = lActivityItem["Def"] lDef = lActivityItem["Def"]
if callable(lDef): raise Exception(f"pyOpenRPA Exception: You can't send ActivityList with def to JS. Use Def Alias (see Orchestrator.ProcessorAliasDefUpdate)") if callable(lDef): raise Exception(f"pyOpenRPA Exception: You can't send ActivityList with def to JS. Use Def Alias (see Orchestrator.ProcessorAliasDefUpdate)")
if type(inActivityList) is not list: inActivityList = [inActivityList]
lJSStr = f"""mGlobal.pyOpenRPA.ProcessorQueueAdd({json.dumps(inActivityList)});""" lJSStr = f"""mGlobal.pyOpenRPA.ProcessorQueueAdd({json.dumps(inActivityList)});"""
return lJSStr return lJSStr
# Create JS for execute activity list/ activity permanent
# USAGE: Orchestrator.Web.Basic.JSActivityListExecute(inActivityList) def JSActivityListExecute(inActivityList, inGUIDRemoveBool = True):
def JSActivityListExecute(inActivityList): """
Create JS for execute activity list/ activity permanent
USAGE: Orchestrator.Web.Basic.JSActivityListExecute(inActivityList, inGUIDRemoveBool = True)
:param inActivityList: List of the activities (See __Orchestrator__.ProcessorActivityItemCreate)
:param inGUIDRemoveBool: True - remove GUID before generate JS (if GUID is not important)
:return: JavaScript string for the front end
"""
Processor.__ActivityListVerify__(inActivityList=inActivityList) # DO VERIFICATION FOR THE inActivityList Processor.__ActivityListVerify__(inActivityList=inActivityList) # DO VERIFICATION FOR THE inActivityList
inActivityList = copy.deepcopy(inActivityList)
# Check if no def function is here - if exist - replace to alias
for lActivityItem in inActivityList:
if "GUIDStr" in lActivityItem and inGUIDRemoveBool == True: del lActivityItem["GUIDStr"] # Remove GUID from activity items if exists
lDef = lActivityItem["Def"]
if callable(lDef): raise Exception(f"pyOpenRPA Exception: You can't send ActivityList with def to JS. Use Def Alias (see Orchestrator.ProcessorAliasDefUpdate)")
lJSStr = f"""mGlobal.pyOpenRPA.ActivityListExecute({json.dumps(inActivityList)});""" lJSStr = f"""mGlobal.pyOpenRPA.ActivityListExecute({json.dumps(inActivityList)});"""
return lJSStr return lJSStr

@ -176,6 +176,7 @@ $(document).ready(function() {
} }
///Restart PC ///Restart PC
mGlobal.Controller.PCRestart = function () { mGlobal.Controller.PCRestart = function () {
mGlobal.Controller.OrchestratorSessionSave()
mGlobal.Controller.CMDRunText("shutdown -r") mGlobal.Controller.CMDRunText("shutdown -r")
} }
///Orchestrator save session ///Orchestrator save session

@ -353,6 +353,36 @@ def OrchestratorSessionSave(inGSettings=None):
if lL: lL.exception(f"Exception when dump data before restart the Orchestrator") if lL: lL.exception(f"Exception when dump data before restart the Orchestrator")
return True return True
def OrchestratorSessionRestore(inGSettings=None):
"""
Check _SessionLast_RDPList.json and _SessionLast_StorageDict.pickle in working directory. if exist - load into gsettings
# _SessionLast_StorageDict.pickle (binary)
_SessionLast_RDPList.json (encoding = "utf-8")
_SessionLast_StorageDict.pickle (binary)
:param inGSettings: Global settings dict (singleton)
:return:
"""
lL = inGSettings.get("Logger",None)
# _SessionLast_RDPList.json (encoding = "utf-8")
if os.path.exists("_SessionLast_RDPList.json"):
lFile = open("_SessionLast_RDPList.json", "r", encoding="utf-8")
lSessionLastRDPList = json.loads(lFile.read())
lFile.close() # Close the file
os.remove("_SessionLast_RDPList.json") # remove the temp file
gSettingsDict["RobotRDPActive"]["RDPList"] = lSessionLastRDPList # Set the last session dict
if lL: lL.warning(f"RDP Session List was restored from previous Orchestrator session")
# _SessionLast_StorageDict.pickle (binary)
if os.path.exists("_SessionLast_StorageDict.pickle"):
if "StorageDict" not in inGSettings:
inGSettings["StorageDict"] = {}
with open('_SessionLast_StorageDict.pickle', 'rb') as lFile:
lStorageDictDumpDict = pickle.load(lFile)
Server.__ComplexDictMerge2to1Overwrite__(in1Dict=inGSettings["StorageDict"],
in2Dict=lStorageDictDumpDict) # Merge dict 2 into dict 1
if lL: lL.warning(f"StorageDict was restored from previous Orchestrator session")
os.remove("_SessionLast_StorageDict.pickle") # remove the temp file
def UACKeyListCheck(inRequest, inRoleKeyList) -> bool: def UACKeyListCheck(inRequest, inRoleKeyList) -> bool:
""" """
Check is client is has access for the key list Check is client is has access for the key list
@ -1848,7 +1878,7 @@ def GSettingsAutocleaner(inGSettings):
from .. import __version__ # Get version from the package from .. import __version__ # Get version from the package
def Orchestrator(inGSettings): def Orchestrator(inGSettings, inDumpRestoreBool = True):
lL = inGSettings["Logger"] lL = inGSettings["Logger"]
# https://stackoverflow.com/questions/130763/request-uac-elevation-from-within-a-python-script # https://stackoverflow.com/questions/130763/request-uac-elevation-from-within-a-python-script
def is_admin(): def is_admin():
@ -1875,27 +1905,9 @@ def Orchestrator(inGSettings):
Server.gSettingsDict = gSettingsDict Server.gSettingsDict = gSettingsDict
Server.ProcessorOld.gSettingsDict = gSettingsDict # Backward compatibility Server.ProcessorOld.gSettingsDict = gSettingsDict # Backward compatibility
# Check _SessionLast_RDPList.json in working directory. if exist - load into gsettings #Backward compatibility - restore in Orc def if old def
# GSettings if inDumpRestoreBool == True:
#"RobotRDPActive": { OrchestratorSessionRestore(inGSettings=inGSettings)
# "RDPList": {
if os.path.exists("_SessionLast_RDPList.json"):
lFile = open("_SessionLast_RDPList.json", "r", encoding="utf-8")
lSessionLastRDPList = json.loads(lFile.read())
lFile.close() # Close the file
os.remove("_SessionLast_RDPList.json") # remove the temp file
gSettingsDict["RobotRDPActive"]["RDPList"]=lSessionLastRDPList # Set the last session dict
if lL: lL.warning(f"RDP Session List was restored from previous Orchestrator session")
# _SessionLast_StorageDict.pickle (binary)
if os.path.exists("_SessionLast_StorageDict.pickle"):
if "StorageDict" not in inGSettings:
inGSettings["StorageDict"] = {}
with open('_SessionLast_StorageDict.pickle', 'rb') as lFile:
lStorageDictDumpDict = pickle.load(lFile)
Server.__ComplexDictMerge2to1Overwrite__(in1Dict=inGSettings["StorageDict"], in2Dict=lStorageDictDumpDict) # Merge dict 2 into dict 1
if lL: lL.warning(f"StorageDict was restored from previous Orchestrator session")
os.remove("_SessionLast_StorageDict.pickle") # remove the temp file
# Init SettingsUpdate defs from file list (after RDP restore) # Init SettingsUpdate defs from file list (after RDP restore)
lSettingsUpdateFilePathList = gSettingsDict.get("OrchestratorStart", {}).get("DefSettingsUpdatePathList",[]) lSettingsUpdateFilePathList = gSettingsDict.get("OrchestratorStart", {}).get("DefSettingsUpdatePathList",[])

@ -121,6 +121,7 @@
<li class="toctree-l3"><a class="reference internal" href="#group-scheduler">Group Scheduler…</a></li> <li class="toctree-l3"><a class="reference internal" href="#group-scheduler">Group Scheduler…</a></li>
</ul> </ul>
</li> </li>
<li class="toctree-l2"><a class="reference internal" href="#module-pyOpenRPA.Orchestrator.Web.Basic">pyOpenRPA.Orchestrator.Web.Basic</a></li>
<li class="toctree-l2"><a class="reference internal" href="#references">References</a></li> <li class="toctree-l2"><a class="reference internal" href="#references">References</a></li>
</ul> </ul>
</li> </li>
@ -311,112 +312,115 @@
<tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorRestart" title="pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorRestart"><code class="xref py py-obj docutils literal notranslate"><span class="pre">OrchestratorRestart</span></code></a>([inGSettings])</p></td> <tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorRestart" title="pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorRestart"><code class="xref py py-obj docutils literal notranslate"><span class="pre">OrchestratorRestart</span></code></a>([inGSettings])</p></td>
<td><p>Orchestrator restart</p></td> <td><p>Orchestrator restart</p></td>
</tr> </tr>
<tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorSessionSave" title="pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorSessionSave"><code class="xref py py-obj docutils literal notranslate"><span class="pre">OrchestratorSessionSave</span></code></a>([inGSettings])</p></td> <tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorSessionRestore" title="pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorSessionRestore"><code class="xref py py-obj docutils literal notranslate"><span class="pre">OrchestratorSessionRestore</span></code></a>([inGSettings])</p></td>
<td><p>Orchestrator session save in file _SessionLast_RDPList.json (encoding = “utf-8”)</p></td> <td><p>Check _SessionLast_RDPList.json and _SessionLast_StorageDict.pickle in working directory. if exist - load into gsettings # _SessionLast_StorageDict.pickle (binary) _SessionLast_RDPList.json (encoding = “utf-8”) _SessionLast_StorageDict.pickle (binary).</p></td>
</tr> </tr>
<tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessDefIntervalCall" title="pyOpenRPA.Orchestrator.__Orchestrator__.ProcessDefIntervalCall"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ProcessDefIntervalCall</span></code></a>(inGSettings, inDef, …)</p></td> <tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorSessionSave" title="pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorSessionSave"><code class="xref py py-obj docutils literal notranslate"><span class="pre">OrchestratorSessionSave</span></code></a>([inGSettings])</p></td>
<td><p>Orchestrator session save in file</p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessDefIntervalCall" title="pyOpenRPA.Orchestrator.__Orchestrator__.ProcessDefIntervalCall"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ProcessDefIntervalCall</span></code></a>(inGSettings, inDef, …)</p></td>
<td><p>Use this procedure if you need to run periodically some def.</p></td> <td><p>Use this procedure if you need to run periodically some def.</p></td>
</tr> </tr>
<tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessIsStarted" title="pyOpenRPA.Orchestrator.__Orchestrator__.ProcessIsStarted"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ProcessIsStarted</span></code></a>(inProcessNameWOExeStr)</p></td> <tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessIsStarted" title="pyOpenRPA.Orchestrator.__Orchestrator__.ProcessIsStarted"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ProcessIsStarted</span></code></a>(inProcessNameWOExeStr)</p></td>
<td><p>Check if there is any running process that contains the given name processName.</p></td> <td><p>Check if there is any running process that contains the given name processName.</p></td>
</tr> </tr>
<tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessListGet" title="pyOpenRPA.Orchestrator.__Orchestrator__.ProcessListGet"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ProcessListGet</span></code></a>([inProcessNameWOExeList])</p></td> <tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessListGet" title="pyOpenRPA.Orchestrator.__Orchestrator__.ProcessListGet"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ProcessListGet</span></code></a>([inProcessNameWOExeList])</p></td>
<td><p>Return process list on the orchestrator machine sorted by Memory Usage.</p></td> <td><p>Return process list on the orchestrator machine sorted by Memory Usage.</p></td>
</tr> </tr>
<tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessStart" title="pyOpenRPA.Orchestrator.__Orchestrator__.ProcessStart"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ProcessStart</span></code></a>(inPathStr, inArgList[, …])</p></td> <tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessStart" title="pyOpenRPA.Orchestrator.__Orchestrator__.ProcessStart"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ProcessStart</span></code></a>(inPathStr, inArgList[, …])</p></td>
<td><p>Start process locally.</p></td> <td><p>Start process locally.</p></td>
</tr> </tr>
<tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessStop" title="pyOpenRPA.Orchestrator.__Orchestrator__.ProcessStop"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ProcessStop</span></code></a>(inProcessNameWOExeStr, …[, …])</p></td> <tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessStop" title="pyOpenRPA.Orchestrator.__Orchestrator__.ProcessStop"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ProcessStop</span></code></a>(inProcessNameWOExeStr, …[, …])</p></td>
<td><p>Stop process on the orchestrator machine.</p></td> <td><p>Stop process on the orchestrator machine.</p></td>
</tr> </tr>
<tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorActivityItemAppend" title="pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorActivityItemAppend"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ProcessorActivityItemAppend</span></code></a>(inGSettings[, …])</p></td> <tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorActivityItemAppend" title="pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorActivityItemAppend"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ProcessorActivityItemAppend</span></code></a>(inGSettings[, …])</p></td>
<td><p>Create and add activity item in processor queue.</p></td> <td><p>Create and add activity item in processor queue.</p></td>
</tr> </tr>
<tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorActivityItemCreate" title="pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorActivityItemCreate"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ProcessorActivityItemCreate</span></code></a>(inDef[, …])</p></td> <tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorActivityItemCreate" title="pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorActivityItemCreate"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ProcessorActivityItemCreate</span></code></a>(inDef[, …])</p></td>
<td><p>Create activity item.</p></td> <td><p>Create activity item.</p></td>
</tr> </tr>
<tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorAliasDefCreate" title="pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorAliasDefCreate"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ProcessorAliasDefCreate</span></code></a>(inGSettings, inDef)</p></td> <tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorAliasDefCreate" title="pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorAliasDefCreate"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ProcessorAliasDefCreate</span></code></a>(inGSettings, inDef)</p></td>
<td><p>Create alias for def (can be used in ActivityItem in field Def) !WHEN DEF ALIAS IS REQUIRED! - Def alias is required when you try to call Python def from the Orchestrator WEB side (because you cant transmit Python def object out of the Python environment)</p></td> <td><p>Create alias for def (can be used in ActivityItem in field Def) !WHEN DEF ALIAS IS REQUIRED! - Def alias is required when you try to call Python def from the Orchestrator WEB side (because you cant transmit Python def object out of the Python environment)</p></td>
</tr> </tr>
<tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorAliasDefUpdate" title="pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorAliasDefUpdate"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ProcessorAliasDefUpdate</span></code></a>(inGSettings, inDef, …)</p></td> <tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorAliasDefUpdate" title="pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorAliasDefUpdate"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ProcessorAliasDefUpdate</span></code></a>(inGSettings, inDef, …)</p></td>
<td><p>Update alias for def (can be used in ActivityItem in field Def).</p></td> <td><p>Update alias for def (can be used in ActivityItem in field Def).</p></td>
</tr> </tr>
<tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.PythonStart" title="pyOpenRPA.Orchestrator.__Orchestrator__.PythonStart"><code class="xref py py-obj docutils literal notranslate"><span class="pre">PythonStart</span></code></a>(inModulePathStr, inDefNameStr[, …])</p></td> <tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.PythonStart" title="pyOpenRPA.Orchestrator.__Orchestrator__.PythonStart"><code class="xref py py-obj docutils literal notranslate"><span class="pre">PythonStart</span></code></a>(inModulePathStr, inDefNameStr[, …])</p></td>
<td><p>Import module and run def in the Orchestrator process.</p></td> <td><p>Import module and run def in the Orchestrator process.</p></td>
</tr> </tr>
<tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionCMDRun" title="pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionCMDRun"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RDPSessionCMDRun</span></code></a>(inGSettings, …[, inModeStr])</p></td> <tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionCMDRun" title="pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionCMDRun"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RDPSessionCMDRun</span></code></a>(inGSettings, …[, inModeStr])</p></td>
<td><p>Send CMD command to the RDP session “RUN” window</p></td> <td><p>Send CMD command to the RDP session “RUN” window</p></td>
</tr> </tr>
<tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionConnect" title="pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionConnect"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RDPSessionConnect</span></code></a>(inGSettings, …[, …])</p></td> <tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionConnect" title="pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionConnect"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RDPSessionConnect</span></code></a>(inGSettings, …[, …])</p></td>
<td><p>Create new RDPSession in RobotRDPActive. Attention - activity will be ignored if RDP key is already exists</p></td> <td><p>Create new RDPSession in RobotRDPActive. Attention - activity will be ignored if RDP key is already exists</p></td>
</tr> </tr>
<tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionDisconnect" title="pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionDisconnect"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RDPSessionDisconnect</span></code></a>(inGSettings, …[, …])</p></td> <tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionDisconnect" title="pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionDisconnect"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RDPSessionDisconnect</span></code></a>(inGSettings, …[, …])</p></td>
<td><p>Disconnect the RDP session and stop monitoring it.</p></td> <td><p>Disconnect the RDP session and stop monitoring it.</p></td>
</tr> </tr>
<tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionDublicatesResolve" title="pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionDublicatesResolve"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RDPSessionDublicatesResolve</span></code></a>(inGSettings)</p></td> <tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionDublicatesResolve" title="pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionDublicatesResolve"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RDPSessionDublicatesResolve</span></code></a>(inGSettings)</p></td>
<td><p>DEVELOPING Search duplicates in GSettings RDPlist !def is developing!</p></td> <td><p>DEVELOPING Search duplicates in GSettings RDPlist !def is developing!</p></td>
</tr> </tr>
<tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionFileStoredRecieve" title="pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionFileStoredRecieve"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RDPSessionFileStoredRecieve</span></code></a>(inGSettings, …)</p></td> <tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionFileStoredRecieve" title="pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionFileStoredRecieve"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RDPSessionFileStoredRecieve</span></code></a>(inGSettings, …)</p></td>
<td><p>Recieve file from RDP session to the Orchestrator session using shared drive in RDP (see RDP Configuration Dict, Shared drive)</p></td> <td><p>Recieve file from RDP session to the Orchestrator session using shared drive in RDP (see RDP Configuration Dict, Shared drive)</p></td>
</tr> </tr>
<tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionFileStoredSend" title="pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionFileStoredSend"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RDPSessionFileStoredSend</span></code></a>(inGSettings, …)</p></td> <tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionFileStoredSend" title="pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionFileStoredSend"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RDPSessionFileStoredSend</span></code></a>(inGSettings, …)</p></td>
<td><p>Send file from Orchestrator session to the RDP session using shared drive in RDP (see RDP Configuration Dict, Shared drive)</p></td> <td><p>Send file from Orchestrator session to the RDP session using shared drive in RDP (see RDP Configuration Dict, Shared drive)</p></td>
</tr> </tr>
<tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionLogoff" title="pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionLogoff"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RDPSessionLogoff</span></code></a>(inGSettings, inRDPSessionKeyStr)</p></td> <tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionLogoff" title="pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionLogoff"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RDPSessionLogoff</span></code></a>(inGSettings, inRDPSessionKeyStr)</p></td>
<td><p>Logoff the RDP session from the Orchestrator process (close all apps in session when logoff)</p></td> <td><p>Logoff the RDP session from the Orchestrator process (close all apps in session when logoff)</p></td>
</tr> </tr>
<tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionMonitorStop" title="pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionMonitorStop"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RDPSessionMonitorStop</span></code></a>(inGSettings, …)</p></td> <tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionMonitorStop" title="pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionMonitorStop"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RDPSessionMonitorStop</span></code></a>(inGSettings, …)</p></td>
<td><p>Stop monitoring the RDP session by the Orchestrator process.</p></td> <td><p>Stop monitoring the RDP session by the Orchestrator process.</p></td>
</tr> </tr>
<tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionProcessStartIfNotRunning" title="pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionProcessStartIfNotRunning"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RDPSessionProcessStartIfNotRunning</span></code></a>(…[, …])</p></td> <tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionProcessStartIfNotRunning" title="pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionProcessStartIfNotRunning"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RDPSessionProcessStartIfNotRunning</span></code></a>(…[, …])</p></td>
<td><p>Start process in RDP if it is not running (check by the arg inProcessNameWEXEStr)</p></td> <td><p>Start process in RDP if it is not running (check by the arg inProcessNameWEXEStr)</p></td>
</tr> </tr>
<tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionProcessStop" title="pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionProcessStop"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RDPSessionProcessStop</span></code></a>(inGSettings, …)</p></td> <tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionProcessStop" title="pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionProcessStop"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RDPSessionProcessStop</span></code></a>(inGSettings, …)</p></td>
<td><p>Send CMD command to the RDP session “RUN” window.</p></td> <td><p>Send CMD command to the RDP session “RUN” window.</p></td>
</tr> </tr>
<tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionReconnect" title="pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionReconnect"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RDPSessionReconnect</span></code></a>(inGSettings, …[, …])</p></td> <tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionReconnect" title="pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionReconnect"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RDPSessionReconnect</span></code></a>(inGSettings, …[, …])</p></td>
<td><p>Reconnect the RDP session</p></td> <td><p>Reconnect the RDP session</p></td>
</tr> </tr>
<tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionResponsibilityCheck" title="pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionResponsibilityCheck"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RDPSessionResponsibilityCheck</span></code></a>(inGSettings, …)</p></td> <tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionResponsibilityCheck" title="pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionResponsibilityCheck"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RDPSessionResponsibilityCheck</span></code></a>(inGSettings, …)</p></td>
<td><p>DEVELOPING, MAYBE NOT USEFUL Check RDP Session responsibility TODO NEED DEV + TEST</p></td> <td><p>DEVELOPING, MAYBE NOT USEFUL Check RDP Session responsibility TODO NEED DEV + TEST</p></td>
</tr> </tr>
<tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.RDPTemplateCreate" title="pyOpenRPA.Orchestrator.__Orchestrator__.RDPTemplateCreate"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RDPTemplateCreate</span></code></a>(inLoginStr, inPasswordStr)</p></td> <tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.RDPTemplateCreate" title="pyOpenRPA.Orchestrator.__Orchestrator__.RDPTemplateCreate"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RDPTemplateCreate</span></code></a>(inLoginStr, inPasswordStr)</p></td>
<td><p>Create RDP connect dict item/ Use it connect/reconnect (Orchestrator.RDPSessionConnect)</p></td> <td><p>Create RDP connect dict item/ Use it connect/reconnect (Orchestrator.RDPSessionConnect)</p></td>
</tr> </tr>
<tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.SchedulerActivityTimeAddWeekly" title="pyOpenRPA.Orchestrator.__Orchestrator__.SchedulerActivityTimeAddWeekly"><code class="xref py py-obj docutils literal notranslate"><span class="pre">SchedulerActivityTimeAddWeekly</span></code></a>(inGSettings)</p></td> <tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.SchedulerActivityTimeAddWeekly" title="pyOpenRPA.Orchestrator.__Orchestrator__.SchedulerActivityTimeAddWeekly"><code class="xref py py-obj docutils literal notranslate"><span class="pre">SchedulerActivityTimeAddWeekly</span></code></a>(inGSettings)</p></td>
<td><p>Add activity item list in scheduler.</p></td> <td><p>Add activity item list in scheduler.</p></td>
</tr> </tr>
<tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.UACKeyListCheck" title="pyOpenRPA.Orchestrator.__Orchestrator__.UACKeyListCheck"><code class="xref py py-obj docutils literal notranslate"><span class="pre">UACKeyListCheck</span></code></a>(inRequest, inRoleKeyList)</p></td> <tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.UACKeyListCheck" title="pyOpenRPA.Orchestrator.__Orchestrator__.UACKeyListCheck"><code class="xref py py-obj docutils literal notranslate"><span class="pre">UACKeyListCheck</span></code></a>(inRequest, inRoleKeyList)</p></td>
<td><p>Check is client is has access for the key list</p></td> <td><p>Check is client is has access for the key list</p></td>
</tr> </tr>
<tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.UACSuperTokenUpdate" title="pyOpenRPA.Orchestrator.__Orchestrator__.UACSuperTokenUpdate"><code class="xref py py-obj docutils literal notranslate"><span class="pre">UACSuperTokenUpdate</span></code></a>(inGSettings, inSuperTokenStr)</p></td> <tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.UACSuperTokenUpdate" title="pyOpenRPA.Orchestrator.__Orchestrator__.UACSuperTokenUpdate"><code class="xref py py-obj docutils literal notranslate"><span class="pre">UACSuperTokenUpdate</span></code></a>(inGSettings, inSuperTokenStr)</p></td>
<td><p>Add supertoken for the all access (it is need for the robot communication without human)</p></td> <td><p>Add supertoken for the all access (it is need for the robot communication without human)</p></td>
</tr> </tr>
<tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.UACUpdate" title="pyOpenRPA.Orchestrator.__Orchestrator__.UACUpdate"><code class="xref py py-obj docutils literal notranslate"><span class="pre">UACUpdate</span></code></a>(inGSettings, inADLoginStr[, …])</p></td> <tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.UACUpdate" title="pyOpenRPA.Orchestrator.__Orchestrator__.UACUpdate"><code class="xref py py-obj docutils literal notranslate"><span class="pre">UACUpdate</span></code></a>(inGSettings, inADLoginStr[, …])</p></td>
<td><p>Update user access (UAC)</p></td> <td><p>Update user access (UAC)</p></td>
</tr> </tr>
<tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.UACUserDictGet" title="pyOpenRPA.Orchestrator.__Orchestrator__.UACUserDictGet"><code class="xref py py-obj docutils literal notranslate"><span class="pre">UACUserDictGet</span></code></a>(inRequest)</p></td> <tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.UACUserDictGet" title="pyOpenRPA.Orchestrator.__Orchestrator__.UACUserDictGet"><code class="xref py py-obj docutils literal notranslate"><span class="pre">UACUserDictGet</span></code></a>(inRequest)</p></td>
<td><p>Return user UAC hierarchy dict of the inRequest object.</p></td> <td><p>Return user UAC hierarchy dict of the inRequest object.</p></td>
</tr> </tr>
<tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.WebCPUpdate" title="pyOpenRPA.Orchestrator.__Orchestrator__.WebCPUpdate"><code class="xref py py-obj docutils literal notranslate"><span class="pre">WebCPUpdate</span></code></a>(inGSettings, inCPKeyStr[, …])</p></td> <tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.WebCPUpdate" title="pyOpenRPA.Orchestrator.__Orchestrator__.WebCPUpdate"><code class="xref py py-obj docutils literal notranslate"><span class="pre">WebCPUpdate</span></code></a>(inGSettings, inCPKeyStr[, …])</p></td>
<td><p>Add control panel HTML, JSON generator or JS when page init</p></td> <td><p>Add control panel HTML, JSON generator or JS when page init</p></td>
</tr> </tr>
<tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.WebURLConnectDef" title="pyOpenRPA.Orchestrator.__Orchestrator__.WebURLConnectDef"><code class="xref py py-obj docutils literal notranslate"><span class="pre">WebURLConnectDef</span></code></a>(inGSettings, inMethodStr, …)</p></td> <tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.WebURLConnectDef" title="pyOpenRPA.Orchestrator.__Orchestrator__.WebURLConnectDef"><code class="xref py py-obj docutils literal notranslate"><span class="pre">WebURLConnectDef</span></code></a>(inGSettings, inMethodStr, …)</p></td>
<td><p>Connect URL to DEF</p></td> <td><p>Connect URL to DEF</p></td>
</tr> </tr>
<tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.WebURLConnectFile" title="pyOpenRPA.Orchestrator.__Orchestrator__.WebURLConnectFile"><code class="xref py py-obj docutils literal notranslate"><span class="pre">WebURLConnectFile</span></code></a>(inGSettings, inMethodStr, …)</p></td> <tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.WebURLConnectFile" title="pyOpenRPA.Orchestrator.__Orchestrator__.WebURLConnectFile"><code class="xref py py-obj docutils literal notranslate"><span class="pre">WebURLConnectFile</span></code></a>(inGSettings, inMethodStr, …)</p></td>
<td><p>Connect URL to File</p></td> <td><p>Connect URL to File</p></td>
</tr> </tr>
<tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.WebURLConnectFolder" title="pyOpenRPA.Orchestrator.__Orchestrator__.WebURLConnectFolder"><code class="xref py py-obj docutils literal notranslate"><span class="pre">WebURLConnectFolder</span></code></a>(inGSettings, …)</p></td> <tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.WebURLConnectFolder" title="pyOpenRPA.Orchestrator.__Orchestrator__.WebURLConnectFolder"><code class="xref py py-obj docutils literal notranslate"><span class="pre">WebURLConnectFolder</span></code></a>(inGSettings, …)</p></td>
<td><p>Connect URL to Folder</p></td> <td><p>Connect URL to Folder</p></td>
</tr> </tr>
<tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.WebUserInfoGet" title="pyOpenRPA.Orchestrator.__Orchestrator__.WebUserInfoGet"><code class="xref py py-obj docutils literal notranslate"><span class="pre">WebUserInfoGet</span></code></a>(inRequest)</p></td> <tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.WebUserInfoGet" title="pyOpenRPA.Orchestrator.__Orchestrator__.WebUserInfoGet"><code class="xref py py-obj docutils literal notranslate"><span class="pre">WebUserInfoGet</span></code></a>(inRequest)</p></td>
<td><p>Return User info about request</p></td> <td><p>Return User info about request</p></td>
</tr> </tr>
<tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.WebUserIsSuperToken" title="pyOpenRPA.Orchestrator.__Orchestrator__.WebUserIsSuperToken"><code class="xref py py-obj docutils literal notranslate"><span class="pre">WebUserIsSuperToken</span></code></a>(inRequest, inGSettings)</p></td> <tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.WebUserIsSuperToken" title="pyOpenRPA.Orchestrator.__Orchestrator__.WebUserIsSuperToken"><code class="xref py py-obj docutils literal notranslate"><span class="pre">WebUserIsSuperToken</span></code></a>(inRequest, inGSettings)</p></td>
<td><p>Return bool if request is authentificated with supetoken (token which is never expires)</p></td> <td><p>Return bool if request is authentificated with supetoken (token which is never expires)</p></td>
</tr> </tr>
<tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.WebUserUACHierarchyGet" title="pyOpenRPA.Orchestrator.__Orchestrator__.WebUserUACHierarchyGet"><code class="xref py py-obj docutils literal notranslate"><span class="pre">WebUserUACHierarchyGet</span></code></a>(inRequest)</p></td> <tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.__Orchestrator__.WebUserUACHierarchyGet" title="pyOpenRPA.Orchestrator.__Orchestrator__.WebUserUACHierarchyGet"><code class="xref py py-obj docutils literal notranslate"><span class="pre">WebUserUACHierarchyGet</span></code></a>(inRequest)</p></td>
<td><p>Return User UAC Hierarchy DICT Return {…}</p></td> <td><p>Return User UAC Hierarchy DICT Return {…}</p></td>
</tr> </tr>
</tbody> </tbody>
@ -785,10 +789,33 @@
</dl> </dl>
</dd></dl> </dd></dl>
<dl class="py function">
<dt id="pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorSessionRestore">
<code class="sig-prename descclassname">pyOpenRPA.Orchestrator.__Orchestrator__.</code><code class="sig-name descname">OrchestratorSessionRestore</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">inGSettings</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/pyOpenRPA/Orchestrator/__Orchestrator__.html#OrchestratorSessionRestore"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorSessionRestore" title="Permalink to this definition"></a></dt>
<dd><p>Check _SessionLast_RDPList.json and _SessionLast_StorageDict.pickle in working directory. if exist - load into gsettings
# _SessionLast_StorageDict.pickle (binary)</p>
<blockquote>
<div><p>_SessionLast_RDPList.json (encoding = “utf-8”)
_SessionLast_StorageDict.pickle (binary)</p>
</div></blockquote>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>inGSettings</strong> Global settings dict (singleton)</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p></p>
</dd>
</dl>
</dd></dl>
<dl class="py function"> <dl class="py function">
<dt id="pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorSessionSave"> <dt id="pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorSessionSave">
<code class="sig-prename descclassname">pyOpenRPA.Orchestrator.__Orchestrator__.</code><code class="sig-name descname">OrchestratorSessionSave</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">inGSettings</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/pyOpenRPA/Orchestrator/__Orchestrator__.html#OrchestratorSessionSave"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorSessionSave" title="Permalink to this definition"></a></dt> <code class="sig-prename descclassname">pyOpenRPA.Orchestrator.__Orchestrator__.</code><code class="sig-name descname">OrchestratorSessionSave</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">inGSettings</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/pyOpenRPA/Orchestrator/__Orchestrator__.html#OrchestratorSessionSave"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorSessionSave" title="Permalink to this definition"></a></dt>
<dd><p>Orchestrator session save in file _SessionLast_RDPList.json (encoding = “utf-8”)</p> <dd><dl class="simple">
<dt>Orchestrator session save in file</dt><dd><p>_SessionLast_RDPList.json (encoding = “utf-8”)
_SessionLast_StorageDict.pickle (binary)</p>
</dd>
</dl>
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Parameters</dt> <dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>inGSettings</strong> Global settings dict (singleton)</p> <dd class="field-odd"><p><strong>inGSettings</strong> Global settings dict (singleton)</p>
@ -1815,6 +1842,64 @@ Var 2 (Backward compatibility): inGSettings, inRDPSessionKeyStr, inHostStr, inPo
</dd></dl> </dd></dl>
</div> </div>
</div>
<div class="section" id="module-pyOpenRPA.Orchestrator.Web.Basic">
<span id="pyopenrpa-orchestrator-web-basic"></span><h2>pyOpenRPA.Orchestrator.Web.Basic<a class="headerlink" href="#module-pyOpenRPA.Orchestrator.Web.Basic" title="Permalink to this headline"></a></h2>
<p><strong>Functions:</strong></p>
<table class="longtable docutils align-default">
<colgroup>
<col style="width: 10%" />
<col style="width: 90%" />
</colgroup>
<tbody>
<tr class="row-odd"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.Web.Basic.JSActivityListExecute" title="pyOpenRPA.Orchestrator.Web.Basic.JSActivityListExecute"><code class="xref py py-obj docutils literal notranslate"><span class="pre">JSActivityListExecute</span></code></a>(inActivityList[, …])</p></td>
<td><p>Create JS for execute activity list/ activity permanent</p></td>
</tr>
<tr class="row-even"><td><p><a class="reference internal" href="#pyOpenRPA.Orchestrator.Web.Basic.JSProcessorActivityListAdd" title="pyOpenRPA.Orchestrator.Web.Basic.JSProcessorActivityListAdd"><code class="xref py py-obj docutils literal notranslate"><span class="pre">JSProcessorActivityListAdd</span></code></a>(inActivityList[, …])</p></td>
<td><p># Create JS for send activity list/ activity to the processor</p></td>
</tr>
</tbody>
</table>
<dl class="py function">
<dt id="pyOpenRPA.Orchestrator.Web.Basic.JSActivityListExecute">
<code class="sig-prename descclassname">pyOpenRPA.Orchestrator.Web.Basic.</code><code class="sig-name descname">JSActivityListExecute</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">inActivityList</span></em>, <em class="sig-param"><span class="n">inGUIDRemoveBool</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/pyOpenRPA/Orchestrator/Web/Basic.html#JSActivityListExecute"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyOpenRPA.Orchestrator.Web.Basic.JSActivityListExecute" title="Permalink to this definition"></a></dt>
<dd><blockquote>
<div><p>Create JS for execute activity list/ activity permanent
USAGE: Orchestrator.Web.Basic.JSActivityListExecute(inActivityList, inGUIDRemoveBool = True)</p>
</div></blockquote>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>inActivityList</strong> List of the activities (See __Orchestrator__.ProcessorActivityItemCreate)</p></li>
<li><p><strong>inGUIDRemoveBool</strong> True - remove GUID before generate JS (if GUID is not important)</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>JavaScript string for the front end</p>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt id="pyOpenRPA.Orchestrator.Web.Basic.JSProcessorActivityListAdd">
<code class="sig-prename descclassname">pyOpenRPA.Orchestrator.Web.Basic.</code><code class="sig-name descname">JSProcessorActivityListAdd</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">inActivityList</span></em>, <em class="sig-param"><span class="n">inGUIDRemoveBool</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/pyOpenRPA/Orchestrator/Web/Basic.html#JSProcessorActivityListAdd"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyOpenRPA.Orchestrator.Web.Basic.JSProcessorActivityListAdd" title="Permalink to this definition"></a></dt>
<dd><blockquote>
<div><p># Create JS for send activity list/ activity to the processor
# USAGE: Orchestrator.Web.Basic.JSProcessorActivityListAdd(inActivityList)</p>
</div></blockquote>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>inActivityList</strong> List of the activities (See __Orchestrator__.ProcessorActivityItemCreate)</p></li>
<li><p><strong>inGUIDRemoveBool</strong> True - remove GUID before generate JS (if GUID is not important)</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>JavaScript string for the front end</p>
</dd>
</dl>
</dd></dl>
</div> </div>
<div class="section" id="references"> <div class="section" id="references">
<h2>References<a class="headerlink" href="#references" title="Permalink to this headline"></a></h2> <h2>References<a class="headerlink" href="#references" title="Permalink to this headline"></a></h2>

@ -202,7 +202,7 @@
<span class="s2">&quot;LifetimeSecFloat&quot;</span><span class="p">:</span> <span class="mf">600.0</span><span class="p">,</span> <span class="s2">&quot;LifetimeSecFloat&quot;</span><span class="p">:</span> <span class="mf">600.0</span><span class="p">,</span>
<span class="c1"># Client Session lifetime in seconds. after this time server will forget about this client session</span> <span class="c1"># Client Session lifetime in seconds. after this time server will forget about this client session</span>
<span class="s2">&quot;LifetimeRequestSecFloat&quot;</span><span class="p">:</span> <span class="mf">120.0</span><span class="p">,</span> <span class="c1"># 1 client request lifetime in server in seconds</span> <span class="s2">&quot;LifetimeRequestSecFloat&quot;</span><span class="p">:</span> <span class="mf">120.0</span><span class="p">,</span> <span class="c1"># 1 client request lifetime in server in seconds</span>
<span class="s2">&quot;ControlPanelRefreshIntervalSecFloat&quot;</span><span class="p">:</span> <span class="mf">1.5</span><span class="p">,</span> <span class="c1"># Interval to refresh control panels for session,</span> <span class="s2">&quot;ControlPanelRefreshIntervalSecFloat&quot;</span><span class="p">:</span> <span class="mf">2.0</span><span class="p">,</span> <span class="c1"># Interval to refresh control panels for session,</span>
<span class="s2">&quot;TechnicalSessionGUIDCache&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="c1"># TEchnical cache. Fills when web browser is requesting</span> <span class="s2">&quot;TechnicalSessionGUIDCache&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="c1"># TEchnical cache. Fills when web browser is requesting</span>
<span class="c1"># &quot;SessionGUIDStr&quot;:{ # Session with some GUID str. On client session guid stored in cookie &quot;SessionGUIDStr&quot;</span> <span class="c1"># &quot;SessionGUIDStr&quot;:{ # Session with some GUID str. On client session guid stored in cookie &quot;SessionGUIDStr&quot;</span>
<span class="c1"># &quot;InitDatetime&quot;: None, # Datetime when session GUID was created</span> <span class="c1"># &quot;InitDatetime&quot;: None, # Datetime when session GUID was created</span>
@ -226,6 +226,9 @@
<span class="c1"># # # # # # # # # # # # # # # # # #</span> <span class="c1"># # # # # # # # # # # # # # # # # #</span>
<span class="p">},</span> <span class="p">},</span>
<span class="s2">&quot;ServerDict&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="s2">&quot;ServerDict&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;AgentActivityLifetimeSecFloat&quot;</span><span class="p">:</span> <span class="mf">1200.0</span><span class="p">,</span> <span class="c1"># Time in seconds to life for activity for the agent</span>
<span class="s2">&quot;AgentConnectionLifetimeSecFloat&quot;</span><span class="p">:</span> <span class="mf">300.0</span><span class="p">,</span> <span class="c1"># Time in seconds to handle the open connection to the Agent</span>
<span class="s2">&quot;AgentLoopSleepSecFloat&quot;</span><span class="p">:</span> <span class="mf">2.0</span><span class="p">,</span> <span class="c1"># Time in seconds to sleep between loops when check to send some activity to the agent</span>
<span class="s2">&quot;WorkingDirectoryPathStr&quot;</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span> <span class="c1"># Will be filled automatically</span> <span class="s2">&quot;WorkingDirectoryPathStr&quot;</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span> <span class="c1"># Will be filled automatically</span>
<span class="s2">&quot;RequestTimeoutSecFloat&quot;</span><span class="p">:</span> <span class="mi">300</span><span class="p">,</span> <span class="c1"># Time to handle request in seconds</span> <span class="s2">&quot;RequestTimeoutSecFloat&quot;</span><span class="p">:</span> <span class="mi">300</span><span class="p">,</span> <span class="c1"># Time to handle request in seconds</span>
<span class="s2">&quot;ListenPort_&quot;</span><span class="p">:</span> <span class="s2">&quot;Порт, по которому можно подключиться к демону&quot;</span><span class="p">,</span> <span class="s2">&quot;ListenPort_&quot;</span><span class="p">:</span> <span class="s2">&quot;Порт, по которому можно подключиться к демону&quot;</span><span class="p">,</span>
@ -303,45 +306,7 @@
<span class="s2">&quot;OrchestratorStart&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="s2">&quot;OrchestratorStart&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;DefSettingsUpdatePathList&quot;</span><span class="p">:</span> <span class="p">[],</span> <span class="s2">&quot;DefSettingsUpdatePathList&quot;</span><span class="p">:</span> <span class="p">[],</span>
<span class="c1"># List of the .py files which should be loaded before init the algorythms</span> <span class="c1"># List of the .py files which should be loaded before init the algorythms</span>
<span class="s2">&quot;ActivityList&quot;</span><span class="p">:</span> <span class="p">[</span> <span class="s2">&quot;ActivityList&quot;</span><span class="p">:</span> <span class="p">[]</span>
<span class="c1"># {</span>
<span class="c1"># &quot;Type&quot;: &quot;ProcessStop&quot;, #Activity type</span>
<span class="c1"># &quot;Name&quot;: &quot;OpenRPARobotDaemon.exe&quot;, #Process name</span>
<span class="c1"># &quot;FlagForce&quot;: True, #Force process close</span>
<span class="c1"># &quot;User&quot;: &quot;%username%&quot; #Empty, user or %username%</span>
<span class="c1"># },</span>
<span class="c1"># {</span>
<span class="c1"># &quot;Type&quot;: &quot;ProcessStartIfTurnedOff&quot;, #Activity type</span>
<span class="c1"># &quot;CheckTaskName&quot;: &quot;notepad.exe&quot;, #Python function module name</span>
<span class="c1"># &quot;Path&quot;: &quot;notepad&quot;, #Python function name</span>
<span class="c1"># &quot;ArgList&quot;: [] #Input python function args</span>
<span class="c1"># },</span>
<span class="c1"># {</span>
<span class="c1"># &quot;Type&quot;: &quot;RDPSessionConnect&quot;, #Activity type - start/connect RDP Session</span>
<span class="c1"># &quot;RDPSessionKeyStr&quot;: &quot;notepad.exe&quot;, #Python function module name</span>
<span class="c1"># &quot;RDPConfigurationDict&quot;: {}</span>
<span class="c1"># },</span>
<span class="c1"># {</span>
<span class="c1"># &quot;Type&quot;: &quot;RDPSessionLogoff&quot;, #Activity type - logoff RDP Session</span>
<span class="c1"># &quot;RDPSessionKeyStr&quot;: &quot;notepad.exe&quot;, #Python function module name</span>
<span class="c1"># },</span>
<span class="c1"># {</span>
<span class="c1"># &quot;Type&quot;: &quot;RDPSessionDisconnect&quot;, #Activity type - disconnect the RDP Session without logoff</span>
<span class="c1"># &quot;RDPSessionKeyStr&quot;: &quot;notepad.exe&quot;, #Python function module name</span>
<span class="c1"># },</span>
<span class="c1"># {</span>
<span class="c1"># &quot;Type&quot;: &quot;RDPSessionFileSend&quot;, #Activity type - send file to RDP session</span>
<span class="c1"># ...</span>
<span class="c1"># },</span>
<span class="c1"># {</span>
<span class="c1"># &quot;Type&quot;: &quot;RDPSessionFileRecieve&quot;, #Activity type - recieve file from rdp session</span>
<span class="c1"># ...</span>
<span class="c1"># },</span>
<span class="c1"># {</span>
<span class="c1"># &quot;Type&quot;: &quot;RDPSessionProcessStart&quot;, #Activity type -</span>
<span class="c1"># ...</span>
<span class="c1"># },</span>
<span class="p">]</span>
<span class="p">},</span> <span class="p">},</span>
<span class="s2">&quot;SchedulerDict&quot;</span><span class="p">:</span> <span class="p">{</span> <span class="s2">&quot;SchedulerDict&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;CheckIntervalSecFloat&quot;</span><span class="p">:</span> <span class="mf">5.0</span><span class="p">,</span> <span class="c1"># Check interval in seconds</span> <span class="s2">&quot;CheckIntervalSecFloat&quot;</span><span class="p">:</span> <span class="mf">5.0</span><span class="p">,</span> <span class="c1"># Check interval in seconds</span>
@ -350,11 +315,14 @@
<span class="c1"># &quot;TimeHH:MMStr&quot;: &quot;22:23&quot;, # Time [HH:MM] to trigger activity</span> <span class="c1"># &quot;TimeHH:MMStr&quot;: &quot;22:23&quot;, # Time [HH:MM] to trigger activity</span>
<span class="c1"># &quot;WeekdayList&quot;: [0, 1, 2, 3, 4, 5, 6], #List of the weekday index when activity is applicable, Default [0,1,2,3,4,5,6]</span> <span class="c1"># &quot;WeekdayList&quot;: [0, 1, 2, 3, 4, 5, 6], #List of the weekday index when activity is applicable, Default [0,1,2,3,4,5,6]</span>
<span class="c1"># &quot;ActivityList&quot;: [</span> <span class="c1"># &quot;ActivityList&quot;: [</span>
<span class="c1"># {</span> <span class="c1"># # {</span>
<span class="c1"># &quot;Type&quot;: &quot;ProcessStart&quot;, # Activity type</span> <span class="c1"># # &quot;Def&quot;:&quot;DefAliasTest&quot;, # def link or def alias (look gSettings[&quot;Processor&quot;][&quot;AliasDefDict&quot;])</span>
<span class="c1"># &quot;Path&quot;: &quot;start&quot;, # Executable file path</span> <span class="c1"># # &quot;ArgList&quot;:[1,2,3], # Args list</span>
<span class="c1"># &quot;ArgList&quot;: [&quot;cmd.exe&quot;, &quot;/c&quot;, &quot;PIPUpgrade.cmd&quot;] # List of the arguments</span> <span class="c1"># # &quot;ArgDict&quot;:{&quot;ttt&quot;:1,&quot;222&quot;:2,&quot;dsd&quot;:3} # Args dictionary</span>
<span class="c1"># }</span> <span class="c1"># # &quot;ArgGSettings&quot;: # Name of GSettings attribute: str (ArgDict) or index (for ArgList)</span>
<span class="c1"># # &quot;ArgLogger&quot;: None # Name of GSettings attribute: str (ArgDict) or index (for ArgList)</span>
<span class="c1"># # &quot;GUIDStr&quot;: ..., # GUID of the activity</span>
<span class="c1"># # },</span>
<span class="c1"># ],</span> <span class="c1"># ],</span>
<span class="c1"># &quot;GUID&quot;: None # Will be filled in Orchestrator automatically - is needed for detect activity completion</span> <span class="c1"># &quot;GUID&quot;: None # Will be filled in Orchestrator automatically - is needed for detect activity completion</span>
<span class="c1"># },</span> <span class="c1"># },</span>
@ -368,6 +336,7 @@
<span class="c1"># &quot;ArgDict&quot;:{&quot;ttt&quot;:1,&quot;222&quot;:2,&quot;dsd&quot;:3} # Args dictionary</span> <span class="c1"># &quot;ArgDict&quot;:{&quot;ttt&quot;:1,&quot;222&quot;:2,&quot;dsd&quot;:3} # Args dictionary</span>
<span class="c1"># &quot;ArgGSettings&quot;: # Name of GSettings attribute: str (ArgDict) or index (for ArgList)</span> <span class="c1"># &quot;ArgGSettings&quot;: # Name of GSettings attribute: str (ArgDict) or index (for ArgList)</span>
<span class="c1"># &quot;ArgLogger&quot;: None # Name of GSettings attribute: str (ArgDict) or index (for ArgList)</span> <span class="c1"># &quot;ArgLogger&quot;: None # Name of GSettings attribute: str (ArgDict) or index (for ArgList)</span>
<span class="c1"># &quot;GUIDStr&quot;: ..., # GUID of the activity</span>
<span class="c1"># },</span> <span class="c1"># },</span>
<span class="p">],</span> <span class="p">],</span>
<span class="s2">&quot;AliasDefDict&quot;</span><span class="p">:</span> <span class="p">{},</span> <span class="c1"># Storage for def with Str alias. To use it see pyOpenRPA.Orchestrator.ControlPanel</span> <span class="s2">&quot;AliasDefDict&quot;</span><span class="p">:</span> <span class="p">{},</span> <span class="c1"># Storage for def with Str alias. To use it see pyOpenRPA.Orchestrator.ControlPanel</span>

@ -216,6 +216,9 @@
<span class="c1"># TEST Add Supertoken for the all access between robots</span> <span class="c1"># TEST Add Supertoken for the all access between robots</span>
<span class="n">Orchestrator</span><span class="o">.</span><span class="n">UACSuperTokenUpdate</span><span class="p">(</span><span class="n">inGSettings</span><span class="o">=</span><span class="n">gSettings</span><span class="p">,</span> <span class="n">inSuperTokenStr</span><span class="o">=</span><span class="s2">&quot;1992-04-03-0643-ru-b4ff-openrpa52zzz&quot;</span><span class="p">)</span> <span class="n">Orchestrator</span><span class="o">.</span><span class="n">UACSuperTokenUpdate</span><span class="p">(</span><span class="n">inGSettings</span><span class="o">=</span><span class="n">gSettings</span><span class="p">,</span> <span class="n">inSuperTokenStr</span><span class="o">=</span><span class="s2">&quot;1992-04-03-0643-ru-b4ff-openrpa52zzz&quot;</span><span class="p">)</span>
<span class="c1"># Restore DUMP</span>
<span class="n">Orchestrator</span><span class="o">.</span><span class="n">OrchestratorSessionRestore</span><span class="p">(</span><span class="n">inGSettings</span><span class="o">=</span><span class="n">gSettings</span><span class="p">)</span>
<span class="c1"># INFO Relative/Absolute import see below - after settings init</span> <span class="c1"># INFO Relative/Absolute import see below - after settings init</span>
<span class="c1"># Template for import CP - Control Panels</span> <span class="c1"># Template for import CP - Control Panels</span>
<span class="c1"># ATTENTION - Pay attention to CP names! Orchestrator is one for the all control panels per one machine</span> <span class="c1"># ATTENTION - Pay attention to CP names! Orchestrator is one for the all control panels per one machine</span>
@ -251,7 +254,7 @@
<span class="n">gSettings</span><span class="p">[</span><span class="s2">&quot;Logger&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Exception when init CP. See below.&quot;</span><span class="p">)</span> <span class="n">gSettings</span><span class="p">[</span><span class="s2">&quot;Logger&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Exception when init CP. See below.&quot;</span><span class="p">)</span>
<span class="c1"># Call the orchestrator def</span> <span class="c1"># Call the orchestrator def</span>
<span class="n">Orchestrator</span><span class="o">.</span><span class="n">Orchestrator</span><span class="p">(</span><span class="n">inGSettings</span><span class="o">=</span><span class="n">gSettings</span><span class="p">)</span> <span class="n">Orchestrator</span><span class="o">.</span><span class="n">Orchestrator</span><span class="p">(</span><span class="n">inGSettings</span><span class="o">=</span><span class="n">gSettings</span><span class="p">,</span> <span class="n">inDumpRestoreBool</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span> <span class="k">else</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;!WARNING! Current orchestrator settings do not support old type of the Orchestrator start. Use new Orchestrator type start (see v1.2.0)&quot;</span><span class="p">)</span> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;!WARNING! Current orchestrator settings do not support old type of the Orchestrator start. Use new Orchestrator type start (see v1.2.0)&quot;</span><span class="p">)</span>

@ -178,6 +178,7 @@
<h1>All modules for which code is available</h1> <h1>All modules for which code is available</h1>
<ul><li><a href="pyOpenRPA/Agent/__Agent__.html">pyOpenRPA.Agent.__Agent__</a></li> <ul><li><a href="pyOpenRPA/Agent/__Agent__.html">pyOpenRPA.Agent.__Agent__</a></li>
<li><a href="pyOpenRPA/Orchestrator/Web/Basic.html">pyOpenRPA.Orchestrator.Web.Basic</a></li>
<li><a href="pyOpenRPA/Orchestrator/__Orchestrator__.html">pyOpenRPA.Orchestrator.__Orchestrator__</a></li> <li><a href="pyOpenRPA/Orchestrator/__Orchestrator__.html">pyOpenRPA.Orchestrator.__Orchestrator__</a></li>
<li><a href="pyOpenRPA/Robot/UIDesktop.html">pyOpenRPA.Robot.UIDesktop</a></li> <li><a href="pyOpenRPA/Robot/UIDesktop.html">pyOpenRPA.Robot.UIDesktop</a></li>
</ul> </ul>

@ -0,0 +1,369 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>pyOpenRPA.Orchestrator.Web.Basic &mdash; pyOpenRPA v1.2.0 documentation</title>
<link rel="stylesheet" href="../../../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
<link rel="shortcut icon" href="../../../../_static/favicon.ico"/>
<!--[if lt IE 9]>
<script src="../../../../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script type="text/javascript" id="documentation_options" data-url_root="../../../../" src="../../../../_static/documentation_options.js"></script>
<script src="../../../../_static/jquery.js"></script>
<script src="../../../../_static/underscore.js"></script>
<script src="../../../../_static/doctools.js"></script>
<script type="text/javascript" src="../../../../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../../../../genindex.html" />
<link rel="search" title="Search" href="../../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../../index.html" class="icon icon-home"> pyOpenRPA
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<p class="caption"><span class="caption-text">GENERAL</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../../../01_HowToInstall.html">1. How to install</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../02_RoadMap.html">2. Roadmap</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../03_Copyrights_Contacts.html">3. Copyrights &amp; Contacts</a></li>
</ul>
<p class="caption"><span class="caption-text">ROBOT</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../../../Robot/01_Robot.html">1. Description</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../Robot/02_Defs.html">2. Defs</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../Robot/03_HowToUse.html">3. How to use</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../Robot/04_Dependencies.html">4. Dependencies</a></li>
</ul>
<p class="caption"><span class="caption-text">STUDIO</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../../../Studio/01_Studio.html">1. Description</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../Studio/02_HowToUse.html">2. How to use</a></li>
</ul>
<p class="caption"><span class="caption-text">ORCHESTRATOR</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../../../Orchestrator/01_Orchestrator.html">1. Description</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../Orchestrator/02_Defs.html">2. Defs</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../Orchestrator/03_gSettingsTemplate.html">3. gSettings Template</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../Orchestrator/04_HowToUse.html">4. How to use</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../../Orchestrator/05_UAC.html">5. UAC - User Access Control</a></li>
</ul>
<p class="caption"><span class="caption-text">AGENT</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../../../Agent/02_Defs.html">2. Defs</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../../index.html">pyOpenRPA</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../../../index.html" class="icon icon-home"></a> &raquo;</li>
<li><a href="../../../index.html">Module code</a> &raquo;</li>
<li>pyOpenRPA.Orchestrator.Web.Basic</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for pyOpenRPA.Orchestrator.Web.Basic</h1><div class="highlight"><pre>
<span></span><span class="kn">import</span> <span class="nn">json</span><span class="o">,</span> <span class="nn">copy</span>
<span class="kn">from</span> <span class="nn">..</span> <span class="kn">import</span> <span class="n">__Orchestrator__</span>
<span class="kn">from</span> <span class="nn">..</span> <span class="kn">import</span> <span class="n">Processor</span>
<span class="c1"># Escape JS to the safe JS for the inline JS in HTML tags ATTENTION! Use it only if want to paste JS into HTML tag - not in &lt;script&gt;</span>
<span class="c1"># USAGE: JSEscapeForHTMLInline(inJSStr=&quot;lTest=\&quot;Hello World\&quot;; alert(\&quot;lTest\&quot;)&quot;)</span>
<span class="k">def</span> <span class="nf">JSEscapeForHTMLInline</span><span class="p">(</span><span class="n">inJSStr</span><span class="p">):</span>
<span class="n">lResult</span> <span class="o">=</span> <span class="n">inJSStr</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\&quot;</span><span class="s2">&quot;</span><span class="p">,</span><span class="s2">&quot;&amp;quot;&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">lResult</span>
<div class="viewcode-block" id="JSProcessorActivityListAdd"><a class="viewcode-back" href="../../../../Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.Web.Basic.JSProcessorActivityListAdd">[docs]</a><span class="k">def</span> <span class="nf">JSProcessorActivityListAdd</span><span class="p">(</span><span class="n">inActivityList</span><span class="p">,</span> <span class="n">inGUIDRemoveBool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> # Create JS for send activity list/ activity to the processor</span>
<span class="sd"> # USAGE: Orchestrator.Web.Basic.JSProcessorActivityListAdd(inActivityList)</span>
<span class="sd"> :param inActivityList: List of the activities (See __Orchestrator__.ProcessorActivityItemCreate)</span>
<span class="sd"> :param inGUIDRemoveBool: True - remove GUID before generate JS (if GUID is not important)</span>
<span class="sd"> :return: JavaScript string for the front end</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">Processor</span><span class="o">.</span><span class="n">__ActivityListVerify__</span><span class="p">(</span><span class="n">inActivityList</span><span class="o">=</span><span class="n">inActivityList</span><span class="p">)</span> <span class="c1"># DO VERIFICATION FOR THE inActivityList</span>
<span class="n">inActivityList</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="n">inActivityList</span><span class="p">)</span>
<span class="c1"># Check if no def function is here - if exist - replace to alias</span>
<span class="k">for</span> <span class="n">lActivityItem</span> <span class="ow">in</span> <span class="n">inActivityList</span><span class="p">:</span>
<span class="k">if</span> <span class="s2">&quot;GUIDStr&quot;</span> <span class="ow">in</span> <span class="n">lActivityItem</span> <span class="ow">and</span> <span class="n">inGUIDRemoveBool</span> <span class="o">==</span> <span class="kc">True</span><span class="p">:</span> <span class="k">del</span> <span class="n">lActivityItem</span><span class="p">[</span><span class="s2">&quot;GUIDStr&quot;</span><span class="p">]</span> <span class="c1"># Remove GUID from activity items if exists</span>
<span class="n">lDef</span> <span class="o">=</span> <span class="n">lActivityItem</span><span class="p">[</span><span class="s2">&quot;Def&quot;</span><span class="p">]</span>
<span class="k">if</span> <span class="n">callable</span><span class="p">(</span><span class="n">lDef</span><span class="p">):</span> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;pyOpenRPA Exception: You can&#39;t send ActivityList with def to JS. Use Def Alias (see Orchestrator.ProcessorAliasDefUpdate)&quot;</span><span class="p">)</span>
<span class="n">lJSStr</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;mGlobal.pyOpenRPA.ProcessorQueueAdd(</span><span class="si">{</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">inActivityList</span><span class="p">)</span><span class="si">}</span><span class="s2">);&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">lJSStr</span></div>
<div class="viewcode-block" id="JSActivityListExecute"><a class="viewcode-back" href="../../../../Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.Web.Basic.JSActivityListExecute">[docs]</a><span class="k">def</span> <span class="nf">JSActivityListExecute</span><span class="p">(</span><span class="n">inActivityList</span><span class="p">,</span> <span class="n">inGUIDRemoveBool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create JS for execute activity list/ activity permanent</span>
<span class="sd"> USAGE: Orchestrator.Web.Basic.JSActivityListExecute(inActivityList, inGUIDRemoveBool = True)</span>
<span class="sd"> :param inActivityList: List of the activities (See __Orchestrator__.ProcessorActivityItemCreate)</span>
<span class="sd"> :param inGUIDRemoveBool: True - remove GUID before generate JS (if GUID is not important)</span>
<span class="sd"> :return: JavaScript string for the front end</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">Processor</span><span class="o">.</span><span class="n">__ActivityListVerify__</span><span class="p">(</span><span class="n">inActivityList</span><span class="o">=</span><span class="n">inActivityList</span><span class="p">)</span> <span class="c1"># DO VERIFICATION FOR THE inActivityList</span>
<span class="n">inActivityList</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="n">inActivityList</span><span class="p">)</span>
<span class="c1"># Check if no def function is here - if exist - replace to alias</span>
<span class="k">for</span> <span class="n">lActivityItem</span> <span class="ow">in</span> <span class="n">inActivityList</span><span class="p">:</span>
<span class="k">if</span> <span class="s2">&quot;GUIDStr&quot;</span> <span class="ow">in</span> <span class="n">lActivityItem</span> <span class="ow">and</span> <span class="n">inGUIDRemoveBool</span> <span class="o">==</span> <span class="kc">True</span><span class="p">:</span> <span class="k">del</span> <span class="n">lActivityItem</span><span class="p">[</span><span class="s2">&quot;GUIDStr&quot;</span><span class="p">]</span> <span class="c1"># Remove GUID from activity items if exists</span>
<span class="n">lDef</span> <span class="o">=</span> <span class="n">lActivityItem</span><span class="p">[</span><span class="s2">&quot;Def&quot;</span><span class="p">]</span>
<span class="k">if</span> <span class="n">callable</span><span class="p">(</span><span class="n">lDef</span><span class="p">):</span> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;pyOpenRPA Exception: You can&#39;t send ActivityList with def to JS. Use Def Alias (see Orchestrator.ProcessorAliasDefUpdate)&quot;</span><span class="p">)</span>
<span class="n">lJSStr</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;mGlobal.pyOpenRPA.ActivityListExecute(</span><span class="si">{</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">inActivityList</span><span class="p">)</span><span class="si">}</span><span class="s2">);&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">lJSStr</span></div>
<span class="c1"># Generate HTML code of the simple URL link by the URL</span>
<span class="c1"># USAGE: Orchestrator.Web.Basic.HTMLLinkURL(inURLStr=&quot;test&quot;,inColorStr=&quot;orange&quot;)</span>
<span class="c1"># USAGE: Basic.HTMLLinkURL(inURLStr=&quot;test&quot;,inColorStr=&quot;orange&quot;)</span>
<span class="k">def</span> <span class="nf">HTMLLinkURL</span><span class="p">(</span><span class="n">inURLStr</span><span class="p">,</span> <span class="n">inTitleStr</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">inColorStr</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="n">lCSSStyleStr</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">inTitleStr</span><span class="p">:</span> <span class="n">inTitleStr</span> <span class="o">=</span> <span class="n">inURLStr</span>
<span class="k">if</span> <span class="n">inColorStr</span><span class="p">:</span> <span class="n">lCSSStyleStr</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;style=</span><span class="se">\&quot;</span><span class="s2">color:</span><span class="si">{</span><span class="n">inColorStr</span><span class="si">}</span><span class="se">\&quot;</span><span class="s2">&quot;</span>
<span class="n">lResult</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;&lt;a </span><span class="si">{</span><span class="n">lCSSStyleStr</span><span class="si">}</span><span class="s2"> href=</span><span class="se">\&quot;</span><span class="si">{</span><span class="n">inURLStr</span><span class="si">}</span><span class="se">\&quot;</span><span class="s2">&gt;</span><span class="si">{</span><span class="n">inTitleStr</span><span class="si">}</span><span class="s2">&lt;/a&gt;&quot;</span>
<span class="k">return</span> <span class="n">lResult</span>
<span class="c1"># Generate HTML code of the simple URL link by the JS when onclick</span>
<span class="c1"># USAGE: Orchestrator.Web.Basic.HTMLLinkJSOnClick(inJSOnClickStr=&quot;&quot;,inColorStr=&quot;orange&quot;)</span>
<span class="c1"># USAGE: Basic.HTMLLinkJSOnClick(inJSOnClickStr=&quot;test&quot;,inColorStr=&quot;orange&quot;)</span>
<span class="k">def</span> <span class="nf">HTMLLinkJSOnClick</span><span class="p">(</span><span class="n">inJSOnClickStr</span><span class="p">,</span> <span class="n">inTitleStr</span><span class="p">,</span> <span class="n">inColorStr</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="n">lCSSStyleStr</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="k">if</span> <span class="n">inColorStr</span><span class="p">:</span> <span class="n">lCSSStyleStr</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;style=</span><span class="se">\&quot;</span><span class="s2">color:</span><span class="si">{</span><span class="n">inColorStr</span><span class="si">}</span><span class="se">\&quot;</span><span class="s2">&quot;</span>
<span class="n">inJSOnClickStr</span><span class="o">=</span> <span class="n">JSEscapeForHTMLInline</span><span class="p">(</span><span class="n">inJSStr</span><span class="o">=</span><span class="n">inJSOnClickStr</span><span class="p">)</span> <span class="c1"># Escape some symbols for the inline JS</span>
<span class="n">lResult</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;&lt;a </span><span class="si">{</span><span class="n">lCSSStyleStr</span><span class="si">}</span><span class="s2"> onclick=</span><span class="se">\&quot;</span><span class="si">{</span><span class="n">inJSOnClickStr</span><span class="si">}</span><span class="se">\&quot;</span><span class="s2">&gt;</span><span class="si">{</span><span class="n">inTitleStr</span><span class="si">}</span><span class="s2">&lt;/a&gt;&quot;</span>
<span class="k">return</span> <span class="n">lResult</span>
<span class="c1"># Create HTMLLink by the def, argdict, arglist, gsettingsStr, logger Str titleStr, color, (add in processor queue)</span>
<span class="k">def</span> <span class="nf">HTMLLinkDefProcessor</span><span class="p">(</span><span class="n">inGSettings</span><span class="p">,</span> <span class="n">inDef</span><span class="p">,</span> <span class="n">inArgDict</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">inArgList</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">inArgGSettingsStr</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">inArgLoggerStr</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">inLinkTitleStr</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">inLinkColorStr</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">):</span>
<span class="n">lDefAliasStr</span> <span class="o">=</span> <span class="n">inDef</span>
<span class="k">if</span> <span class="n">callable</span><span class="p">(</span><span class="n">inDef</span><span class="p">):</span>
<span class="n">lDefAliasStr</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">inDef</span><span class="p">)</span>
<span class="n">lDefAliasStr</span> <span class="o">=</span> <span class="n">__Orchestrator__</span><span class="o">.</span><span class="n">ProcessorAliasDefUpdate</span><span class="p">(</span><span class="n">inGSettings</span><span class="o">=</span><span class="n">inGSettings</span><span class="p">,</span> <span class="n">inDef</span><span class="o">=</span><span class="n">inDef</span><span class="p">,</span> <span class="n">inAliasStr</span><span class="o">=</span><span class="n">lDefAliasStr</span><span class="p">)</span>
<span class="k">if</span> <span class="n">inLinkTitleStr</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> <span class="n">inLinkTitleStr</span> <span class="o">=</span> <span class="n">lDefAliasStr</span>
<span class="n">lActivityList</span> <span class="o">=</span> <span class="p">[</span><span class="n">__Orchestrator__</span><span class="o">.</span><span class="n">ProcessorActivityItemCreate</span><span class="p">(</span><span class="n">inDef</span><span class="o">=</span><span class="n">lDefAliasStr</span><span class="p">,</span><span class="n">inArgList</span><span class="o">=</span><span class="n">inArgList</span><span class="p">,</span><span class="n">inArgDict</span><span class="o">=</span><span class="n">inArgDict</span><span class="p">,</span><span class="n">inArgGSettingsStr</span><span class="o">=</span><span class="n">inArgGSettingsStr</span><span class="p">,</span><span class="n">inArgLoggerStr</span><span class="o">=</span><span class="n">inArgLoggerStr</span><span class="p">)]</span>
<span class="n">lJSStr</span> <span class="o">=</span> <span class="n">JSProcessorActivityListAdd</span><span class="p">(</span><span class="n">lActivityList</span><span class="p">)</span>
<span class="n">lHTMLStr</span> <span class="o">=</span> <span class="n">HTMLLinkJSOnClick</span><span class="p">(</span><span class="n">inJSOnClickStr</span><span class="o">=</span><span class="n">lJSStr</span><span class="p">,</span><span class="n">inTitleStr</span><span class="o">=</span><span class="n">inLinkTitleStr</span><span class="p">,</span> <span class="n">inColorStr</span><span class="o">=</span><span class="n">inLinkColorStr</span><span class="p">)</span>
<span class="k">return</span> <span class="n">lHTMLStr</span>
<span class="c1"># Create HTMLLink by the def, argdict, arglist, gsettingsStr, logger Str titleStr, color, (execute permanently)</span>
<span class="k">def</span> <span class="nf">HTMLLinkDefExecute</span><span class="p">(</span><span class="n">inGSettings</span><span class="p">,</span> <span class="n">inDef</span><span class="p">,</span> <span class="n">inArgDict</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">inArgList</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">inArgGSettingsStr</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">inArgLoggerStr</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">inLinkTitleStr</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">inLinkColorStr</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">):</span>
<span class="n">lDefAliasStr</span> <span class="o">=</span> <span class="n">inDef</span>
<span class="k">if</span> <span class="n">callable</span><span class="p">(</span><span class="n">inDef</span><span class="p">):</span>
<span class="n">lDefAliasStr</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">inDef</span><span class="p">)</span>
<span class="n">lDefAliasStr</span> <span class="o">=</span> <span class="n">__Orchestrator__</span><span class="o">.</span><span class="n">ProcessorAliasDefUpdate</span><span class="p">(</span><span class="n">inGSettings</span><span class="o">=</span><span class="n">inGSettings</span><span class="p">,</span> <span class="n">inDef</span><span class="o">=</span><span class="n">inDef</span><span class="p">,</span> <span class="n">inAliasStr</span><span class="o">=</span><span class="n">lDefAliasStr</span><span class="p">)</span>
<span class="k">if</span> <span class="n">inLinkTitleStr</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> <span class="n">inLinkTitleStr</span> <span class="o">=</span> <span class="n">lDefAliasStr</span>
<span class="n">lActivityList</span> <span class="o">=</span> <span class="p">[</span><span class="n">__Orchestrator__</span><span class="o">.</span><span class="n">ProcessorActivityItemCreate</span><span class="p">(</span><span class="n">inDef</span><span class="o">=</span><span class="n">lDefAliasStr</span><span class="p">,</span><span class="n">inArgList</span><span class="o">=</span><span class="n">inArgList</span><span class="p">,</span><span class="n">inArgDict</span><span class="o">=</span><span class="n">inArgDict</span><span class="p">,</span><span class="n">inArgGSettingsStr</span><span class="o">=</span><span class="n">inArgGSettingsStr</span><span class="p">,</span><span class="n">inArgLoggerStr</span><span class="o">=</span><span class="n">inArgLoggerStr</span><span class="p">)]</span>
<span class="n">lJSStr</span> <span class="o">=</span> <span class="n">JSActivityListExecute</span><span class="p">(</span><span class="n">lActivityList</span><span class="p">)</span>
<span class="n">lHTMLStr</span> <span class="o">=</span> <span class="n">HTMLLinkJSOnClick</span><span class="p">(</span><span class="n">inJSOnClickStr</span><span class="o">=</span><span class="n">lJSStr</span><span class="p">,</span><span class="n">inTitleStr</span><span class="o">=</span><span class="n">inLinkTitleStr</span><span class="p">,</span> <span class="n">inColorStr</span><span class="o">=</span><span class="n">inLinkColorStr</span><span class="p">)</span>
<span class="k">return</span> <span class="n">lHTMLStr</span>
<span class="c1"># HTML Generator for the CP up to v.1.2.0</span>
<span class="k">def</span> <span class="nf">HTMLControlPanelBC</span><span class="p">(</span><span class="n">inCPDict</span><span class="p">):</span>
<span class="c1"># FooterButtonX2List generation</span>
<span class="n">lFooterButtonX2Str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="k">for</span> <span class="n">lItem</span> <span class="ow">in</span> <span class="n">inCPDict</span><span class="p">[</span><span class="s2">&quot;FooterButtonX2List&quot;</span><span class="p">]:</span>
<span class="n">lFooterButtonX2Str</span><span class="o">+=</span><span class="sa">f</span><span class="s1">&#39;&lt;div class=&quot;ui basic </span><span class="si">{</span><span class="n">lItem</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;Color&quot;</span><span class="p">,</span><span class="s2">&quot;&quot;</span><span class="p">)</span><span class="si">}</span><span class="s1"> button&quot; onclick=&quot;</span><span class="si">{</span><span class="n">JSEscapeForHTMLInline</span><span class="p">(</span><span class="n">lItem</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;OnClick&quot;</span><span class="p">,</span><span class="s2">&quot;&quot;</span><span class="p">))</span><span class="si">}</span><span class="s1">&quot;&gt;</span><span class="si">{</span><span class="n">lItem</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;Text&quot;</span><span class="p">,</span><span class="s2">&quot;&quot;</span><span class="p">)</span><span class="si">}</span><span class="s1">&lt;/div&gt;&#39;</span>
<span class="c1"># FooterButtonX1List generation</span>
<span class="n">lFooterButtonX1Str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="k">for</span> <span class="n">lItem</span> <span class="ow">in</span> <span class="n">inCPDict</span><span class="p">[</span><span class="s2">&quot;FooterButtonX1List&quot;</span><span class="p">]:</span>
<span class="n">lFooterButtonX1Str</span><span class="o">+=</span><span class="sa">f</span><span class="s1">&#39;&lt;div class=&quot;ui basic </span><span class="si">{</span><span class="n">lItem</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;Color&quot;</span><span class="p">,</span><span class="s2">&quot;&quot;</span><span class="p">)</span><span class="si">}</span><span class="s1"> button&quot; onclick=&quot;</span><span class="si">{</span><span class="n">JSEscapeForHTMLInline</span><span class="p">(</span><span class="n">lItem</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;OnClick&quot;</span><span class="p">,</span><span class="s2">&quot;&quot;</span><span class="p">))</span><span class="si">}</span><span class="s1">&quot;&gt;</span><span class="si">{</span><span class="n">lItem</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;Text&quot;</span><span class="p">,</span><span class="s2">&quot;&quot;</span><span class="p">)</span><span class="si">}</span><span class="s1">&lt;/div&gt;&#39;</span>
<span class="c1"># BodyKeyValue generation</span>
<span class="n">lBodyKeyValueStr</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="k">for</span> <span class="n">lItem</span> <span class="ow">in</span> <span class="n">inCPDict</span><span class="p">[</span><span class="s2">&quot;BodyKeyValueList&quot;</span><span class="p">]:</span>
<span class="n">lBodyKeyValueStr</span><span class="o">+=</span><span class="sa">f</span><span class="s2">&quot;&lt;li&gt;</span><span class="si">{</span><span class="n">lItem</span><span class="p">[</span><span class="s1">&#39;Key&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">lItem</span><span class="p">[</span><span class="s1">&#39;Value&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&lt;/li&gt;&quot;</span>
<span class="c1"># Generate consolidated string</span>
<span class="n">lResultHTMLStr</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;</span>
<span class="s2"> &lt;div class=&quot;card&quot;&gt;</span>
<span class="s2"> &lt;div class=&quot;content&quot;&gt;</span>
<span class="s2"> &lt;div class=&quot;right floated mini ui &quot;&gt;</span>
<span class="s2"> </span><span class="si">{</span><span class="n">inCPDict</span><span class="p">[</span><span class="s1">&#39;HeaderRightText&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2"></span>
<span class="s2"> &lt;/div&gt;</span>
<span class="s2"> &lt;div class=&quot;header&quot;&gt;</span>
<span class="s2"> </span><span class="si">{</span><span class="n">inCPDict</span><span class="p">[</span><span class="s1">&#39;HeaderLeftText&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2"></span>
<span class="s2"> &lt;/div&gt;</span>
<span class="s2"> &lt;div class=&quot;meta&quot;&gt;</span>
<span class="s2"> </span><span class="si">{</span><span class="n">inCPDict</span><span class="p">[</span><span class="s1">&#39;SubheaderText&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2"></span>
<span class="s2"> &lt;/div&gt;</span>
<span class="s2"> &lt;div class=&quot;description&quot;&gt;</span>
<span class="s2"> &lt;ul style=&quot;padding-inline-start:16px;margin:0px&quot;&gt;</span>
<span class="s2"> </span><span class="si">{</span><span class="n">lBodyKeyValueStr</span><span class="si">}</span><span class="s2"></span>
<span class="s2"> &lt;/ul&gt;</span>
<span class="s2"> &lt;/div&gt;</span>
<span class="s2"> &lt;/div&gt;</span>
<span class="s2"> &lt;div class=&quot;extra content&quot;&gt;</span>
<span class="s2"> </span><span class="si">{</span><span class="n">inCPDict</span><span class="p">[</span><span class="s1">&#39;FooterText&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2"></span>
<span class="s2"> &lt;/div&gt;</span>
<span class="s2"> &lt;div class=&quot;extra content&quot;&gt;</span>
<span class="s2"> &lt;div class=&quot;ui two buttons&quot;&gt;</span>
<span class="s2"> </span><span class="si">{</span><span class="n">lFooterButtonX2Str</span><span class="si">}</span><span class="s2"></span>
<span class="s2"> &lt;/div&gt;</span>
<span class="s2"> &lt;div class=&quot;ui horizontal divider&quot;&gt;Add. controls&lt;/div&gt;</span>
<span class="s2"> &lt;div class=&quot;ui one buttons&quot;&gt;</span>
<span class="s2"> </span><span class="si">{</span><span class="n">lFooterButtonX1Str</span><span class="si">}</span><span class="s2"></span>
<span class="s2"> &lt;/div&gt;</span>
<span class="s2"> &lt;/div&gt;</span>
<span class="s2"> &lt;/div&gt;</span>
<span class="s2"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">lResultHTMLStr</span>
</pre></div>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>
&#169; Copyright 2021, Ivan Maslov.
</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

@ -180,6 +180,10 @@
<h1>Source code for pyOpenRPA.Orchestrator.__Orchestrator__</h1><div class="highlight"><pre> <h1>Source code for pyOpenRPA.Orchestrator.__Orchestrator__</h1><div class="highlight"><pre>
<span></span><span class="kn">import</span> <span class="nn">subprocess</span><span class="o">,</span> <span class="nn">json</span><span class="o">,</span> <span class="nn">psutil</span><span class="o">,</span> <span class="nn">time</span><span class="o">,</span> <span class="nn">os</span><span class="o">,</span> <span class="nn">win32security</span><span class="o">,</span> <span class="nn">sys</span><span class="o">,</span> <span class="nn">base64</span><span class="o">,</span> <span class="nn">logging</span><span class="o">,</span> <span class="nn">ctypes</span><span class="o">,</span> <span class="nn">copy</span> <span class="c1">#Get input argument</span> <span></span><span class="kn">import</span> <span class="nn">subprocess</span><span class="o">,</span> <span class="nn">json</span><span class="o">,</span> <span class="nn">psutil</span><span class="o">,</span> <span class="nn">time</span><span class="o">,</span> <span class="nn">os</span><span class="o">,</span> <span class="nn">win32security</span><span class="o">,</span> <span class="nn">sys</span><span class="o">,</span> <span class="nn">base64</span><span class="o">,</span> <span class="nn">logging</span><span class="o">,</span> <span class="nn">ctypes</span><span class="o">,</span> <span class="nn">copy</span> <span class="c1">#Get input argument</span>
<span class="kn">import</span> <span class="nn">pickle</span>
<span class="kn">from</span> <span class="nn">partd</span> <span class="kn">import</span> <span class="n">Server</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">Server</span> <span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">Server</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">Timer</span> <span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">Timer</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">Processor</span> <span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">Processor</span>
@ -504,21 +508,62 @@
<div class="viewcode-block" id="OrchestratorSessionSave"><a class="viewcode-back" href="../../../Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorSessionSave">[docs]</a><span class="k">def</span> <span class="nf">OrchestratorSessionSave</span><span class="p">(</span><span class="n">inGSettings</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> <div class="viewcode-block" id="OrchestratorSessionSave"><a class="viewcode-back" href="../../../Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorSessionSave">[docs]</a><span class="k">def</span> <span class="nf">OrchestratorSessionSave</span><span class="p">(</span><span class="n">inGSettings</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span> <span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Orchestrator session save in file _SessionLast_RDPList.json (encoding = &quot;utf-8&quot;)</span> <span class="sd"> Orchestrator session save in file</span>
<span class="sd"> _SessionLast_RDPList.json (encoding = &quot;utf-8&quot;)</span>
<span class="sd"> _SessionLast_StorageDict.pickle (binary)</span>
<span class="sd"> :param inGSettings: Global settings dict (singleton)</span> <span class="sd"> :param inGSettings: Global settings dict (singleton)</span>
<span class="sd"> :return: True every time</span> <span class="sd"> :return: True every time</span>
<span class="sd"> &quot;&quot;&quot;</span> <span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Dump RDP List in file json</span> <span class="n">lL</span> <span class="o">=</span> <span class="n">inGSettings</span><span class="p">[</span><span class="s2">&quot;Logger&quot;</span><span class="p">]</span>
<span class="n">lFile</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s2">&quot;_SessionLast_RDPList.json&quot;</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s2">&quot;utf-8&quot;</span><span class="p">)</span> <span class="k">try</span><span class="p">:</span>
<span class="n">lFile</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">inGSettings</span><span class="p">[</span><span class="s2">&quot;RobotRDPActive&quot;</span><span class="p">][</span><span class="s2">&quot;RDPList&quot;</span><span class="p">]))</span> <span class="c1"># dump json to file</span> <span class="c1"># Dump RDP List in file json</span>
<span class="n">lFile</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> <span class="c1"># Close the file</span> <span class="n">lFile</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s2">&quot;_SessionLast_RDPList.json&quot;</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s2">&quot;utf-8&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">inGSettings</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> <span class="n">lFile</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">inGSettings</span><span class="p">[</span><span class="s2">&quot;RobotRDPActive&quot;</span><span class="p">][</span><span class="s2">&quot;RDPList&quot;</span><span class="p">]))</span> <span class="c1"># dump json to file</span>
<span class="n">lL</span> <span class="o">=</span> <span class="n">inGSettings</span><span class="p">[</span><span class="s2">&quot;Logger&quot;</span><span class="p">]</span> <span class="n">lFile</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> <span class="c1"># Close the file</span>
<span class="k">if</span> <span class="n">lL</span><span class="p">:</span> <span class="n">lL</span><span class="o">.</span><span class="n">info</span><span class="p">(</span> <span class="k">if</span> <span class="n">inGSettings</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="sa">f</span><span class="s2">&quot;Orchestrator has dump the RDP list before the restart.&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">lL</span><span class="p">:</span> <span class="n">lL</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Orchestrator has dump the RDP list before the restart.&quot;</span><span class="p">)</span>
<span class="c1"># _SessionLast_StorageDict.pickle (binary)</span>
<span class="k">if</span> <span class="s2">&quot;StorageDict&quot;</span> <span class="ow">in</span> <span class="n">inGSettings</span><span class="p">:</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;_SessionLast_StorageDict.pickle&#39;</span><span class="p">,</span> <span class="s1">&#39;wb&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">lFile</span><span class="p">:</span>
<span class="n">pickle</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">inGSettings</span><span class="p">[</span><span class="s2">&quot;StorageDict&quot;</span><span class="p">],</span> <span class="n">lFile</span><span class="p">)</span>
<span class="k">if</span> <span class="n">lL</span><span class="p">:</span> <span class="n">lL</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Orchestrator has dump the StorageDict before the restart.&quot;</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">lL</span><span class="p">:</span> <span class="n">lL</span><span class="o">.</span><span class="n">exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Exception when dump data before restart the Orchestrator&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="kc">True</span></div> <span class="k">return</span> <span class="kc">True</span></div>
<div class="viewcode-block" id="OrchestratorSessionRestore"><a class="viewcode-back" href="../../../Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorSessionRestore">[docs]</a><span class="k">def</span> <span class="nf">OrchestratorSessionRestore</span><span class="p">(</span><span class="n">inGSettings</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Check _SessionLast_RDPList.json and _SessionLast_StorageDict.pickle in working directory. if exist - load into gsettings</span>
<span class="sd"> # _SessionLast_StorageDict.pickle (binary)</span>
<span class="sd"> _SessionLast_RDPList.json (encoding = &quot;utf-8&quot;)</span>
<span class="sd"> _SessionLast_StorageDict.pickle (binary)</span>
<span class="sd"> :param inGSettings: Global settings dict (singleton)</span>
<span class="sd"> :return:</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">lL</span> <span class="o">=</span> <span class="n">inGSettings</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;Logger&quot;</span><span class="p">,</span><span class="kc">None</span><span class="p">)</span>
<span class="c1"># _SessionLast_RDPList.json (encoding = &quot;utf-8&quot;)</span>
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="s2">&quot;_SessionLast_RDPList.json&quot;</span><span class="p">):</span>
<span class="n">lFile</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s2">&quot;_SessionLast_RDPList.json&quot;</span><span class="p">,</span> <span class="s2">&quot;r&quot;</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s2">&quot;utf-8&quot;</span><span class="p">)</span>
<span class="n">lSessionLastRDPList</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">lFile</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>
<span class="n">lFile</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> <span class="c1"># Close the file</span>
<span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="s2">&quot;_SessionLast_RDPList.json&quot;</span><span class="p">)</span> <span class="c1"># remove the temp file</span>
<span class="n">gSettingsDict</span><span class="p">[</span><span class="s2">&quot;RobotRDPActive&quot;</span><span class="p">][</span><span class="s2">&quot;RDPList&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">lSessionLastRDPList</span> <span class="c1"># Set the last session dict</span>
<span class="k">if</span> <span class="n">lL</span><span class="p">:</span> <span class="n">lL</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;RDP Session List was restored from previous Orchestrator session&quot;</span><span class="p">)</span>
<span class="c1"># _SessionLast_StorageDict.pickle (binary)</span>
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="s2">&quot;_SessionLast_StorageDict.pickle&quot;</span><span class="p">):</span>
<span class="k">if</span> <span class="s2">&quot;StorageDict&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">inGSettings</span><span class="p">:</span>
<span class="n">inGSettings</span><span class="p">[</span><span class="s2">&quot;StorageDict&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;_SessionLast_StorageDict.pickle&#39;</span><span class="p">,</span> <span class="s1">&#39;rb&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">lFile</span><span class="p">:</span>
<span class="n">lStorageDictDumpDict</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">lFile</span><span class="p">)</span>
<span class="n">Server</span><span class="o">.</span><span class="n">__ComplexDictMerge2to1Overwrite__</span><span class="p">(</span><span class="n">in1Dict</span><span class="o">=</span><span class="n">inGSettings</span><span class="p">[</span><span class="s2">&quot;StorageDict&quot;</span><span class="p">],</span>
<span class="n">in2Dict</span><span class="o">=</span><span class="n">lStorageDictDumpDict</span><span class="p">)</span> <span class="c1"># Merge dict 2 into dict 1</span>
<span class="k">if</span> <span class="n">lL</span><span class="p">:</span> <span class="n">lL</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;StorageDict was restored from previous Orchestrator session&quot;</span><span class="p">)</span>
<span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="s2">&quot;_SessionLast_StorageDict.pickle&quot;</span><span class="p">)</span> <span class="c1"># remove the temp file</span></div>
<div class="viewcode-block" id="UACKeyListCheck"><a class="viewcode-back" href="../../../Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.UACKeyListCheck">[docs]</a><span class="k">def</span> <span class="nf">UACKeyListCheck</span><span class="p">(</span><span class="n">inRequest</span><span class="p">,</span> <span class="n">inRoleKeyList</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span> <div class="viewcode-block" id="UACKeyListCheck"><a class="viewcode-back" href="../../../Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.UACKeyListCheck">[docs]</a><span class="k">def</span> <span class="nf">UACKeyListCheck</span><span class="p">(</span><span class="n">inRequest</span><span class="p">,</span> <span class="n">inRoleKeyList</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
<span class="sd">&quot;&quot;&quot;</span> <span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Check is client is has access for the key list</span> <span class="sd"> Check is client is has access for the key list</span>
@ -2014,7 +2059,7 @@
<span class="kn">from</span> <span class="nn">..</span> <span class="kn">import</span> <span class="n">__version__</span> <span class="c1"># Get version from the package</span> <span class="kn">from</span> <span class="nn">..</span> <span class="kn">import</span> <span class="n">__version__</span> <span class="c1"># Get version from the package</span>
<span class="k">def</span> <span class="nf">Orchestrator</span><span class="p">(</span><span class="n">inGSettings</span><span class="p">):</span> <span class="k">def</span> <span class="nf">Orchestrator</span><span class="p">(</span><span class="n">inGSettings</span><span class="p">,</span> <span class="n">inDumpRestoreBool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">):</span>
<span class="n">lL</span> <span class="o">=</span> <span class="n">inGSettings</span><span class="p">[</span><span class="s2">&quot;Logger&quot;</span><span class="p">]</span> <span class="n">lL</span> <span class="o">=</span> <span class="n">inGSettings</span><span class="p">[</span><span class="s2">&quot;Logger&quot;</span><span class="p">]</span>
<span class="c1"># https://stackoverflow.com/questions/130763/request-uac-elevation-from-within-a-python-script</span> <span class="c1"># https://stackoverflow.com/questions/130763/request-uac-elevation-from-within-a-python-script</span>
<span class="k">def</span> <span class="nf">is_admin</span><span class="p">():</span> <span class="k">def</span> <span class="nf">is_admin</span><span class="p">():</span>
@ -2041,17 +2086,9 @@
<span class="n">Server</span><span class="o">.</span><span class="n">gSettingsDict</span> <span class="o">=</span> <span class="n">gSettingsDict</span> <span class="n">Server</span><span class="o">.</span><span class="n">gSettingsDict</span> <span class="o">=</span> <span class="n">gSettingsDict</span>
<span class="n">Server</span><span class="o">.</span><span class="n">ProcessorOld</span><span class="o">.</span><span class="n">gSettingsDict</span> <span class="o">=</span> <span class="n">gSettingsDict</span> <span class="c1"># Backward compatibility</span> <span class="n">Server</span><span class="o">.</span><span class="n">ProcessorOld</span><span class="o">.</span><span class="n">gSettingsDict</span> <span class="o">=</span> <span class="n">gSettingsDict</span> <span class="c1"># Backward compatibility</span>
<span class="c1"># Check _SessionLast_RDPList.json in working directory. if exist - load into gsettings</span> <span class="c1">#Backward compatibility - restore in Orc def if old def</span>
<span class="c1"># GSettings</span> <span class="k">if</span> <span class="n">inDumpRestoreBool</span> <span class="o">==</span> <span class="kc">True</span><span class="p">:</span>
<span class="c1">#&quot;RobotRDPActive&quot;: {</span> <span class="n">OrchestratorSessionRestore</span><span class="p">(</span><span class="n">inGSettings</span><span class="o">=</span><span class="n">inGSettings</span><span class="p">)</span>
<span class="c1"># &quot;RDPList&quot;: {</span>
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="s2">&quot;_SessionLast_RDPList.json&quot;</span><span class="p">):</span>
<span class="n">lFile</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s2">&quot;_SessionLast_RDPList.json&quot;</span><span class="p">,</span> <span class="s2">&quot;r&quot;</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s2">&quot;utf-8&quot;</span><span class="p">)</span>
<span class="n">lSessionLastRDPList</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">lFile</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>
<span class="n">lFile</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> <span class="c1"># Close the file</span>
<span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="s2">&quot;_SessionLast_RDPList.json&quot;</span><span class="p">)</span> <span class="c1"># remove the temp file</span>
<span class="n">gSettingsDict</span><span class="p">[</span><span class="s2">&quot;RobotRDPActive&quot;</span><span class="p">][</span><span class="s2">&quot;RDPList&quot;</span><span class="p">]</span><span class="o">=</span><span class="n">lSessionLastRDPList</span> <span class="c1"># Set the last session dict</span>
<span class="k">if</span> <span class="n">lL</span><span class="p">:</span> <span class="n">lL</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;RDP Session List was restored from previous Orchestrator session&quot;</span><span class="p">)</span>
<span class="c1"># Init SettingsUpdate defs from file list (after RDP restore)</span> <span class="c1"># Init SettingsUpdate defs from file list (after RDP restore)</span>
<span class="n">lSettingsUpdateFilePathList</span> <span class="o">=</span> <span class="n">gSettingsDict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;OrchestratorStart&quot;</span><span class="p">,</span> <span class="p">{})</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;DefSettingsUpdatePathList&quot;</span><span class="p">,[])</span> <span class="n">lSettingsUpdateFilePathList</span> <span class="o">=</span> <span class="n">gSettingsDict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;OrchestratorStart&quot;</span><span class="p">,</span> <span class="p">{})</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;DefSettingsUpdatePathList&quot;</span><span class="p">,[])</span>

@ -64,6 +64,16 @@ Work with activity scheduling.
:autosummary: :autosummary:
**************************************************
pyOpenRPA.Orchestrator.Web.Basic
**************************************************
.. automodule:: pyOpenRPA.Orchestrator.Web.Basic
:members:
:autosummary:
********** **********
References References
********** **********

@ -184,6 +184,7 @@
<div class="genindex-jumpbox"> <div class="genindex-jumpbox">
<a href="#A"><strong>A</strong></a> <a href="#A"><strong>A</strong></a>
| <a href="#G"><strong>G</strong></a> | <a href="#G"><strong>G</strong></a>
| <a href="#J"><strong>J</strong></a>
| <a href="#M"><strong>M</strong></a> | <a href="#M"><strong>M</strong></a>
| <a href="#O"><strong>O</strong></a> | <a href="#O"><strong>O</strong></a>
| <a href="#P"><strong>P</strong></a> | <a href="#P"><strong>P</strong></a>
@ -241,6 +242,18 @@
</ul></td> </ul></td>
</tr></table> </tr></table>
<h2 id="J">J</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.Web.Basic.JSActivityListExecute">JSActivityListExecute() (in module pyOpenRPA.Orchestrator.Web.Basic)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.Web.Basic.JSProcessorActivityListAdd">JSProcessorActivityListAdd() (in module pyOpenRPA.Orchestrator.Web.Basic)</a>
</li>
</ul></td>
</tr></table>
<h2 id="M">M</h2> <h2 id="M">M</h2>
<table style="width: 100%" class="indextable genindextable"><tr> <table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul> <td style="width: 33%; vertical-align: top;"><ul>
@ -251,6 +264,8 @@
<li><a href="Agent/02_Defs.html#module-pyOpenRPA.Agent.__Agent__">pyOpenRPA.Agent.__Agent__</a> <li><a href="Agent/02_Defs.html#module-pyOpenRPA.Agent.__Agent__">pyOpenRPA.Agent.__Agent__</a>
</li> </li>
<li><a href="Orchestrator/02_Defs.html#module-pyOpenRPA.Orchestrator.__Orchestrator__">pyOpenRPA.Orchestrator.__Orchestrator__</a> <li><a href="Orchestrator/02_Defs.html#module-pyOpenRPA.Orchestrator.__Orchestrator__">pyOpenRPA.Orchestrator.__Orchestrator__</a>
</li>
<li><a href="Orchestrator/02_Defs.html#module-pyOpenRPA.Orchestrator.Web.Basic">pyOpenRPA.Orchestrator.Web.Basic</a>
</li> </li>
<li><a href="Robot/02_Defs.html#module-pyOpenRPA.Robot.UIDesktop">pyOpenRPA.Robot.UIDesktop</a> <li><a href="Robot/02_Defs.html#module-pyOpenRPA.Robot.UIDesktop">pyOpenRPA.Robot.UIDesktop</a>
</li> </li>
@ -262,6 +277,8 @@
<table style="width: 100%" class="indextable genindextable"><tr> <table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul> <td style="width: 33%; vertical-align: top;"><ul>
<li><a href="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorRestart">OrchestratorRestart() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a> <li><a href="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorRestart">OrchestratorRestart() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
<li><a href="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorSessionRestore">OrchestratorSessionRestore() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li> </li>
<li><a href="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorSessionSave">OrchestratorSessionSave() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a> <li><a href="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorSessionSave">OrchestratorSessionSave() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li> </li>
@ -307,10 +324,10 @@
</li> </li>
<li><a href="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessStop">ProcessStop() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a> <li><a href="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessStop">ProcessStop() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li> </li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="Agent/02_Defs.html#pyOpenRPA.Agent.__Agent__.ProcessWOExeUpperUserListGet">ProcessWOExeUpperUserListGet() (in module pyOpenRPA.Agent.__Agent__)</a> <li><a href="Agent/02_Defs.html#pyOpenRPA.Agent.__Agent__.ProcessWOExeUpperUserListGet">ProcessWOExeUpperUserListGet() (in module pyOpenRPA.Agent.__Agent__)</a>
</li> </li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="Robot/02_Defs.html#pyOpenRPA.Robot.UIDesktop.PWASpecification_Get_PWAApplication">PWASpecification_Get_PWAApplication() (in module pyOpenRPA.Robot.UIDesktop)</a> <li><a href="Robot/02_Defs.html#pyOpenRPA.Robot.UIDesktop.PWASpecification_Get_PWAApplication">PWASpecification_Get_PWAApplication() (in module pyOpenRPA.Robot.UIDesktop)</a>
</li> </li>
<li><a href="Robot/02_Defs.html#pyOpenRPA.Robot.UIDesktop.PWASpecification_Get_UIO">PWASpecification_Get_UIO() (in module pyOpenRPA.Robot.UIDesktop)</a> <li><a href="Robot/02_Defs.html#pyOpenRPA.Robot.UIDesktop.PWASpecification_Get_UIO">PWASpecification_Get_UIO() (in module pyOpenRPA.Robot.UIDesktop)</a>
@ -327,6 +344,13 @@
<ul> <ul>
<li><a href="Orchestrator/02_Defs.html#module-pyOpenRPA.Orchestrator.__Orchestrator__">module</a> <li><a href="Orchestrator/02_Defs.html#module-pyOpenRPA.Orchestrator.__Orchestrator__">module</a>
</li>
</ul></li>
<li>
pyOpenRPA.Orchestrator.Web.Basic
<ul>
<li><a href="Orchestrator/02_Defs.html#module-pyOpenRPA.Orchestrator.Web.Basic">module</a>
</li> </li>
</ul></li> </ul></li>
<li> <li>

@ -363,6 +363,7 @@ At the time of this writing the pyOpenRPA is successfully using in several big R
<li class="toctree-l3"><a class="reference internal" href="Orchestrator/02_Defs.html#group-scheduler">Group Scheduler…</a></li> <li class="toctree-l3"><a class="reference internal" href="Orchestrator/02_Defs.html#group-scheduler">Group Scheduler…</a></li>
</ul> </ul>
</li> </li>
<li class="toctree-l2"><a class="reference internal" href="Orchestrator/02_Defs.html#module-pyOpenRPA.Orchestrator.Web.Basic">pyOpenRPA.Orchestrator.Web.Basic</a></li>
<li class="toctree-l2"><a class="reference internal" href="Orchestrator/02_Defs.html#references">References</a></li> <li class="toctree-l2"><a class="reference internal" href="Orchestrator/02_Defs.html#references">References</a></li>
</ul> </ul>
</li> </li>

Binary file not shown.

@ -206,6 +206,11 @@
<td>&#160;&#160;&#160; <td>&#160;&#160;&#160;
<a href="Orchestrator/02_Defs.html#module-pyOpenRPA.Orchestrator.__Orchestrator__"><code class="xref">pyOpenRPA.Orchestrator.__Orchestrator__</code></a></td><td> <a href="Orchestrator/02_Defs.html#module-pyOpenRPA.Orchestrator.__Orchestrator__"><code class="xref">pyOpenRPA.Orchestrator.__Orchestrator__</code></a></td><td>
<em></em></td></tr> <em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="Orchestrator/02_Defs.html#module-pyOpenRPA.Orchestrator.Web.Basic"><code class="xref">pyOpenRPA.Orchestrator.Web.Basic</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1"> <tr class="cg-1">
<td></td> <td></td>
<td>&#160;&#160;&#160; <td>&#160;&#160;&#160;

File diff suppressed because one or more lines are too long

@ -144,186 +144,191 @@ Work with activity scheduling.
| Orchestrator restart | Orchestrator restart
| |
| `OrchestratorSessionRestore`([inGSettings])
| Check _SessionLast_RDPList.json and _SessionLast_StorageDict.pickle in working directory. if exist - load into gsettings # _SessionLast_StorageDict.pickle (binary) _SessionLast_RDPList.json (encoding = “utf-8”) _SessionLast_StorageDict.pickle (binary).
|
| `OrchestratorSessionSave`([inGSettings]) | `OrchestratorSessionSave`([inGSettings])
| Orchestrator session save in file _SessionLast_RDPList.json (encoding = “utf-8”) | Orchestrator session save in file
| |
| `ProcessDefIntervalCall`(inGSettings, inDef, …) | `ProcessDefIntervalCall`(inGSettings, inDef, …)
| Use this procedure if you need to run periodically some def. | Use this procedure if you need to run periodically some def.
| |
| `ProcessIsStarted`(inProcessNameWOExeStr) | `ProcessIsStarted`(inProcessNameWOExeStr)
| Check if there is any running process that contains the given name processName. | Check if there is any running process that contains the given name processName.
| |
| `ProcessListGet`([inProcessNameWOExeList]) | `ProcessListGet`([inProcessNameWOExeList])
| Return process list on the orchestrator machine sorted by Memory Usage. | Return process list on the orchestrator machine sorted by Memory Usage.
| |
| `ProcessStart`(inPathStr, inArgList[, …]) | `ProcessStart`(inPathStr, inArgList[, …])
| Start process locally. | Start process locally.
| |
| `ProcessStop`(inProcessNameWOExeStr, …[, …]) | `ProcessStop`(inProcessNameWOExeStr, …[, …])
| Stop process on the orchestrator machine. | Stop process on the orchestrator machine.
| |
| `ProcessorActivityItemAppend`(inGSettings[, …]) | `ProcessorActivityItemAppend`(inGSettings[, …])
| Create and add activity item in processor queue. | Create and add activity item in processor queue.
| |
| `ProcessorActivityItemCreate`(inDef[, …]) | `ProcessorActivityItemCreate`(inDef[, …])
| Create activity item. | Create activity item.
| |
| `ProcessorAliasDefCreate`(inGSettings, inDef) | `ProcessorAliasDefCreate`(inGSettings, inDef)
| Create alias for def (can be used in ActivityItem in field Def) !WHEN DEF ALIAS IS REQUIRED! - Def alias is required when you try to call Python def from the Orchestrator WEB side (because you cant transmit Python def object out of the Python environment) | Create alias for def (can be used in ActivityItem in field Def) !WHEN DEF ALIAS IS REQUIRED! - Def alias is required when you try to call Python def from the Orchestrator WEB side (because you cant transmit Python def object out of the Python environment)
| |
| `ProcessorAliasDefUpdate`(inGSettings, inDef, …) | `ProcessorAliasDefUpdate`(inGSettings, inDef, …)
| Update alias for def (can be used in ActivityItem in field Def). | Update alias for def (can be used in ActivityItem in field Def).
| |
| `PythonStart`(inModulePathStr, inDefNameStr[, …]) | `PythonStart`(inModulePathStr, inDefNameStr[, …])
| Import module and run def in the Orchestrator process. | Import module and run def in the Orchestrator process.
| |
| `RDPSessionCMDRun`(inGSettings, …[, inModeStr]) | `RDPSessionCMDRun`(inGSettings, …[, inModeStr])
| Send CMD command to the RDP session “RUN” window | Send CMD command to the RDP session “RUN” window
| |
| `RDPSessionConnect`(inGSettings, …[, …]) | `RDPSessionConnect`(inGSettings, …[, …])
| Create new RDPSession in RobotRDPActive. Attention - activity will be ignored if RDP key is already exists | Create new RDPSession in RobotRDPActive. Attention - activity will be ignored if RDP key is already exists
| |
| `RDPSessionDisconnect`(inGSettings, …[, …]) | `RDPSessionDisconnect`(inGSettings, …[, …])
| Disconnect the RDP session and stop monitoring it. | Disconnect the RDP session and stop monitoring it.
| |
| `RDPSessionDublicatesResolve`(inGSettings) | `RDPSessionDublicatesResolve`(inGSettings)
| DEVELOPING Search duplicates in GSettings RDPlist !def is developing! | DEVELOPING Search duplicates in GSettings RDPlist !def is developing!
| |
| `RDPSessionFileStoredRecieve`(inGSettings, …) | `RDPSessionFileStoredRecieve`(inGSettings, …)
| Recieve file from RDP session to the Orchestrator session using shared drive in RDP (see RDP Configuration Dict, Shared drive) | Recieve file from RDP session to the Orchestrator session using shared drive in RDP (see RDP Configuration Dict, Shared drive)
| |
| `RDPSessionFileStoredSend`(inGSettings, …) | `RDPSessionFileStoredSend`(inGSettings, …)
| Send file from Orchestrator session to the RDP session using shared drive in RDP (see RDP Configuration Dict, Shared drive) | Send file from Orchestrator session to the RDP session using shared drive in RDP (see RDP Configuration Dict, Shared drive)
| |
| `RDPSessionLogoff`(inGSettings, inRDPSessionKeyStr) | `RDPSessionLogoff`(inGSettings, inRDPSessionKeyStr)
| Logoff the RDP session from the Orchestrator process (close all apps in session when logoff) | Logoff the RDP session from the Orchestrator process (close all apps in session when logoff)
| |
| `RDPSessionMonitorStop`(inGSettings, …) | `RDPSessionMonitorStop`(inGSettings, …)
| Stop monitoring the RDP session by the Orchestrator process. | Stop monitoring the RDP session by the Orchestrator process.
| |
| `RDPSessionProcessStartIfNotRunning`(…[, …]) | `RDPSessionProcessStartIfNotRunning`(…[, …])
| Start process in RDP if it is not running (check by the arg inProcessNameWEXEStr) | Start process in RDP if it is not running (check by the arg inProcessNameWEXEStr)
| |
| `RDPSessionProcessStop`(inGSettings, …) | `RDPSessionProcessStop`(inGSettings, …)
| Send CMD command to the RDP session “RUN” window. | Send CMD command to the RDP session “RUN” window.
| |
| `RDPSessionReconnect`(inGSettings, …[, …]) | `RDPSessionReconnect`(inGSettings, …[, …])
| Reconnect the RDP session | Reconnect the RDP session
| |
| `RDPSessionResponsibilityCheck`(inGSettings, …) | `RDPSessionResponsibilityCheck`(inGSettings, …)
| DEVELOPING, MAYBE NOT USEFUL Check RDP Session responsibility TODO NEED DEV + TEST | DEVELOPING, MAYBE NOT USEFUL Check RDP Session responsibility TODO NEED DEV + TEST
| |
| `RDPTemplateCreate`(inLoginStr, inPasswordStr) | `RDPTemplateCreate`(inLoginStr, inPasswordStr)
| Create RDP connect dict item/ Use it connect/reconnect (Orchestrator.RDPSessionConnect) | Create RDP connect dict item/ Use it connect/reconnect (Orchestrator.RDPSessionConnect)
| |
| `SchedulerActivityTimeAddWeekly`(inGSettings) | `SchedulerActivityTimeAddWeekly`(inGSettings)
| Add activity item list in scheduler. | Add activity item list in scheduler.
| |
| `UACKeyListCheck`(inRequest, inRoleKeyList) | `UACKeyListCheck`(inRequest, inRoleKeyList)
| Check is client is has access for the key list | Check is client is has access for the key list
| |
| `UACSuperTokenUpdate`(inGSettings, inSuperTokenStr) | `UACSuperTokenUpdate`(inGSettings, inSuperTokenStr)
| Add supertoken for the all access (it is need for the robot communication without human) | Add supertoken for the all access (it is need for the robot communication without human)
| |
| `UACUpdate`(inGSettings, inADLoginStr[, …]) | `UACUpdate`(inGSettings, inADLoginStr[, …])
| Update user access (UAC) | Update user access (UAC)
| |
| `UACUserDictGet`(inRequest) | `UACUserDictGet`(inRequest)
| Return user UAC hierarchy dict of the inRequest object. | Return user UAC hierarchy dict of the inRequest object.
| |
| `WebCPUpdate`(inGSettings, inCPKeyStr[, …]) | `WebCPUpdate`(inGSettings, inCPKeyStr[, …])
| Add control panel HTML, JSON generator or JS when page init | Add control panel HTML, JSON generator or JS when page init
| |
| `WebURLConnectDef`(inGSettings, inMethodStr, …) | `WebURLConnectDef`(inGSettings, inMethodStr, …)
| Connect URL to DEF | Connect URL to DEF
| |
| `WebURLConnectFile`(inGSettings, inMethodStr, …) | `WebURLConnectFile`(inGSettings, inMethodStr, …)
| Connect URL to File | Connect URL to File
| |
| `WebURLConnectFolder`(inGSettings, …) | `WebURLConnectFolder`(inGSettings, …)
| Connect URL to Folder | Connect URL to Folder
| |
| `WebUserInfoGet`(inRequest) | `WebUserInfoGet`(inRequest)
| Return User info about request | Return User info about request
| |
| `WebUserIsSuperToken`(inRequest, inGSettings) | `WebUserIsSuperToken`(inRequest, inGSettings)
| Return bool if request is authentificated with supetoken (token which is never expires) | Return bool if request is authentificated with supetoken (token which is never expires)
| |
| `WebUserUACHierarchyGet`(inRequest) | `WebUserUACHierarchyGet`(inRequest)
| Return User UAC Hierarchy DICT Return {…} | Return User UAC Hierarchy DICT Return {…}
| |
### pyOpenRPA.Orchestrator.__Orchestrator__.AgentActivityItemAdd(inGSettings, inHostNameStr, inUserStr, inActivityItemDict) ### pyOpenRPA.Orchestrator.__Orchestrator__.AgentActivityItemAdd(inGSettings, inHostNameStr, inUserStr, inActivityItemDict)
Add activity in AgentDict. Check if item is created Add activity in AgentDict. Check if item is created
@ -799,8 +804,30 @@ Orchestrator restart
### pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorSessionRestore(inGSettings=None)
Check _SessionLast_RDPList.json and _SessionLast_StorageDict.pickle in working directory. if exist - load into gsettings
# _SessionLast_StorageDict.pickle (binary)
> _SessionLast_RDPList.json (encoding = “utf-8”)
> _SessionLast_StorageDict.pickle (binary)
* **Parameters**
**inGSettings** Global settings dict (singleton)
* **Returns**
### pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorSessionSave(inGSettings=None) ### pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorSessionSave(inGSettings=None)
Orchestrator session save in file _SessionLast_RDPList.json (encoding = “utf-8”) Orchestrator session save in file
_SessionLast_RDPList.json (encoding = “utf-8”)
_SessionLast_StorageDict.pickle (binary)
* **Parameters** * **Parameters**
@ -2059,6 +2086,62 @@ Return User UAC Hierarchy DICT Return {…}
UAC Dict {} UAC Dict {}
## pyOpenRPA.Orchestrator.Web.Basic
**Functions:**
| `JSActivityListExecute`(inActivityList[, …])
| Create JS for execute activity list/ activity permanent
|
| `JSProcessorActivityListAdd`(inActivityList[, …])
| # Create JS for send activity list/ activity to the processor
|
### pyOpenRPA.Orchestrator.Web.Basic.JSActivityListExecute(inActivityList, inGUIDRemoveBool=True)
> Create JS for execute activity list/ activity permanent
> USAGE: Orchestrator.Web.Basic.JSActivityListExecute(inActivityList, inGUIDRemoveBool = True)
* **Parameters**
* **inActivityList** List of the activities (See __Orchestrator__.ProcessorActivityItemCreate)
* **inGUIDRemoveBool** True - remove GUID before generate JS (if GUID is not important)
* **Returns**
JavaScript string for the front end
### pyOpenRPA.Orchestrator.Web.Basic.JSProcessorActivityListAdd(inActivityList, inGUIDRemoveBool=True)
> # Create JS for send activity list/ activity to the processor
> # USAGE: Orchestrator.Web.Basic.JSProcessorActivityListAdd(inActivityList)
* **Parameters**
* **inActivityList** List of the activities (See __Orchestrator__.ProcessorActivityItemCreate)
* **inGUIDRemoveBool** True - remove GUID before generate JS (if GUID is not important)
* **Returns**
JavaScript string for the front end
## References ## References
[reStructuredText](http://docutils.sourceforge.net/rst.html) [reStructuredText](http://docutils.sourceforge.net/rst.html)

@ -20,7 +20,7 @@ def __Create__():
"LifetimeSecFloat": 600.0, "LifetimeSecFloat": 600.0,
# Client Session lifetime in seconds. after this time server will forget about this client session # Client Session lifetime in seconds. after this time server will forget about this client session
"LifetimeRequestSecFloat": 120.0, # 1 client request lifetime in server in seconds "LifetimeRequestSecFloat": 120.0, # 1 client request lifetime in server in seconds
"ControlPanelRefreshIntervalSecFloat": 1.5, # Interval to refresh control panels for session, "ControlPanelRefreshIntervalSecFloat": 2.0, # Interval to refresh control panels for session,
"TechnicalSessionGUIDCache": { # TEchnical cache. Fills when web browser is requesting "TechnicalSessionGUIDCache": { # TEchnical cache. Fills when web browser is requesting
# "SessionGUIDStr":{ # Session with some GUID str. On client session guid stored in cookie "SessionGUIDStr" # "SessionGUIDStr":{ # Session with some GUID str. On client session guid stored in cookie "SessionGUIDStr"
# "InitDatetime": None, # Datetime when session GUID was created # "InitDatetime": None, # Datetime when session GUID was created
@ -44,6 +44,9 @@ def __Create__():
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
}, },
"ServerDict": { "ServerDict": {
"AgentActivityLifetimeSecFloat": 1200.0, # Time in seconds to life for activity for the agent
"AgentConnectionLifetimeSecFloat": 300.0, # Time in seconds to handle the open connection to the Agent
"AgentLoopSleepSecFloat": 2.0, # Time in seconds to sleep between loops when check to send some activity to the agent
"WorkingDirectoryPathStr": None, # Will be filled automatically "WorkingDirectoryPathStr": None, # Will be filled automatically
"RequestTimeoutSecFloat": 300, # Time to handle request in seconds "RequestTimeoutSecFloat": 300, # Time to handle request in seconds
"ListenPort_": "Порт, по которому можно подключиться к демону", "ListenPort_": "Порт, по которому можно подключиться к демону",
@ -121,45 +124,7 @@ def __Create__():
"OrchestratorStart": { "OrchestratorStart": {
"DefSettingsUpdatePathList": [], "DefSettingsUpdatePathList": [],
# List of the .py files which should be loaded before init the algorythms # List of the .py files which should be loaded before init the algorythms
"ActivityList": [ "ActivityList": []
# {
# "Type": "ProcessStop", #Activity type
# "Name": "OpenRPARobotDaemon.exe", #Process name
# "FlagForce": True, #Force process close
# "User": "%username%" #Empty, user or %username%
# },
# {
# "Type": "ProcessStartIfTurnedOff", #Activity type
# "CheckTaskName": "notepad.exe", #Python function module name
# "Path": "notepad", #Python function name
# "ArgList": [] #Input python function args
# },
# {
# "Type": "RDPSessionConnect", #Activity type - start/connect RDP Session
# "RDPSessionKeyStr": "notepad.exe", #Python function module name
# "RDPConfigurationDict": {}
# },
# {
# "Type": "RDPSessionLogoff", #Activity type - logoff RDP Session
# "RDPSessionKeyStr": "notepad.exe", #Python function module name
# },
# {
# "Type": "RDPSessionDisconnect", #Activity type - disconnect the RDP Session without logoff
# "RDPSessionKeyStr": "notepad.exe", #Python function module name
# },
# {
# "Type": "RDPSessionFileSend", #Activity type - send file to RDP session
# ...
# },
# {
# "Type": "RDPSessionFileRecieve", #Activity type - recieve file from rdp session
# ...
# },
# {
# "Type": "RDPSessionProcessStart", #Activity type -
# ...
# },
]
}, },
"SchedulerDict": { "SchedulerDict": {
"CheckIntervalSecFloat": 5.0, # Check interval in seconds "CheckIntervalSecFloat": 5.0, # Check interval in seconds
@ -168,11 +133,14 @@ def __Create__():
# "TimeHH:MMStr": "22:23", # Time [HH:MM] to trigger activity # "TimeHH:MMStr": "22:23", # Time [HH:MM] to trigger activity
# "WeekdayList": [0, 1, 2, 3, 4, 5, 6], #List of the weekday index when activity is applicable, Default [0,1,2,3,4,5,6] # "WeekdayList": [0, 1, 2, 3, 4, 5, 6], #List of the weekday index when activity is applicable, Default [0,1,2,3,4,5,6]
# "ActivityList": [ # "ActivityList": [
# { # # {
# "Type": "ProcessStart", # Activity type # # "Def":"DefAliasTest", # def link or def alias (look gSettings["Processor"]["AliasDefDict"])
# "Path": "start", # Executable file path # # "ArgList":[1,2,3], # Args list
# "ArgList": ["cmd.exe", "/c", "PIPUpgrade.cmd"] # List of the arguments # # "ArgDict":{"ttt":1,"222":2,"dsd":3} # Args dictionary
# } # # "ArgGSettings": # Name of GSettings attribute: str (ArgDict) or index (for ArgList)
# # "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList)
# # "GUIDStr": ..., # GUID of the activity
# # },
# ], # ],
# "GUID": None # Will be filled in Orchestrator automatically - is needed for detect activity completion # "GUID": None # Will be filled in Orchestrator automatically - is needed for detect activity completion
# }, # },
@ -186,6 +154,7 @@ def __Create__():
# "ArgDict":{"ttt":1,"222":2,"dsd":3} # Args dictionary # "ArgDict":{"ttt":1,"222":2,"dsd":3} # Args dictionary
# "ArgGSettings": # Name of GSettings attribute: str (ArgDict) or index (for ArgList) # "ArgGSettings": # Name of GSettings attribute: str (ArgDict) or index (for ArgList)
# "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList) # "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList)
# "GUIDStr": ..., # GUID of the activity
# }, # },
], ],
"AliasDefDict": {}, # Storage for def with Str alias. To use it see pyOpenRPA.Orchestrator.ControlPanel "AliasDefDict": {}, # Storage for def with Str alias. To use it see pyOpenRPA.Orchestrator.ControlPanel

@ -36,6 +36,9 @@ if __name__ == "__main__": # New init way - allow run as module -m PyOpenRPA.Orc
# TEST Add Supertoken for the all access between robots # TEST Add Supertoken for the all access between robots
Orchestrator.UACSuperTokenUpdate(inGSettings=gSettings, inSuperTokenStr="1992-04-03-0643-ru-b4ff-openrpa52zzz") Orchestrator.UACSuperTokenUpdate(inGSettings=gSettings, inSuperTokenStr="1992-04-03-0643-ru-b4ff-openrpa52zzz")
# Restore DUMP
Orchestrator.OrchestratorSessionRestore(inGSettings=gSettings)
# INFO Relative/Absolute import see below - after settings init # INFO Relative/Absolute import see below - after settings init
# Template for import CP - Control Panels # Template for import CP - Control Panels
# ATTENTION - Pay attention to CP names! Orchestrator is one for the all control panels per one machine # ATTENTION - Pay attention to CP names! Orchestrator is one for the all control panels per one machine
@ -71,7 +74,7 @@ if __name__ == "__main__": # New init way - allow run as module -m PyOpenRPA.Orc
gSettings["Logger"].exception(f"Exception when init CP. See below.") gSettings["Logger"].exception(f"Exception when init CP. See below.")
# Call the orchestrator def # Call the orchestrator def
Orchestrator.Orchestrator(inGSettings=gSettings) Orchestrator.Orchestrator(inGSettings=gSettings, inDumpRestoreBool=False)
else: else:
print("!WARNING! Current orchestrator settings do not support old type of the Orchestrator start. Use new Orchestrator type start (see v1.2.0)") print("!WARNING! Current orchestrator settings do not support old type of the Orchestrator start. Use new Orchestrator type start (see v1.2.0)")

@ -29,107 +29,107 @@ UIDesktop.Utils.ProcessBitness.SettingsInit(lPyOpenRPA_SettingsDict)
| #Backend selection - attribute “backend” (“win32” || “uia”) in 1-st list element | #Backend selection - attribute “backend” (“win32” || “uia”) in 1-st list element
| |
| `PWASpecification_Get_UIO`(…) | `PWASpecification_Get_UIO`(…)
| #Backend def selection - attribute “backend” (“win32” || “uia”) in 1-st list element #old name - GetControl | #Backend def selection - attribute “backend” (“win32” || “uia”) in 1-st list element #old name - GetControl
| |
| `UIOSelectorSecs_WaitAppear_Bool`(…) | `UIOSelectorSecs_WaitAppear_Bool`(…)
| Wait for UI object will appear in GUI for inWaitSecs seconds. | Wait for UI object will appear in GUI for inWaitSecs seconds.
| |
| `UIOSelectorSecs_WaitDisappear_Bool`(…) | `UIOSelectorSecs_WaitDisappear_Bool`(…)
| Wait for UI object will disappear in GUI for inWaitSecs seconds. | Wait for UI object will disappear in GUI for inWaitSecs seconds.
| |
| `UIOSelectorUIOActivity_Run_Dict`(…[, …]) | `UIOSelectorUIOActivity_Run_Dict`(…[, …])
| Run the activity in UIO (UI Object) | Run the activity in UIO (UI Object)
| |
| `UIOSelector_Exist_Bool`(inUIOSelector) | `UIOSelector_Exist_Bool`(inUIOSelector)
| Check if object is exist by the UIO selector. | Check if object is exist by the UIO selector.
| |
| `UIOSelector_FocusHighlight`(inUIOSelector) | `UIOSelector_FocusHighlight`(inUIOSelector)
| Set focus and highlight (draw outline) the element (in app) by the UIO selector. | Set focus and highlight (draw outline) the element (in app) by the UIO selector.
| |
| `UIOSelector_GetChildList_UIOList`([…]) | `UIOSelector_GetChildList_UIOList`([…])
| Get list of child UIOs by the parent UIOSelector | Get list of child UIOs by the parent UIOSelector
| |
| `UIOSelector_Get_BitnessInt`(inSpecificationList) | `UIOSelector_Get_BitnessInt`(inSpecificationList)
| Detect process bitness by the UI Object UIO Selector. | Detect process bitness by the UI Object UIO Selector.
| |
| `UIOSelector_Get_BitnessStr`(inSpecificationList) | `UIOSelector_Get_BitnessStr`(inSpecificationList)
| Detect process bitness by the UI Object UIO Selector. | Detect process bitness by the UI Object UIO Selector.
| |
| `UIOSelector_Get_UIO`(inSpecificationList[, …]) | `UIOSelector_Get_UIO`(inSpecificationList[, …])
| Get the pywinauto object by the UIO selector. | Get the pywinauto object by the UIO selector.
| |
| `UIOSelector_Get_UIOActivityList`(inUIOSelector) | `UIOSelector_Get_UIOActivityList`(inUIOSelector)
| Get the list of the UI object activities | Get the list of the UI object activities
| |
| `UIOSelector_Get_UIOInfo`(inUIOSelector) | `UIOSelector_Get_UIOInfo`(inUIOSelector)
| Get the UIO dict of the attributes | Get the UIO dict of the attributes
| |
| `UIOSelector_Get_UIOList`(inSpecificationList) | `UIOSelector_Get_UIOList`(inSpecificationList)
| Get the UIO list by the selector | Get the UIO list by the selector
| |
| `UIOSelector_Highlight`(inUIOSelector) | `UIOSelector_Highlight`(inUIOSelector)
| Highlight (draw outline) the element (in app) by the UIO selector. | Highlight (draw outline) the element (in app) by the UIO selector.
| |
| `UIOSelector_SafeOtherGet_Process`(inUIOSelector) | `UIOSelector_SafeOtherGet_Process`(inUIOSelector)
| Safe get other process or None if destination app is the other/same bitness | Safe get other process or None if destination app is the other/same bitness
| |
| `UIOSelector_SearchChildByMouse_UIO`(…) | `UIOSelector_SearchChildByMouse_UIO`(…)
| UIOSelector (see description on the top of the document) #old name - AutomationSearchMouseElement | UIOSelector (see description on the top of the document) #old name - AutomationSearchMouseElement
| |
| `UIOSelector_SearchChildByMouse_UIOTree`(…) | `UIOSelector_SearchChildByMouse_UIOTree`(…)
| !!!!Safe call is included (you can set activity and UIDesktop will choose the bitness and return the result)!!!!! | !!!!Safe call is included (you can set activity and UIDesktop will choose the bitness and return the result)!!!!!
| |
| `UIOSelector_TryRestore_Dict`(inSpecificationList) | `UIOSelector_TryRestore_Dict`(inSpecificationList)
| Try to restore (maximize) window, if its minimized. | Try to restore (maximize) window, if its minimized.
| |
| `UIOSelectorsSecs_WaitAppear_List`(…[, …]) | `UIOSelectorsSecs_WaitAppear_List`(…[, …])
| Wait for many UI object will appear in GUI for inWaitSecs seconds. | Wait for many UI object will appear in GUI for inWaitSecs seconds.
| |
| `UIOSelectorsSecs_WaitDisappear_List`(…[, …]) | `UIOSelectorsSecs_WaitDisappear_List`(…[, …])
| Wait for many UI object will disappear in GUI for inWaitSecs seconds. | Wait for many UI object will disappear in GUI for inWaitSecs seconds.
| |
### pyOpenRPA.Robot.UIDesktop.Get_OSBitnessInt() ### pyOpenRPA.Robot.UIDesktop.Get_OSBitnessInt()
Detect OS bitness. Detect OS bitness.

@ -312,6 +312,9 @@ In wiki you can use the following docs:
* Group Scheduler… * Group Scheduler…
* pyOpenRPA.Orchestrator.Web.Basic
* References * References

Loading…
Cancel
Save