import subprocess, json, psutil, time, os, win32security, sys, base64, logging, ctypes, copy #Get input argument
import pickle
-
+import inspect
from partd import Server
from . import Server
@@ -189,6 +190,7 @@
from . import Processor
from . import BackwardCompatibility # Backward compatibility from v1.1.13
from . import Core
+from . import Managers
from subprocess import CREATE_NEW_CONSOLE
from .Utils import LoggerHandlerDumpLogList
@@ -208,13 +210,15 @@
import uuid # Generate uuid
import datetime # datetime
import math
+import glob # search the files
+import urllib
#Единый глобальный словарь (За основу взять из Settings.py)
gSettingsDict = None
# AGENT DEFS
-[docs]def AgentActivityItemAdd(inGSettings, inHostNameStr, inUserStr, inActivityItemDict):
+
[docs]def AgentActivityItemAdd(inHostNameStr, inUserStr, inActivityItemDict, inGSettings=None):
"""
Add activity in AgentDict. Check if item is created
@@ -224,6 +228,8 @@
:param inActivityItemDict: ActivityItem
:return: GUID String of the ActivityItem - you can wait (sync or async) result by this guid!
"""
+
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
lActivityItemDict = copy.deepcopy(inActivityItemDict)
# Add GUIDStr if not exist
lGUIDStr = None
@@ -243,7 +249,7 @@
return lGUIDStr
-
[docs]def AgentActivityItemExists(inGSettings, inHostNameStr, inUserStr, inGUIDStr):
+
[docs]def AgentActivityItemExists(inHostNameStr, inUserStr, inGUIDStr, inGSettings = None):
"""
Check by GUID if ActivityItem has exists in request list. If exist - the result response has not been recieved from the agent
@@ -252,6 +258,7 @@
:return: True - ActivityItem is exist in AgentDict ; False - else case
"""
# Check if GUID is exists in dict - has been recieved
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
# Main alg
lAgentDictItemKeyTurple = (inHostNameStr.upper(),inUserStr.upper())
lResultBool = False
@@ -262,7 +269,7 @@
break
return lResultBool
-
[docs]def AgentActivityItemReturnExists(inGSettings, inGUIDStr):
+
[docs]def AgentActivityItemReturnExists(inGUIDStr, inGSettings = None):
"""
Check by GUID if ActivityItem has been executed and result has come to the Orchestrator
@@ -270,11 +277,13 @@
:param inGUIDStr: GUID String of the ActivityItem - you can wait (sync or async) result by this guid!
:return: True - result has been received from the Agent to orc; False - else case
"""
+
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
# Check if GUID is exists in dict - has been recieved
return inGUIDStr in inGSettings["AgentActivityReturnDict"]
-
[docs]def AgentActivityItemReturnGet(inGSettings, inGUIDStr, inCheckIntervalSecFloat = 0.5):
+
[docs]def AgentActivityItemReturnGet(inGUIDStr, inCheckIntervalSecFloat = 0.5, inGSettings=None):
"""
Work synchroniously! Wait while result will be recieved. Get the result of the ActivityItem execution on the Agent side. Before this please check by the def AgentActivityItemReturnExists that result has come to the Orchestrator
@@ -285,6 +294,7 @@
:param inCheckIntervalSecFloat: Interval in sec of the check Activity Item result
:return: Result of the ActivityItem executed on the Agent side anr transmitted to the Orchestrator. IMPORTANT! ONLY JSON ENABLED Types CAN BE TRANSMITTED TO ORCHESTRATOR!
"""
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
#Check if Orchestrator has been initialized - else raise exception
if Core.IsOrchestratorInitialized(inGSettings=inGSettings) == True:
# Wait while result will not come here
@@ -295,7 +305,7 @@
else:
raise Exception(f"__Orchestrator__.AgentActivityItemReturnGet !ATTENTION! Use this function only after Orchestrator initialization! Before orchestrator init exception will be raised.")
-
[docs]def AgentOSCMD(inGSettings, inHostNameStr, inUserStr, inCMDStr, inRunAsyncBool=True, inSendOutputToOrchestratorLogsBool=True, inCMDEncodingStr="cp1251"):
+
[docs]def AgentOSCMD(inHostNameStr, inUserStr, inCMDStr, inRunAsyncBool=True, inSendOutputToOrchestratorLogsBool=True, inCMDEncodingStr="cp1251", inGSettings=None):
"""
Send CMD to OS thought the pyOpenRPA.Agent daemon. Result return to log + Orchestrator by the A2O connection
@@ -308,7 +318,7 @@
:param inCMDEncodingStr: Set the encoding of the DOS window on the Agent server session. Windows is beautiful :) . Default is "cp1251" early was "cp866" - need test
:return: GUID String of the ActivityItem - you can wait (sync or async) result by this guid!
"""
-
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
lActivityItemDict = {
"Def":"OSCMD", # def alias (look pyOpeRPA.Agent gSettings["ProcessorDict"]["AliasDefDict"])
"ArgList":[], # Args list
@@ -320,7 +330,7 @@
return AgentActivityItemAdd(inGSettings=inGSettings, inHostNameStr=inHostNameStr, inUserStr=inUserStr, inActivityItemDict=lActivityItemDict)
-
[docs]def AgentOSFileSend(inGSettings, inHostNameStr, inUserStr, inOrchestratorFilePathStr, inAgentFilePathStr):
+
[docs]def AgentOSFileSend(inHostNameStr, inUserStr, inOrchestratorFilePathStr, inAgentFilePathStr, inGSettings = None):
"""
Send the file from the Orchestrator to Agent (synchroniously) pyOpenRPA.Agent daemon process (safe for JSON transmition).
Work safety with big files
@@ -334,7 +344,7 @@
:return: GUID String of the ActivityItem - you can wait (sync or async) result by this guid!
"""
-
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
# Check thread
if inGSettings["ServerDict"]["ServerThread"] is None:
if inGSettings["Logger"]: inGSettings["Logger"].warning(f"AgentOSFileSend run before server init - activity will be append in the processor queue.")
@@ -386,7 +396,7 @@
# Close the file
lFile.close()
-
[docs]def AgentOSFileBinaryDataBytesCreate(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inFileDataBytes):
+
[docs]def AgentOSFileBinaryDataBytesCreate(inHostNameStr, inUserStr, inFilePathStr, inFileDataBytes, inGSettings=None):
"""
Create binary file by the base64 string by the pyOpenRPA.Agent daemon process (safe for JSON transmition)
@@ -397,7 +407,7 @@
:param inFileDataBytes:
:return: GUID String of the ActivityItem - you can wait (sync or async) result by this guid!
"""
-
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
lFileDataBase64Str = base64.b64encode(inFileDataBytes).decode("utf-8")
lActivityItemDict = {
"Def":"OSFileBinaryDataBase64StrCreate", # def alias (look pyOpeRPA.Agent gSettings["ProcessorDict"]["AliasDefDict"])
@@ -410,7 +420,7 @@
return AgentActivityItemAdd(inGSettings=inGSettings, inHostNameStr=inHostNameStr, inUserStr=inUserStr, inActivityItemDict=lActivityItemDict)
-
[docs]def AgentOSFileBinaryDataBase64StrCreate(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inFileDataBase64Str):
+
[docs]def AgentOSFileBinaryDataBase64StrCreate(inHostNameStr, inUserStr, inFilePathStr, inFileDataBase64Str, inGSettings=None):
"""
Create binary file by the base64 string by the pyOpenRPA.Agent daemon process (safe for JSON transmission)
@@ -421,7 +431,7 @@
:param inFileDataBase64Str:
:return: GUID String of the ActivityItem - you can wait (sync or async) result by this guid!
"""
-
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
lActivityItemDict = {
"Def":"OSFileBinaryDataBase64StrCreate", # def alias (look pyOpeRPA.Agent gSettings["ProcessorDict"]["AliasDefDict"])
"ArgList":[], # Args list
@@ -433,7 +443,7 @@
return AgentActivityItemAdd(inGSettings=inGSettings, inHostNameStr=inHostNameStr, inUserStr=inUserStr, inActivityItemDict=lActivityItemDict)
-
[docs]def AgentOSFileBinaryDataBase64StrAppend(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inFileDataBase64Str):
+
[docs]def AgentOSFileBinaryDataBase64StrAppend(inHostNameStr, inUserStr, inFilePathStr, inFileDataBase64Str, inGSettings = None):
"""
Append binary file by the base64 string by the pyOpenRPA.Agent daemon process (safe for JSON transmission)
@@ -444,7 +454,7 @@
:param inFileDataBase64Str:
:return: GUID String of the ActivityItem - you can wait (sync or async) result by this guid!
"""
-
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
lActivityItemDict = {
"Def":"OSFileBinaryDataBase64StrAppend", # def alias (look pyOpeRPA.Agent gSettings["ProcessorDict"]["AliasDefDict"])
"ArgList":[], # Args list
@@ -457,7 +467,7 @@
# Send text file to Agent (string)
-
[docs]def AgentOSFileTextDataStrCreate(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inFileDataStr, inEncodingStr = "utf-8"):
+
[docs]def AgentOSFileTextDataStrCreate(inHostNameStr, inUserStr, inFilePathStr, inFileDataStr, inEncodingStr = "utf-8",inGSettings=None):
"""
Create text file by the string by the pyOpenRPA.Agent daemon process
@@ -469,7 +479,7 @@
:param inEncodingStr:
:return: GUID String of the ActivityItem - you can wait (sync or async) result by this guid!
"""
-
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
lActivityItemDict = {
"Def":"OSFileTextDataStrCreate", # def alias (look pyOpeRPA.Agent gSettings["ProcessorDict"]["AliasDefDict"])
"ArgList":[], # Args list
@@ -480,7 +490,7 @@
#Send item in AgentDict for the futher data transmition
return AgentActivityItemAdd(inGSettings=inGSettings, inHostNameStr=inHostNameStr, inUserStr=inUserStr, inActivityItemDict=lActivityItemDict)
-
[docs]def AgentOSFileBinaryDataBase64StrReceive(inGSettings, inHostNameStr, inUserStr, inFilePathStr):
+
[docs]def AgentOSFileBinaryDataBase64StrReceive(inHostNameStr, inUserStr, inFilePathStr, inGSettings = None):
"""
Read binary file and encode in base64 to transmit (safe for JSON transmition)
@@ -490,7 +500,7 @@
:param inFilePathStr: File path to read
:return: GUID String of the ActivityItem - you can wait (sync or async) result by this guid!
"""
-
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
lActivityItemDict = {
"Def":"OSFileBinaryDataBase64StrReceive", # def alias (look pyOpeRPA.Agent gSettings["ProcessorDict"]["AliasDefDict"])
"ArgList":[], # Args list
@@ -501,7 +511,7 @@
#Send item in AgentDict for the futher data transmition
return AgentActivityItemAdd(inGSettings=inGSettings, inHostNameStr=inHostNameStr, inUserStr=inUserStr, inActivityItemDict=lActivityItemDict)
-
[docs]def AgentOSFileTextDataStrReceive(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inEncodingStr="utf-8"):
+
[docs]def AgentOSFileTextDataStrReceive(inHostNameStr, inUserStr, inFilePathStr, inEncodingStr="utf-8", inGSettings = None):
"""
Read text file in the agent GUI session
@@ -512,7 +522,7 @@
:param inEncodingStr: Text file encoding. Default 'utf-8'
:return: GUID String of the ActivityItem - you can wait (sync or async) result by this guid!
"""
-
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
lActivityItemDict = {
"Def":"OSFileTextDataStrReceive", # def alias (look pyOpeRPA.Agent gSettings["ProcessorDict"]["AliasDefDict"])
"ArgList":[], # Args list
@@ -523,7 +533,7 @@
#Send item in AgentDict for the futher data transmition
return AgentActivityItemAdd(inGSettings=inGSettings, inHostNameStr=inHostNameStr, inUserStr=inUserStr, inActivityItemDict=lActivityItemDict)
-
[docs]def AgentProcessWOExeUpperUserListGet(inGSettings, inHostNameStr, inUserStr):
+
[docs]def AgentProcessWOExeUpperUserListGet(inHostNameStr, inUserStr, inGSettings = None):
"""
Return the process list only for the current user (where Agent is running) without .EXE in upper case. Can use in ActivityItem from Orchestrator to Agent
@@ -532,7 +542,7 @@
:param inUserStr:
:return: GUID String of the ActivityItem - you can wait (sync or async) result by this guid!
"""
-
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
lActivityItemDict = {
"Def":"ProcessWOExeUpperUserListGet", # def alias (look pyOpeRPA.Agent gSettings["ProcessorDict"]["AliasDefDict"])
"ArgList":[], # Args list
@@ -563,7 +573,7 @@
else:
return True
-
[docs]def OSRemotePCRestart(inLogger, inHostStr, inForceBool=True):
+
[docs]def OSRemotePCRestart(inHostStr, inForceBool=True, inLogger = None):
"""
Send signal via power shell to restart remote PC
ATTENTION: Orchestrator user need to have restart right on the Remote machine to restart PC.
@@ -573,6 +583,7 @@
:param inForceBool: True - send signal to force retart PC; False - else case
:return:
"""
+
if inLogger is None: inLogger = OrchestratorLoggerGet()
lCMDStr = f"powershell -Command Restart-Computer -ComputerName {inHostStr}"
if inForceBool == True: lCMDStr = lCMDStr + " -Force"
OSCMD(inCMDStr=lCMDStr,inLogger=inLogger)
@@ -586,6 +597,7 @@
:param inLogger:
:return: CMD result string
"""
+
if inLogger is None: inLogger = OrchestratorLoggerGet()
lResultStr = ""
# Subdef to listen OS result
def _CMDRunAndListenLogs(inCMDStr, inLogger):
@@ -624,6 +636,7 @@
:param inGSettings: Global settings dict (singleton)
"""
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
OrchestratorSessionSave(inGSettings=inGSettings) # Dump RDP List in file json
if inGSettings is not None:
lL = inGSettings["Logger"]
@@ -632,6 +645,14 @@
os.execl(sys.executable, os.path.abspath(__file__), *sys.argv)
sys.exit(0)
+
[docs]def OrchestratorLoggerGet():
+
"""
+
Get the logger from the Orchestrator
+
+
:return:
+
"""
+
return GSettingsGet().get("Logger",None)
+
[docs]def OrchestratorIsAdmin():
"""
Check if Orchestrator process is running as administrator
@@ -655,7 +676,61 @@
else:
print(f"!SKIPPED! Already run as administrator!")
-
[docs]def OrchestratorSessionSave(inGSettings):
+
[docs]def OrchestratorPySearchInit(inGlobPatternStr, inDefStr = None, inDefArgNameGSettingsStr = None):
+
"""
+
Search the py files by the glob and do the safe init (in try except). Also add inited module in sys.modules as imported (module name = file name without extension).
+
+
.. code-block:: python
+
+
# USAGE VAR 1 (without the def auto call)
+
# Autoinit control panels starts with CP_
+
Orchestrator.OrchestratorPySearchInit(inGlobPatternStr="ControlPanel\\CP_*.py")
+
+
# USAGE VAR 2 (with the def auto call) - for the backward compatibility CP for the Orchestrator ver. < 1.2.7
+
# Autoinit control panels starts with CP_
+
Orchestrator.OrchestratorPySearchInit(inGlobPatternStr="ControlPanel\\CP_*.py", inDefStr="SettingsUpdate", inDefArgNameGSettingsStr="inGSettings")
+
+
# INFO: The code above will replace the code below
+
## !!! For Relative import !!! CP Version Check
+
try:
+
sys.path.insert(0,os.path.abspath(os.path.join(r"")))
+
from ControlPanel import CP_VersionCheck
+
CP_VersionCheck.SettingsUpdate(inGSettings=gSettings)
+
except Exception as e:
+
gSettings["Logger"].exception(f"Exception when init CP. See below.")
+
+
+
:param inGlobPatternStr: example"..\\*\\*\\*X64*.cmd"
+
:param inDefStr: OPTIONAL The string name of the def. For backward compatibility if you need to auto call some def from initialized module
+
:param inDefArgNameGSettingsStr: OPTIONAL The name of the GSettings argument in def (if exists)
+
:return: { "ModuleNameStr":{"PyPathStr": "", "Module": ...}, ...}
+
"""
+
lResultDict = {}
+
+
lPyPathStrList = glob.glob(inGlobPatternStr) # get the file list
+
lL = OrchestratorLoggerGet() # get the logger
+
for lPyPathItemStr in lPyPathStrList:
+
try:
+
lModuleNameStr = os.path.basename(lPyPathItemStr)[0:-3]
+
lTechSpecification = importlib.util.spec_from_file_location(lModuleNameStr, lPyPathItemStr)
+
lTechModuleFromSpec = importlib.util.module_from_spec(lTechSpecification)
+
sys.modules[lModuleNameStr] = lTechModuleFromSpec # Add initialized module in sys - python will not init this module enought
+
lTechSpecificationModuleLoader = lTechSpecification.loader.exec_module(lTechModuleFromSpec)
+
lItemDict = {"ModuleNameStr": lModuleNameStr, "PyPathStr": lPyPathItemStr, "Module": lTechModuleFromSpec}
+
if lL: lL.info(f"Py module {lModuleNameStr} has been successfully initialized.")
+
lResultDict[lModuleNameStr]=lItemDict
+
# Backward compatibility to call def with gsettings when init
+
if inDefStr is not None and inDefStr is not "":
+
lDef = getattr(lTechModuleFromSpec, inDefStr)
+
lArgDict = {}
+
if inDefArgNameGSettingsStr is not None and inDefArgNameGSettingsStr is not "":
+
lArgDict = {inDefArgNameGSettingsStr:GSettingsGet()}
+
lDef(**lArgDict)
+
except Exception as e:
+
if lL: lL.exception(f"Exception when init the .py file {os.path.abspath(lPyPathItemStr)}")
+
return lResultDict
+
+
[docs]def OrchestratorSessionSave(inGSettings=None):
"""
Orchestrator session save in file
_SessionLast_RDPList.json (encoding = "utf-8")
@@ -664,6 +739,7 @@
:param inGSettings: Global settings dict (singleton)
:return: True every time
"""
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
lL = inGSettings["Logger"]
try:
# Dump RDP List in file json
@@ -683,7 +759,7 @@
if lL: lL.exception(f"Exception when dump data before restart the Orchestrator")
return True
-
[docs]def OrchestratorSessionRestore(inGSettings):
+
[docs]def OrchestratorSessionRestore(inGSettings=None):
"""
Check _SessionLast_RDPList.json and _SessionLast_StorageDict.pickle in working directory. if exist - load into gsettings
# _SessionLast_StorageDict.pickle (binary)
@@ -693,6 +769,7 @@
:param inGSettings: Global settings dict (singleton)
:return:
"""
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
lL = inGSettings.get("Logger",None)
# _SessionLast_RDPList.json (encoding = "utf-8")
if os.path.exists("_SessionLast_RDPList.json"):
@@ -732,7 +809,7 @@
"""
return inRequest.UserRoleHierarchyGet() # get the Hierarchy
-
[docs]def UACUpdate(inGSettings, inADLoginStr, inADStr="", inADIsDefaultBool=True, inURLList=None, inRoleHierarchyAllowedDict=None):
+
[docs]def UACUpdate(inADLoginStr, inADStr="", inADIsDefaultBool=True, inURLList=None, inRoleHierarchyAllowedDict=None, inGSettings = None):
"""
Update user access (UAC)
@@ -743,6 +820,7 @@
:param inURLList:
:param inRoleHierarchyAllowedDict:
"""
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
lUserTurple = (inADStr.upper(),inADLoginStr.upper()) # Create turple key for inGSettings["ServerDict"]["AccessUsers"]["RuleDomainUserDict"]
if inURLList is None: inURLList = [] # Check if None
if inRoleHierarchyAllowedDict is None: inRoleHierarchyAllowedDict = {} # Check if None
@@ -767,13 +845,14 @@
# Case add default domain + user
inGSettings["ServerDict"]["AccessUsers"]["RuleDomainUserDict"].update({("",inADLoginStr.upper()):lRuleDomainUserDict})
-
[docs]def UACSuperTokenUpdate(inGSettings, inSuperTokenStr):
+
[docs]def UACSuperTokenUpdate(inSuperTokenStr, inGSettings=None):
"""
Add supertoken for the all access (it is need for the robot communication without human)
:param inGSettings: Global settings dict (singleton)
:param inSuperTokenStr:
"""
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
lLoginStr = "SUPERTOKEN"
UACUpdate(inGSettings=inGSettings, inADLoginStr=lLoginStr)
inGSettings["ServerDict"]["AccessUsers"]["AuthTokensDict"].update(
@@ -785,7 +864,7 @@
# # # # # # # # # # # # # # # # # # # # # # #
-
[docs]def WebURLConnectDef(inGSettings, inMethodStr, inURLStr, inMatchTypeStr, inDef, inContentTypeStr="application/octet-stream"):
+
[docs]def WebURLConnectDef(inMethodStr, inURLStr, inMatchTypeStr, inDef, inContentTypeStr="application/octet-stream", inGSettings = None):
"""
Connect URL to DEF
"inMethodStr":"GET|POST",
@@ -801,6 +880,7 @@
:param inDef:
:param inContentTypeStr:
"""
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
lURLItemDict = {
"Method": inMethodStr.upper(),
"URL": inURLStr, # URL of the request
@@ -814,7 +894,7 @@
inGSettings["ServerDict"]["URLList"].append(lURLItemDict)
-
[docs]def WebURLConnectFolder(inGSettings, inMethodStr, inURLStr, inMatchTypeStr, inFolderPathStr):
+
[docs]def WebURLConnectFolder(inMethodStr, inURLStr, inMatchTypeStr, inFolderPathStr, inGSettings = None):
"""
Connect URL to Folder
"inMethodStr":"GET|POST",
@@ -828,6 +908,7 @@
:param inMatchTypeStr:
:param inFolderPathStr:
"""
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
# Check if last symbol is "/" - append if not exist
lFolderPathStr = os.path.abspath(inFolderPathStr)
if lFolderPathStr[-1]!="/":lFolderPathStr+="/"
@@ -844,7 +925,7 @@
inGSettings["ServerDict"]["URLList"].append(lURLItemDict)
-
[docs]def WebURLConnectFile(inGSettings, inMethodStr, inURLStr, inMatchTypeStr, inFilePathStr, inContentTypeStr="application/octet-stream"):
+
[docs]def WebURLConnectFile(inMethodStr, inURLStr, inMatchTypeStr, inFilePathStr, inContentTypeStr="application/octet-stream", inGSettings = None):
"""
Connect URL to File
"inMethodStr":"GET|POST",
@@ -859,6 +940,7 @@
:param inFilePathStr:
:param inContentTypeStr:
"""
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
lURLItemDict = {
"Method": inMethodStr.upper(),
"URL": inURLStr, # URL of the request
@@ -870,7 +952,7 @@
}
inGSettings["ServerDict"]["URLList"].append(lURLItemDict)
-
[docs]def WebListenCreate(inGSettings, inServerKeyStr="Default", inAddressStr="", inPortInt=80, inCertFilePEMPathStr=None, inKeyFilePathStr=None):
+
[docs]def WebListenCreate(inServerKeyStr="Default", inAddressStr="", inPortInt=80, inCertFilePEMPathStr=None, inKeyFilePathStr=None, inGSettings = None):
"""
Create listen interface for the web server
@@ -881,7 +963,7 @@
:param inKeyFilePathStr: Path to the private key file
:return:
"""
-
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
inGSettings["ServerDict"]["ListenDict"][inServerKeyStr]={
"AddressStr":inAddressStr,
"PortInt":inPortInt,
@@ -891,7 +973,7 @@
}
-
[docs]def WebCPUpdate(inGSettings, inCPKeyStr, inHTMLRenderDef=None, inJSONGeneratorDef=None, inJSInitGeneratorDef=None):
+
[docs]def WebCPUpdate(inCPKeyStr, inHTMLRenderDef=None, inJSONGeneratorDef=None, inJSInitGeneratorDef=None, inGSettings = None):
"""
Add control panel HTML, JSON generator or JS when page init
@@ -901,18 +983,13 @@
:param inJSONGeneratorDef:
:param inJSInitGeneratorDef:
"""
-
# Create Struct if the re is current key
-
if inCPKeyStr not in inGSettings["CPDict"]:
-
inGSettings["CPDict"][inCPKeyStr] = {"HTMLRenderDef": None,"JSONGeneratorDef": None, "JSInitGeneratorDef": None}
+
lCPManager = Managers.ControlPanel(inControlPanelNameStr=inCPKeyStr, inRefreshHTMLJinja2TemplatePathStr=None)
# CASE HTMLRender
-
if inHTMLRenderDef is not None:
-
inGSettings["CPDict"][inCPKeyStr]["HTMLRenderDef"]=inHTMLRenderDef
+
if inHTMLRenderDef is not None: lCPManager.mBackwardCompatibilityHTMLDef = inHTMLRenderDef
# CASE JSONGenerator
-
if inJSONGeneratorDef is not None:
-
inGSettings["CPDict"][inCPKeyStr]["JSONGeneratorDef"] = inJSONGeneratorDef
+
if inJSONGeneratorDef is not None: lCPManager.mBackwardCompatibilityJSONDef = inJSONGeneratorDef
# CASE JSInitGeneratorDef
-
if inJSInitGeneratorDef is not None:
-
inGSettings["CPDict"][inCPKeyStr]["JSInitGeneratorDef"] = inJSInitGeneratorDef
+
if inJSInitGeneratorDef is not None: lCPManager.mBackwardCompatibilityJSDef = inJSInitGeneratorDef
[docs]def WebAuditMessageCreate(inRequest, inOperationCodeStr="-", inMessageStr="-"):
@@ -980,6 +1057,15 @@
"""
return json.loads(WebRequestParseBodyStr(inRequest=inRequest))
+
[docs]def WebRequestParsePath(inRequest):
+
"""
+
Parse the request - extract the url. Example: /pyOpenRPA/Debugging/DefHelper/...
+
+
:param inRequest:
+
:return: Str, Example: /pyOpenRPA/Debugging/DefHelper/...
+
"""
+
return urllib.parse.unquote(inRequest.path)
+
[docs]def WebRequestParseFile(inRequest):
"""
Parse the request - extract the file (name, body in bytes)
@@ -1006,6 +1092,13 @@
return lResultTurple
+
[docs]def WebRequestResponseSend(inRequest, inResponeStr):
+
"""
+
Send response for the request
+
:return:
+
"""
+
inRequest.OpenRPAResponseDict["Body"] = bytes(inResponeStr, "utf8")
+
[docs]def WebUserInfoGet(inRequest):
"""
Return User info about request
@@ -1017,7 +1110,7 @@
lUserUpperStr = inRequest.OpenRPA["User"].upper()
return {"DomainUpperStr": lDomainUpperStr, "UserNameUpperStr": lUserUpperStr}
-
[docs]def WebUserIsSuperToken(inRequest, inGSettings):
+
[docs]def WebUserIsSuperToken(inRequest, inGSettings = None):
"""
Return bool if request is authentificated with supetoken (token which is never expires)
@@ -1025,6 +1118,7 @@
:param inGSettings: Global settings dict (singleton)
:return: bool True - is supertoken; False - is not supertoken
"""
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
lIsSuperTokenBool = False
# Get Flag is supertoken (True|False)
lIsSuperTokenBool = inGSettings.get("ServerDict", {}).get("AccessUsers", {}).get("AuthTokensDict", {}).get(inRequest.OpenRPA["AuthToken"], {}).get("FlagDoNotExpire", False)
@@ -1039,8 +1133,33 @@
"""
return inRequest.UserRoleHierarchyGet()
+
## GSettings defs
-
[docs]def GSettingsKeyListValueSet(inGSettings, inValue, inKeyList=None):
+
+
from . import SettingsTemplate
+
+
GSettings = SettingsTemplate.Create(inModeStr = "BASIC")
+
# Modules alias for pyOpenRPA.Orchestrator and pyOpenRPA.Orchestrator.__Orchestrator__
+
lCurrentModule = sys.modules[__name__]
+
if __name__ == "pyOpenRPA.Orchestrator" and "pyOpenRPA.Orchestrator.__Orchestrator__" not in sys.modules:
+
sys.modules["pyOpenRPA.Orchestrator.__Orchestrator__"] = lCurrentModule
+
if __name__ == "pyOpenRPA.Orchestrator.__Orchestrator__" and "pyOpenRPA.Orchestrator" not in sys.modules:
+
sys.modules["pyOpenRPA.Orchestrator"] = lCurrentModule
+
+
[docs]def GSettingsGet(inGSettings=None):
+
"""
+
Get the GSettings from the singleton module.
+
+
:param inGSettings: You can pass some GSettings to check if it equal to base gsettings. If not equal - def will merge it
+
:return: GSettings
+
"""
+
global GSettings # identify the global variable
+
# Merge dictionaries if some new dictionary has come
+
if inGSettings is not None and GSettings is not inGSettings:
+
GSettings = Server.__ComplexDictMerge2to1Overwrite__(in1Dict = inGSettings, in2Dict = GSettings)
+
return GSettings # Return the result
+
+
[docs]def GSettingsKeyListValueSet(inValue, inKeyList=None, inGSettings = None):
"""
Set value in GSettings by the key list
@@ -1049,6 +1168,7 @@
:param inKeyList:
:return: bool
"""
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
if inKeyList is None: inKeyList = []
lDict = inGSettings
for lItem2 in inKeyList[:-1]:
@@ -1061,7 +1181,7 @@
lDict[inKeyList[-1]] = inValue #Set value
return True
-
[docs]def GSettingsKeyListValueGet(inGSettings, inKeyList=None):
+
[docs]def GSettingsKeyListValueGet(inKeyList=None, inGSettings = None):
"""
Get the value from the GSettings by the key list
@@ -1069,6 +1189,7 @@
:param inKeyList:
:return: value any type
"""
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
if inKeyList is None: inKeyList = []
lDict = inGSettings
for lItem2 in inKeyList[:-1]:
@@ -1080,7 +1201,7 @@
lDict=lDict[lItem2]
return lDict.get(inKeyList[-1],None)
-
[docs]def GSettingsKeyListValueAppend(inGSettings, inValue, inKeyList=None):
+
[docs]def GSettingsKeyListValueAppend(inValue, inKeyList=None, inGSettings = None):
"""
Append value in GSettings by the key list
@@ -1107,6 +1228,7 @@
:param inKeyList: List of the nested keys (see example)
:return: True every time
"""
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
if inKeyList is None: inKeyList = []
lDict = inGSettings
for lItem2 in inKeyList[:-1]:
@@ -1119,7 +1241,7 @@
lDict[inKeyList[-1]].append(inValue) #Set value
return True
-
[docs]def GSettingsKeyListValueOperatorPlus(inGSettings, inValue, inKeyList=None):
+
[docs]def GSettingsKeyListValueOperatorPlus(inValue, inKeyList=None, inGSettings = None):
"""
Execute plus operation between 2 lists (1:inValue and 2:gSettings by the inKeyList)
@@ -1149,6 +1271,7 @@
:param inKeyList: List of the nested keys (see example)
:return: True every time
"""
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
if inKeyList is None: inKeyList = []
lDict = inGSettings
for lItem2 in inKeyList[:-1]:
@@ -1161,10 +1284,31 @@
lDict[inKeyList[-1]] += inValue #Set value
return True
-
[docs]def ProcessorAliasDefCreate(inGSettings, inDef, inAliasStr=None):
+
[docs]def StorageRobotExists(inRobotNameStr):
+
"""
+
Check if robot storage exists
+
+
:param inRobotNameStr: Robot name (case sensitive)
+
:return: True - robot storage exist; False - does not exist
+
"""
+
return inRobotNameStr in GSettingsGet()["StorageDict"]
+
+
[docs]def StorageRobotGet(inRobotNameStr):
+
"""
+
Get the robot storage by the robot name. If Robot storage is not exist - function will create it
+
+
:param inRobotNameStr: Robot name (case sensitive)
+
:return: Dict
+
"""
+
if inRobotNameStr not in GSettingsGet()["StorageDict"]:
+
GSettingsGet()["StorageDict"][inRobotNameStr]={}
+
return GSettingsGet()["StorageDict"][inRobotNameStr]
+
+
[docs]def ProcessorAliasDefCreate(inDef, inAliasStr=None, inGSettings = None):
"""
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 can't transmit Python def object out of the Python environment)
+
Deprecated. See ActivityItemDefAliasCreate
.. code-block:: python
@@ -1184,20 +1328,13 @@
:param inAliasStr: String alias for associated def
:return: str Alias string (Alias can be regenerated if previous alias was occupied)
"""
-
#TODO Pay attention - New alias can be used too - need to create more complex algorythm to create new alias!
-
lL = inGSettings["Logger"]
-
if inAliasStr is None: inAliasStr = str(inDef)
-
# Check if key is not exists
-
if inAliasStr in inGSettings["ProcessorDict"]["AliasDefDict"]:
-
inAliasStr = str(inDef)
-
if lL: lL.warning(f"Orchestrator.ProcessorAliasDefCreate: Alias {inAliasStr} already exists in alias dictionary. Another alias will be generated and returned")
-
inGSettings["ProcessorDict"]["AliasDefDict"][inAliasStr] = inDef
-
return inAliasStr
+
return ActivityItemDefAliasCreate(inDef=inDef, inAliasStr=inAliasStr, inGSettings = inGSettings)
-
[docs]def ProcessorAliasDefUpdate(inGSettings, inDef, inAliasStr):
+
[docs]def ProcessorAliasDefUpdate(inDef, inAliasStr, inGSettings = None):
"""
Update 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 can't transmit Python def object out of the Python environment)
+
Deprecated. See ActivityItemDefAliasUpdate
.. code-block:: python
@@ -1217,11 +1354,59 @@
:param inAliasStr: String alias for associated def
:return: str Alias string
"""
-
if callable(inDef): inGSettings["ProcessorDict"]["AliasDefDict"][inAliasStr] = inDef
-
else: raise Exception(f"pyOpenRPA Exception: You can't use Orchestrator.ProcessorAliasDefUpdate with arg 'inDef' string value. inDef is '{inDef}', inAliasStr is '{inAliasStr}'")
-
return inAliasStr
+
return ActivityItemDefAliasUpdate(inDef=inDef, inAliasStr=inAliasStr, inGSettings = inGSettings)
-
[docs]def ProcessorActivityItemCreate(inDef, inArgList=None, inArgDict=None, inArgGSettingsStr=None, inArgLoggerStr=None, inGUIDStr = None):
+
# ActivityItem defs
+
[docs]def ActivityItemHelperDefList(inDefQueryStr=None):
+
"""
+
Create list of the available Def names in activity item. You can use query def filter via arg inDefQueryStr
+
+
:param inDefStr:
+
:return: ["ActivityItemDefAliasUpdate", "ActivityItemDefAliasCreate", etc...]
+
"""
+
lResultList = []
+
if inDefQueryStr is not None: # do search alg
+
for lKeyStr in GSettingsGet()["ProcessorDict"]["AliasDefDict"]:
+
if inDefQueryStr.upper() in lKeyStr.upper():
+
lResultList.append(lKeyStr)
+
else:
+
for lKeyStr in GSettingsGet()["ProcessorDict"]["AliasDefDict"]:
+
lResultList.append(lKeyStr)
+
return lResultList
+
+
[docs]def ActivityItemHelperDefAutofill(inDef):
+
"""
+
Detect def by the name and prepare the activity item dict with values.
+
+
:param inDef:
+
:return:
+
"""
+
lResultDict = {
+
"Def": None,
+
"ArgList": [],
+
"ArgDict": {},
+
"ArgGSettingsStr": None,
+
"ArgLoggerStr": None
+
}
+
lResultDict["Def"] = inDef
+
lGS = GSettingsGet()
+
if inDef in lGS["ProcessorDict"]["AliasDefDict"]:
+
lDefSignature = inspect.signature(lGS["ProcessorDict"]["AliasDefDict"][inDef])
+
for lItemKeyStr in lDefSignature.parameters:
+
lItemValue = lDefSignature.parameters[lItemKeyStr]
+
# Check if arg name contains "GSetting" or "Logger"
+
if "GSETTING" in lItemKeyStr.upper():
+
lResultDict["ArgGSettingsStr"] = lItemKeyStr
+
elif "LOGGER" in lItemKeyStr.upper():
+
lResultDict["ArgLoggerStr"] = lItemKeyStr
+
else:
+
if lItemValue.default is inspect._empty:
+
lResultDict["ArgDict"][lItemKeyStr] = None
+
else:
+
lResultDict["ArgDict"][lItemKeyStr] = lItemValue.default
+
return lResultDict
+
+
[docs]def ActivityItemCreate(inDef, inArgList=None, inArgDict=None, inArgGSettingsStr=None, inArgLoggerStr=None, inGUIDStr = None, inThreadBool = False):
"""
Create activity item. Activity item can be used as list item in ProcessorActivityItemAppend or in Processor.ActivityListExecute.
@@ -1233,7 +1418,7 @@
# EXAMPLE 1
def TestDef(inArg1Str, inGSettings, inLogger):
pass
-
lActivityItem = Orchestrator.ProcessorActivityItemCreate(
+
lActivityItem = Orchestrator.ActivityItemCreate(
inDef = TestDef,
inArgList=[],
inArgDict={"inArg1Str": "ArgValueStr"},
@@ -1251,11 +1436,11 @@
# EXAMPLE 2
def TestDef(inArg1Str):
pass
-
Orchestrator.ProcessorAliasDefUpdate(
+
Orchestrator.ActivityItemDefAliasUpdate(
inGSettings = gSettings,
inDef = TestDef,
inAliasStr="TestDefAlias")
-
lActivityItem = Orchestrator.ProcessorActivityItemCreate(
+
lActivityItem = Orchestrator.ActivityItemCreate(
inDef = "TestDefAlias",
inArgList=[],
inArgDict={"inArg1Str": "ArgValueStr"},
@@ -1276,6 +1461,7 @@
:param inArgGSettingsStr: Name of def argument of the GSettings dict
:param inArgLoggerStr: Name of def argument of the logging object
:param inGUIDStr: GUID which you can specify. If None the GUID will be generated
+
:param inThreadBool: True - execute ActivityItem in new thread; False - in processor thread
:return: {}
"""
# Work about GUID in Activity items
@@ -1289,11 +1475,154 @@
"ArgDict":inArgDict, # Args dictionary
"ArgGSettings": inArgGSettingsStr, # Name of GSettings attribute: str (ArgDict) or index (for ArgList)
"ArgLogger": inArgLoggerStr, # Name of GSettings attribute: str (ArgDict) or index (for ArgList)
-
"GUIDStr": inGUIDStr
+
"GUIDStr": inGUIDStr,
+
"ThreadBool": inThreadBool
}
return lActivityItemDict
-
[docs]def ProcessorActivityItemAppend(inGSettings, inDef=None, inArgList=None, inArgDict=None, inArgGSettingsStr=None, inArgLoggerStr=None, inActivityItemDict=None):
+
+
[docs]def ActivityItemDefAliasCreate(inDef, inAliasStr=None, inGSettings = None):
+
"""
+
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 can't transmit Python def object out of the Python environment)
+
+
.. code-block:: python
+
+
# USAGE
+
from pyOpenRPA import Orchestrator
+
+
def TestDef():
+
pass
+
lAliasStr = Orchestrator.ActivityItemDefAliasCreate(
+
inGSettings = gSettings,
+
inDef = TestDef,
+
inAliasStr="TestDefAlias")
+
# Now you can call TestDef by the alias from var lAliasStr with help of ActivityItem (key Def = lAliasStr)
+
+
:param inGSettings: Global settings dict (singleton)
+
:param inDef: Def
+
:param inAliasStr: String alias for associated def
+
:return: str Alias string (Alias can be regenerated if previous alias was occupied)
+
"""
+
#TODO Pay attention - New alias can be used too - need to create more complex algorythm to create new alias!
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
+
lL = inGSettings["Logger"]
+
if inAliasStr is None: inAliasStr = str(inDef)
+
# Check if key is not exists
+
if inAliasStr in inGSettings["ProcessorDict"]["AliasDefDict"]:
+
inAliasStr = str(inDef)
+
if lL: lL.warning(f"Orchestrator.ProcessorAliasDefCreate: Alias {inAliasStr} already exists in alias dictionary. Another alias will be generated and returned")
+
inGSettings["ProcessorDict"]["AliasDefDict"][inAliasStr] = inDef
+
return inAliasStr
+
+
[docs]def ActivityItemDefAliasModulesLoad():
+
"""
+
Load all def from sys.modules... in ActivityItem def alias dict
+
+
:return: None
+
"""
+
lL = OrchestratorLoggerGet()
+
lL.info(f"ActivityItem aliases: start to load sys.modules")
+
for lModuleItemStr in sys.modules:
+
lModuleItem = sys.modules[lModuleItemStr]
+
for lDefItemStr in dir(lModuleItem):
+
lDefItem = getattr(lModuleItem,lDefItemStr)
+
if callable(lDefItem) and not lDefItemStr.startswith("_"):
+
ActivityItemDefAliasCreate(inDef=lDefItem, inAliasStr=f"{lModuleItemStr}.{lDefItemStr}")
+
lL.info(f"ActivityItem aliases: finish to load sys.modules")
+
+
[docs]def ActivityItemDefAliasUpdate(inDef, inAliasStr, inGSettings = None):
+
"""
+
Update 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 can't transmit Python def object out of the Python environment)
+
+
.. code-block:: python
+
+
# USAGE
+
from pyOpenRPA import Orchestrator
+
+
def TestDef():
+
pass
+
Orchestrator.ActivityItemDefAliasUpdate(
+
inGSettings = gSettings,
+
inDef = TestDef,
+
inAliasStr="TestDefAlias")
+
# Now you can call TestDef by the alias "TestDefAlias" with help of ActivityItem (key Def = "TestDefAlias")
+
+
:param inGSettings: Global settings dict (singleton)
+
:param inDef: Def
+
:param inAliasStr: String alias for associated def
+
:return: str Alias string
+
"""
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
+
if callable(inDef): inGSettings["ProcessorDict"]["AliasDefDict"][inAliasStr] = inDef
+
else: raise Exception(f"pyOpenRPA Exception: You can't use Orchestrator.ActivityItemDefAliasUpdate with arg 'inDef' string value. inDef is '{inDef}', inAliasStr is '{inAliasStr}'")
+
return inAliasStr
+
+
+
+
[docs]def ProcessorActivityItemCreate(inDef, inArgList=None, inArgDict=None, inArgGSettingsStr=None, inArgLoggerStr=None, inGUIDStr = None, inThreadBool = False):
+
"""
+
Create activity item. Activity item can be used as list item in ProcessorActivityItemAppend or in Processor.ActivityListExecute.
+
Deprecated. See ActivityItemCreate
+
.. code-block:: python
+
+
# USAGE
+
from pyOpenRPA import Orchestrator
+
+
# EXAMPLE 1
+
def TestDef(inArg1Str, inGSettings, inLogger):
+
pass
+
lActivityItem = Orchestrator.ProcessorActivityItemCreate(
+
inDef = TestDef,
+
inArgList=[],
+
inArgDict={"inArg1Str": "ArgValueStr"},
+
inArgGSettingsStr = "inGSettings",
+
inArgLoggerStr = "inLogger")
+
# lActivityItem:
+
# {
+
# "Def":TestDef,
+
# "ArgList":inArgList,
+
# "ArgDict":inArgDict,
+
# "ArgGSettings": "inArgGSettings",
+
# "ArgLogger": "inLogger"
+
# }
+
+
# EXAMPLE 2
+
def TestDef(inArg1Str):
+
pass
+
Orchestrator.ProcessorAliasDefUpdate(
+
inGSettings = gSettings,
+
inDef = TestDef,
+
inAliasStr="TestDefAlias")
+
lActivityItem = Orchestrator.ProcessorActivityItemCreate(
+
inDef = "TestDefAlias",
+
inArgList=[],
+
inArgDict={"inArg1Str": "ArgValueStr"},
+
inArgGSettingsStr = None,
+
inArgLoggerStr = None)
+
# lActivityItem:
+
# {
+
# "Def":"TestDefAlias",
+
# "ArgList":inArgList,
+
# "ArgDict":inArgDict,
+
# "ArgGSettings": None,
+
# "ArgLogger": None
+
# }
+
+
:param inDef: def link or def alias (look gSettings["Processor"]["AliasDefDict"])
+
:param inArgList: Args list for the Def
+
:param inArgDict: Args dict for the def
+
:param inArgGSettingsStr: Name of def argument of the GSettings dict
+
:param inArgLoggerStr: Name of def argument of the logging object
+
:param inGUIDStr: GUID which you can specify. If None the GUID will be generated
+
:param inThreadBool: True - execute ActivityItem in new thread; False - in processor thread
+
:return: {}
+
"""
+
return ActivityItemCreate(inDef=inDef, inArgList=inArgList, inArgDict=inArgDict, inArgGSettingsStr=inArgGSettingsStr, inArgLoggerStr=inArgLoggerStr,
+
inGUIDStr=inGUIDStr, inThreadBool=inThreadBool)
+
+
[docs]def ProcessorActivityItemAppend(inGSettings = None, inDef=None, inArgList=None, inArgDict=None, inArgGSettingsStr=None, inArgLoggerStr=None, inActivityItemDict=None):
"""
Create and add activity item in processor queue.
@@ -1341,6 +1670,7 @@
:param inActivityItemDict: Fill if you already have ActivityItemDict (don't fill inDef, inArgList, inArgDict, inArgGSettingsStr, inArgLoggerStr)
:return ActivityItem GUIDStr
"""
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
if inActivityItemDict is None:
if inArgList is None: inArgList=[]
if inArgDict is None: inArgDict={}
@@ -1525,7 +1855,7 @@
return lResult
-
[docs]def ProcessDefIntervalCall(inGSettings, inDef, inIntervalSecFloat, inIntervalAsyncBool=False, inDefArgList=None, inDefArgDict=None, inDefArgGSettingsNameStr=None, inDefArgLoggerNameStr=None, inExecuteInNewThreadBool=True, inLogger=None):
+
[docs]def ProcessDefIntervalCall(inDef, inIntervalSecFloat, inIntervalAsyncBool=False, inDefArgList=None, inDefArgDict=None, inDefArgGSettingsNameStr=None, inDefArgLoggerNameStr=None, inExecuteInNewThreadBool=True, inLogger=None, inGSettings = None):
"""
Use this procedure if you need to run periodically some def. Set def, args, interval and enjoy :)
@@ -1541,6 +1871,8 @@
:param inLogger: logging def if some case is appear
:return:
"""
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
+
if inLogger is None: inLogger = OrchestratorLoggerGet()
#Some edits on start
if inDefArgDict is None: inDefArgDict = {}
if inDefArgList is None: inDefArgList = []
@@ -1629,6 +1961,7 @@
:param inLogger: Logger instance to log some information when PythonStart def is running
:return: None
"""
+
if inLogger is None: inLogger = OrchestratorLoggerGet()
if inArgList is None: inArgList=[]
if inArgDict is None: inArgDict={}
try:
@@ -1642,7 +1975,7 @@
# Scheduler
# # # # # # # # # # # # # # # # # # # # # # #
-
[docs]def SchedulerActivityTimeAddWeekly(inGSettings, inTimeHHMMStr="23:55:", inWeekdayList=None, inActivityList=None):
+
[docs]def SchedulerActivityTimeAddWeekly(inTimeHHMMStr="23:55:", inWeekdayList=None, inActivityList=None, inGSettings = None):
"""
Add activity item list in scheduler. You can set weekday list and set time when launch. Activity list will be executed at planned time/day.
@@ -1673,6 +2006,7 @@
:param inActivityList: Activity list structure
:return: None
"""
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
if inWeekdayList is None: inWeekdayList=[0,1,2,3,4,5,6]
if inActivityList is None: inActivityList=[]
Processor.__ActivityListVerify__(inActivityList=inActivityList) # DO VERIFICATION FOR THE inActivityList
@@ -1788,7 +2122,7 @@
#for lItemKeyStr in inGSettings["RobotRDPActive"]["RDPList"]:
# lItemDict = inGSettings["RobotRDPActive"]["RDPList"][lItemKeyStr]
-
[docs]def RDPSessionConnect(inGSettings, inRDPSessionKeyStr, inRDPTemplateDict=None, inHostStr=None, inPortStr=None, inLoginStr=None, inPasswordStr=None):
+
[docs]def RDPSessionConnect(inRDPSessionKeyStr, inRDPTemplateDict=None, inHostStr=None, inPortStr=None, inLoginStr=None, inPasswordStr=None, inGSettings = None):
"""
Create new RDPSession in RobotRDPActive. Attention - activity will be ignored if RDP key is already exists
2 way of the use
@@ -1819,6 +2153,7 @@
:param inPasswordStr: Backward compatibility from Orchestrator v 1.1.20. Use inRDPTemplateDict
:return: True every time :)
"""
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
# Check thread
if not Core.IsProcessorThread(inGSettings=inGSettings):
if inGSettings["Logger"]: inGSettings["Logger"].warning(f"RDP def was called not from processor queue - activity will be append in the processor queue.")
@@ -1847,7 +2182,7 @@
if inGSettings["Logger"]: inGSettings["Logger"].warning(f"RDP session was not created because it is alredy exists in the RDPList. Use RDPSessionReconnect if you want to update RDP configuration.")
return True
-
[docs]def RDPSessionDisconnect(inGSettings, inRDPSessionKeyStr, inBreakTriggerProcessWOExeList = None):
+
[docs]def RDPSessionDisconnect(inRDPSessionKeyStr, inBreakTriggerProcessWOExeList = None, inGSettings = None):
"""
Disconnect the RDP session and stop monitoring it.
@@ -1870,6 +2205,7 @@
Orchestrator look processes on the current machine
:return: True every time
"""
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
if inBreakTriggerProcessWOExeList is None: inBreakTriggerProcessWOExeList = []
# Check thread
if not Core.IsProcessorThread(inGSettings=inGSettings):
@@ -1894,7 +2230,7 @@
Connector.SystemRDPWarningClickOk() # Click all warning messages
return True
-
[docs]def RDPSessionReconnect(inGSettings, inRDPSessionKeyStr, inRDPTemplateDict=None):
+
[docs]def RDPSessionReconnect(inRDPSessionKeyStr, inRDPTemplateDict=None, inGSettings = None):
"""
Reconnect the RDP session
@@ -1918,6 +2254,7 @@
:param inRDPTemplateDict: RDP configuration dict with settings (see def Orchestrator.RDPTemplateCreate)
:return:
"""
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
# Check thread
if not Core.IsProcessorThread(inGSettings=inGSettings):
if inGSettings["Logger"]: inGSettings["Logger"].warning(f"RDP def was called not from processor queue - activity will be append in the processor queue.")
@@ -1940,7 +2277,7 @@
Connector.Session(lRDPConfigurationItem)
return True
-
[docs]def RDPSessionMonitorStop(inGSettings, inRDPSessionKeyStr):
+
[docs]def RDPSessionMonitorStop(inRDPSessionKeyStr, inGSettings = None):
"""
Stop monitoring the RDP session by the Orchestrator process. Current def don't kill RDP session - only stop to track it (it can give )
@@ -1958,11 +2295,12 @@
:param inRDPSessionKeyStr: RDP Session string key - need for the further identification
:return: True every time :>
"""
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
lResult = True
inGSettings["RobotRDPActive"]["RDPList"].pop(inRDPSessionKeyStr,None) # Remove item from RDPList
return lResult
-
[docs]def RDPSessionLogoff(inGSettings, inRDPSessionKeyStr, inBreakTriggerProcessWOExeList = None):
+
[docs]def RDPSessionLogoff(inRDPSessionKeyStr, inBreakTriggerProcessWOExeList = None, inGSettings = None):
"""
Logoff the RDP session from the Orchestrator process (close all apps in session when logoff)
@@ -1982,6 +2320,7 @@
:param inBreakTriggerProcessWOExeList: List of the processes, which will stop the execution. Example ["notepad"]
:return: True - logoff is successful
"""
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
if inBreakTriggerProcessWOExeList is None: inBreakTriggerProcessWOExeList = []
lResult = True
# Check thread
@@ -2009,7 +2348,7 @@
inGSettings["RobotRDPActive"]["RDPList"].pop(inRDPSessionKeyStr,None) # Remove item from RDPList
return lResult
-
[docs]def RDPSessionResponsibilityCheck(inGSettings, inRDPSessionKeyStr):
+
[docs]def RDPSessionResponsibilityCheck(inRDPSessionKeyStr, inGSettings = None):
"""
DEVELOPING, MAYBE NOT USEFUL Check RDP Session responsibility TODO NEED DEV + TEST
@@ -2017,6 +2356,7 @@
:param inRDPSessionKeyStr: RDP Session string key - need for the further identification
:return: True every time
"""
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
# Check thread
if not Core.IsProcessorThread(inGSettings=inGSettings):
if inGSettings["Logger"]: inGSettings["Logger"].warning(f"RDP def was called not from processor queue - activity will be append in the processor queue.")
@@ -2052,7 +2392,7 @@
lDoCheckResponsibilityCountCurrent+=1
return True
-
[docs]def RDPSessionProcessStartIfNotRunning(inGSettings, inRDPSessionKeyStr, inProcessNameWEXEStr, inFilePathStr, inFlagGetAbsPathBool=True):
+
[docs]def RDPSessionProcessStartIfNotRunning(inRDPSessionKeyStr, inProcessNameWEXEStr, inFilePathStr, inFlagGetAbsPathBool=True, inGSettings = None):
"""
Start process in RDP if it is not running (check by the arg inProcessNameWEXEStr)
@@ -2076,6 +2416,7 @@
:param inFlagGetAbsPathBool: True - get abs path from the relative path in inFilePathStr. False - else case
:return: True every time :)
"""
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
# Check thread
lResult = True
if not Core.IsProcessorThread(inGSettings=inGSettings):
@@ -2098,7 +2439,7 @@
inRDPConfigurationItem=inGSettings["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr])
return lResult
-
[docs]def RDPSessionCMDRun(inGSettings, inRDPSessionKeyStr, inCMDStr, inModeStr="CROSSCHECK"):
+
[docs]def RDPSessionCMDRun(inRDPSessionKeyStr, inCMDStr, inModeStr="CROSSCHECK", inGSettings = None):
"""
Send CMD command to the RDP session "RUN" window
@@ -2126,6 +2467,7 @@
"IsResponsibleBool": True|False # Flag is RDP is responsible - works only when inModeStr = CROSSCHECK
}
"""
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
lResult = {
"OutStr": None, # Result string
"IsResponsibleBool": False # Flag is RDP is responsible - works only when inModeStr = CROSSCHECK
@@ -2151,7 +2493,7 @@
inRDPConfigurationItem=inGSettings["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr])
return lResult
-
[docs]def RDPSessionProcessStop(inGSettings, inRDPSessionKeyStr, inProcessNameWEXEStr, inFlagForceCloseBool):
+
[docs]def RDPSessionProcessStop(inRDPSessionKeyStr, inProcessNameWEXEStr, inFlagForceCloseBool, inGSettings = None):
"""
Send CMD command to the RDP session "RUN" window.
@@ -2173,6 +2515,7 @@
:param inFlagForceCloseBool: True - force close the process. False - safe close the process
:return: True every time
"""
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
# Check thread
if not Core.IsProcessorThread(inGSettings=inGSettings):
if inGSettings["Logger"]: inGSettings["Logger"].warning(f"RDP def was called not from processor queue - activity will be append in the processor queue.")
@@ -2196,7 +2539,7 @@
Connector.SessionCMDRun(inSessionHex=lSessionHex, inCMDCommandStr=lCMDStr, inModeStr="CROSSCHECK", inLogger=inGSettings["Logger"], inRDPConfigurationItem=inGSettings["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr])
return lResult
-
[docs]def RDPSessionFileStoredSend(inGSettings, inRDPSessionKeyStr, inHostFilePathStr, inRDPFilePathStr):
+
[docs]def RDPSessionFileStoredSend(inRDPSessionKeyStr, inHostFilePathStr, inRDPFilePathStr, inGSettings = None):
"""
Send file from Orchestrator session to the RDP session using shared drive in RDP (see RDP Configuration Dict, Shared drive)
@@ -2218,6 +2561,7 @@
:param inRDPFilePathStr: !Absolute! path to the destination file location on the RDP side. Example: "C:\\RPA\\TESTDIR\\Test.py"
:return: True every time
"""
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
# Check thread
if not Core.IsProcessorThread(inGSettings=inGSettings):
if inGSettings["Logger"]: inGSettings["Logger"].warning(f"RDP def was called not from processor queue - activity will be append in the processor queue.")
@@ -2240,7 +2584,7 @@
Connector.SessionCMDRun(inSessionHex=lSessionHex, inCMDCommandStr=lCMDStr, inModeStr="LISTEN", inClipboardTimeoutSec = 120, inLogger=inGSettings["Logger"], inRDPConfigurationItem=inGSettings["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr])
return lResult
-
[docs]def RDPSessionFileStoredRecieve(inGSettings, inRDPSessionKeyStr, inRDPFilePathStr, inHostFilePathStr):
+
[docs]def RDPSessionFileStoredRecieve(inRDPSessionKeyStr, inRDPFilePathStr, inHostFilePathStr, inGSettings = None):
"""
Recieve file from RDP session to the Orchestrator session using shared drive in RDP (see RDP Configuration Dict, Shared drive)
@@ -2262,6 +2606,7 @@
:param inHostFilePathStr: Relative or absolute path to the file location on the Orchestrator side. Example: "TESTDIR\\Test.py"
:return: True every time
"""
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
# Check thread
if not Core.IsProcessorThread(inGSettings=inGSettings):
if inGSettings["Logger"]: inGSettings["Logger"].warning(f"RDP def was called not from processor queue - activity will be append in the processor queue.")
@@ -2287,13 +2632,14 @@
# # # # # Start orchestrator
# # # # # # # # # # # # # # # # # # # # # # #
-
[docs]def GSettingsAutocleaner(inGSettings):
+
[docs]def GSettingsAutocleaner(inGSettings=None):
"""
HIDDEN Interval gSettings auto cleaner def to clear some garbage.
:param inGSettings: Global settings dict (singleton)
:return: None
"""
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
while True:
time.sleep(inGSettings["Autocleaner"]["IntervalSecFloat"]) # Wait for the next iteration
lL = inGSettings["Logger"]
@@ -2321,13 +2667,32 @@
from .. import __version__ # Get version from the package
-
def Orchestrator(inGSettings, inDumpRestoreBool = True, inRunAsAdministratorBool = True):
+
[docs]def Start(inDumpRestoreBool = True, inRunAsAdministratorBool = True):
+
"""
+
Start the orchestrator threads execution
+
+
:param inDumpRestoreBool: True - restore data from the dumo
+
:param inRunAsAdministratorBool: True - rerun as admin if not
+
:return:
+
"""
+
Orchestrator(inDumpRestoreBool = True, inRunAsAdministratorBool = True)
+
+
[docs]def Orchestrator(inGSettings=None, inDumpRestoreBool = True, inRunAsAdministratorBool = True):
+
"""
+
Main def to start orchestrator
+
+
:param inGSettings:
+
:param inDumpRestoreBool:
+
:param inRunAsAdministratorBool:
+
:return:
+
"""
lL = inGSettings["Logger"]
# https://stackoverflow.com/questions/130763/request-uac-elevation-from-within-a-python-script
if not OrchestratorIsAdmin() and inRunAsAdministratorBool==True:
OrchestratorRerunAsAdmin()
else:
# Code of your program here
+
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
#mGlobalDict = Settings.Settings(sys.argv[1])
global gSettingsDict
gSettingsDict = inGSettings # Alias for old name in alg
@@ -2375,6 +2740,9 @@
lItemDef = getattr(lModule,lItemDefNameStr)
if callable(lItemDef): inGSettings["ProcessorDict"]["AliasDefDict"][lItemDefNameStr]=lItemDef
+
#Load all defs from sys.modules
+
ActivityItemDefAliasModulesLoad()
+
#Инициализация настроечных параметров
lDaemonLoopSeconds=gSettingsDict["SchedulerDict"]["CheckIntervalSecFloat"]
lDaemonActivityLogDict={} #Словарь отработанных активностей, ключ - кортеж (<activityType>, <datetime>, <processPath || processName>, <processArgs>)
@@ -2409,6 +2777,9 @@
lAutocleanerThread.start() # Start the thread execution.
if lL: lL.info("Autocleaner thread has been started") #Logging
+
# Set flag that orchestrator has been initialized
+
inGSettings["HiddenIsOrchestratorInitializedBool"] = True
+
# Orchestrator start activity
if lL: lL.info("Orchestrator start activity run") #Logging
for lActivityItem in gSettingsDict["OrchestratorStart"]["ActivityList"]:
@@ -2430,8 +2801,7 @@
gDaemonActivityLogDictRefreshSecInt = 10 # The second period for clear lDaemonActivityLogDict from old items
gDaemonActivityLogDictLastTime = time.time() # The second perioad for clean lDaemonActivityLogDict from old items
-
# Set flag that orchestrator has been initialized
-
inGSettings["HiddenIsOrchestratorInitializedBool"] = True
+
while True:
try:
@@ -2489,7 +2859,7 @@
#Уснуть до следующего прогона
time.sleep(lDaemonLoopSeconds)
except Exception as e:
-
if lL: lL.exception(f"Scheduler: Exception has been catched in Scheduler module. Global error")
+
if lL: lL.exception(f"Scheduler: Exception has been catched in Scheduler module. Global error")
# Backward compatibility below to 1.2.0
def __deprecated_orchestrator_start__():
diff --git a/Wiki/ENG_Guide/html/_modules/pyOpenRPA/Robot/UIDesktop.html b/Wiki/ENG_Guide/html/_modules/pyOpenRPA/Robot/UIDesktop.html
index 5cfcb030..44d66028 100644
--- a/Wiki/ENG_Guide/html/_modules/pyOpenRPA/Robot/UIDesktop.html
+++ b/Wiki/ENG_Guide/html/_modules/pyOpenRPA/Robot/UIDesktop.html
@@ -109,6 +109,7 @@
3. gSettings Template
4. How to use
5. UAC - User Access Control
+
6. Defs Managers
AGENT
diff --git a/Wiki/ENG_Guide/html/_sources/Orchestrator/02_Defs.rst.txt b/Wiki/ENG_Guide/html/_sources/Orchestrator/02_Defs.rst.txt
index 64e42643..e9857c70 100644
--- a/Wiki/ENG_Guide/html/_sources/Orchestrator/02_Defs.rst.txt
+++ b/Wiki/ENG_Guide/html/_sources/Orchestrator/02_Defs.rst.txt
@@ -26,6 +26,10 @@ Group GSettings...
######################
Basic defs to work with singleton gSettings.
+Group Storage...
+######################
+Defs to work with special locations in Orchestrator: Robot, User (TODO), User + Robot (TODO)
+
Group OS...
######################
Interaction with shell on the Orchestrator user session.
diff --git a/Wiki/ENG_Guide/html/_sources/Orchestrator/06_Defs Managers.rst.txt b/Wiki/ENG_Guide/html/_sources/Orchestrator/06_Defs Managers.rst.txt
new file mode 100644
index 00000000..63b74345
--- /dev/null
+++ b/Wiki/ENG_Guide/html/_sources/Orchestrator/06_Defs Managers.rst.txt
@@ -0,0 +1,52 @@
+####################################
+6. Defs Managers
+####################################
+
+**************************************************
+Process (General)
+**************************************************
+
+.. code-block:: python
+
+ # EXAMPLE
+ from pyOpenRPA.Orchestrator import Managers
+ lProcess = Orchestrator.Managers.Process(inAgentHostNameStr="PC-DESKTOP",inAgentUserNameStr="ND", inProcessNameWOExeStr="notepad",inStartCMDStr="notepad")
+
+
+.. automodule:: pyOpenRPA.Orchestrator.Managers.Process
+ :members:
+ :autosummary:
+
+
+**************************************************
+Process (Details)
+**************************************************
+
+.. automodule:: pyOpenRPA.Orchestrator.Managers.Process
+ :members:
+ :autosummary:
+
+
+**************************************************
+ControlPanel (General)
+**************************************************
+
+.. code-block:: python
+
+ # EXAMPLE
+ from pyOpenRPA.Orchestrator import Managers
+ lCP = Managers.ControlPanel(inControlPanelNameStr="TestTTT",inRefreshHTMLJinja2TemplatePathStr="ControlPanel\\test.html", inJinja2TemplateRefreshBool = True)
+
+
+.. automodule:: pyOpenRPA.Orchestrator.Managers.ControlPanel
+ :members:
+ :autosummary:
+
+
+**************************************************
+ControlPanel (Details)
+**************************************************
+
+.. automodule:: pyOpenRPA.Orchestrator.Managers.ControlPanel
+ :members:
+ :autosummary:
diff --git a/Wiki/ENG_Guide/html/genindex.html b/Wiki/ENG_Guide/html/genindex.html
index 2d0040b9..9b477533 100644
--- a/Wiki/ENG_Guide/html/genindex.html
+++ b/Wiki/ENG_Guide/html/genindex.html
@@ -109,6 +109,7 @@
- 3. gSettings Template
- 4. How to use
- 5. UAC - User Access Control
+- 6. Defs Managers
AGENT
@@ -183,7 +184,10 @@
A
+ |
C
+ |
D
|
G
+ |
I
|
J
|
M
|
O
@@ -197,20 +201,32 @@
A
+
C
+
+
+
D
+
+
G
+
I
+
+
J
|
|
@@ -263,6 +311,8 @@
M
+ - Manual2Auto() (pyOpenRPA.Orchestrator.Managers.Process.Process method), [1]
+
-
module
@@ -270,6 +320,10 @@
- pyOpenRPA.Agent.__Agent__
- pyOpenRPA.Orchestrator.__Orchestrator__
+
+ - pyOpenRPA.Orchestrator.Managers.ControlPanel, [1]
+
+ - pyOpenRPA.Orchestrator.Managers.Process, [1]
- pyOpenRPA.Orchestrator.Web.Basic
@@ -282,10 +336,30 @@
O
|
+
- |
- |
AGENT
diff --git a/Wiki/ENG_Guide/html/objects.inv b/Wiki/ENG_Guide/html/objects.inv
index 232df725..205a7190 100644
Binary files a/Wiki/ENG_Guide/html/objects.inv and b/Wiki/ENG_Guide/html/objects.inv differ
diff --git a/Wiki/ENG_Guide/html/py-modindex.html b/Wiki/ENG_Guide/html/py-modindex.html
index 6a2d6995..8119a8d3 100644
--- a/Wiki/ENG_Guide/html/py-modindex.html
+++ b/Wiki/ENG_Guide/html/py-modindex.html
@@ -112,6 +112,7 @@
- 3. gSettings Template
- 4. How to use
- 5. UAC - User Access Control
+ - 6. Defs Managers
AGENT
|
+
+ |
+
+ pyOpenRPA.Orchestrator.Managers.ControlPanel |
+ |
+
+ |
+
+ pyOpenRPA.Orchestrator.Managers.Process |
+ |
|
diff --git a/Wiki/ENG_Guide/html/search.html b/Wiki/ENG_Guide/html/search.html
index 5428fabd..46171bf0 100644
--- a/Wiki/ENG_Guide/html/search.html
+++ b/Wiki/ENG_Guide/html/search.html
@@ -112,6 +112,7 @@
- 3. gSettings Template
- 4. How to use
- 5. UAC - User Access Control
+- 6. Defs Managers
AGENT
diff --git a/Wiki/ENG_Guide/html/searchindex.js b/Wiki/ENG_Guide/html/searchindex.js
index dfabaa5e..d4f8fe8f 100644
--- a/Wiki/ENG_Guide/html/searchindex.js
+++ b/Wiki/ENG_Guide/html/searchindex.js
@@ -1 +1 @@
-Search.setIndex({docnames:["01_HowToInstall","02_RoadMap","03_Copyrights_Contacts","Agent/02_Defs","Orchestrator/01_Orchestrator","Orchestrator/02_Defs","Orchestrator/03_gSettingsTemplate","Orchestrator/04_HowToUse","Orchestrator/05_UAC","Robot/01_Robot","Robot/02_Defs","Robot/03_HowToUse","Robot/04_Dependencies","Studio/01_Studio","Studio/02_HowToUse","index"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,"sphinx.ext.todo":2,"sphinx.ext.viewcode":1,sphinx:56},filenames:["01_HowToInstall.rst","02_RoadMap.rst","03_Copyrights_Contacts.rst","Agent\\02_Defs.rst","Orchestrator\\01_Orchestrator.rst","Orchestrator\\02_Defs.rst","Orchestrator\\03_gSettingsTemplate.rst","Orchestrator\\04_HowToUse.rst","Orchestrator\\05_UAC.rst","Robot\\01_Robot.rst","Robot\\02_Defs.rst","Robot\\03_HowToUse.rst","Robot\\04_Dependencies.rst","Studio\\01_Studio.rst","Studio\\02_HowToUse.rst","index.rst"],objects:{"pyOpenRPA.Agent":{__Agent__:[3,0,0,"-"]},"pyOpenRPA.Agent.__Agent__":{OSCMD:[3,1,1,""],OSFileBinaryDataBase64StrAppend:[3,1,1,""],OSFileBinaryDataBase64StrCreate:[3,1,1,""],OSFileBinaryDataBase64StrReceive:[3,1,1,""],OSFileTextDataStrCreate:[3,1,1,""],OSFileTextDataStrReceive:[3,1,1,""],ProcessWOExeUpperUserListGet:[3,1,1,""]},"pyOpenRPA.Orchestrator":{__Orchestrator__:[5,0,0,"-"]},"pyOpenRPA.Orchestrator.Web":{Basic:[5,0,0,"-"]},"pyOpenRPA.Orchestrator.Web.Basic":{JSActivityListExecute:[5,1,1,""],JSProcessorActivityListAdd:[5,1,1,""]},"pyOpenRPA.Orchestrator.__Orchestrator__":{AgentActivityItemAdd:[5,1,1,""],AgentActivityItemExists:[5,1,1,""],AgentActivityItemReturnExists:[5,1,1,""],AgentActivityItemReturnGet:[5,1,1,""],AgentOSCMD:[5,1,1,""],AgentOSFileBinaryDataBase64StrAppend:[5,1,1,""],AgentOSFileBinaryDataBase64StrCreate:[5,1,1,""],AgentOSFileBinaryDataBase64StrReceive:[5,1,1,""],AgentOSFileBinaryDataBytesCreate:[5,1,1,""],AgentOSFileSend:[5,1,1,""],AgentOSFileTextDataStrCreate:[5,1,1,""],AgentOSFileTextDataStrReceive:[5,1,1,""],AgentProcessWOExeUpperUserListGet:[5,1,1,""],GSettingsAutocleaner:[5,1,1,""],GSettingsKeyListValueAppend:[5,1,1,""],GSettingsKeyListValueGet:[5,1,1,""],GSettingsKeyListValueOperatorPlus:[5,1,1,""],GSettingsKeyListValueSet:[5,1,1,""],OSCMD:[5,1,1,""],OSCredentialsVerify:[5,1,1,""],OSRemotePCRestart:[5,1,1,""],OrchestratorIsAdmin:[5,1,1,""],OrchestratorRerunAsAdmin:[5,1,1,""],OrchestratorRestart:[5,1,1,""],OrchestratorSessionRestore:[5,1,1,""],OrchestratorSessionSave:[5,1,1,""],ProcessDefIntervalCall:[5,1,1,""],ProcessIsStarted:[5,1,1,""],ProcessListGet:[5,1,1,""],ProcessStart:[5,1,1,""],ProcessStop:[5,1,1,""],ProcessorActivityItemAppend:[5,1,1,""],ProcessorActivityItemCreate:[5,1,1,""],ProcessorAliasDefCreate:[5,1,1,""],ProcessorAliasDefUpdate:[5,1,1,""],PythonStart:[5,1,1,""],RDPSessionCMDRun:[5,1,1,""],RDPSessionConnect:[5,1,1,""],RDPSessionDisconnect:[5,1,1,""],RDPSessionDublicatesResolve:[5,1,1,""],RDPSessionFileStoredRecieve:[5,1,1,""],RDPSessionFileStoredSend:[5,1,1,""],RDPSessionLogoff:[5,1,1,""],RDPSessionMonitorStop:[5,1,1,""],RDPSessionProcessStartIfNotRunning:[5,1,1,""],RDPSessionProcessStop:[5,1,1,""],RDPSessionReconnect:[5,1,1,""],RDPSessionResponsibilityCheck:[5,1,1,""],RDPTemplateCreate:[5,1,1,""],SchedulerActivityTimeAddWeekly:[5,1,1,""],UACKeyListCheck:[5,1,1,""],UACSuperTokenUpdate:[5,1,1,""],UACUpdate:[5,1,1,""],UACUserDictGet:[5,1,1,""],WebAuditMessageCreate:[5,1,1,""],WebCPUpdate:[5,1,1,""],WebListenCreate:[5,1,1,""],WebRequestParseBodyBytes:[5,1,1,""],WebRequestParseBodyJSON:[5,1,1,""],WebRequestParseBodyStr:[5,1,1,""],WebRequestParseFile:[5,1,1,""],WebURLConnectDef:[5,1,1,""],WebURLConnectFile:[5,1,1,""],WebURLConnectFolder:[5,1,1,""],WebUserInfoGet:[5,1,1,""],WebUserIsSuperToken:[5,1,1,""],WebUserUACHierarchyGet:[5,1,1,""]},"pyOpenRPA.Robot":{UIDesktop:[10,0,0,"-"]},"pyOpenRPA.Robot.UIDesktop":{Get_OSBitnessInt:[10,1,1,""],PWASpecification_Get_PWAApplication:[10,1,1,""],PWASpecification_Get_UIO:[10,1,1,""],UIOSelectorSecs_WaitAppear_Bool:[10,1,1,""],UIOSelectorSecs_WaitDisappear_Bool:[10,1,1,""],UIOSelectorUIOActivity_Run_Dict:[10,1,1,""],UIOSelector_Exist_Bool:[10,1,1,""],UIOSelector_FocusHighlight:[10,1,1,""],UIOSelector_GetChildList_UIOList:[10,1,1,""],UIOSelector_Get_BitnessInt:[10,1,1,""],UIOSelector_Get_BitnessStr:[10,1,1,""],UIOSelector_Get_UIO:[10,1,1,""],UIOSelector_Get_UIOActivityList:[10,1,1,""],UIOSelector_Get_UIOInfo:[10,1,1,""],UIOSelector_Get_UIOList:[10,1,1,""],UIOSelector_Highlight:[10,1,1,""],UIOSelector_SafeOtherGet_Process:[10,1,1,""],UIOSelector_SearchChildByMouse_UIO:[10,1,1,""],UIOSelector_SearchChildByMouse_UIOTree:[10,1,1,""],UIOSelector_TryRestore_Dict:[10,1,1,""],UIOSelectorsSecs_WaitAppear_List:[10,1,1,""],UIOSelectorsSecs_WaitDisappear_List:[10,1,1,""]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:function"},terms:{"0643":7,"100":6,"101":5,"1050":[5,6],"120":6,"1200":6,"121":5,"123":5,"127":5,"1680":[5,6],"1680x1050":[5,6],"1992":7,"2008":[0,15],"2012":0,"2019":15,"2021":1,"222":[4,6],"2999226":0,"300":6,"3389":[5,6],"3600":6,"3720":[0,10,11],"3720python":11,"3rd":15,"4100115560661986":15,"412":5,"443":5,"50000000":6,"600":6,"640x480":[5,6],"722":2,"77767775":5,"77777sdfsdf77777dsfdfsf77777777":5,"8081":6,"906":2,"\u0432":10,"\u0432\u0445\u043e\u0434\u043d\u043e\u0439":10,"\u0432\u044b\u043a\u0438\u043d\u0443\u0442\u044c":10,"\u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c":10,"\u043a":10,"\u043a\u043e\u043d\u043d\u0435\u043a\u0442":10,"\u043b\u043e\u0433\u0433\u0435\u0440\u0430":6,"\u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f":6,"\u043d\u0435":10,"\u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0438":10,"\u043e\u0448\u0438\u0431\u043a\u0443":10,"\u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430":6,"\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c":10,"\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443":10,"\u043f\u0443\u0441\u0442\u043e\u0433\u043e":10,"\u0441\u043b\u0443\u0447\u0430\u0435":10,"\u0441\u043e\u0437\u0434\u0430\u0442\u044c":6,"\u0441\u043f\u0438\u0441\u043a\u0430":10,"\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f":10,"\u0444\u0430\u0439\u043b":6,"\u0444\u043b\u0430\u0433":10,"\u0447\u0442\u043e":10,"\u044d\u043b\u0435\u043c\u0435\u043d\u0442":10,"byte":5,"case":[3,4,5,6,10,11],"catch":[3,5,6],"class":11,"default":[3,5,6,11,14],"float":[4,6,10],"function":[2,3,5,6,9,10,11],"import":[4,5,6,7,9,10,11],"int":[4,5,10,11],"long":2,"new":[2,4,5,6,7],"return":[3,5,6,10,11],"switch":12,"true":[3,5,6,7,8,9,10,11],"try":[5,7,10],"var":5,"while":5,Abs:6,Are:0,DOS:[3,5],EXE:[3,5],For:[0,7,11,14],Has:6,NOT:5,RUS:[1,15],The:[0,4,6,9],USEFUL:5,USe:[6,8],Use:[2,5,7],Will:[5,6],__agent__:15,__agentactivityreturndictitemcreate__:6,__agentdictitemcreate__:6,__create__:6,__main__:7,__name__:7,__orchestrator__:15,__statisticsdict__:6,__uacclientadmincreate__:[6,7],_sessionlast_rdplist:5,_sessionlast_storagedict:5,a2o:5,abil:11,abl:15,about:[2,4,5,6],abs:[3,5],absolut:[2,3,5,6,7,15],abspath:7,access:[5,6,7,15],accessus:6,action:[11,15],activ:[4,5,6,8,10,11,14],activitydict:[6,8],activityitem:[3,5],activityitemdict:5,activitylist:6,activitylistappendprocessorqueuebool:[6,8],activitylistexecut:5,activitylistexecutebool:[6,8],activitynam:11,activitytimelist:6,actual:[5,15],add:[5,6,7,11],addhandl:6,addit:[5,15],address:[5,6],addressstr:6,admin:[5,8],admindict:[6,8],administr:[5,7],after:[4,5,6,7,10,14],agent:6,agentactivityitemadd:5,agentactivityitemexist:5,agentactivityitemreturnexist:5,agentactivityitemreturnget:5,agentactivitylifetimesecfloat:6,agentactivityreturndict:6,agentactivityreturnlifetimesecfloat:6,agentconnectionlifetimesecfloat:6,agentdict:[5,6],agentfilechunkbytessizeint:6,agentfilechunkcheckintervalsecfloat:6,agentkeydict:[6,8],agentkeystr:[6,8],agentlimitlogsizebytesint:6,agentloopsleepsecfloat:6,agentoscmd:5,agentosfilebinarydatabase64strappend:5,agentosfilebinarydatabase64strcr:5,agentosfilebinarydatabase64strrec:5,agentosfilebinarydatabytescr:5,agentosfilesend:5,agentosfiletextdatastrcr:5,agentosfiletextdatastrrec:5,agentprocesswoexeupperuserlistget:5,algorithm:[4,15],algorythm:[4,6,15],alia:[4,5,6],aliasdefdict:[4,5,6],all:[4,5,6,7,8,10,11,15],allow:[5,6,7,8,9,11,15],alreadi:[5,11],amd64:[0,10,11],analyz:15,ani:[0,4,5,11,14,15],anoth:[5,10,14],anr:5,apach:2,app:[3,5,10,15],appear:[5,10],append:[4,5,6,8,11],appli:[4,6],applic:[4,5,6,10,11],approach:11,architectur:15,archiv:[0,6],arg:[4,5,6],argdict:[4,5,6],arggset:[4,5,6],arglist:[4,5,6],arglogg:[4,5,6],argument:5,argvaluestr:5,articl:[1,15],artifici:11,asctim:6,assert:11,associ:5,asweigart:2,async:[4,5],asynchonu:4,attent:[3,4,5,7,8,11,14,15],attribut:[4,6,10,11],audit:5,authent:6,authentif:5,authtoken:6,authtokensdict:6,auto:5,autoclean:[4,6],autom:[1,12,15],automat:[4,6,14],automationsearchmouseel:10,avail:[5,6,7,11],b4ff:7,b64decod:3,backend:[10,11],backward:5,base64:[3,5],base:[4,5,15],base_wrapp:11,basehttprequesthandl:5,basic:[4,6,7,15],beauti:[3,5],becaus:[4,5,11],been:[0,5,6,11,15],befor:[5,6],beginwith:[5,6],below:[4,7,14,15],best:[9,15],between:[4,5,6,7],big:[5,11,15],binari:[3,5],bit:[2,5,10,11],block:6,bodi:[5,6],bool:[4,5,6,11],boppreh:2,both:[5,10,11],box:7,branch:0,browser:[6,14],bsd:2,bug:2,build:[2,7,15],built:0,busi:[4,5,11,15],button:[6,8],cabinetwclass:11,cach:6,calcfram:11,call:[4,5,7,10],callabl:5,can:[2,3,4,5,6,7,8,9,10,11,15],cancel:10,cant:4,captur:15,catchperiodsecfloat:6,central:4,certfilepempathstr:6,certif:5,chang:[6,15],check:[5,6,7,10,11,15],checkintervalsecfloat:6,child:[10,11],children:11,choos:10,chrome:11,chunk:6,class_nam:11,class_name_r:11,classif:11,claus:2,cleaner:5,clear:[5,6,11],click:[9,11],client:[5,6],clientrequesthandl:6,clipboard:5,close:[5,6,11],cmd:[3,5,6,8,14,15],cmdinputbool:[6,8],code:[4,5,11],collect:6,com:[0,2,11,12],come:[3,5,15],comma:4,command:[3,5,6,11],commerci:15,common:11,commun:5,compact:2,compani:[2,5,15],compat:[5,11],compex:4,compil:15,complet:[0,6],complex:4,compon:15,comput:[11,15],concept:15,condit:[10,11],config:[7,10],configur:[5,6,7,10,15],congratul:15,connect:[5,6],connectioncountint:6,connectionfirstqueueitemcountint:6,consist:4,consol:[6,11,14,15],consolid:[4,15],contact:15,contain:[5,6,10,11,14],content:[3,5,6],continu:5,control:[4,5,6,7,15],control_typ:11,control_type_r:11,controlpanel:[6,7],controlpaneldict:6,controlpanelkeyallowedlist:6,controlpanelrefreshintervalsecfloat:6,convent:11,cooki:6,copi:11,copyright:15,core:[1,4,15],cost:[1,15],cp1251:[3,5],cp866:[3,5],cp_test:7,cp_versioncheck:7,cpdict:6,cpkei:6,cpkeydict:[6,8],cpkeystr:[6,8],creat:[2,3,4,5,6,7,9,15],credenti:5,crosscheck:5,css:12,ctrl_index:11,current:[3,4,5,6,7,8,11],custom:[4,8,11],cv2:11,daemon:[3,5],dai:5,dashboard:5,data:[3,6],datasetlast:6,datetim:[6,7],deadlin:2,dear:15,decentr:4,decid:15,decod:3,def:[4,6,7,8,9,15],defaliastest:[4,6],defnamestr:6,defsettingsupdatepathlist:6,depend:15,deploi:5,deprec:6,depth:11,depth_end:11,depth_start:11,depth_stop:11,depthbit:[5,6],descipt:11,descript:[10,11,15],desktop:[1,4,5,6,10,15],desktopus:5,destin:[5,10],detail:[4,5],detect:[6,10,11],determin:5,dev:5,develop:[5,11,15],dict:[3,5,6,10,11,15],dictionari:[4,6],differ:4,directori:[5,11],disappear:10,disc:5,disconnect:[5,6],distribut:15,divis:15,dll:15,doc:[11,15],document:[10,15],docutil:[3,5,10],dodict:6,doe:14,doen:5,doesn:10,domain:6,domainadstr:6,domainupperstr:5,domainus:5,don:[3,5,6,8],done:1,dont:[5,6,8],doubl:14,download:0,dp0:11,draw:10,drive:[5,6],driver:11,dsd:[4,6],dump:[6,7],dumploglist:6,dumploglistcountint:6,dumploglisthashstr:6,dumploglistrefreshintervalsecfloat:6,duplic:5,durat:6,dynam:11,each:[5,6,11,15],earli:[3,5],edit:15,editor:14,elem:11,element:[10,11],elif:7,els:[3,5,6,7,10],empti:[5,6,8],enabl:[5,11],encapsul:[3,15],encod:[3,5],end:[4,5],eng:[1,15],enjoi:5,enterpris:15,env:6,enviro:11,environ:5,equal:[5,6],equalcas:[5,6],etc:5,even:5,everi:[5,6],everydai:5,exact:11,exampl:[3,4,5,6,8,9,10],except:[0,5,7],exe:[0,5,9,10,11],execut:[3,4,5,6,8,13,15],executebool:6,exist:[3,5,6,10,11],expens:15,expir:5,explor:[11,14],express:11,extens:[5,11],extra:5,extract:[5,11,15],facebook:2,fals:[3,5,6,7,10],fast:[2,15],featur:[4,5,6,8,15],feel:2,field:[5,6],file:[3,5,6],filebodybyt:5,filehandl:6,filemanag:6,filemod:6,filenamestr:5,fileurl:6,fileurlfilepathdict:6,fileurlfilepathdict_help:6,fill:[5,6],find:[2,4,9,10,11],find_element_by_nam:11,find_window:[10,11],firefox:11,first:[7,11,15],flag:[3,5,6],flagaccess:6,flagaccessdefrequestglobalauthent:6,flagcredentialsask:6,flagdonotexpir:6,flagsessionisact:[5,6],flaguseallmonitor:[5,6],flase:[3,5],flexibl:4,focu:10,folder:[5,7,11,15],follow:[0,8,14,15],forc:[5,15],forget:6,format:[3,5],formatt:6,found:11,founder:15,framework:[10,11,12,15],free:[2,15],fridai:5,friendly_class_nam:11,friendly_class_name_r:11,from:[0,3,4,5,6,7,9,10,15],front:5,full:[5,6],fulli:11,fullscreen:[5,6],fullscreenbool:[6,8],fullscreenrdpsessionkeystr:6,functional:7,further:5,garbag:5,gener:[5,6,15],get:[5,6,10,11,15],get_osbitnessint:10,getcontrol:10,getlogg:6,git:[0,5,6,8],github:2,gitlab:[0,1,2,11,15],give:[5,6,8],given:5,global:[3,5,15],goe:4,going:15,good:[4,15],graphic:[11,15],great:15,group:[8,15],gset:[4,7,15],gsettingsautoclean:5,gsettingsdict:5,gsettingskeylistvalueappend:5,gsettingskeylistvalueget:5,gsettingskeylistvalueoperatorplu:5,gsettingskeylistvalueset:5,gui:[3,4,5,10,11,12,15],guid:[1,5,6],guidstr:[5,6],gurbag:6,habr:[1,15],handl:6,handlebar:12,handler:[5,6],hard:[5,6,8],has:[0,2,4,5,6,8,11],have:5,height:[5,6],help:[0,2,5,15],helpfulli:10,here:[7,9,10,11,15],hex:[5,6,11],hidden:5,hiddenisorchestratoriniti:6,hierarchi:[5,11,14],highlight:[10,11,14],hightlight:14,homepag:2,host:[5,6],hostnam:5,hostnameupperstr:6,how:[10,15],html:[1,3,5,10,11,15],htmlrenderdef:6,http:[0,2,3,4,5,6,10,11,12,15],human:5,identif:[5,11],identifi:11,ignor:[5,6],ignorebool:[6,8],imag:15,imaslov:7,implement:11,inactionnam:10,inactivityitemdict:5,inactivitylist:5,inaddressstr:5,inadisdefaultbool:[5,7],inadloginstr:[5,7],inadstr:[5,7],inagentfilepathstr:5,inaliasstr:5,inarg1str:5,inargdict:5,inarggset:5,inarggsettingsstr:5,inarglist:5,inargloggerstr:5,inargu:11,inargumentlist:10,inbackend:10,inbreaktriggerprocesswoexelist:5,incertfilepempathstr:5,incheckintervalsecfloat:5,incloseforcebool:5,includ:10,incmdencodingstr:[3,5],incmdstr:[3,5],incontenttypestr:5,incontrolspecificationarrai:10,incpkeystr:5,indef:5,indefargdict:5,indefarggsettingsnamestr:5,indefarglist:5,indefargloggernamestr:5,indefnamestr:5,indepthbitint:5,index:[4,5,6,10,11],indict:6,indomainstr:5,indumprestorebool:7,inel:[9,10,11],inelementspecif:10,inencodingstr:[3,5],inexecuteinnewthreadbool:5,infiledatabase64str:[3,5],infiledatabyt:5,infiledatastr:[3,5],infilepathstr:[3,5],inflagforceclosebool:5,inflaggetabspathbool:5,inflagraiseexcept:[9,10,11],inflagwaitallinmo:10,info:[5,6,7,11],infolderpathstr:5,inforcebool:5,inform:[4,5],infrastructur:15,ingset:[3,4,5,7],ingsettingsclientdict:6,inguidremovebool:5,inguidstr:5,inhashkeystr:6,inheightpxint:5,inherit:11,inhostfilepathstr:5,inhostnamestr:5,inhoststr:[5,6],inhtmlrenderdef:5,inintervalasyncbool:5,inintervalsecfloat:5,init:[4,5,6,7,10],initdatetim:6,initi:[5,6],injsinitgeneratordef:5,injsongeneratordef:5,inkeyfilepathstr:5,inkeylist:5,inkeystr:6,inkwargumentobject:10,inlogg:[5,6],inloginstr:[5,6],inmatchtypestr:5,inmessagestr:5,inmethodstr:5,inmodestr:[4,5,6,7],inmodulepathstr:5,inoperationcodestr:5,inorchestratorfilepathstr:5,inpasswordstr:[5,6],inpathstr:5,inportint:5,inportstr:[5,6],inprocessnamewexestr:5,inprocessnamewoexelist:[3,5],inprocessnamewoexestr:5,inrdpfilepathstr:5,inrdpsessionkeystr:[5,6],inrdptemplatedict:5,inrequest:5,inreturn:6,inrolehierarchyalloweddict:[5,7],inrolekeylist:5,inrowcountint:6,inrunasyncbool:[3,5],insendoutputtoorchestratorlogsbool:[3,5],insert:7,inserverkeystr:5,inshareddrivelist:5,inspecificationlist:[9,10,11],inspecificationlistlist:10,instal:15,instanc:[4,5,10,11],instopprocessnamewoexestr:5,insupertokenstr:[5,7],intellig:11,interact:[4,5,10],interest:5,interfac:[4,5,7,11,15],internet:14,interpret:4,interv:[5,6],intervalsecfloat:6,intimehhmmstr:5,inuioselector:10,inurllist:[5,7],inurlstr:5,inusebothmonitorbool:5,inusernamestr:5,inuserstr:5,invalu:5,inwaitsec:10,inweekdaylist:5,inwidthpxint:5,is_en:11,is_vis:11,islistenbool:6,isresponsiblebool:5,issu:2,it4busi:2,it4busin:2,item:[4,5,6,10,11],iter:[5,6],ivan:15,ivanmaslov:2,javascript:5,join:7,jsactivitylistexecut:5,jsinitgeneratordef:6,json:[3,4,5,6],jsongeneratordef:6,jsprocessoractivitylistadd:5,jsrender:12,jsview:12,just:11,kb2999226:0,keep:4,kei:[5,6,11],keyboard:[2,12,15],keyfilepathstr:6,keystr:6,kill:5,killer:15,know:4,known:15,kwarg:4,lactivityitem:5,laliasstr:5,last:6,later:5,latest:11,launch:5,leaflet:[1,15],left:4,len:6,less:[1,15],let:15,level:[11,15],levelnam:6,lib:11,librari:11,licens:15,life:6,lifetim:6,lifetimerequestsecfloat:6,lifetimesecfloat:6,light:4,like:[4,15],line:11,link:[4,5,6,15],linkedin:2,list:[3,4,5,6,10,11,15],listen:5,listendict:6,listread:6,litem:11,littl:8,llogger:5,lnotepadokbutton:9,load:[5,6],local:5,localhost:6,locat:5,log:[3,5,6,7,8,15],logger:[5,6,7],loggerdumploghandleradd:6,loggerhandlerdumploglist:6,login:[5,6,7],logoff:[5,6],logout:15,logviewerbool:[6,8],lol:14,look:[4,5,6,8,14,15],lookmachinescreenshot:6,loop:[6,11],low:11,lowercas:6,lprocessisstartedbool:5,lprocesslist:5,lpyopenrpa_settingsdict:10,lpyopenrpasourcefolderpathstr:7,lrdpitemdict:5,lrdptemplatedict:5,lrequest:5,lresult:6,lresultdict:[5,6],luacclientdict:7,lwebauditmessagestr:5,lxml:12,mac:15,machin:[0,5,6,7,15],machina:6,mail:2,main:[4,5,6,7,11],maintain:15,make:11,makedir:6,manag:5,mani:[2,4,10,15],manipul:[5,8,15],markdown:[1,15],maslov:15,master:0,match:11,matchtyp:6,max:6,maxim:10,maximum:11,mayb:5,mechan:4,mega:[4,8],megafind:2,memori:5,menu:9,merg:5,messag:[5,6],method:[6,11],methodmatchurl:6,methodmatchurlbeforelist:6,methodolog:2,mhandlerdumploglist:6,microsoft:[0,11],minim:10,minut:6,miss:11,mit:[2,15],mmstr:6,mode:14,model:[2,11],modul:[4,5,6,7],moduletocal:5,mondai:5,monitor:5,more:[4,6,7,11],mous:15,mrobotlogg:6,mrobotloggerfh:6,mrobotloggerformatt:6,must:6,name:[4,5,6,7,10,11],namewoexestr:5,namewoexeupperstr:5,need:[0,2,3,4,5,6,7,8,10,11,15],nest:5,net:[3,5,10],never:5,newkeydict:5,newkeylist:5,newvalu:5,next:[5,11],non:15,none:[3,4,5,6,9,10,11],notat:[10,11],notepad:[3,5,9,10,11],noth:5,nothingbool:[6,8],now:[5,6,10],nul:11,object:[4,5,6,10,11,15],occupi:5,ocr:11,octet:5,off:[6,8],old:[5,6,7,10],onc:10,one:[6,7,8],onli:[0,3,5,6,8,10,11,15],onlin:15,op_code_1:5,open:[1,6,14,15],opencv:[0,12,15],openrpa52zzz:7,openrpa:[0,6],openrpa_32:14,openrpa_64:14,openrpaorchestr:11,openrparesourceswpy32:11,openrparesourceswpy64:11,openrparobotguix32:10,opensourc:15,oper:[0,5,7,15],opera:11,option:[5,6,8,11],orc:[5,6,8],orch:6,orchestr:[3,6,7],orchestratorisadmin:[5,7],orchestratormain:11,orchestratorrerunasadmin:[5,7],orchestratorrestart:5,orchestratorsessionrestor:[5,7],orchestratorsessionsav:5,orchestratorstart:6,order:[4,11,14],org:[2,11],oscmd:[3,5],oscredentialsverifi:5,osfilebinarydatabase64strappend:3,osfilebinarydatabase64strcr:3,osfilebinarydatabase64strrec:3,osfiletextdatastrcr:3,osfiletextdatastrrec:3,osremotepcrestart:[5,6],other:[10,11,15],our:11,out:5,outargu:11,outlin:10,output:[3,5,6],outstr:5,overwrit:6,own:[4,7,11,15],packag:[0,7,9,15],page:[5,6,8,9],page_sourc:11,pai:[4,7],paid:[1,15],panel:[5,6,7,8,14],param:[3,5],paramet:[3,4,5,6,10],parent:[10,11,14],pars:5,parti:15,pass:[5,6],password:[5,6],path:[3,5,6,7,11],paus:11,pdb:6,pdf:[1,15],pem:5,per:7,perfom:[11,15],perform:15,period:[5,6],perman:5,phone:4,pickl:5,pid:5,pil:12,pixel:[5,6],plan:5,platform:15,pleas:[5,15],plu:5,port:[5,6],portabl:[0,11],portint:6,possibl:15,post:[5,6],postfix:5,power:[5,15],powershel:[5,6],practic:[8,15],prefer:2,previou:5,print:[7,11],privat:5,procedur:5,process:[3,4,7,10,11,13,15],processbit:10,processdefintervalcal:5,processdetaillist:5,processisstart:5,processlistget:5,processnam:5,processor:[3,6,8,15],processoractivityitemappend:5,processoractivityitemcr:5,processoraliasdefcr:5,processoraliasdefupd:5,processordict:6,processstart:5,processstop:5,processwoexelist:5,processwoexeupperlist:5,processwoexeupperuserlistget:3,product:11,program:[5,6,9],progress:1,project:[4,15],properti:[8,15],protocol:4,prototyp:6,provid:[11,15],psutil:[7,12],pull:[6,8],purpos:2,push:6,pwa:11,pwaspecif:11,pwaspecification_get_pwaappl:10,pwaspecification_get_uio:10,pyautogui:[2,11,12,15],pycon:11,pymupdf:12,pyopenrpa:[0,1,2,4,6,7,8,9,10,11,13],pyopenrpa_uidesktopx32:10,pyopenrpa_uidesktopx64:10,pyopenrpadict:[6,8],pyrobot_cp:7,python32fullpath:10,python32processnam:10,python64fullpath:10,python64processnam:10,python:[0,4,9,10,12,14,15],pythonstart:5,pywin32:[2,12],pywinauto:[2,10,11,12],queue:[1,4,5,6,8],queuelist:6,r01:6,r01_integrationorderout:6,r01_orchestratortorobot:6,rais:5,rdp:[4,5,6,8],rdpactiv:6,rdpkei:5,rdpkeydict:[6,8],rdpkeystr:[6,8],rdplist:[5,6],rdpsession:15,rdpsessioncmdrun:5,rdpsessionconnect:[5,6],rdpsessiondisconnect:[5,6],rdpsessiondublicatesresolv:5,rdpsessionfilestoredreciev:5,rdpsessionfilestoredsend:5,rdpsessionkei:6,rdpsessionkeystr:6,rdpsessionlogoff:5,rdpsessionmonitorstop:5,rdpsessionprocessstartifnotrun:5,rdpsessionprocessstop:5,rdpsessionreconnect:[5,6],rdpsessionresponsibilitycheck:5,rdptemplatecr:5,read:[3,5,6],readi:0,readthedoc:11,receiv:5,reciev:[5,6],recognit:15,reconnect:[5,6],reconnectbool:[6,8],recoverydict:6,recurs:11,reestr_otgruzok:6,refer:15,refresh:6,refreshsecond:6,regener:5,regular:11,rel:[5,6,7],reliabl:[2,15],rememb:[6,8],remot:[5,6,15],remov:5,render:14,renderfunct:6,renderrobotr01:6,report:6,reqir:4,request:[5,6,12],requesttimeoutsecfloat:6,requir:[5,15],rerun:5,resolut:[5,6],resourc:[0,10,11,15],respons:[5,6],responsecontenttyp:6,responsedefrequestglob:6,responsefilepath:6,responsefolderpath:6,responsibilitycheckintervalsec:6,restart:[5,6,8],restartorchestr:6,restartorchestratorbool:[6,8],restartorchestratorgitpullbool:[6,8],restartpcbool:[6,8],restor:[7,10],restrict:15,restructuredtext:[3,5,10],result:[5,6,8,10,11],retart:5,returnbool:6,returnedbydatetim:6,rich_text:11,rich_text_r:11,right:[5,15],roadmap:15,robot:[4,5,6,7,8,9,10],robot_r01:6,robot_r01_help:6,robotlist:6,robotrdpact:[5,6],rolehierarchyalloweddict:6,root:[5,6],row:6,rpa01:5,rpa:[1,5,6,9,15],rpa_99:5,rpatestdirtest:5,rst:[3,5,10],ruledomainuserdict:6,rulemethodmatchurlbeforelist:6,run:[0,3,5,6,7,10,15],russia:[2,15],russian:15,safe:[3,5,10,15],safeti:5,same:10,save:5,schedul:[4,15],scheduleractivitytimeaddweekli:5,schedulerdict:6,scopesrcul:6,screen:[5,6,15],screenshot:[0,6,8,15],screenshotviewerbool:[6,8],script:[4,15],search:[5,15],sec:[5,6],second:[5,6,10,11],section:[5,10],secur:5,see:[0,5,6,7,9,10,15],select:10,selector:[10,11,14,15],selenium:[2,12,15],semant:[2,12],send:[3,5,6,8,15],send_kei:11,sent:[5,6],sequenc:4,server:[0,3,4,5,6,8,14,15],serverdict:6,serverinst:6,serverset:6,serverthread:6,sesion:[5,6],session:[3,5,6,15],sessionguidstr:6,sessionhex:[5,6],sessionisignoredbool:[5,6],sessioniswindowexistbool:[5,6],sessioniswindowresponsiblebool:[5,6],set:[3,5,6,7,8,10,15],set_trac:6,setformatt:6,setlevel:6,settingsinit:10,settingstempl:[4,7],settingsupd:7,setup:6,sever:[4,11,15],share:5,shareddrivelist:[5,6],shell:[5,15],should:6,show:[6,8],side:[5,6,8],signal:5,simplifi:11,sinc:15,singl:4,singleton:[3,5],size:6,skype:2,sleep:[6,11],socket:4,softwar:2,solut:[0,11,15],some:[2,4,5,6,8,15],soon:[1,15],sorri:15,sort:5,sourc:[3,4,5,7,10,15],sourceforg:[3,5,10],space:4,special:6,specialist:2,specif:11,specifi:5,sphinx:[4,15],ssl:5,standart:6,start:[0,3,5,6,7,11,14,15],statu:5,stdout:[6,7],stop:[5,11,15],storag:[6,15],storagedict:6,store:6,str:[4,5,6,10,11],stream:5,streamhandl:6,strftime:6,string:[3,5,10],struct:6,structur:[4,5,6],studio:[4,13,14],subprocess:11,success:5,successfulli:[0,5,6,11,15],sundai:5,supertoken:[5,7],superus:[5,7],supetoken:5,supplement:11,support:[0,4,7,11,14,15],symbol:4,sync:[4,5],synchroni:5,sys:[6,7,11],system:15,tablet:4,task:2,technic:[4,6],technicalsessionguidcach:6,telegram:2,templat:[7,15],terminolog:11,tesseract:12,test2:6,test:[3,5,6,7],testcontrolpanelkei:6,testdef:5,testdefalia:5,testdir:5,testdirtest:5,testrdp:6,text:[3,5,11,14],than:[4,6,10],thank:[2,15],theori:15,thi:[3,5,6,8,11,15],thought:5,thread:[4,5,6,8],threadidint:6,thursdai:5,thx:11,time:[5,6,11,15],timehh:6,titl:[9,10,11],title_r:11,todo:5,token:5,tokendatetim:6,too:[5,6,8],tool:[4,11,14],top:10,tor:15,track:5,transmiss:5,transmit:[3,4,5,6],tree:15,trigger:[5,6],triggercountint:6,ttt:[4,6],turn:[6,8],turpl:4,tutori:[1,15],txt:5,type:[5,6,7],uac:15,uackeylistcheck:5,uacsupertokenupd:[5,7],uacupd:[5,7],uacuserdictget:5,uia:[10,11],uidesktop:[9,10],uio:[10,14,15],uioactiv:[10,11],uioei:11,uioinfo:11,uioselector:10,uioselector_exist_bool:10,uioselector_focushighlight:[10,11],uioselector_get_bitnessint:10,uioselector_get_bitnessstr:10,uioselector_get_uio:[9,10,11],uioselector_get_uioactivitylist:10,uioselector_get_uioinfo:10,uioselector_get_uiolist:10,uioselector_getchildlist_uiolist:10,uioselector_highlight:10,uioselector_safeotherget_process:10,uioselector_searchchildbymouse_uio:10,uioselector_searchchildbymouse_uiotre:10,uioselector_tryrestore_dict:10,uioselectorsecs_waitappear_bool:10,uioselectorsecs_waitdisappear_bool:10,uioselectorssecs_waitappear_list:10,uioselectorssecs_waitdisappear_list:10,uioselectoruioactivity_run_dict:10,uiotre:11,under:15,understand:8,unicodelab:[0,2,11],univers:4,unix:15,unzip:0,updat:[5,6],upper:[3,5,6],url:[5,6],urllist:6,usag:[5,9,11],use:[0,3,4,5,6,8,10,15],used:5,useful:11,user:[3,4,5,6,7,10,11,15],user_99:5,user_pass_her:5,useradstr:6,usernam:5,usernameupperstr:5,userrpa:5,userupperstr:6,using:[5,11,15],utf:[3,5],util:[6,10,15],valu:[5,6,10],variant:5,ver:11,veri:[2,5],verifi:5,version:[7,11,14],versionstr:6,via:[2,5],video:11,viewer:[6,8,15],virtual:6,visibl:11,vision:[11,15],vista:0,visual:15,vms:5,wai:[5,7,11,15],wait:[3,5,10,11,14],want:[4,6,8,14,15],warn:[6,7],warningexecutionmorethansecfloat:6,web:[1,4,6,15],webaudit:5,webauditmessagecr:5,webcpupd:5,webdriv:11,weblistencr:[5,7],webrequestparsebodybyt:5,webrequestparsebodyjson:5,webrequestparsebodystr:5,webrequestparsefil:5,weburlconnectdef:5,weburlconnectfil:5,weburlconnectfold:5,webuserinfoget:5,webuserissupertoken:5,webuseruachierarchyget:5,wednesdai:5,week:5,weekdai:[5,6],weekdaylist:6,well:15,were:15,whatsapp:2,when:[4,5,6,7,10,14],where:[3,5,11,14],which:[2,4,5,6,9,10,11,15],who:6,why:4,width:[5,6],wiki:11,win32:[10,15],win32api:12,win:5,window:[0,3,5,6,10,12,15],winpython:2,without:[0,3,5,6,15],wmi:12,work:[5,6,8,11,15],workingdirectorypathstr:6,world:15,wpy32:[0,10,11],wpy64:[0,10,11],wrapper:10,write:[2,3,4,11,15],www:[2,11,12],x32:[0,10,12,14,15],x64:[0,10,12,14,15],xlsx:6,yoomonei:15,you:[0,2,3,4,5,6,7,8,9,10,11,15],your:[0,2,10,11],zip:0},titles:["1. How to install","2. Roadmap","3. Copyrights & Contacts","2. Defs","1. Description","2. Defs","3. gSettings Template","4. How to use","5. UAC - User Access Control","1. Description","2. Defs","3. How to use","4. Dependencies","1. Description","2. How to use","Welcome to pyOpenRPA\u2019s wiki"],titleterms:{The:[11,14,15],Use:11,__agent__:3,__orchestrator__:5,about:[8,11,15],access:[8,11],action:14,agent:[3,5,15],app:11,architectur:4,autom:11,basic:5,button:14,captur:11,check:0,choos:14,click:14,cmd:11,compon:[2,4],concept:4,configur:4,contact:2,content:[14,15],control:8,copyright:2,creat:11,ctrl:14,def:[3,5,10],definit:11,depend:[2,12],descript:[4,9,13,14],desktop:11,dict:[4,8],dll:11,donat:15,exampl:11,execut:11,expand:14,extract:14,file:11,founder:2,from:11,global:4,group:5,gset:[5,6],gui:14,guid:15,has:15,hold:14,hover:14,how:[0,4,7,11,14],imag:11,instal:0,interest:14,ivan:2,kei:14,keyboard:11,licens:2,list:14,main:15,manipul:11,maslov:2,modul:11,mous:[11,14],object:14,openrpa:11,orchestr:[4,5,8,15],parti:2,practic:11,process:5,processor:[4,5],properti:14,pyopenrpa:[3,5,15],python:[5,11],rdpsession:5,recognit:11,refer:[3,4,5,10],repo:15,requir:0,result:14,right:8,roadmap:1,robot:[11,15],rpa:11,run:14,schedul:5,screen:11,screenshot:14,script:11,search:14,second:14,select:14,selenium:11,set:4,shown:14,structur:[11,15],studio:[11,15],system:0,templat:6,theori:11,tool:15,tree:14,turn:14,uac:[5,8],uidesktop:11,uio:11,uioselector:11,use:[7,11,14],user:8,viewer:14,web:[5,8,11],welcom:15,what:11,wiki:15,win32:11,x32:11,x64:11,you:14}})
\ No newline at end of file
+Search.setIndex({docnames:["01_HowToInstall","02_RoadMap","03_Copyrights_Contacts","Agent/02_Defs","Orchestrator/01_Orchestrator","Orchestrator/02_Defs","Orchestrator/03_gSettingsTemplate","Orchestrator/04_HowToUse","Orchestrator/05_UAC","Orchestrator/06_Defs Managers","Robot/01_Robot","Robot/02_Defs","Robot/03_HowToUse","Robot/04_Dependencies","Studio/01_Studio","Studio/02_HowToUse","index"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,"sphinx.ext.todo":2,"sphinx.ext.viewcode":1,sphinx:56},filenames:["01_HowToInstall.rst","02_RoadMap.rst","03_Copyrights_Contacts.rst","Agent\\02_Defs.rst","Orchestrator\\01_Orchestrator.rst","Orchestrator\\02_Defs.rst","Orchestrator\\03_gSettingsTemplate.rst","Orchestrator\\04_HowToUse.rst","Orchestrator\\05_UAC.rst","Orchestrator\\06_Defs Managers.rst","Robot\\01_Robot.rst","Robot\\02_Defs.rst","Robot\\03_HowToUse.rst","Robot\\04_Dependencies.rst","Studio\\01_Studio.rst","Studio\\02_HowToUse.rst","index.rst"],objects:{"pyOpenRPA.Agent":{__Agent__:[3,0,0,"-"]},"pyOpenRPA.Agent.__Agent__":{OSCMD:[3,1,1,""],OSFileBinaryDataBase64StrAppend:[3,1,1,""],OSFileBinaryDataBase64StrCreate:[3,1,1,""],OSFileBinaryDataBase64StrReceive:[3,1,1,""],OSFileTextDataStrCreate:[3,1,1,""],OSFileTextDataStrReceive:[3,1,1,""],ProcessWOExeUpperUserListGet:[3,1,1,""]},"pyOpenRPA.Orchestrator":{__Orchestrator__:[5,0,0,"-"]},"pyOpenRPA.Orchestrator.Managers":{ControlPanel:[9,0,0,"module-1"],Process:[9,0,0,"module-0"]},"pyOpenRPA.Orchestrator.Managers.ControlPanel":{ControlPanel:[9,2,1,"id20"]},"pyOpenRPA.Orchestrator.Managers.ControlPanel.ControlPanel":{DataDictGenerate:[9,3,1,"id21"],InitJSJinja2StrGenerate:[9,3,1,"id22"],InitJSJinja2TemplatePathSet:[9,3,1,"id23"],Jinja2DataUpdateDictSet:[9,3,1,"id24"],OnInitJSDataDict:[9,3,1,"id25"],OnInitJSStr:[9,3,1,"id26"],OnRefreshHTMLDataDict:[9,3,1,"id27"],OnRefreshHTMLHashStr:[9,3,1,"id28"],OnRefreshHTMLStr:[9,3,1,"id29"],OnRefreshJSONDict:[9,3,1,"id30"],RefreshHTMLJinja2StrGenerate:[9,3,1,"id31"],RefreshHTMLJinja2TemplatePathSet:[9,3,1,"id32"]},"pyOpenRPA.Orchestrator.Managers.Process":{Process:[9,2,1,"id0"],ProcessGet:[9,1,1,"id13"],ProcessManual2Auto:[9,1,1,"id14"],ProcessStart:[9,1,1,"id15"],ProcessStatusCheck:[9,1,1,"id16"],ProcessStatusStrGet:[9,1,1,"id17"],ProcessStopForce:[9,1,1,"id18"],ProcessStopSafe:[9,1,1,"id19"]},"pyOpenRPA.Orchestrator.Managers.Process.Process":{Manual2Auto:[9,3,1,"id1"],RestartForce:[9,3,1,"id2"],RestartSafe:[9,3,1,"id3"],ScheduleWeekDay:[9,3,1,"id4"],Start:[9,3,1,"id5"],StatusChangeLog:[9,3,1,"id6"],StatusCheck:[9,3,1,"id7"],StatusCheckStart:[9,3,1,"id8"],StatusCheckStopForce:[9,3,1,"id9"],StatusCheckStopSafe:[9,3,1,"id10"],StopForce:[9,3,1,"id11"],StopSafe:[9,3,1,"id12"]},"pyOpenRPA.Orchestrator.Web":{Basic:[5,0,0,"-"]},"pyOpenRPA.Orchestrator.Web.Basic":{JSActivityListExecute:[5,1,1,""],JSProcessorActivityListAdd:[5,1,1,""]},"pyOpenRPA.Orchestrator.__Orchestrator__":{ActivityItemCreate:[5,1,1,""],ActivityItemDefAliasCreate:[5,1,1,""],ActivityItemDefAliasModulesLoad:[5,1,1,""],ActivityItemDefAliasUpdate:[5,1,1,""],ActivityItemHelperDefAutofill:[5,1,1,""],ActivityItemHelperDefList:[5,1,1,""],AgentActivityItemAdd:[5,1,1,""],AgentActivityItemExists:[5,1,1,""],AgentActivityItemReturnExists:[5,1,1,""],AgentActivityItemReturnGet:[5,1,1,""],AgentOSCMD:[5,1,1,""],AgentOSFileBinaryDataBase64StrAppend:[5,1,1,""],AgentOSFileBinaryDataBase64StrCreate:[5,1,1,""],AgentOSFileBinaryDataBase64StrReceive:[5,1,1,""],AgentOSFileBinaryDataBytesCreate:[5,1,1,""],AgentOSFileSend:[5,1,1,""],AgentOSFileTextDataStrCreate:[5,1,1,""],AgentOSFileTextDataStrReceive:[5,1,1,""],AgentProcessWOExeUpperUserListGet:[5,1,1,""],GSettingsAutocleaner:[5,1,1,""],GSettingsGet:[5,1,1,""],GSettingsKeyListValueAppend:[5,1,1,""],GSettingsKeyListValueGet:[5,1,1,""],GSettingsKeyListValueOperatorPlus:[5,1,1,""],GSettingsKeyListValueSet:[5,1,1,""],OSCMD:[5,1,1,""],OSCredentialsVerify:[5,1,1,""],OSRemotePCRestart:[5,1,1,""],Orchestrator:[5,1,1,""],OrchestratorIsAdmin:[5,1,1,""],OrchestratorLoggerGet:[5,1,1,""],OrchestratorPySearchInit:[5,1,1,""],OrchestratorRerunAsAdmin:[5,1,1,""],OrchestratorRestart:[5,1,1,""],OrchestratorSessionRestore:[5,1,1,""],OrchestratorSessionSave:[5,1,1,""],ProcessDefIntervalCall:[5,1,1,""],ProcessIsStarted:[5,1,1,""],ProcessListGet:[5,1,1,""],ProcessStart:[5,1,1,""],ProcessStop:[5,1,1,""],ProcessorActivityItemAppend:[5,1,1,""],ProcessorActivityItemCreate:[5,1,1,""],ProcessorAliasDefCreate:[5,1,1,""],ProcessorAliasDefUpdate:[5,1,1,""],PythonStart:[5,1,1,""],RDPSessionCMDRun:[5,1,1,""],RDPSessionConnect:[5,1,1,""],RDPSessionDisconnect:[5,1,1,""],RDPSessionDublicatesResolve:[5,1,1,""],RDPSessionFileStoredRecieve:[5,1,1,""],RDPSessionFileStoredSend:[5,1,1,""],RDPSessionLogoff:[5,1,1,""],RDPSessionMonitorStop:[5,1,1,""],RDPSessionProcessStartIfNotRunning:[5,1,1,""],RDPSessionProcessStop:[5,1,1,""],RDPSessionReconnect:[5,1,1,""],RDPSessionResponsibilityCheck:[5,1,1,""],RDPTemplateCreate:[5,1,1,""],SchedulerActivityTimeAddWeekly:[5,1,1,""],Start:[5,1,1,""],StorageRobotExists:[5,1,1,""],StorageRobotGet:[5,1,1,""],UACKeyListCheck:[5,1,1,""],UACSuperTokenUpdate:[5,1,1,""],UACUpdate:[5,1,1,""],UACUserDictGet:[5,1,1,""],WebAuditMessageCreate:[5,1,1,""],WebCPUpdate:[5,1,1,""],WebListenCreate:[5,1,1,""],WebRequestParseBodyBytes:[5,1,1,""],WebRequestParseBodyJSON:[5,1,1,""],WebRequestParseBodyStr:[5,1,1,""],WebRequestParseFile:[5,1,1,""],WebRequestParsePath:[5,1,1,""],WebRequestResponseSend:[5,1,1,""],WebURLConnectDef:[5,1,1,""],WebURLConnectFile:[5,1,1,""],WebURLConnectFolder:[5,1,1,""],WebUserInfoGet:[5,1,1,""],WebUserIsSuperToken:[5,1,1,""],WebUserUACHierarchyGet:[5,1,1,""]},"pyOpenRPA.Robot":{UIDesktop:[11,0,0,"-"]},"pyOpenRPA.Robot.UIDesktop":{Get_OSBitnessInt:[11,1,1,""],PWASpecification_Get_PWAApplication:[11,1,1,""],PWASpecification_Get_UIO:[11,1,1,""],UIOSelectorSecs_WaitAppear_Bool:[11,1,1,""],UIOSelectorSecs_WaitDisappear_Bool:[11,1,1,""],UIOSelectorUIOActivity_Run_Dict:[11,1,1,""],UIOSelector_Exist_Bool:[11,1,1,""],UIOSelector_FocusHighlight:[11,1,1,""],UIOSelector_GetChildList_UIOList:[11,1,1,""],UIOSelector_Get_BitnessInt:[11,1,1,""],UIOSelector_Get_BitnessStr:[11,1,1,""],UIOSelector_Get_UIO:[11,1,1,""],UIOSelector_Get_UIOActivityList:[11,1,1,""],UIOSelector_Get_UIOInfo:[11,1,1,""],UIOSelector_Get_UIOList:[11,1,1,""],UIOSelector_Highlight:[11,1,1,""],UIOSelector_SafeOtherGet_Process:[11,1,1,""],UIOSelector_SearchChildByMouse_UIO:[11,1,1,""],UIOSelector_SearchChildByMouse_UIOTree:[11,1,1,""],UIOSelector_TryRestore_Dict:[11,1,1,""],UIOSelectorsSecs_WaitAppear_List:[11,1,1,""],UIOSelectorsSecs_WaitDisappear_List:[11,1,1,""]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","method","Python method"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:method"},terms:{"0643":7,"0_stop":9,"100":6,"101":5,"1050":[5,6],"120":[6,9],"1200":6,"121":5,"123":5,"127":5,"1680":[5,6],"1680x1050":[5,6],"1992":7,"1_stopped_manu":9,"2008":[0,16],"2012":0,"2019":16,"2021":1,"222":[4,6],"2999226":0,"2_stop_saf":9,"300":6,"3389":[5,6],"3600":6,"3720":[0,11,12],"3720python":12,"3_stop_safe_manu":9,"3rd":16,"4100115560661986":16,"412":5,"443":5,"4_start":9,"50000000":6,"5_started_manu":9,"600":6,"640x480":[5,6],"722":2,"77767775":5,"77777sdfsdf77777dsfdfsf77777777":5,"8081":6,"906":2,"\u0432":11,"\u0432\u0445\u043e\u0434\u043d\u043e\u0439":11,"\u0432\u044b\u043a\u0438\u043d\u0443\u0442\u044c":11,"\u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c":11,"\u043a":11,"\u043a\u043e\u043d\u043d\u0435\u043a\u0442":11,"\u043b\u043e\u0433\u0433\u0435\u0440\u0430":6,"\u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f":6,"\u043d\u0435":11,"\u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0438":11,"\u043e\u0448\u0438\u0431\u043a\u0443":11,"\u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430":6,"\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c":11,"\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443":11,"\u043f\u0443\u0441\u0442\u043e\u0433\u043e":11,"\u0441\u043b\u0443\u0447\u0430\u0435":11,"\u0441\u043e\u0437\u0434\u0430\u0442\u044c":6,"\u0441\u043f\u0438\u0441\u043a\u0430":11,"\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f":11,"\u0444\u0430\u0439\u043b":6,"\u0444\u043b\u0430\u0433":11,"\u0447\u0442\u043e":11,"\u044d\u043b\u0435\u043c\u0435\u043d\u0442":11,"byte":5,"case":[3,4,5,6,9,11,12],"catch":[3,5,6],"class":[9,12],"default":[3,5,6,9,12,15],"float":[4,6,11],"function":[2,3,5,6,9,10,11,12],"import":[4,5,6,7,9,10,11,12],"int":[4,5,11,12],"long":2,"new":[2,4,5,6,7,9],"return":[3,5,6,9,11,12],"switch":13,"true":[3,5,6,7,8,9,10,11,12],"try":[5,11],"var":5,"while":5,Abs:6,Are:0,DOS:[3,5],EXE:[3,5],For:[0,5,12,15],Has:6,NOT:5,RUS:[1,16],The:[0,4,5,6,9,10],Then:9,USEFUL:5,USe:[6,8],Use:[2,5,7,9],Will:[5,6],With:9,__agent__:16,__agentactivityreturndictitemcreate__:6,__agentdictitemcreate__:6,__create__:6,__main__:7,__name__:7,__orchestrator__:16,__statisticsdict__:6,__uacclientadmincreate__:[6,7],_sessionlast_rdplist:5,_sessionlast_storagedict:5,a2o:5,abil:12,abl:16,about:[2,4,5,6,9],abov:5,abs:[3,5],absolut:[2,3,5,6,16],abspath:[5,7],access:[5,6,7,16],accessus:6,action:[12,16],activ:[4,5,6,8,9,11,12,15],activitydict:[6,8],activityitem:[3,5],activityitemcr:5,activityitemdefaliascr:5,activityitemdefaliasmodulesload:5,activityitemdefaliasupd:5,activityitemdict:5,activityitemhelperdefautofil:5,activityitemhelperdeflist:5,activitylist:6,activitylistappendprocessorqueuebool:[6,8],activitylistexecut:5,activitylistexecutebool:[6,8],activitynam:12,activitytimelist:6,actual:[5,16],add:[5,6,7,9,12],addhandl:6,addit:[5,16],address:[5,6],addressstr:6,admin:[5,8],admindict:[6,8],administr:[5,7],after:[4,5,6,7,9,11,15],agent:[6,9],agentactivityitemadd:5,agentactivityitemexist:5,agentactivityitemreturnexist:5,agentactivityitemreturnget:5,agentactivitylifetimesecfloat:6,agentactivityreturndict:6,agentactivityreturnlifetimesecfloat:6,agentconnectionlifetimesecfloat:6,agentdict:[5,6],agentfilechunkbytessizeint:6,agentfilechunkcheckintervalsecfloat:6,agentkeydict:[6,8],agentkeystr:[6,8],agentlimitlogsizebytesint:6,agentloopsleepsecfloat:6,agentoscmd:5,agentosfilebinarydatabase64strappend:5,agentosfilebinarydatabase64strcr:5,agentosfilebinarydatabase64strrec:5,agentosfilebinarydatabytescr:5,agentosfilesend:5,agentosfiletextdatastrcr:5,agentosfiletextdatastrrec:5,agentprocesswoexeupperuserlistget:5,algorithm:[4,16],algorythm:[4,6,16],alia:[4,5,6],aliasdefdict:[4,5,6],aliv:9,all:[4,5,6,7,8,9,11,12,16],allow:[5,6,7,8,9,10,12,16],alreadi:[5,12],also:5,amd64:[0,11,12],analyz:16,ani:[0,4,5,9,12,15,16],anoth:[5,11,15],anr:5,ant:9,apach:2,app:[3,5,11,16],appear:[5,11],append:[4,5,6,8,9,12],appli:[4,6],applic:[4,5,6,11,12],approach:12,architectur:16,archiv:[0,6],arg:[4,5,6],argdict:[4,5,6],arggset:[4,5,6],arglist:[4,5,6],arglogg:[4,5,6],argument:5,argvaluestr:5,articl:[1,16],artifici:12,asctim:6,assert:12,associ:5,asweigart:2,async:[4,5],asynchonu:4,attent:[3,4,5,6,8,12,15,16],attribut:[4,6,11,12],audit:5,authent:6,authentif:5,authtoken:6,authtokensdict:6,auto:[5,9],autoclean:[4,6],autoinit:[5,7],autom:[1,9,13,16],automat:[4,6,15],automationsearchmouseel:11,avail:[5,6,7,12],b4ff:7,b64decod:3,backend:[11,12],backward:[5,9],base64:[3,5],base:[4,5,16],base_wrapp:12,basehttprequesthandl:[5,9],basic:[4,6,7,16],beauti:[3,5],becaus:[4,5,9,12],been:[0,5,6,12,16],befor:[5,6],beginwith:[5,6],below:[4,5,15,16],best:[10,16],between:[4,5,6,7],big:[5,12,16],binari:[3,5],bit:[2,5,11,12],block:[5,6,9],bodi:[5,6],bool:[4,5,6,9,12],boppreh:2,both:[5,11,12],box:7,branch:0,browser:[6,15],bsd:2,bug:2,build:[2,16],built:0,busi:[4,5,12,16],button:[6,8],cabinetwclass:12,cach:6,calcfram:12,call:[4,5,6,7,9,11],callabl:5,can:[2,3,4,5,6,7,8,9,10,11,12,16],cancel:11,cant:4,captur:16,catchperiodsecfloat:6,central:4,certfilepempathstr:6,certif:5,chang:[6,9,16],check:[5,6,9,11,12,16],checkintervalsecfloat:6,child:[11,12],children:12,choos:11,chrome:12,chunk:6,class_nam:12,class_name_r:12,classif:12,claus:2,cleaner:5,clear:[5,6,12],click:[10,12],client:[5,6,9],clientrequesthandl:6,clipboard:5,close:[5,6,12],cmd:[3,5,6,8,15,16],cmdinputbool:[6,8],code:[4,5,6,9,12],collect:6,com:[0,2,12,13],come:[3,5,16],comma:4,command:[3,5,6,12],commerci:16,common:12,commun:5,compact:2,compani:[2,5,16],compat:[5,9,12],compex:4,compil:16,complet:[0,6],complex:4,compon:16,comput:[12,16],concept:16,condit:[11,12],config:[7,11],configur:[5,6,7,9,11,16],congratul:16,connect:[5,6],connectioncountint:6,connectionfirstqueueitemcountint:6,consist:4,consol:[6,12,15,16],consolid:[4,16],contact:16,contain:[5,6,9,11,12,15],content:[3,5,6],context:9,continu:5,control:[4,5,6,7,9,16],control_typ:12,control_type_r:12,controlpanel:[5,6,7,16],controlpaneldict:6,controlpanelinst:9,controlpanelkeyallowedlist:6,controlpanelrefreshintervalsecfloat:6,convent:12,cooki:6,copi:12,copyright:16,core:[1,4,16],cost:[1,16],cp1251:[3,5],cp866:[3,5],cp_:[5,7],cp_versioncheck:5,cpdict:6,cpkei:6,cpkeydict:[6,8],cpkeystr:[6,8],creat:[2,3,4,5,6,7,9,10,16],credenti:5,crosscheck:5,css:13,ctrl_index:12,current:[3,4,5,6,7,8,12],custom:[4,8,12],cv2:12,daemon:[3,5],dai:5,dashboard:5,data:[3,5,6,9],datadictgener:9,datasetlast:6,datetim:[6,7],deadlin:2,dear:16,debug:[5,6],decentr:4,decid:16,decod:3,def:[4,6,7,8,10,16],defaliastest:[4,6],defhelp:5,defnamestr:6,defsettingsupdatepathlist:6,depend:16,deploi:5,deprec:[5,6],depth:12,depth_end:12,depth_start:12,depth_stop:12,depthbit:[5,6],descipt:12,descript:[11,12,16],desktop:[1,4,5,6,9,11,16],desktopus:5,destin:[5,11],detail:[4,5,16],detect:[5,6,9,11,12],determin:[5,9],dev:5,develop:[5,12,16],dict:[3,5,6,9,11,12,16],dictionari:[4,6],differ:4,directori:[5,12],disappear:11,disc:5,disconnect:[5,6],distribut:16,divis:16,dll:16,doc:[12,16],document:[11,16],docutil:[3,5,11],dodict:6,doe:[5,15],doen:5,doesn:11,domain:6,domainadstr:6,domainupperstr:5,domainus:5,don:[3,5,6,8],done:1,dont:[5,6,8,9],doubl:15,download:0,dp0:12,draw:11,drive:[5,6],driver:12,dsd:[4,6],dumo:5,dump:[6,7],dumploglist:6,dumploglistcountint:6,dumploglisthashstr:6,dumploglistrefreshintervalsecfloat:6,duplic:5,durat:6,dynam:12,each:[5,6,12,16],earli:[3,5],edit:16,editor:15,elem:12,element:[11,12],elif:7,els:[3,5,6,7,9,11],empti:[5,6,8],enabl:[5,12],encapsul:[3,16],encod:[3,5],end:[4,5],eng:[1,16],enjoi:5,enterpris:16,enumer:9,enumeratedef:9,env:[6,9],enviro:12,environ:5,equal:[5,6],equalcas:[5,6],etc:5,even:5,event:9,everi:[5,6,9],everydai:5,exact:12,exampl:[3,4,5,6,8,9,10,11],except:[0,5],exe:[0,5,9,10,11,12],execut:[3,4,5,6,8,9,14,16],executebool:6,exist:[3,5,6,9,11,12],expens:16,expir:5,explor:[12,15],express:12,extens:[5,9,12],extra:5,extract:[5,12,16],facebook:2,fals:[3,5,6,7,9,11],fast:[2,16],featur:[4,5,6,8,16],feel:2,field:[5,6],file:[3,5,6],filebodybyt:5,filehandl:6,filemanag:6,filemod:6,filenamestr:5,fileurl:6,fileurlfilepathdict:6,fileurlfilepathdict_help:6,fill:[5,6],filter:5,find:[2,4,10,11,12],find_element_by_nam:12,find_window:[11,12],firefox:12,first:[7,12,16],flag:[3,5,6,9],flagaccess:6,flagaccessdefrequestglobalauthent:6,flagcredentialsask:6,flagdonotexpir:6,flagsessionisact:[5,6],flaguseallmonitor:[5,6],flase:[3,5],flexibl:4,focu:11,folder:[5,7,12,16],follow:[0,8,9,15,16],forc:[5,9,16],forget:6,format:[3,5,9],formatt:6,found:12,founder:16,framework:[11,12,13,16],free:[2,16],fridai:5,friendly_class_nam:12,friendly_class_name_r:12,from:[0,3,4,5,6,7,9,10,11,16],front:5,full:[5,6],fulli:12,fullscreen:[5,6],fullscreenbool:[6,8],fullscreenrdpsessionkeystr:6,functional:7,further:5,futher:9,garbag:5,gener:[5,6,16],get:[5,6,9,11,12,16],get_osbitnessint:11,getcontrol:11,getlogg:6,git:[0,5,6,8],github:2,gitlab:[0,1,2,12,16],give:[5,6,8],given:5,glob:5,global:[3,5,16],goe:4,going:16,good:[4,16],graphic:[12,16],great:16,group:[8,16],gset:[4,7,16],gsettingsautoclean:5,gsettingsdict:5,gsettingsget:[5,7],gsettingskeylistvalueappend:5,gsettingskeylistvalueget:5,gsettingskeylistvalueoperatorplu:5,gsettingskeylistvalueset:5,gui:[3,4,5,11,12,13,16],guid:[1,5,6],guidstr:[5,6],gurbag:6,habr:[1,16],handl:6,handlebar:13,handler:[5,6,9],hard:[5,6,8],has:[0,2,4,5,6,8,9,12],hash:9,have:5,height:[5,6],help:[0,2,5,16],helpfulli:11,here:[7,10,11,12,16],hex:[5,6,12],hidden:5,hiddenisorchestratoriniti:6,hierarchi:[5,12,15],highlight:[11,12,15],hightlight:15,homepag:2,host:[5,6],hostnam:[5,9],hostnameupperstr:6,how:[9,11,16],html:[1,3,5,9,11,12,16],htmlrenderdef:6,http:[0,2,3,4,5,6,9,11,12,13,16],human:5,identif:[5,12],identifi:[9,12],ignor:[5,6],ignorebool:[6,8],imag:16,imaslov:7,implement:12,inactionnam:11,inactivityitemdict:5,inactivitylist:5,inaddressstr:5,inadisdefaultbool:[5,7],inadloginstr:[5,7],inadstr:[5,7],inagentfilepathstr:5,inagenthostnamestr:9,inagentusernamestr:9,inaliasstr:5,inarg1str:5,inargdict:5,inarggset:5,inarggsettingsstr:5,inarglist:5,inargloggerstr:5,inargu:12,inargumentlist:11,inbackend:11,inbreaktriggerprocesswoexelist:5,incertfilepempathstr:5,incheckintervalsecfloat:5,incloseforcebool:5,includ:11,incmdencodingstr:[3,5],incmdstr:[3,5],incontenttypestr:5,incontrolpanelnamestr:9,incontrolspecificationarrai:11,incpkeystr:5,indatadict:9,indef:5,indefargdict:5,indefarggsettingsnamestr:5,indefarglist:5,indefargloggernamestr:5,indefargnamegsettingsstr:[5,7],indefnamestr:5,indefquerystr:5,indefstr:[5,7],indepthbitint:5,index:[4,5,6,11,12],indict:6,indomainstr:5,indumprestorebool:[5,7],inel:[10,11,12],inelementspecif:11,inencodingstr:[3,5],inexecuteinnewthreadbool:5,infiledatabase64str:[3,5],infiledatabyt:5,infiledatastr:[3,5],infilepathstr:[3,5],inflagforceclosebool:5,inflaggetabspathbool:5,inflagraiseexcept:[10,11,12],inflagwaitallinmo:11,info:[5,6,12],infolderpathstr:5,inforcebool:5,inform:[4,5,9],infrastructur:16,inglobpatternstr:[5,7],ingset:[3,4,5,7],ingsettingsclientdict:6,inguidremovebool:5,inguidstr:5,inhashkeystr:6,inheightpxint:5,inherit:12,inhostfilepathstr:5,inhostnamestr:5,inhoststr:[5,6],inhtmlrenderdef:5,inintervalasyncbool:5,inintervalsecfloat:5,inismanualbool:9,init:[4,5,6,7,9,11],initdatetim:6,initi:[5,6,9],initjsjinja2strgener:9,initjsjinja2templatepathset:9,injinja2dataupdatedict:9,injinja2templatepathstr:9,injinja2templaterefreshbool:9,injsinitgeneratordef:5,injsongeneratordef:5,inkeyfilepathstr:5,inkeylist:5,inkeystr:6,inkwargumentobject:11,inlogg:[5,6],inloggerlevel:6,inloginstr:[5,6],inmatchtypestr:5,inmessagestr:5,inmethodstr:5,inmodestr:[4,5,6,7],inmodulepathstr:5,inoperationcodestr:5,inorchestratorfilepathstr:5,inpasswordstr:[5,6],inpathstr:5,inportint:5,inportstr:[5,6],inprocessnamewexestr:5,inprocessnamewoexelist:[3,5],inprocessnamewoexestr:[5,9],inrdpfilepathstr:5,inrdpsessionkeystr:[5,6],inrdptemplatedict:5,inrefreshhtmljinja2templatepathstr:9,inrequest:[5,9],inresponestr:5,inreturn:6,inrobotnamestr:[5,9],inrolehierarchyalloweddict:[5,7],inrolekeylist:5,inrowcountint:6,inrunasadministratorbool:5,inrunasyncbool:[3,5],insendoutputtoorchestratorlogsbool:[3,5],insert:[5,7],inserverkeystr:5,inshareddrivelist:5,inspecificationlist:[10,11,12],inspecificationlistlist:11,instal:16,instanc:[4,5,6,9,11,12],instartcmdstr:9,instartpathstr:9,instopprocessnamewoexestr:5,instopsafetimeoutsecfloat:9,insupertokenstr:[5,7],intellig:12,interact:[4,5,11],interest:5,interfac:[4,5,7,12,16],internet:15,interpret:4,interv:[5,6,9],intervalsecfloat:6,inthreadbool:5,intimehhmmstr:5,inuioselector:11,inurllist:[5,7],inurlstr:5,inusebothmonitorbool:5,inusernamestr:5,inuserstr:5,invalu:5,inwaitsec:11,inweekdaylist:5,inwidthpxint:5,is_en:12,is_vis:12,islistenbool:6,isresponsiblebool:5,issu:2,it4busi:2,it4busin:2,item:[4,5,6,11,12],iter:[5,6],ivan:16,ivanmaslov:2,java:9,javascript:5,jinja2:9,jinja2dataupdatedictset:9,join:[5,7],jsactivitylistexecut:5,jsinitgeneratordef:6,json:[3,4,5,6,9],jsongeneratordef:6,jsprocessoractivitylistadd:5,jsrender:13,jsview:13,just:[9,12],kb2999226:0,keep:4,kei:[5,6,9,12],keyboard:[2,13,16],keyfilepathstr:6,keystr:6,kill:5,killer:16,know:[4,9],known:16,kwarg:4,lactivityitem:5,laliasstr:5,last:6,later:5,latest:12,launch:5,lcp:9,lcpmanag:9,leaflet:[1,16],left:4,len:6,less:[1,16],let:16,level:[12,16],levelnam:6,lib:12,librari:12,licens:16,life:6,lifetim:6,lifetimerequestsecfloat:6,lifetimesecfloat:6,light:4,like:[4,16],line:12,link:[4,5,6,16],linkedin:2,list:[3,4,5,6,11,12,16],listen:5,listendict:6,listread:6,litem:12,littl:8,llogger:5,lnotepadokbutton:10,load:[5,6,9],local:5,localhost:6,locat:5,lof:9,log:[3,5,6,7,8,16],logger:[5,6],loggerdumploghandleradd:6,loggerhandlerdumploglist:6,login:[5,6,7],logoff:[5,6],logout:16,logviewerbool:[6,8],lol:15,look:[4,5,6,8,15,16],lookmachinescreenshot:6,loop:[6,12],low:12,lowercas:6,lprocess:9,lprocessisstartedbool:5,lprocesslist:5,lpymodul:7,lpyopenrpa_settingsdict:11,lpyopenrpasourcefolderpathstr:7,lrdpitemdict:5,lrdptemplatedict:5,lrequest:5,lresult:6,lresultdict:[5,6],luacclientdict:7,lwebauditmessagestr:5,lxml:13,mac:16,machin:[0,5,6,16],machina:6,magenthostnamestr:6,magentusernamestr:6,mail:2,main:[4,5,6,7,9,12],maintain:16,make:12,makedir:6,manag:[5,6,16],managersprocessdict:6,mani:[2,4,11,16],manipul:[5,8,16],manual2auto:9,manual:9,mark:9,markdown:[1,16],maslov:16,master:0,match:12,matchtyp:6,math:9,mathmodul:9,max:6,maxim:11,maximum:12,mayb:5,mechan:4,mega:[4,8],megafind:2,memori:5,menu:10,merg:5,messag:[5,6],method:[6,9,12],methodmatchurl:6,methodmatchurlbeforelist:6,methodolog:2,mhandlerdumploglist:6,microsoft:[0,12],minim:11,minut:6,miss:12,mit:[2,16],mmstr:6,mode:[9,15],model:[2,12],modifi:9,modul:[4,5,6,7],modulenamestr:5,moduletocal:5,mondai:5,monitor:5,more:[4,6,7,9,12],mous:16,mprocessnamewoexestr:6,mrobotlogg:6,mrobotloggerfh:6,mrobotloggerformatt:6,mrobotnamestr:9,mstatusstr:9,mstopsafetimeoutsecfloat:9,must:6,name:[4,5,6,9,11,12],namewoexestr:5,namewoexeupperstr:5,need:[0,2,3,4,5,6,7,8,9,11,12,16],nest:5,net:[3,5,11],never:5,newkeydict:5,newkeylist:5,newvalu:5,next:[5,9,12],non:16,none:[3,4,5,6,9,10,11,12],notat:[11,12],notepad:[3,5,9,10,11,12],noth:5,nothingbool:[6,8],now:[5,6,9,11],nul:12,object:[4,5,6,11,12,16],occupi:5,ocr:12,octet:5,off:[6,8],old:[5,6,7,11],onc:[9,11],one:[6,8],oninitj:9,oninitjsdatadict:9,oninitjsstr:9,onli:[0,3,5,6,8,9,11,12,16],onlin:16,onrefreshhtml:9,onrefreshhtmldatadict:9,onrefreshhtmlhashstr:9,onrefreshhtmlstr:9,onrefreshjson:9,onrefreshjsondict:9,op_code_1:5,open:[1,6,15,16],opencv:[0,13,16],openrpa52zzz:7,openrpa:[0,6],openrpa_32:15,openrpa_64:15,openrpaorchestr:12,openrparesourceswpy32:12,openrparesourceswpy64:12,openrparobotguix32:11,opensourc:16,oper:[0,5,7,9,16],opera:12,operatormodul:9,optim:9,option:[5,6,8,12],orc:[5,6,8],orch:6,orchestr:[3,6,7,9],orchestratorisadmin:[5,7],orchestratorloggerget:5,orchestratormain:12,orchestratormodul:9,orchestratorpysearchinit:[5,7],orchestratorrerunasadmin:[5,7],orchestratorrestart:5,orchestratorsessionrestor:[5,7],orchestratorsessionsav:5,orchestratorstart:6,order:[4,12,15],org:[2,12],oscmd:[3,5],oscredentialsverifi:5,osfilebinarydatabase64strappend:3,osfilebinarydatabase64strcr:3,osfilebinarydatabase64strrec:3,osfiletextdatastrcr:3,osfiletextdatastrrec:3,osremotepcrestart:[5,6],other:[11,12,16],our:12,out:5,outargu:12,outlin:11,output:[3,5,6,9],outstr:5,over:9,overrid:9,overwrit:6,own:[4,7,9,12,16],packag:[0,7,9,10,16],page:[5,6,8,9,10],page_sourc:12,pai:[4,6],paid:[1,16],panel:[5,6,7,8,9,15],param:[3,5,9],paramet:[3,4,5,6,9,11],parent:[11,12,15],pars:5,parti:16,pass:[5,6,9],password:[5,6],path:[3,5,6,7,12],paus:12,pdb:6,pdf:[1,16],pem:5,perfom:[12,16],perform:16,period:[5,6],perman:5,phone:4,pickl:5,pid:5,pil:13,pixel:[5,6],plan:5,platform:16,pleas:[5,16],plu:5,port:[5,6],portabl:[0,12],portint:6,possibl:16,post:[5,6],postfix:5,power:[5,16],powershel:[5,6],practic:[8,16],prefer:2,prepar:[5,9],previou:[5,9],print:[7,12],privat:5,procedur:5,process:[3,4,6,7,11,12,14,16],processbit:11,processdefintervalcal:5,processdetaillist:5,processget:9,processisstart:5,processlistget:5,processmanual2auto:9,processnam:5,processor:[3,6,8,16],processoractivityitemappend:5,processoractivityitemcr:5,processoraliasdefcr:5,processoraliasdefupd:5,processordict:6,processstart:[5,9],processstatuscheck:9,processstatusstrget:9,processstop:5,processstopforc:9,processstopsaf:9,processwoexelist:5,processwoexeupperlist:5,processwoexeupperuserlistget:3,product:12,program:[5,6,10],progress:1,project:[4,16],properti:[8,16],protocol:4,prototyp:6,provid:[12,16],psutil:[7,13],pull:[6,8],purpos:2,push:6,pwa:12,pwaspecif:12,pwaspecification_get_pwaappl:11,pwaspecification_get_uio:11,pyautogui:[2,12,13,16],pycon:12,pymupdf:13,pyopenrpa:[0,1,2,4,6,7,8,9,10,11,12,14],pyopenrpa_uidesktopx32:11,pyopenrpa_uidesktopx64:11,pyopenrpadict:[6,8],pypathstr:5,python32fullpath:11,python32processnam:11,python64fullpath:11,python64processnam:11,python:[0,4,10,11,13,15,16],pythonstart:5,pywin32:[2,13],pywinauto:[2,11,12,13],queri:5,queue:[1,4,5,6,8],queuelist:6,r01:6,r01_integrationorderout:6,r01_orchestratortorobot:6,rais:5,rdp:[4,5,6,8],rdpactiv:6,rdpkei:5,rdpkeydict:[6,8],rdpkeystr:[6,8],rdplist:[5,6],rdpsession:16,rdpsessioncmdrun:5,rdpsessionconnect:[5,6],rdpsessiondisconnect:[5,6],rdpsessiondublicatesresolv:5,rdpsessionfilestoredreciev:5,rdpsessionfilestoredsend:5,rdpsessionkei:6,rdpsessionkeystr:6,rdpsessionlogoff:5,rdpsessionmonitorstop:5,rdpsessionprocessstartifnotrun:5,rdpsessionprocessstop:5,rdpsessionreconnect:[5,6],rdpsessionresponsibilitycheck:5,rdptemplatecr:5,read:[3,5,6],readi:0,readthedoc:12,receiv:5,reciev:[5,6],recognit:16,reconnect:[5,6],reconnectbool:[6,8],recoverydict:6,recurs:12,reestr_otgruzok:6,refer:16,refresh:[6,9],refreshhtmljinja2strgener:9,refreshhtmljinja2templatepathset:9,refreshsecond:6,regener:5,regular:12,rel:[5,6],reliabl:[2,16],reload:9,rememb:[6,8],remot:[5,6,16],remov:[5,6,9],render:[9,15],renderfunct:6,renderrobotr01:6,replac:5,report:6,reqir:4,request:[5,6,9,13],requestinst:9,requesttimeoutsecfloat:6,requir:[5,9,16],rerun:5,resolut:[5,6],resourc:[0,11,12,16],respons:[5,6],responsecontenttyp:6,responsedefrequestglob:6,responsefilepath:6,responsefolderpath:6,responsibilitycheckintervalsec:6,restart:[5,6,8,9],restartforc:9,restartorchestr:6,restartorchestratorbool:[6,8],restartorchestratorgitpullbool:[6,8],restartpcbool:[6,8],restartsaf:9,restor:[5,7,11],restrict:16,restructuredtext:[3,5,11],result:[5,6,8,9,11,12],retart:5,returnbool:6,returnedbydatetim:6,rich_text:12,rich_text_r:12,right:[5,16],roadmap:16,robot:[4,5,6,7,8,10,11],robot_r01:6,robot_r01_help:6,robotlist:6,robotrdpact:[5,6],rolehierarchyalloweddict:6,root:[5,6],row:6,rpa01:5,rpa:[1,5,6,10,16],rpa_99:5,rpatestdirtest:5,rst:[3,5,11],ruledomainuserdict:6,rulemethodmatchurlbeforelist:6,run:[0,3,5,6,7,9,11,16],russia:[2,16],russian:16,safe:[3,5,9,11,16],safeti:5,same:11,save:[5,9],schedul:[4,9,16],scheduleractivitytimeaddweekli:5,schedulerdict:6,scheduleweekdai:9,scopesrcul:6,screen:[5,6,16],screenshot:[0,6,8,16],screenshotviewerbool:[6,8],script:[4,9,16],search:[5,16],sec:[5,6],second:[5,6,9,11,12],section:[5,11],secur:5,see:[0,5,6,7,9,10,11,16],sele:9,select:11,selector:[11,12,15,16],selenium:[2,13,16],self:9,semant:[2,13],send:[3,5,6,8,9,16],send_kei:12,sensit:5,sent:[5,6],sequenc:4,server:[0,3,4,5,6,8,9,15,16],serverdict:6,serverinst:6,serverset:[6,9],serverthread:6,sesion:[5,6],session:[3,5,6,16],sessionguidstr:6,sessionhex:[5,6],sessionisignoredbool:[5,6],sessioniswindowexistbool:[5,6],sessioniswindowresponsiblebool:[5,6],set:[3,5,6,7,8,9,11,16],set_trac:6,setformatt:6,setlevel:6,settingsinit:11,settingstempl:[4,6,7],settingsupd:[5,7],setup:6,sever:[4,12,16],share:5,shareddrivelist:[5,6],shell:[5,16],should:[6,9],show:[6,8],side:[5,6,8,9],signal:[5,9],simplifi:12,sinc:[6,16],singl:4,singleton:[3,5],size:6,skype:2,sleep:[6,12],socket:4,softwar:2,solut:[0,12,16],some:[2,4,5,6,8,9,16],soon:[1,16],sorri:16,sort:5,sourc:[3,4,5,7,9,11,16],sourceforg:[3,5,11],space:4,special:[5,6],specialist:2,specif:12,specifi:5,sphinx:[4,16],ssl:5,standart:6,start:[0,3,5,6,7,9,12,15,16],statu:[5,9],status:9,statuschangelog:9,statuscheck:9,statuscheckstart:9,statuscheckstopforc:9,statuscheckstopsaf:9,statuscheckstorforc:9,stdout:[6,7],stop:[5,9,12,16],stopforc:9,stopsaf:9,storag:[6,16],storagedict:6,storagerobotdict:9,storagerobotexist:5,storagerobotget:[5,9],store:6,str:[4,5,6,9,11,12],stream:5,streamhandl:6,strftime:6,string:[3,5,11],struct:6,structur:[4,5,6],studio:[4,14,15],subprocess:12,success:5,successfulli:[0,5,6,12,16],sundai:5,supertoken:[5,7],superus:[5,7],supetoken:5,supplement:12,support:[0,4,7,9,12,15,16],symbol:4,sync:[4,5],synchroni:5,sys:[5,6,7,12],system:16,tablet:4,task:2,technic:[4,6],technicalsessionguidcach:6,telegram:2,templat:[9,16],term:9,termin:9,terminolog:12,tesseract:13,test2:6,test:[3,5,6,7,9],testcontrolpanel:9,testcontrolpanelkei:6,testdef:5,testdefalia:5,testdir:5,testdirtest:5,testrdp:6,testttt:9,text:[3,5,12,15],than:[4,6,11],thank:[2,16],theori:16,thi:[3,5,6,8,9,12,16],thing:9,thought:5,thread:[4,5,6,8],threadidint:6,thursdai:5,thx:12,time:[5,6,9,12,16],timehh:6,titl:[10,11,12],title_r:12,todo:[5,6,9],token:5,tokendatetim:6,too:[5,6,8],tool:[4,6,12,15],top:11,tor:16,track:5,transmiss:5,transmit:[3,4,5,6,9],tree:16,trigger:[5,6],triggercountint:6,ttt:[4,6],turn:[6,8],turpl:4,tutori:[1,16],txt:5,type:[5,6,7,9],uac:16,uacclientcheck:9,uackeylistcheck:5,uacsupertokenupd:[5,7],uacupd:[5,7],uacuserdictget:[5,9],uia:[11,12],uidesktop:[10,11],uio:[11,15,16],uioactiv:[11,12],uioei:12,uioinfo:12,uioselector:11,uioselector_exist_bool:11,uioselector_focushighlight:[11,12],uioselector_get_bitnessint:11,uioselector_get_bitnessstr:11,uioselector_get_uio:[10,11,12],uioselector_get_uioactivitylist:11,uioselector_get_uioinfo:11,uioselector_get_uiolist:11,uioselector_getchildlist_uiolist:11,uioselector_highlight:11,uioselector_safeotherget_process:11,uioselector_searchchildbymouse_uio:11,uioselector_searchchildbymouse_uiotre:11,uioselector_tryrestore_dict:11,uioselectorsecs_waitappear_bool:11,uioselectorsecs_waitdisappear_bool:11,uioselectorssecs_waitappear_list:11,uioselectorssecs_waitdisappear_list:11,uioselectoruioactivity_run_dict:11,uiotre:12,under:16,understand:8,unicodelab:[0,2,12],univers:4,unix:16,unzip:0,updat:[5,6],upper:[3,5,6,9],url:[5,6],urllist:6,usag:[5,9,10,12],use:[0,3,4,5,6,8,9,11,16],used:5,useful:12,user:[3,4,5,6,7,9,11,12,16],user_99:5,user_pass_her:5,useradstr:6,userinfodict:9,usernam:5,usernameupperstr:5,userrpa:5,useruaccheckdef:9,useruacdict:9,userupperstr:6,using:[5,12,16],utf:[3,5],util:[6,11,16],valu:[5,6,11],variant:5,ver:[5,12],veri:[2,5],verifi:5,version:[5,9,12,15],versionstr:6,via:[2,5,9],video:12,viewer:[6,8,16],virtual:6,visibl:12,vision:[12,16],vista:0,visual:16,vms:5,wai:[5,7,12,16],wait:[3,5,9,11,12,15],want:[4,6,8,9,15,16],warn:[6,7],warningexecutionmorethansecfloat:6,web:[1,4,6,9,16],webaudit:5,webauditmessagecr:5,webcpupd:5,webdriv:12,weblistencr:[5,7],webrequestparsebodybyt:5,webrequestparsebodyjson:5,webrequestparsebodystr:5,webrequestparsefil:5,webrequestparsepath:5,webrequestresponsesend:5,weburlconnectdef:5,weburlconnectfil:5,weburlconnectfold:5,webuserinfoget:[5,9],webuserissupertoken:5,webuseruachierarchyget:5,wednesdai:5,week:5,weekdai:[5,6],weekdaylist:6,well:16,were:16,whatsapp:2,when:[4,5,6,9,11,15],where:[3,5,12,15],which:[2,4,5,6,9,10,11,12,16],who:6,why:4,width:[5,6],wiki:12,win32:[11,16],win32api:13,win:5,window:[0,3,5,6,11,13,16],winpython:2,without:[0,3,5,6,9,16],wmi:13,work:[5,6,8,9,12,16],workingdirectorypathstr:6,world:16,wpy32:[0,11,12],wpy64:[0,11,12],wrapper:11,write:[2,3,4,12,16],www:[2,12,13],x32:[0,11,13,15,16],x64:[0,5,11,13,15,16],xlsx:6,yoomonei:16,you:[0,2,3,4,5,6,7,8,9,10,11,12,16],your:[0,2,6,9,11,12],zip:0},titles:["1. How to install","2. Roadmap","3. Copyrights & Contacts","2. Defs","1. Description","2. Defs","3. gSettings Template","4. How to use","5. UAC - User Access Control","6. Defs Managers","1. Description","2. Defs","3. How to use","4. Dependencies","1. Description","2. How to use","Welcome to pyOpenRPA\u2019s wiki"],titleterms:{The:[12,15,16],Use:12,__agent__:3,__orchestrator__:5,about:[8,12,16],access:[8,12],action:15,agent:[3,5,16],app:12,architectur:4,autom:12,basic:5,button:15,captur:12,check:0,choos:15,click:15,cmd:12,compon:[2,4],concept:4,configur:4,contact:2,content:[15,16],control:8,controlpanel:9,copyright:2,creat:12,ctrl:15,def:[3,5,9,11],definit:12,depend:[2,13],descript:[4,10,14,15],desktop:12,detail:9,dict:[4,8],dll:12,donat:16,exampl:12,execut:12,expand:15,extract:15,file:12,founder:2,from:12,gener:9,global:4,group:5,gset:[5,6],gui:15,guid:16,has:16,hold:15,hover:15,how:[0,4,7,12,15],imag:12,instal:0,interest:15,ivan:2,kei:15,keyboard:12,licens:2,list:15,main:16,manag:9,manipul:12,maslov:2,modul:12,mous:[12,15],object:15,openrpa:12,orchestr:[4,5,8,16],parti:2,practic:12,process:[5,9],processor:[4,5],properti:15,pyopenrpa:[3,5,16],python:[5,12],rdpsession:5,recognit:12,refer:[3,4,5,11],repo:16,requir:0,result:15,right:8,roadmap:1,robot:[12,16],rpa:12,run:15,schedul:5,screen:12,screenshot:15,script:12,search:15,second:15,select:15,selenium:12,set:4,shown:15,storag:5,structur:[12,16],studio:[12,16],system:0,templat:6,theori:12,tool:16,tree:15,turn:15,uac:[5,8],uidesktop:12,uio:12,uioselector:12,use:[7,12,15],user:8,viewer:15,web:[5,8,12],welcom:16,what:12,wiki:16,win32:12,x32:12,x64:12,you:15}})
\ No newline at end of file
diff --git a/Wiki/ENG_Guide/markdown/Orchestrator/02_Defs.md b/Wiki/ENG_Guide/markdown/Orchestrator/02_Defs.md
index 92b0b61d..0b3cb91f 100644
--- a/Wiki/ENG_Guide/markdown/Orchestrator/02_Defs.md
+++ b/Wiki/ENG_Guide/markdown/Orchestrator/02_Defs.md
@@ -20,6 +20,10 @@ Interaction between Orchestrator and pyOpenRPA.Agent daemon process, which can b
Basic defs to work with singleton gSettings.
+### Group Storage…
+
+Defs to work with special locations in Orchestrator: Robot, User (TODO), User + Robot (TODO)
+
### Group OS…
Interaction with shell on the Orchestrator user session.
@@ -54,139 +58,189 @@ Work with activity scheduling.
**Functions:**
-| `AgentActivityItemAdd`(inGSettings, …)
+| `ActivityItemCreate`(inDef[, inArgList, …])
- | Add activity in AgentDict.
+ | Create activity item.
|
-| `AgentActivityItemExists`(inGSettings, …)
+| `ActivityItemDefAliasCreate`(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 can’t transmit Python def object out of the Python environment)
+
+ |
+| `ActivityItemDefAliasModulesLoad`()
+
+ | Load all def from sys.modules.
+
+ |
+| `ActivityItemDefAliasUpdate`(inDef, inAliasStr)
- | Check by GUID if ActivityItem has exists in request list.
+ | Update alias for def (can be used in ActivityItem in field Def).
- |
-| `AgentActivityItemReturnExists`(inGSettings, …)
+ |
+| `ActivityItemHelperDefAutofill`(inDef)
+
+ | Detect def by the name and prepare the activity item dict with values.
+
+ |
+| `ActivityItemHelperDefList`([inDefQueryStr])
+
+ | Create list of the available Def names in activity item. You can use query def filter via arg inDefQueryStr
+
+ |
+| `AgentActivityItemAdd`(inHostNameStr, …[, …])
+
+ | Add activity in AgentDict.
+
+ |
+| `AgentActivityItemExists`(inHostNameStr, …)
+
+ | Check by GUID if ActivityItem has exists in request list.
+
+ |
+| `AgentActivityItemReturnExists`(inGUIDStr[, …])
| Check by GUID if ActivityItem has been executed and result has come to the Orchestrator
- |
-| `AgentActivityItemReturnGet`(inGSettings, …)
+ |
+| `AgentActivityItemReturnGet`(inGUIDStr[, …])
| Work synchroniously! Wait while result will be recieved.
- |
-| `AgentOSCMD`(inGSettings, inHostNameStr, …)
+ |
+| `AgentOSCMD`(inHostNameStr, inUserStr, inCMDStr)
- | Send CMD to OS thought the pyOpenRPA.Agent daemon.
+ | Send CMD to OS thought the pyOpenRPA.Agent daemon.
- |
-| `AgentOSFileBinaryDataBase64StrAppend`(…)
+ |
+| `AgentOSFileBinaryDataBase64StrAppend`(…[, …])
- | Append binary file by the base64 string by the pyOpenRPA.Agent daemon process (safe for JSON transmission)
+ | Append binary file by the base64 string by the pyOpenRPA.Agent daemon process (safe for JSON transmission)
- |
-| `AgentOSFileBinaryDataBase64StrCreate`(…)
+ |
+| `AgentOSFileBinaryDataBase64StrCreate`(…[, …])
- | Create binary file by the base64 string by the pyOpenRPA.Agent daemon process (safe for JSON transmission)
+ | Create binary file by the base64 string by the pyOpenRPA.Agent daemon process (safe for JSON transmission)
- |
-| `AgentOSFileBinaryDataBase64StrReceive`(…)
+ |
+| `AgentOSFileBinaryDataBase64StrReceive`(…[, …])
- | Read binary file and encode in base64 to transmit (safe for JSON transmition)
+ | Read binary file and encode in base64 to transmit (safe for JSON transmition)
- |
-| `AgentOSFileBinaryDataBytesCreate`(…)
+ |
+| `AgentOSFileBinaryDataBytesCreate`(…[, …])
- | Create binary file by the base64 string by the pyOpenRPA.Agent daemon process (safe for JSON transmition)
+ | Create binary file by the base64 string by the pyOpenRPA.Agent daemon process (safe for JSON transmition)
- |
-| `AgentOSFileSend`(inGSettings, inHostNameStr, …)
+ |
+| `AgentOSFileSend`(inHostNameStr, inUserStr, …)
- | Send the file from the Orchestrator to Agent (synchroniously) pyOpenRPA.Agent daemon process (safe for JSON transmition).
+ | Send the file from the Orchestrator to Agent (synchroniously) pyOpenRPA.Agent daemon process (safe for JSON transmition).
- |
-| `AgentOSFileTextDataStrCreate`(inGSettings, …)
+ |
+| `AgentOSFileTextDataStrCreate`(inHostNameStr, …)
+
+ | Create text file by the string by the pyOpenRPA.Agent daemon process
- | Create text file by the string by the pyOpenRPA.Agent daemon process
+ |
+| `AgentOSFileTextDataStrReceive`(inHostNameStr, …)
- |
-| `AgentOSFileTextDataStrReceive`(inGSettings, …)
+ | Read text file in the agent GUI session
- | Read text file in the agent GUI session
+ |
+| `AgentProcessWOExeUpperUserListGet`(…[, …])
- |
-| `AgentProcessWOExeUpperUserListGet`(…)
+ | Return the process list only for the current user (where Agent is running) without .EXE in upper case.
- | Return the process list only for the current user (where Agent is running) without .EXE in upper case.
+ |
+| `GSettingsAutocleaner`([inGSettings])
+
+ | HIDDEN Interval gSettings auto cleaner def to clear some garbage.
- |
-| `GSettingsAutocleaner`(inGSettings)
+ |
+| `GSettingsGet`([inGSettings])
- | HIDDEN Interval gSettings auto cleaner def to clear some garbage.
+ | Get the GSettings from the singleton module.
- |
-| `GSettingsKeyListValueAppend`(inGSettings, inValue)
+ |
+| `GSettingsKeyListValueAppend`(inValue[, …])
- | Append value in GSettings by the key list
+ | Append value in GSettings by the key list
- |
-| `GSettingsKeyListValueGet`(inGSettings[, …])
+ |
+| `GSettingsKeyListValueGet`([inKeyList, …])
| Get the value from the GSettings by the key list
- |
-| `GSettingsKeyListValueOperatorPlus`(…[, …])
+ |
+| `GSettingsKeyListValueOperatorPlus`(inValue[, …])
- | Execute plus operation between 2 lists (1:inValue and 2:gSettings by the inKeyList)
+ | Execute plus operation between 2 lists (1:inValue and 2:gSettings by the inKeyList)
- |
-| `GSettingsKeyListValueSet`(inGSettings, inValue)
+ |
+| `GSettingsKeyListValueSet`(inValue[, …])
- | Set value in GSettings by the key list
+ | Set value in GSettings by the key list
- |
+ |
| `OSCMD`(inCMDStr[, inRunAsyncBool, inLogger])
- | OS send command in shell locally
+ | OS send command in shell locally
- |
+ |
| `OSCredentialsVerify`(inUserStr, inPasswordStr)
- | Verify user credentials in windows.
+ | Verify user credentials in windows.
- |
-| `OSRemotePCRestart`(inLogger, inHostStr[, …])
+ |
+| `OSRemotePCRestart`(inHostStr[, inForceBool, …])
- | Send signal via power shell to restart remote PC ATTENTION: Orchestrator user need to have restart right on the Remote machine to restart PC.
+ | Send signal via power shell to restart remote PC ATTENTION: Orchestrator user need to have restart right on the Remote machine to restart PC.
- |
+ |
+| `Orchestrator`([inGSettings, …])
+
+ | Main def to start orchestrator
+
+ |
| `OrchestratorIsAdmin`()
- | Check if Orchestrator process is running as administrator
+ | Check if Orchestrator process is running as administrator
- |
+ |
+| `OrchestratorLoggerGet`()
+
+ | Get the logger from the Orchestrator
+
+ |
+| `OrchestratorPySearchInit`(inGlobPatternStr[, …])
+
+ | Search the py files by the glob and do the safe init (in try except).
+
+ |
| `OrchestratorRerunAsAdmin`()
- | Check if not admin - then rerun orchestrator as administrator
+ | Check if not admin - then rerun orchestrator as administrator
- |
+ |
| `OrchestratorRestart`([inGSettings])
- | Orchestrator restart
+ | Orchestrator restart
- |
-| `OrchestratorSessionRestore`(inGSettings)
+ |
+| `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).
+ | 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
+ | Orchestrator session save in file
|
-| `ProcessDefIntervalCall`(inGSettings, inDef, …)
+| `ProcessDefIntervalCall`(inDef, inIntervalSecFloat)
- | Use this procedure if you need to run periodically some def.
+ | Use this procedure if you need to run periodically some def.
|
| `ProcessIsStarted`(inProcessNameWOExeStr)
@@ -209,7 +263,7 @@ Work with activity scheduling.
| Stop process on the orchestrator machine.
|
-| `ProcessorActivityItemAppend`(inGSettings[, …])
+| `ProcessorActivityItemAppend`([inGSettings, …])
| Create and add activity item in processor queue.
@@ -219,178 +273,398 @@ Work with activity scheduling.
| Create activity item.
|
-| `ProcessorAliasDefCreate`(inGSettings, inDef)
+| `ProcessorAliasDefCreate`(inDef[, inAliasStr, …])
- | 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 can’t 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 can’t transmit Python def object out of the Python environment) Deprecated.
- |
-| `ProcessorAliasDefUpdate`(inGSettings, inDef, …)
+ |
+| `ProcessorAliasDefUpdate`(inDef, inAliasStr[, …])
- | 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[, …])
| Import module and run def in the Orchestrator process.
- |
-| `RDPSessionCMDRun`(inGSettings, …[, inModeStr])
+ |
+| `RDPSessionCMDRun`(inRDPSessionKeyStr, inCMDStr)
- | Send CMD command to the RDP session “RUN” window
+ | Send CMD command to the RDP session “RUN” window
- |
-| `RDPSessionConnect`(inGSettings, …[, …])
+ |
+| `RDPSessionConnect`(inRDPSessionKeyStr[, …])
- | 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`(inRDPSessionKeyStr[, …])
- | Disconnect the RDP session and stop monitoring it.
+ | Disconnect the RDP session and stop monitoring it.
- |
+ |
| `RDPSessionDublicatesResolve`(inGSettings)
| 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`(inRDPSessionKeyStr, …)
- | 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`(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`(inRDPSessionKeyStr[, …])
- | Stop monitoring the RDP session by the Orchestrator process.
+ | Stop monitoring the RDP session by the Orchestrator process.
- |
+ |
| `RDPSessionProcessStartIfNotRunning`(…[, …])
| Start process in RDP if it is not running (check by the arg inProcessNameWEXEStr)
- |
-| `RDPSessionProcessStop`(inGSettings, …)
+ |
+| `RDPSessionProcessStop`(inRDPSessionKeyStr, …)
- | Send CMD command to the RDP session “RUN” window.
+ | Send CMD command to the RDP session “RUN” window.
- |
-| `RDPSessionReconnect`(inGSettings, …[, …])
+ |
+| `RDPSessionReconnect`(inRDPSessionKeyStr[, …])
- | Reconnect the RDP session
+ | Reconnect the RDP session
- |
-| `RDPSessionResponsibilityCheck`(inGSettings, …)
+ |
+| `RDPSessionResponsibilityCheck`(inRDPSessionKeyStr)
- | 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)
| Create RDP connect dict item/ Use it connect/reconnect (Orchestrator.RDPSessionConnect)
- |
-| `SchedulerActivityTimeAddWeekly`(inGSettings)
+ |
+| `SchedulerActivityTimeAddWeekly`([…])
- | Add activity item list in scheduler.
+ | Add activity item list in scheduler.
- |
+ |
+| `Start`([inDumpRestoreBool, …])
+
+ | Start the orchestrator threads execution
+
+ |
+| `StorageRobotExists`(inRobotNameStr)
+
+ | Check if robot storage exists
+
+ |
+| `StorageRobotGet`(inRobotNameStr)
+
+ | Get the robot storage by the robot name.
+
+ |
| `UACKeyListCheck`(inRequest, inRoleKeyList)
| Check is client is has access for the key list
- |
-| `UACSuperTokenUpdate`(inGSettings, inSuperTokenStr)
+ |
+| `UACSuperTokenUpdate`(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`(inADLoginStr[, inADStr, …])
- | Update user access (UAC)
+ | Update user access (UAC)
- |
+ |
| `UACUserDictGet`(inRequest)
| Return user UAC hierarchy dict of the inRequest object.
- |
+ |
| `WebAuditMessageCreate`(inRequest[, …])
| Create message string with request user details (IP, Login etc…).
- |
-| `WebCPUpdate`(inGSettings, inCPKeyStr[, …])
+ |
+| `WebCPUpdate`(inCPKeyStr[, inHTMLRenderDef, …])
- | Add control panel HTML, JSON generator or JS when page init
+ | Add control panel HTML, JSON generator or JS when page init
- |
-| `WebListenCreate`(inGSettings[, …])
+ |
+| `WebListenCreate`([inServerKeyStr, …])
- | Create listen interface for the web server
+ | Create listen interface for the web server
- |
+ |
| `WebRequestParseBodyBytes`(inRequest)
| Extract the body in bytes from the request
- |
+ |
| `WebRequestParseBodyJSON`(inRequest)
| Extract the body in dict/list from the request
- |
+ |
| `WebRequestParseBodyStr`(inRequest)
| Extract the body in str from the request
- |
+ |
| `WebRequestParseFile`(inRequest)
| Parse the request - extract the file (name, body in bytes)
- |
-| `WebURLConnectDef`(inGSettings, inMethodStr, …)
+ |
+| `WebRequestParsePath`(inRequest)
- | Connect URL to DEF
+ | Parse the request - extract the url.
- |
-| `WebURLConnectFile`(inGSettings, inMethodStr, …)
+ |
+| `WebRequestResponseSend`(inRequest, inResponeStr)
- | Connect URL to File
+ | Send response for the request :return:
- |
-| `WebURLConnectFolder`(inGSettings, …)
+ |
+| `WebURLConnectDef`(inMethodStr, inURLStr, …)
- | Connect URL to Folder
+ | Connect URL to DEF
- |
+ |
+| `WebURLConnectFile`(inMethodStr, inURLStr, …)
+
+ | Connect URL to File
+
+ |
+| `WebURLConnectFolder`(inMethodStr, inURLStr, …)
+
+ | Connect URL to Folder
+
+ |
| `WebUserInfoGet`(inRequest)
| 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)
| Return User UAC Hierarchy DICT Return {…}
- |
+ |
+
+### pyOpenRPA.Orchestrator.__Orchestrator__.ActivityItemCreate(inDef, inArgList=None, inArgDict=None, inArgGSettingsStr=None, inArgLoggerStr=None, inGUIDStr=None, inThreadBool=False)
+Create activity item. Activity item can be used as list item in ProcessorActivityItemAppend or in Processor.ActivityListExecute.
+
+```
+# USAGE
+from pyOpenRPA import Orchestrator
+
+# EXAMPLE 1
+def TestDef(inArg1Str, inGSettings, inLogger):
+ pass
+lActivityItem = Orchestrator.ActivityItemCreate(
+ inDef = TestDef,
+ inArgList=[],
+ inArgDict={"inArg1Str": "ArgValueStr"},
+ inArgGSettingsStr = "inGSettings",
+ inArgLoggerStr = "inLogger")
+# lActivityItem:
+# {
+# "Def":TestDef,
+# "ArgList":inArgList,
+# "ArgDict":inArgDict,
+# "ArgGSettings": "inArgGSettings",
+# "ArgLogger": "inLogger"
+# }
+
+# EXAMPLE 2
+def TestDef(inArg1Str):
+ pass
+Orchestrator.ActivityItemDefAliasUpdate(
+ inGSettings = gSettings,
+ inDef = TestDef,
+ inAliasStr="TestDefAlias")
+lActivityItem = Orchestrator.ActivityItemCreate(
+ inDef = "TestDefAlias",
+ inArgList=[],
+ inArgDict={"inArg1Str": "ArgValueStr"},
+ inArgGSettingsStr = None,
+ inArgLoggerStr = None)
+# lActivityItem:
+# {
+# "Def":"TestDefAlias",
+# "ArgList":inArgList,
+# "ArgDict":inArgDict,
+# "ArgGSettings": None,
+# "ArgLogger": None
+# }
+```
+
+
+* **Parameters**
+
+
+ * **inDef** – def link or def alias (look gSettings[“Processor”][“AliasDefDict”])
+
+
+ * **inArgList** – Args list for the Def
+
+
+ * **inArgDict** – Args dict for the def
+
+
+ * **inArgGSettingsStr** – Name of def argument of the GSettings dict
+
+
+ * **inArgLoggerStr** – Name of def argument of the logging object
+
-### pyOpenRPA.Orchestrator.__Orchestrator__.AgentActivityItemAdd(inGSettings, inHostNameStr, inUserStr, inActivityItemDict)
+ * **inGUIDStr** – GUID which you can specify. If None the GUID will be generated
+
+
+ * **inThreadBool** – True - execute ActivityItem in new thread; False - in processor thread
+
+
+
+* **Returns**
+
+ {}
+
+
+
+### pyOpenRPA.Orchestrator.__Orchestrator__.ActivityItemDefAliasCreate(inDef, inAliasStr=None, inGSettings=None)
+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 can’t transmit Python def object out of the Python environment)
+
+```
+# USAGE
+from pyOpenRPA import Orchestrator
+
+def TestDef():
+ pass
+lAliasStr = Orchestrator.ActivityItemDefAliasCreate(
+ inGSettings = gSettings,
+ inDef = TestDef,
+ inAliasStr="TestDefAlias")
+# Now you can call TestDef by the alias from var lAliasStr with help of ActivityItem (key Def = lAliasStr)
+```
+
+
+* **Parameters**
+
+
+ * **inGSettings** – Global settings dict (singleton)
+
+
+ * **inDef** – Def
+
+
+ * **inAliasStr** – String alias for associated def
+
+
+
+* **Returns**
+
+ str Alias string (Alias can be regenerated if previous alias was occupied)
+
+
+
+### pyOpenRPA.Orchestrator.__Orchestrator__.ActivityItemDefAliasModulesLoad()
+Load all def from sys.modules… in ActivityItem def alias dict
+
+
+* **Returns**
+
+ None
+
+
+
+### pyOpenRPA.Orchestrator.__Orchestrator__.ActivityItemDefAliasUpdate(inDef, inAliasStr, inGSettings=None)
+Update 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 can’t transmit Python def object out of the Python environment)
+
+```
+# USAGE
+from pyOpenRPA import Orchestrator
+
+def TestDef():
+ pass
+Orchestrator.ActivityItemDefAliasUpdate(
+ inGSettings = gSettings,
+ inDef = TestDef,
+ inAliasStr="TestDefAlias")
+# Now you can call TestDef by the alias "TestDefAlias" with help of ActivityItem (key Def = "TestDefAlias")
+```
+
+
+* **Parameters**
+
+
+ * **inGSettings** – Global settings dict (singleton)
+
+
+ * **inDef** – Def
+
+
+ * **inAliasStr** – String alias for associated def
+
+
+
+* **Returns**
+
+ str Alias string
+
+
+
+### pyOpenRPA.Orchestrator.__Orchestrator__.ActivityItemHelperDefAutofill(inDef)
+Detect def by the name and prepare the activity item dict with values.
+
+
+* **Parameters**
+
+ **inDef** –
+
+
+
+* **Returns**
+
+
+
+
+### pyOpenRPA.Orchestrator.__Orchestrator__.ActivityItemHelperDefList(inDefQueryStr=None)
+> Create list of the available Def names in activity item. You can use query def filter via arg inDefQueryStr
+
+
+* **Parameters**
+
+ **inDefStr** –
+
+
+
+* **Returns**
+
+ [“ActivityItemDefAliasUpdate”, “ActivityItemDefAliasCreate”, etc…]
+
+
+
+### pyOpenRPA.Orchestrator.__Orchestrator__.AgentActivityItemAdd(inHostNameStr, inUserStr, inActivityItemDict, inGSettings=None)
Add activity in AgentDict. Check if item is created
@@ -416,7 +690,7 @@ Add activity in AgentDict. Check if item is created
-### pyOpenRPA.Orchestrator.__Orchestrator__.AgentActivityItemExists(inGSettings, inHostNameStr, inUserStr, inGUIDStr)
+### pyOpenRPA.Orchestrator.__Orchestrator__.AgentActivityItemExists(inHostNameStr, inUserStr, inGUIDStr, inGSettings=None)
Check by GUID if ActivityItem has exists in request list. If exist - the result response has not been recieved from the agent
@@ -436,7 +710,7 @@ Check by GUID if ActivityItem has exists in request list. If exist - the result
-### pyOpenRPA.Orchestrator.__Orchestrator__.AgentActivityItemReturnExists(inGSettings, inGUIDStr)
+### pyOpenRPA.Orchestrator.__Orchestrator__.AgentActivityItemReturnExists(inGUIDStr, inGSettings=None)
Check by GUID if ActivityItem has been executed and result has come to the Orchestrator
@@ -456,7 +730,7 @@ Check by GUID if ActivityItem has been executed and result has come to the Orche
-### pyOpenRPA.Orchestrator.__Orchestrator__.AgentActivityItemReturnGet(inGSettings, inGUIDStr, inCheckIntervalSecFloat=0.5)
+### pyOpenRPA.Orchestrator.__Orchestrator__.AgentActivityItemReturnGet(inGUIDStr, inCheckIntervalSecFloat=0.5, inGSettings=None)
Work synchroniously! Wait while result will be recieved. Get the result of the ActivityItem execution on the Agent side. Before this please check by the def AgentActivityItemReturnExists that result has come to the Orchestrator
!ATTENTION! Use only after Orchestrator initialization! Before orchestrator init exception will be raised.
@@ -481,7 +755,7 @@ Work synchroniously! Wait while result will be recieved. Get the result of the A
-### pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSCMD(inGSettings, inHostNameStr, inUserStr, inCMDStr, inRunAsyncBool=True, inSendOutputToOrchestratorLogsBool=True, inCMDEncodingStr='cp1251')
+### pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSCMD(inHostNameStr, inUserStr, inCMDStr, inRunAsyncBool=True, inSendOutputToOrchestratorLogsBool=True, inCMDEncodingStr='cp1251', inGSettings=None)
Send CMD to OS thought the pyOpenRPA.Agent daemon. Result return to log + Orchestrator by the A2O connection
@@ -516,7 +790,7 @@ Send CMD to OS thought the pyOpenRPA.Agent daemon. Result return to log + Orches
-### pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSFileBinaryDataBase64StrAppend(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inFileDataBase64Str)
+### pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSFileBinaryDataBase64StrAppend(inHostNameStr, inUserStr, inFilePathStr, inFileDataBase64Str, inGSettings=None)
Append binary file by the base64 string by the pyOpenRPA.Agent daemon process (safe for JSON transmission)
@@ -545,7 +819,7 @@ Append binary file by the base64 string by the pyOpenRPA.Agent daemon process (s
-### pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSFileBinaryDataBase64StrCreate(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inFileDataBase64Str)
+### pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSFileBinaryDataBase64StrCreate(inHostNameStr, inUserStr, inFilePathStr, inFileDataBase64Str, inGSettings=None)
Create binary file by the base64 string by the pyOpenRPA.Agent daemon process (safe for JSON transmission)
@@ -574,7 +848,7 @@ Create binary file by the base64 string by the pyOpenRPA.Agent daemon process (s
-### pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSFileBinaryDataBase64StrReceive(inGSettings, inHostNameStr, inUserStr, inFilePathStr)
+### pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSFileBinaryDataBase64StrReceive(inHostNameStr, inUserStr, inFilePathStr, inGSettings=None)
Read binary file and encode in base64 to transmit (safe for JSON transmition)
@@ -600,7 +874,7 @@ Read binary file and encode in base64 to transmit (safe for JSON transmition)
-### pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSFileBinaryDataBytesCreate(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inFileDataBytes)
+### pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSFileBinaryDataBytesCreate(inHostNameStr, inUserStr, inFilePathStr, inFileDataBytes, inGSettings=None)
Create binary file by the base64 string by the pyOpenRPA.Agent daemon process (safe for JSON transmition)
@@ -629,7 +903,7 @@ Create binary file by the base64 string by the pyOpenRPA.Agent daemon process (s
-### pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSFileSend(inGSettings, inHostNameStr, inUserStr, inOrchestratorFilePathStr, inAgentFilePathStr)
+### pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSFileSend(inHostNameStr, inUserStr, inOrchestratorFilePathStr, inAgentFilePathStr, inGSettings=None)
Send the file from the Orchestrator to Agent (synchroniously) pyOpenRPA.Agent daemon process (safe for JSON transmition).
Work safety with big files
Thread safe - you can call def even if you dont init the orchestrator - def will be executed later
@@ -663,7 +937,7 @@ Thread safe - you can call def even if you dont init the orchestrator - def will
-### pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSFileTextDataStrCreate(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inFileDataStr, inEncodingStr='utf-8')
+### pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSFileTextDataStrCreate(inHostNameStr, inUserStr, inFilePathStr, inFileDataStr, inEncodingStr='utf-8', inGSettings=None)
Create text file by the string by the pyOpenRPA.Agent daemon process
@@ -695,7 +969,7 @@ Create text file by the string by the pyOpenRPA.Agent daemon process
-### pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSFileTextDataStrReceive(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inEncodingStr='utf-8')
+### pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSFileTextDataStrReceive(inHostNameStr, inUserStr, inFilePathStr, inEncodingStr='utf-8', inGSettings=None)
Read text file in the agent GUI session
@@ -724,7 +998,7 @@ Read text file in the agent GUI session
-### pyOpenRPA.Orchestrator.__Orchestrator__.AgentProcessWOExeUpperUserListGet(inGSettings, inHostNameStr, inUserStr)
+### pyOpenRPA.Orchestrator.__Orchestrator__.AgentProcessWOExeUpperUserListGet(inHostNameStr, inUserStr, inGSettings=None)
Return the process list only for the current user (where Agent is running) without .EXE in upper case. Can use in ActivityItem from Orchestrator to Agent
@@ -747,7 +1021,7 @@ Return the process list only for the current user (where Agent is running) witho
-### pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsAutocleaner(inGSettings)
+### pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsAutocleaner(inGSettings=None)
HIDDEN Interval gSettings auto cleaner def to clear some garbage.
@@ -763,7 +1037,23 @@ HIDDEN Interval gSettings auto cleaner def to clear some garbage.
-### pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsKeyListValueAppend(inGSettings, inValue, inKeyList=None)
+### pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsGet(inGSettings=None)
+Get the GSettings from the singleton module.
+
+
+* **Parameters**
+
+ **inGSettings** – You can pass some GSettings to check if it equal to base gsettings. If not equal - def will merge it
+
+
+
+* **Returns**
+
+ GSettings
+
+
+
+### pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsKeyListValueAppend(inValue, inKeyList=None, inGSettings=None)
Append value in GSettings by the key list
```
@@ -804,7 +1094,7 @@ Orchestrator.GSettingsKeyListValueAppend(
-### pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsKeyListValueGet(inGSettings, inKeyList=None)
+### pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsKeyListValueGet(inKeyList=None, inGSettings=None)
Get the value from the GSettings by the key list
@@ -824,7 +1114,7 @@ Get the value from the GSettings by the key list
-### pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsKeyListValueOperatorPlus(inGSettings, inValue, inKeyList=None)
+### pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsKeyListValueOperatorPlus(inValue, inKeyList=None, inGSettings=None)
Execute plus operation between 2 lists (1:inValue and 2:gSettings by the inKeyList)
```
@@ -868,7 +1158,7 @@ Orchestrator.GSettingsKeyListValueOperatorPlus(
-### pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsKeyListValueSet(inGSettings, inValue, inKeyList=None)
+### pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsKeyListValueSet(inValue, inKeyList=None, inGSettings=None)
Set value in GSettings by the key list
@@ -937,7 +1227,7 @@ Verify user credentials in windows. Return bool
-### pyOpenRPA.Orchestrator.__Orchestrator__.OSRemotePCRestart(inLogger, inHostStr, inForceBool=True)
+### pyOpenRPA.Orchestrator.__Orchestrator__.OSRemotePCRestart(inHostStr, inForceBool=True, inLogger=None)
Send signal via power shell to restart remote PC
ATTENTION: Orchestrator user need to have restart right on the Remote machine to restart PC.
@@ -960,6 +1250,28 @@ ATTENTION: Orchestrator user need to have restart right on the Remote machine to
+### pyOpenRPA.Orchestrator.__Orchestrator__.Orchestrator(inGSettings=None, inDumpRestoreBool=True, inRunAsAdministratorBool=True)
+Main def to start orchestrator
+
+
+* **Parameters**
+
+
+ * **inGSettings** –
+
+
+ * **inDumpRestoreBool** –
+
+
+ * **inRunAsAdministratorBool** –
+
+
+
+* **Returns**
+
+
+
+
### pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorIsAdmin()
Check if Orchestrator process is running as administrator
@@ -970,6 +1282,57 @@ Check if Orchestrator process is running as administrator
+### pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorLoggerGet()
+Get the logger from the Orchestrator
+
+
+* **Returns**
+
+
+
+
+### pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorPySearchInit(inGlobPatternStr, inDefStr=None, inDefArgNameGSettingsStr=None)
+Search the py files by the glob and do the safe init (in try except). Also add inited module in sys.modules as imported (module name = file name without extension).
+
+```
+# USAGE VAR 1 (without the def auto call)
+# Autoinit control panels starts with CP_
+Orchestrator.OrchestratorPySearchInit(inGlobPatternStr="ControlPanel\CP_*.py")
+
+# USAGE VAR 2 (with the def auto call) - for the backward compatibility CP for the Orchestrator ver. < 1.2.7
+# Autoinit control panels starts with CP_
+Orchestrator.OrchestratorPySearchInit(inGlobPatternStr="ControlPanel\CP_*.py", inDefStr="SettingsUpdate", inDefArgNameGSettingsStr="inGSettings")
+
+# INFO: The code above will replace the code below
+## !!! For Relative import !!! CP Version Check
+try:
+ sys.path.insert(0,os.path.abspath(os.path.join(r"")))
+ from ControlPanel import CP_VersionCheck
+ CP_VersionCheck.SettingsUpdate(inGSettings=gSettings)
+except Exception as e:
+ gSettings["Logger"].exception(f"Exception when init CP. See below.")
+```
+
+
+* **Parameters**
+
+
+ * **inGlobPatternStr** – example”..\*\*\*X64\*.cmd”
+
+
+ * **inDefStr** – OPTIONAL The string name of the def. For backward compatibility if you need to auto call some def from initialized module
+
+
+ * **inDefArgNameGSettingsStr** – OPTIONAL The name of the GSettings argument in def (if exists)
+
+
+
+* **Returns**
+
+ { “ModuleNameStr”:{“PyPathStr”: “”, “Module”: …}, …}
+
+
+
### pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorRerunAsAdmin()
Check if not admin - then rerun orchestrator as administrator
@@ -990,7 +1353,7 @@ Orchestrator restart
-### pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorSessionRestore(inGSettings)
+### 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)
@@ -1009,7 +1372,7 @@ Check _SessionLast_RDPList.json and _SessionLast_StorageDict.pickle in working d
-### pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorSessionSave(inGSettings)
+### pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorSessionSave(inGSettings=None)
Orchestrator session save in file
_SessionLast_RDPList.json (encoding = “utf-8”)
@@ -1028,7 +1391,7 @@ Orchestrator session save in file
-### pyOpenRPA.Orchestrator.__Orchestrator__.ProcessDefIntervalCall(inGSettings, inDef, inIntervalSecFloat, inIntervalAsyncBool=False, inDefArgList=None, inDefArgDict=None, inDefArgGSettingsNameStr=None, inDefArgLoggerNameStr=None, inExecuteInNewThreadBool=True, inLogger=None)
+### pyOpenRPA.Orchestrator.__Orchestrator__.ProcessDefIntervalCall(inDef, inIntervalSecFloat, inIntervalAsyncBool=False, inDefArgList=None, inDefArgDict=None, inDefArgGSettingsNameStr=None, inDefArgLoggerNameStr=None, inExecuteInNewThreadBool=True, inLogger=None, inGSettings=None)
Use this procedure if you need to run periodically some def. Set def, args, interval and enjoy :)
@@ -1204,7 +1567,7 @@ Orchestrator.ProcessStop(
-### pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorActivityItemAppend(inGSettings, inDef=None, inArgList=None, inArgDict=None, inArgGSettingsStr=None, inArgLoggerStr=None, inActivityItemDict=None)
+### pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorActivityItemAppend(inGSettings=None, inDef=None, inArgList=None, inArgDict=None, inArgGSettingsStr=None, inArgLoggerStr=None, inActivityItemDict=None)
Create and add activity item in processor queue.
```
@@ -1270,53 +1633,63 @@ Orchestrator.ProcessorActivityItemAppend(
:return ActivityItem GUIDStr
-### pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorActivityItemCreate(inDef, inArgList=None, inArgDict=None, inArgGSettingsStr=None, inArgLoggerStr=None, inGUIDStr=None)
+### pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorActivityItemCreate(inDef, inArgList=None, inArgDict=None, inArgGSettingsStr=None, inArgLoggerStr=None, inGUIDStr=None, inThreadBool=False)
Create activity item. Activity item can be used as list item in ProcessorActivityItemAppend or in Processor.ActivityListExecute.
+Deprecated. See ActivityItemCreate
+.. code-block:: python
-```
-# USAGE
-from pyOpenRPA import Orchestrator
+> # USAGE
+> from pyOpenRPA import Orchestrator
-# EXAMPLE 1
-def TestDef(inArg1Str, inGSettings, inLogger):
- pass
-lActivityItem = Orchestrator.ProcessorActivityItemCreate(
- inDef = TestDef,
- inArgList=[],
- inArgDict={"inArg1Str": "ArgValueStr"},
- inArgGSettingsStr = "inGSettings",
- inArgLoggerStr = "inLogger")
-# lActivityItem:
-# {
-# "Def":TestDef,
-# "ArgList":inArgList,
-# "ArgDict":inArgDict,
-# "ArgGSettings": "inArgGSettings",
-# "ArgLogger": "inLogger"
-# }
+> # EXAMPLE 1
+> def TestDef(inArg1Str, inGSettings, inLogger):
-# EXAMPLE 2
-def TestDef(inArg1Str):
- pass
-Orchestrator.ProcessorAliasDefUpdate(
- inGSettings = gSettings,
- inDef = TestDef,
- inAliasStr="TestDefAlias")
-lActivityItem = Orchestrator.ProcessorActivityItemCreate(
- inDef = "TestDefAlias",
- inArgList=[],
- inArgDict={"inArg1Str": "ArgValueStr"},
- inArgGSettingsStr = None,
- inArgLoggerStr = None)
-# lActivityItem:
-# {
-# "Def":"TestDefAlias",
-# "ArgList":inArgList,
-# "ArgDict":inArgDict,
-# "ArgGSettings": None,
-# "ArgLogger": None
-# }
-```
+> > pass
+
+> lActivityItem = Orchestrator.ProcessorActivityItemCreate(
+
+> inDef = TestDef,
+> inArgList=[],
+> inArgDict={“inArg1Str”: “ArgValueStr”},
+> inArgGSettingsStr = “inGSettings”,
+> inArgLoggerStr = “inLogger”)
+
+> # lActivityItem:
+> # {
+> # “Def”:TestDef,
+> # “ArgList”:inArgList,
+> # “ArgDict”:inArgDict,
+> # “ArgGSettings”: “inArgGSettings”,
+> # “ArgLogger”: “inLogger”
+> # }
+
+> # EXAMPLE 2
+> def TestDef(inArg1Str):
+
+> > pass
+
+> Orchestrator.ProcessorAliasDefUpdate(
+
+> inGSettings = gSettings,
+> inDef = TestDef,
+> inAliasStr=”TestDefAlias”)
+
+> lActivityItem = Orchestrator.ProcessorActivityItemCreate(
+
+> inDef = “TestDefAlias”,
+> inArgList=[],
+> inArgDict={“inArg1Str”: “ArgValueStr”},
+> inArgGSettingsStr = None,
+> inArgLoggerStr = None)
+
+> # lActivityItem:
+> # {
+> # “Def”:”TestDefAlias”,
+> # “ArgList”:inArgList,
+> # “ArgDict”:inArgDict,
+> # “ArgGSettings”: None,
+> # “ArgLogger”: None
+> # }
* **Parameters**
@@ -1340,6 +1713,9 @@ lActivityItem = Orchestrator.ProcessorActivityItemCreate(
* **inGUIDStr** – GUID which you can specify. If None the GUID will be generated
+ * **inThreadBool** – True - execute ActivityItem in new thread; False - in processor thread
+
+
* **Returns**
@@ -1347,9 +1723,10 @@ lActivityItem = Orchestrator.ProcessorActivityItemCreate(
-### pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorAliasDefCreate(inGSettings, inDef, inAliasStr=None)
+### pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorAliasDefCreate(inDef, inAliasStr=None, inGSettings=None)
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 can’t transmit Python def object out of the Python environment)
+Deprecated. See ActivityItemDefAliasCreate
```
# USAGE
@@ -1384,9 +1761,10 @@ lAliasStr = Orchestrator.ProcessorAliasDefCreate(
-### pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorAliasDefUpdate(inGSettings, inDef, inAliasStr)
+### pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorAliasDefUpdate(inDef, inAliasStr, inGSettings=None)
Update 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 can’t transmit Python def object out of the Python environment)
+Deprecated. See ActivityItemDefAliasUpdate
```
# USAGE
@@ -1462,7 +1840,7 @@ Orchestrator.PythonStart(
-### pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionCMDRun(inGSettings, inRDPSessionKeyStr, inCMDStr, inModeStr='CROSSCHECK')
+### pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionCMDRun(inRDPSessionKeyStr, inCMDStr, inModeStr='CROSSCHECK', inGSettings=None)
Send CMD command to the RDP session “RUN” window
```
@@ -1510,7 +1888,7 @@ lResultDict = Orchestrator.RDPSessionCMDRun(
-### pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionConnect(inGSettings, inRDPSessionKeyStr, inRDPTemplateDict=None, inHostStr=None, inPortStr=None, inLoginStr=None, inPasswordStr=None)
+### pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionConnect(inRDPSessionKeyStr, inRDPTemplateDict=None, inHostStr=None, inPortStr=None, inLoginStr=None, inPasswordStr=None, inGSettings=None)
Create new RDPSession in RobotRDPActive. Attention - activity will be ignored if RDP key is already exists
2 way of the use
@@ -1565,7 +1943,7 @@ Orchestrator.RDPSessionConnect(
-### pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionDisconnect(inGSettings, inRDPSessionKeyStr, inBreakTriggerProcessWOExeList=None)
+### pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionDisconnect(inRDPSessionKeyStr, inBreakTriggerProcessWOExeList=None, inGSettings=None)
Disconnect the RDP session and stop monitoring it.
```
@@ -1617,7 +1995,7 @@ DEVELOPING Search duplicates in GSettings RDPlist
-### pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionFileStoredRecieve(inGSettings, inRDPSessionKeyStr, inRDPFilePathStr, inHostFilePathStr)
+### pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionFileStoredRecieve(inRDPSessionKeyStr, inRDPFilePathStr, inHostFilePathStr, inGSettings=None)
Recieve file from RDP session to the Orchestrator session using shared drive in RDP (see RDP Configuration Dict, Shared drive)
```
@@ -1655,7 +2033,7 @@ lResultDict = Orchestrator.RDPSessionFileStoredRecieve(
-### pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionFileStoredSend(inGSettings, inRDPSessionKeyStr, inHostFilePathStr, inRDPFilePathStr)
+### pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionFileStoredSend(inRDPSessionKeyStr, inHostFilePathStr, inRDPFilePathStr, inGSettings=None)
Send file from Orchestrator session to the RDP session using shared drive in RDP (see RDP Configuration Dict, Shared drive)
```
@@ -1693,7 +2071,7 @@ lResultDict = Orchestrator.RDPSessionFileStoredSend(
-### pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionLogoff(inGSettings, inRDPSessionKeyStr, inBreakTriggerProcessWOExeList=None)
+### pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionLogoff(inRDPSessionKeyStr, inBreakTriggerProcessWOExeList=None, inGSettings=None)
Logoff the RDP session from the Orchestrator process (close all apps in session when logoff)
```
@@ -1727,7 +2105,7 @@ Orchestrator.RDPSessionLogoff(
-### pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionMonitorStop(inGSettings, inRDPSessionKeyStr)
+### pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionMonitorStop(inRDPSessionKeyStr, inGSettings=None)
Stop monitoring the RDP session by the Orchestrator process. Current def don’t kill RDP session - only stop to track it (it can give )
```
@@ -1757,7 +2135,7 @@ Orchestrator.RDPSessionMonitorStop(
-### pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionProcessStartIfNotRunning(inGSettings, inRDPSessionKeyStr, inProcessNameWEXEStr, inFilePathStr, inFlagGetAbsPathBool=True)
+### pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionProcessStartIfNotRunning(inRDPSessionKeyStr, inProcessNameWEXEStr, inFilePathStr, inFlagGetAbsPathBool=True, inGSettings=None)
Start process in RDP if it is not running (check by the arg inProcessNameWEXEStr)
```
@@ -1799,7 +2177,7 @@ Orchestrator.RDPSessionProcessStartIfNotRunning(
-### pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionProcessStop(inGSettings, inRDPSessionKeyStr, inProcessNameWEXEStr, inFlagForceCloseBool)
+### pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionProcessStop(inRDPSessionKeyStr, inProcessNameWEXEStr, inFlagForceCloseBool, inGSettings=None)
Send CMD command to the RDP session “RUN” window.
```
@@ -1837,7 +2215,7 @@ lResultDict = Orchestrator.RDPSessionProcessStop(
-### pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionReconnect(inGSettings, inRDPSessionKeyStr, inRDPTemplateDict=None)
+### pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionReconnect(inRDPSessionKeyStr, inRDPTemplateDict=None, inGSettings=None)
Reconnect the RDP session
```
@@ -1874,7 +2252,7 @@ Orchestrator.RDPSessionReconnect(
-### pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionResponsibilityCheck(inGSettings, inRDPSessionKeyStr)
+### pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionResponsibilityCheck(inRDPSessionKeyStr, inGSettings=None)
DEVELOPING, MAYBE NOT USEFUL Check RDP Session responsibility TODO NEED DEV + TEST
@@ -1984,7 +2362,7 @@ lRDPItemDict = Orchestrator.RDPTemplateCreate(
-### pyOpenRPA.Orchestrator.__Orchestrator__.SchedulerActivityTimeAddWeekly(inGSettings, inTimeHHMMStr='23:55:', inWeekdayList=None, inActivityList=None)
+### pyOpenRPA.Orchestrator.__Orchestrator__.SchedulerActivityTimeAddWeekly(inTimeHHMMStr='23:55:', inWeekdayList=None, inActivityList=None, inGSettings=None)
Add activity item list in scheduler. You can set weekday list and set time when launch. Activity list will be executed at planned time/day.
```
@@ -2031,6 +2409,57 @@ Orchestrator.SchedulerActivityTimeAddWeekly(
+### pyOpenRPA.Orchestrator.__Orchestrator__.Start(inDumpRestoreBool=True, inRunAsAdministratorBool=True)
+Start the orchestrator threads execution
+
+
+* **Parameters**
+
+
+ * **inDumpRestoreBool** – True - restore data from the dumo
+
+
+ * **inRunAsAdministratorBool** – True - rerun as admin if not
+
+
+
+* **Returns**
+
+
+
+
+### pyOpenRPA.Orchestrator.__Orchestrator__.StorageRobotExists(inRobotNameStr)
+Check if robot storage exists
+
+
+* **Parameters**
+
+ **inRobotNameStr** – Robot name (case sensitive)
+
+
+
+* **Returns**
+
+ True - robot storage exist; False - does not exist
+
+
+
+### pyOpenRPA.Orchestrator.__Orchestrator__.StorageRobotGet(inRobotNameStr)
+Get the robot storage by the robot name. If Robot storage is not exist - function will create it
+
+
+* **Parameters**
+
+ **inRobotNameStr** – Robot name (case sensitive)
+
+
+
+* **Returns**
+
+ Dict
+
+
+
### pyOpenRPA.Orchestrator.__Orchestrator__.UACKeyListCheck(inRequest, inRoleKeyList)
Check is client is has access for the key list
@@ -2051,7 +2480,7 @@ Check is client is has access for the key list
-### pyOpenRPA.Orchestrator.__Orchestrator__.UACSuperTokenUpdate(inGSettings, inSuperTokenStr)
+### pyOpenRPA.Orchestrator.__Orchestrator__.UACSuperTokenUpdate(inSuperTokenStr, inGSettings=None)
Add supertoken for the all access (it is need for the robot communication without human)
@@ -2065,7 +2494,7 @@ Add supertoken for the all access (it is need for the robot communication withou
-### pyOpenRPA.Orchestrator.__Orchestrator__.UACUpdate(inGSettings, inADLoginStr, inADStr='', inADIsDefaultBool=True, inURLList=None, inRoleHierarchyAllowedDict=None)
+### pyOpenRPA.Orchestrator.__Orchestrator__.UACUpdate(inADLoginStr, inADStr='', inADIsDefaultBool=True, inURLList=None, inRoleHierarchyAllowedDict=None, inGSettings=None)
Update user access (UAC)
@@ -2143,7 +2572,7 @@ lLogger.info(lWebAuditMessageStr)
-### pyOpenRPA.Orchestrator.__Orchestrator__.WebCPUpdate(inGSettings, inCPKeyStr, inHTMLRenderDef=None, inJSONGeneratorDef=None, inJSInitGeneratorDef=None)
+### pyOpenRPA.Orchestrator.__Orchestrator__.WebCPUpdate(inCPKeyStr, inHTMLRenderDef=None, inJSONGeneratorDef=None, inJSInitGeneratorDef=None, inGSettings=None)
Add control panel HTML, JSON generator or JS when page init
@@ -2166,7 +2595,7 @@ Add control panel HTML, JSON generator or JS when page init
-### pyOpenRPA.Orchestrator.__Orchestrator__.WebListenCreate(inGSettings, inServerKeyStr='Default', inAddressStr='', inPortInt=80, inCertFilePEMPathStr=None, inKeyFilePathStr=None)
+### pyOpenRPA.Orchestrator.__Orchestrator__.WebListenCreate(inServerKeyStr='Default', inAddressStr='', inPortInt=80, inCertFilePEMPathStr=None, inKeyFilePathStr=None, inGSettings=None)
Create listen interface for the web server
@@ -2258,7 +2687,28 @@ Parse the request - extract the file (name, body in bytes)
-### pyOpenRPA.Orchestrator.__Orchestrator__.WebURLConnectDef(inGSettings, inMethodStr, inURLStr, inMatchTypeStr, inDef, inContentTypeStr='application/octet-stream')
+### pyOpenRPA.Orchestrator.__Orchestrator__.WebRequestParsePath(inRequest)
+Parse the request - extract the url. Example: /pyOpenRPA/Debugging/DefHelper/…
+
+
+* **Parameters**
+
+ **inRequest** –
+
+
+
+* **Returns**
+
+ Str, Example: /pyOpenRPA/Debugging/DefHelper/…
+
+
+
+### pyOpenRPA.Orchestrator.__Orchestrator__.WebRequestResponseSend(inRequest, inResponeStr)
+Send response for the request
+:return:
+
+
+### pyOpenRPA.Orchestrator.__Orchestrator__.WebURLConnectDef(inMethodStr, inURLStr, inMatchTypeStr, inDef, inContentTypeStr='application/octet-stream', inGSettings=None)
> Connect URL to DEF
> “inMethodStr”:”GET|POST”,
@@ -2290,7 +2740,7 @@ Parse the request - extract the file (name, body in bytes)
-### pyOpenRPA.Orchestrator.__Orchestrator__.WebURLConnectFile(inGSettings, inMethodStr, inURLStr, inMatchTypeStr, inFilePathStr, inContentTypeStr='application/octet-stream')
+### pyOpenRPA.Orchestrator.__Orchestrator__.WebURLConnectFile(inMethodStr, inURLStr, inMatchTypeStr, inFilePathStr, inContentTypeStr='application/octet-stream', inGSettings=None)
Connect URL to File
“inMethodStr”:”GET|POST”,
@@ -2321,7 +2771,7 @@ Connect URL to File
-### pyOpenRPA.Orchestrator.__Orchestrator__.WebURLConnectFolder(inGSettings, inMethodStr, inURLStr, inMatchTypeStr, inFolderPathStr)
+### pyOpenRPA.Orchestrator.__Orchestrator__.WebURLConnectFolder(inMethodStr, inURLStr, inMatchTypeStr, inFolderPathStr, inGSettings=None)
Connect URL to Folder
“inMethodStr”:”GET|POST”,
@@ -2365,7 +2815,7 @@ Return User info about request
-### pyOpenRPA.Orchestrator.__Orchestrator__.WebUserIsSuperToken(inRequest, inGSettings)
+### pyOpenRPA.Orchestrator.__Orchestrator__.WebUserIsSuperToken(inRequest, inGSettings=None)
Return bool if request is authentificated with supetoken (token which is never expires)
@@ -2408,12 +2858,12 @@ Return User UAC Hierarchy DICT Return {…}
| 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
diff --git a/Wiki/ENG_Guide/markdown/Orchestrator/03_gSettingsTemplate.md b/Wiki/ENG_Guide/markdown/Orchestrator/03_gSettingsTemplate.md
index ba57b6ae..827116ac 100644
--- a/Wiki/ENG_Guide/markdown/Orchestrator/03_gSettingsTemplate.md
+++ b/Wiki/ENG_Guide/markdown/Orchestrator/03_gSettingsTemplate.md
@@ -44,6 +44,9 @@ def __Create__():
# # # # # # # # # # # # # # # # # #
},
"ServerDict": {
+ "ControlPanelDict": {
+ # "CPKey":
+ },
"AgentLimitLogSizeBytesInt": 300, # Don't show body if json body of transmition is more than
"ServerThread": None, # Server thread is there
"AgentActivityLifetimeSecFloat": 1200.0, # Time in seconds to life for activity for the agent
@@ -150,6 +153,7 @@ def __Create__():
# },
],
},
+ "ManagersProcessDict":{}, # The key of the Process is (mAgentHostNameStr.upper(), mAgentUserNameStr.upper(), mProcessNameWOExeStr.upper())
"ProcessorDict": { # Has been changed. New general processor (one threaded) v.1.2.0
"ActivityList": [ # List of the activities
# {
@@ -167,6 +171,7 @@ def __Create__():
"ThreadIdInt": None, # Technical field - will be setup when processor init
"WarningExecutionMoreThanSecFloat": 60.0 # Push warning if execution more than n seconds
},
+ # TODO REMOVE DEPRECATED KEYS IN v.2.0.0
"ControlPanelDict": { # Old structure > CPDict
"RefreshSeconds": 5, # deprecated parameter
"RobotList": [
@@ -176,6 +181,7 @@ def __Create__():
#}
]
},
+ # TODO REMOVE DEPRECATED KEYS IN v.2.0.0
"CPDict": {
# "CPKey": {"HTMLRenderDef":None, "JSONGeneratorDef":None, "JSInitGeneratorDef":None}
},
@@ -299,7 +305,8 @@ def __UACClientAdminCreate__():
"RestartOrchestratorBool": True, # Restart orchestrator activity
"RestartOrchestratorGITPullBool": True, # Turn off (RDP remember) orc + git pull + Turn on (rdp remember)
"RestartPCBool": True, # Send CMD to restart pc
- "NothingBool":True # USe option if you dont want to give some access to the RDP controls
+ "NothingBool":True, # USe option if you dont want to give some access to the RDP controls
+ "Debugging":True # Debugging tool
},
"ActivityDict": { # Empty dict - all access
"ActivityListExecuteBool": True, # Execute activity at the current thread
@@ -329,7 +336,7 @@ def LoggerDumpLogHandlerAdd(inLogger, inGSettingsClientDict):
# inModeStr:
# "BASIC" - create standart configuration
from pyOpenRPA.Orchestrator.Utils import LoggerHandlerDumpLogList
-def Create(inModeStr="BASIC"):
+def Create(inModeStr="BASIC", inLoggerLevel = None):
if inModeStr=="BASIC":
lResult = __Create__() # Create settings
# Создать файл логирования
@@ -339,27 +346,31 @@ def Create(inModeStr="BASIC"):
##########################
# Подготовка логгера Robot
#########################
- mRobotLogger = lResult["Logger"]
- mRobotLogger.setLevel(logging.INFO)
- # create the logging file handler
- mRobotLoggerFH = logging.FileHandler(
- "Reports\\" + datetime.datetime.now().strftime("%Y_%m_%d") + ".log")
- mRobotLoggerFormatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
- mRobotLoggerFH.setFormatter(mRobotLoggerFormatter)
- # add handler to logger object
- mRobotLogger.addHandler(mRobotLoggerFH)
- ####################Add console output
- handler = logging.StreamHandler(sys.stdout)
- handler.setFormatter(mRobotLoggerFormatter)
- mRobotLogger.addHandler(handler)
- ############################################
- LoggerDumpLogHandlerAdd(inLogger=mRobotLogger, inGSettingsClientDict=lResult["Client"])
- #mHandlerDumpLogList = LoggerHandlerDumpLogList.LoggerHandlerDumpLogList(inDict=lResult["Client"],
- # inKeyStr="DumpLogList",
- # inHashKeyStr="DumpLogListHashStr",
- # inRowCountInt=lResult["Client"][
- # "DumpLogListCountInt"])
- #mHandlerDumpLogList.setFormatter(mRobotLoggerFormatter)
- #mRobotLogger.addHandler(mHandlerDumpLogList)
+ if inLoggerLevel is None: inLoggerLevel=logging.INFO
+ lL = lResult["Logger"]
+ if len(lL.handlers) == 0:
+ lL.setLevel(logging.INFO)
+ # create the logging file handler
+ mRobotLoggerFH = logging.FileHandler(
+ "Reports\\" + datetime.datetime.now().strftime("%Y_%m_%d") + ".log")
+ mRobotLoggerFormatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
+ mRobotLoggerFH.setFormatter(mRobotLoggerFormatter)
+ # add handler to logger object
+ lL.addHandler(mRobotLoggerFH)
+ ####################Add console output
+ handler = logging.StreamHandler(sys.stdout)
+ handler.setFormatter(mRobotLoggerFormatter)
+ lL.addHandler(handler)
+ ############################################
+ LoggerDumpLogHandlerAdd(inLogger=lL, inGSettingsClientDict=lResult["Client"])
+ #mHandlerDumpLogList = LoggerHandlerDumpLogList.LoggerHandlerDumpLogList(inDict=lResult["Client"],
+ # inKeyStr="DumpLogList",
+ # inHashKeyStr="DumpLogListHashStr",
+ # inRowCountInt=lResult["Client"][
+ # "DumpLogListCountInt"])
+ #mHandlerDumpLogList.setFormatter(mRobotLoggerFormatter)
+ #mRobotLogger.addHandler(mHandlerDumpLogList)
+ else:
+ if lL: lL.warning("Pay attention! Your code has been call SettingsTemplate.Create - since pyOpenRPA v1.2.7 GSettings is creating automatically")
return lResult # return the result dict
```
diff --git a/Wiki/ENG_Guide/markdown/Orchestrator/04_HowToUse.md b/Wiki/ENG_Guide/markdown/Orchestrator/04_HowToUse.md
index d24a7341..1f52e6db 100644
--- a/Wiki/ENG_Guide/markdown/Orchestrator/04_HowToUse.md
+++ b/Wiki/ENG_Guide/markdown/Orchestrator/04_HowToUse.md
@@ -29,7 +29,8 @@ if not Orchestrator.OrchestratorIsAdmin():
Orchestrator.OrchestratorRerunAsAdmin()
print(f"Orchestrator will be run as administrator!")
elif __name__ == "__main__": # New init way - allow run as module -m PyOpenRPA.Orchestrator
- gSettings = SettingsTemplate.Create(inModeStr="BASIC") # Create GSettings with basic configuration - no more config is available from the box - you can create own
+ gSettings = Orchestrator.GSettingsGet()
+ #gSettings = SettingsTemplate.Create(inModeStr="BASIC") # Create GSettings with basic configuration - no more config is available from the box - you can create own
# TEST Add User ND - Add Login ND to superuser of the Orchestrator
lUACClientDict = SettingsTemplate.__UACClientAdminCreate__()
@@ -38,47 +39,12 @@ elif __name__ == "__main__": # New init way - allow run as module -m PyOpenRPA.O
Orchestrator.UACUpdate(inGSettings=gSettings, inADLoginStr="IMaslov", inADStr="", inADIsDefaultBool=True, inURLList=[])
# TEST Add Supertoken for the all access between robots
Orchestrator.UACSuperTokenUpdate(inGSettings=gSettings, inSuperTokenStr="1992-04-03-0643-ru-b4ff-openrpa52zzz")
-
# Add first interface!
Orchestrator.WebListenCreate(inGSettings=gSettings)
-
# Restore DUMP
Orchestrator.OrchestratorSessionRestore(inGSettings=gSettings)
-
- # INFO Relative/Absolute import see below - after settings init
- # Template for import CP - Control Panels
- # ATTENTION - Pay attention to CP names! Orchestrator is one for the all control panels per one machine
- ## !!! For Absolute import control panels !!!
- # try:
- # sys.path.insert(0,os.path.abspath(os.path.join(r"..\ROBOT\Builds")))
- # import pyRobot_CP
- # pyRobot_CP.SettingsUpdate(inGSettings=gSettings)
- # except Exception as e:
- # gSettings["Logger"].exception(f"Exception when init CP. See below.")
-
- ## !!! For Relative import control panels !!!
- # try:
- # sys.path.insert(0,os.path.abspath(os.path.join(r"..\ROBOT\Builds")))
- # from pyRobot_CP import ControlPanel
- # ControlPanel.SettingsUpdate(inGSettings=gSettings)
- # except Exception as e:
- # gSettings["Logger"].exception(f"Exception when init CP. See below.")
-
-
- ## !!! For Relative import !!! CP Version Check
- try:
- sys.path.insert(0,os.path.abspath(os.path.join(r"")))
- from ControlPanel import CP_VersionCheck
- CP_VersionCheck.SettingsUpdate(inGSettings=gSettings)
- except Exception as e:
- gSettings["Logger"].exception(f"Exception when init CP. See below.")
-
- try:
- from ControlPanel import CP_Test
- CP_Test.SettingsUpdate(inGSettings=gSettings)
- except Exception as e:
- gSettings["Logger"].exception(f"Exception when init CP. See below.")
-
+ # Autoinit control panels starts with CP_
+ lPyModules = Orchestrator.OrchestratorPySearchInit(inGlobPatternStr="ControlPanel\\CP_*.py", inDefStr="SettingsUpdate", inDefArgNameGSettingsStr="inGSettings")
# Call the orchestrator def
Orchestrator.Orchestrator(inGSettings=gSettings, inDumpRestoreBool=False)
else:
diff --git a/Wiki/ENG_Guide/markdown/Orchestrator/06_Defs Managers.md b/Wiki/ENG_Guide/markdown/Orchestrator/06_Defs Managers.md
new file mode 100644
index 00000000..969ed9a4
--- /dev/null
+++ b/Wiki/ENG_Guide/markdown/Orchestrator/06_Defs Managers.md
@@ -0,0 +1,1555 @@
+# 6. Defs Managers
+
+## Process (General)
+
+```
+# EXAMPLE
+from pyOpenRPA.Orchestrator import Managers
+lProcess = Orchestrator.Managers.Process(inAgentHostNameStr="PC-DESKTOP",inAgentUserNameStr="ND", inProcessNameWOExeStr="notepad",inStartCMDStr="notepad")
+```
+
+**Classes:**
+
+| `Process`(inAgentHostNameStr, …[, …])
+
+ | Manager process, which is need to be started / stopped / restarted
+
+ |
+**Functions:**
+
+| `ProcessGet`(inAgentHostNameStr, …)
+
+ | Return the process instance by the inProcessNameWOExeStr
+
+ |
+| `ProcessManual2Auto`(inAgentHostNameStr, …)
+
+ | Remove Manual flag from process (if exists) - it will allow the schedule operations via def StatusCheckStart(self): def StatusCheckStorForce(self): def StatusCheckStopSafe(self):
+
+ |
+| `ProcessStart`(inAgentHostNameStr, …[, …])
+
+ | Manual/Auto start.
+
+ |
+| `ProcessStatusCheck`(inAgentHostNameStr, …)
+
+ | Check if process is alive.
+
+ |
+| `ProcessStatusStrGet`(inAgentHostNameStr, …)
+
+ | Get the status of the Process instance.
+
+ |
+| `ProcessStopForce`(inAgentHostNameStr, …[, …])
+
+ | Manual/Auto stop force.
+
+ |
+| `ProcessStopSafe`(inAgentHostNameStr, …[, …])
+
+ | Manual/Auto stop safe.
+
+ |
+
+### class pyOpenRPA.Orchestrator.Managers.Process.Process(inAgentHostNameStr, inAgentUserNameStr, inProcessNameWOExeStr, inStartPathStr=None, inStartCMDStr=None, inStopSafeTimeoutSecFloat=120)
+Manager process, which is need to be started / stopped / restarted
+
+With Process instance you can automate your process activity. Use schedule package to set interval when process should be active and when not.
+
+Process instance has the following statuses:
+
+
+ * 0_STOPPED
+
+
+ * 1_STOPPED_MANUAL
+
+
+ * 2_STOP_SAFE
+
+
+ * 3_STOP_SAFE_MANUAL
+
+
+ * 4_STARTED
+
+
+ * 5_STARTED_MANUAL
+
+**Methods:**
+
+| `Manual2Auto`()
+
+ | Remove Manual flag from process (if exists) - it will allow the schedule operations via def StatusCheckStart(self): def StatusCheckStorForce(self): def StatusCheckStopSafe(self):
+
+ |
+| `RestartForce`([inIsManualBool])
+
+ | Manual/Auto restart force.
+
+ |
+| `RestartSafe`([inIsManualBool])
+
+ | Manual/Auto restart safe.
+
+ |
+| `ScheduleWeekDay`()
+
+ | Some template def to work with schedule package.
+
+ |
+| `Start`([inIsManualBool])
+
+ | Manual/Auto start.
+
+ |
+| `StatusChangeLog`()
+
+ | Lof information about status change
+
+ |
+| `StatusCheck`()
+
+ | Check if process is alive.
+
+ |
+| `StatusCheckStart`()
+
+ | Check process status and run it if auto stopped self.mStatusStr is “0_STOPPED”
+
+ |
+| `StatusCheckStopForce`()
+
+ | Check process status and auto stop force it if self.mStatusStr is 4_STARTED
+
+ |
+| `StatusCheckStopSafe`()
+
+ | Check process status and auto stop safe it if self.mStatusStr is 4_STARTED
+
+ |
+| `StopForce`([inIsManualBool])
+
+ | Manual/Auto stop force.
+
+ |
+| `StopSafe`([inIsManualBool])
+
+ | Manual/Auto stop safe.
+
+ |
+
+#### Manual2Auto()
+Remove Manual flag from process (if exists) - it will allow the schedule operations via def StatusCheckStart(self): def StatusCheckStorForce(self): def StatusCheckStopSafe(self):
+
+
+* **Returns**
+
+ Process status. See self.mStatusStr. 0_STOPPED 1_STOPPED_MANUAL 2_STOP_SAFE 3_STOP_SAFE_MANUAL 4_STARTED 5_STARTED_MANUAL
+
+
+
+#### RestartForce(inIsManualBool=True)
+Manual/Auto restart force. Force restart dont wait process termination - it just terminate process now ant then start it.
+Manual restart will block scheduling execution. To return schedule execution use def Manual2Auto
+
+
+* **Parameters**
+
+ **inIsManualBool** – Default is True - Mark this operation as manual - StatusCheckStart/Stop will be blocked - only StatusCheck will be working. False - Auto operation
+
+
+
+* **Returns**
+
+
+
+
+#### RestartSafe(inIsManualBool=True)
+Manual/Auto restart safe. Restart safe is the operation which send signal to process to terminate own work (send term signal to process). Then it run process. Managers.Process wait for the mStopSafeTimeoutSecFloat seconds. After that, if process is not terminated - self will StopForce it.
+Manual stop safe will block scheduling execution. To return schedule execution use def Manual2Auto
+
+
+* **Parameters**
+
+ **inIsManualBool** – Default is True - Mark this operation as manual - StatusCheckStart/Stop will be blocked - only StatusCheck will be working. False - Auto operation
+
+
+
+* **Returns**
+
+
+
+
+#### ScheduleWeekDay()
+Some template def to work with schedule package. Configure schedule to start. Stop process in auto mode in all sele.
+
+
+* **Returns**
+
+
+
+
+#### Start(inIsManualBool=True)
+Manual/Auto start. Manual start will block scheduling execution. To return schedule execution use def Manual2Auto
+
+
+* **Parameters**
+
+ **inIsManualBool** – Default is True - Mark this operation as manual - StatusCheckStart/Stop will be blocked - only StatusCheck will be working. False - Auto operation
+
+
+
+* **Returns**
+
+ Process status. See self.mStatusStr. 0_STOPPED 1_STOPPED_MANUAL 2_STOP_SAFE 3_STOP_SAFE_MANUAL 4_STARTED 5_STARTED_MANUAL
+
+
+
+#### StatusChangeLog()
+Lof information about status change
+
+
+* **Returns**
+
+
+
+
+#### StatusCheck()
+Check if process is alive. The def will save the manual flag is exists.
+
+
+* **Returns**
+
+ Process status. See self.mStatusStr. 0_STOPPED 1_STOPPED_MANUAL 2_STOP_SAFE 3_STOP_SAFE_MANUAL 4_STARTED 5_STARTED_MANUAL
+
+
+
+#### StatusCheckStart()
+Check process status and run it if auto stopped self.mStatusStr is “0_STOPPED”
+
+
+* **Returns**
+
+
+
+
+#### StatusCheckStopForce()
+Check process status and auto stop force it if self.mStatusStr is 4_STARTED
+
+
+* **Returns**
+
+
+
+
+#### StatusCheckStopSafe()
+Check process status and auto stop safe it if self.mStatusStr is 4_STARTED
+
+
+* **Returns**
+
+
+
+
+#### StopForce(inIsManualBool=True)
+Manual/Auto stop force. Force stop dont wait process termination - it just terminate process now.
+Manual stop safe will block scheduling execution. To return schedule execution use def Manual2Auto
+
+
+* **Parameters**
+
+ **inIsManualBool** – Default is True - Mark this operation as manual - StatusCheckStart/Stop will be blocked - only StatusCheck will be working. False - Auto operation
+
+
+
+* **Returns**
+
+ Process status. See self.mStatusStr. 0_STOPPED 1_STOPPED_MANUAL 2_STOP_SAFE 3_STOP_SAFE_MANUAL 4_STARTED 5_STARTED_MANUAL
+
+
+
+#### StopSafe(inIsManualBool=True)
+Manual/Auto stop safe. Stop safe is the operation which send signal to process to terminate own work (send term signal to process). Managers.Process wait for the mStopSafeTimeoutSecFloat seconds. After that, if process is not terminated - self will StopForce it.
+Manual stop safe will block scheduling execution. To return schedule execution use def Manual2Auto
+
+
+* **Parameters**
+
+ **inIsManualBool** – Default is True - Mark this operation as manual - StatusCheckStart/Stop will be blocked - only StatusCheck will be working. False - Auto operation
+
+
+
+* **Returns**
+
+
+
+
+### pyOpenRPA.Orchestrator.Managers.Process.ProcessGet(inAgentHostNameStr: str, inAgentUserNameStr: str, inProcessNameWOExeStr: str)
+Return the process instance by the inProcessNameWOExeStr
+
+
+* **Parameters**
+
+
+ * **inAgentHostNameStr** – Agent hostname in any case. Required to identify Process
+
+
+ * **inAgentUserNameStr** – Agent user name in any case. Required to identify Process
+
+
+ * **inProcessNameWOExeStr** – The process name without extension .exe (the key of the Process instance). Any case - will be processed to the upper case
+
+
+
+* **Returns**
+
+ Process instance (if exists) Else None
+
+
+
+### pyOpenRPA.Orchestrator.Managers.Process.ProcessManual2Auto(inAgentHostNameStr: str, inAgentUserNameStr: str, inProcessNameWOExeStr: str)
+Remove Manual flag from process (if exists) - it will allow the schedule operations via def StatusCheckStart(self): def StatusCheckStorForce(self): def StatusCheckStopSafe(self):
+
+
+* **Parameters**
+
+
+ * **inAgentHostNameStr** – Agent hostname in any case. Required to identify Process
+
+
+ * **inAgentUserNameStr** – Agent user name in any case. Required to identify Process
+
+
+ * **inProcessNameWOExeStr** – The process name without extension .exe (the key of the Process instance). Any case - will be processed to the upper case
+
+
+
+* **Returns**
+
+ Process status. See self.mStatusStr.
+ Process instance has the following statuses:
+ - 0_STOPPED
+ - 1_STOPPED_MANUAL
+ - 2_STOP_SAFE
+ - 3_STOP_SAFE_MANUAL
+ - 4_STARTED
+ - 5_STARTED_MANUAL
+ - None (if Process instance not exists)
+
+
+
+### pyOpenRPA.Orchestrator.Managers.Process.ProcessStart(inAgentHostNameStr: str, inAgentUserNameStr: str, inProcessNameWOExeStr: str, inIsManualBool: bool = True)
+Manual/Auto start. Manual start will block scheduling execution. To return schedule execution use def Manual2Auto
+
+
+* **Parameters**
+
+
+ * **inAgentHostNameStr** – Agent hostname in any case. Required to identify Process
+
+
+ * **inAgentUserNameStr** – Agent user name in any case. Required to identify Process
+
+
+ * **inProcessNameWOExeStr** – The process name without extension .exe (the key of the Process instance). Any case - will be processed to the upper case
+
+
+ * **inIsManualBool** – Default is True - Mark this operation as manual - StatusCheckStart/Stop will be blocked - only StatusCheck will be working. False - Auto operation
+
+
+
+* **Returns**
+
+ Process status. See self.mStatusStr.
+ Process instance has the following statuses:
+ - 0_STOPPED
+ - 1_STOPPED_MANUAL
+ - 2_STOP_SAFE
+ - 3_STOP_SAFE_MANUAL
+ - 4_STARTED
+ - 5_STARTED_MANUAL
+ - None (if Process instance not exists)
+
+
+
+### pyOpenRPA.Orchestrator.Managers.Process.ProcessStatusCheck(inAgentHostNameStr: str, inAgentUserNameStr: str, inProcessNameWOExeStr: str)
+Check if process is alive. The def will save the manual flag is exists.
+
+
+* **Parameters**
+
+
+ * **inAgentHostNameStr** – Agent hostname in any case. Required to identify Process
+
+
+ * **inAgentUserNameStr** – Agent user name in any case. Required to identify Process
+
+
+ * **inProcessNameWOExeStr** – The process name without extension .exe (the key of the Process instance). Any case - will be processed to the upper case
+
+
+
+* **Returns**
+
+ Process status. See self.mStatusStr.
+ Process instance has the following statuses:
+ - 0_STOPPED
+ - 1_STOPPED_MANUAL
+ - 2_STOP_SAFE
+ - 3_STOP_SAFE_MANUAL
+ - 4_STARTED
+ - 5_STARTED_MANUAL
+ - None (if Process instance not exists)
+
+
+
+### pyOpenRPA.Orchestrator.Managers.Process.ProcessStatusStrGet(inAgentHostNameStr: str, inAgentUserNameStr: str, inProcessNameWOExeStr: str)
+Get the status of the Process instance.
+
+
+* **Parameters**
+
+
+ * **inAgentHostNameStr** – Agent hostname in any case. Required to identify Process
+
+
+ * **inAgentUserNameStr** – Agent user name in any case. Required to identify Process
+
+
+ * **inProcessNameWOExeStr** – The process name without extension .exe (the key of the Process instance). Any case - will be processed to the upper case
+
+
+
+* **Returns**
+
+ Process status. See self.mStatusStr.
+ Process instance has the following statuses:
+ - 0_STOPPED
+ - 1_STOPPED_MANUAL
+ - 2_STOP_SAFE
+ - 3_STOP_SAFE_MANUAL
+ - 4_STARTED
+ - 5_STARTED_MANUAL
+ - None (if Process instance not exists)
+
+
+
+### pyOpenRPA.Orchestrator.Managers.Process.ProcessStopForce(inAgentHostNameStr: str, inAgentUserNameStr: str, inProcessNameWOExeStr: str, inIsManualBool: bool = True)
+Manual/Auto stop force. Force stop dont wait process termination - it just terminate process now.
+Manual stop safe will block scheduling execution. To return schedule execution use def Manual2Auto
+
+
+* **Parameters**
+
+
+ * **inAgentHostNameStr** – Agent hostname in any case. Required to identify Process
+
+
+ * **inAgentUserNameStr** – Agent user name in any case. Required to identify Process
+
+
+ * **inProcessNameWOExeStr** – The process name without extension .exe (the key of the Process instance). Any case - will be processed to the upper case
+
+
+ * **inIsManualBool** – Default is True - Mark this operation as manual - StatusCheckStart/Stop will be blocked - only StatusCheck will be working. False - Auto operation
+
+
+
+* **Returns**
+
+ Process status. See self.mStatusStr.
+ Process instance has the following statuses:
+ - 0_STOPPED
+ - 1_STOPPED_MANUAL
+ - 2_STOP_SAFE
+ - 3_STOP_SAFE_MANUAL
+ - 4_STARTED
+ - 5_STARTED_MANUAL
+ - None (if Process instance not exists)
+
+
+
+### pyOpenRPA.Orchestrator.Managers.Process.ProcessStopSafe(inAgentHostNameStr: str, inAgentUserNameStr: str, inProcessNameWOExeStr: str, inIsManualBool: bool = True)
+Manual/Auto stop safe. Stop safe is the operation which send signal to process to terminate own work (send term signal to process). Managers.Process wait for the mStopSafeTimeoutSecFloat seconds. After that, if process is not terminated - self will StopForce it.
+Manual stop safe will block scheduling execution. To return schedule execution use def Manual2Auto
+
+
+* **Parameters**
+
+
+ * **inAgentHostNameStr** – Agent hostname in any case. Required to identify Process
+
+
+ * **inAgentUserNameStr** – Agent user name in any case. Required to identify Process
+
+
+ * **inProcessNameWOExeStr** – The process name without extension .exe (the key of the Process instance). Any case - will be processed to the upper case
+
+
+ * **inIsManualBool** – Default is True - Mark this operation as manual - StatusCheckStart/Stop will be blocked - only StatusCheck will be working. False - Auto operation
+
+
+
+* **Returns**
+
+ Process status. See self.mStatusStr.
+ Process instance has the following statuses:
+ - 0_STOPPED
+ - 1_STOPPED_MANUAL
+ - 2_STOP_SAFE
+ - 3_STOP_SAFE_MANUAL
+ - 4_STARTED
+ - 5_STARTED_MANUAL
+ - None (if Process instance not exists)
+
+
+## Process (Details)
+
+**Classes:**
+
+| `Process`(inAgentHostNameStr, …[, …])
+
+ | Manager process, which is need to be started / stopped / restarted
+
+ |
+**Functions:**
+
+| `ProcessGet`(inAgentHostNameStr, …)
+
+ | Return the process instance by the inProcessNameWOExeStr
+
+ |
+| `ProcessManual2Auto`(inAgentHostNameStr, …)
+
+ | Remove Manual flag from process (if exists) - it will allow the schedule operations via def StatusCheckStart(self): def StatusCheckStorForce(self): def StatusCheckStopSafe(self):
+
+ |
+| `ProcessStart`(inAgentHostNameStr, …[, …])
+
+ | Manual/Auto start.
+
+ |
+| `ProcessStatusCheck`(inAgentHostNameStr, …)
+
+ | Check if process is alive.
+
+ |
+| `ProcessStatusStrGet`(inAgentHostNameStr, …)
+
+ | Get the status of the Process instance.
+
+ |
+| `ProcessStopForce`(inAgentHostNameStr, …[, …])
+
+ | Manual/Auto stop force.
+
+ |
+| `ProcessStopSafe`(inAgentHostNameStr, …[, …])
+
+ | Manual/Auto stop safe.
+
+ |
+
+### class pyOpenRPA.Orchestrator.Managers.Process.Process(inAgentHostNameStr, inAgentUserNameStr, inProcessNameWOExeStr, inStartPathStr=None, inStartCMDStr=None, inStopSafeTimeoutSecFloat=120)
+Manager process, which is need to be started / stopped / restarted
+
+With Process instance you can automate your process activity. Use schedule package to set interval when process should be active and when not.
+
+Process instance has the following statuses:
+
+
+ * 0_STOPPED
+
+
+ * 1_STOPPED_MANUAL
+
+
+ * 2_STOP_SAFE
+
+
+ * 3_STOP_SAFE_MANUAL
+
+
+ * 4_STARTED
+
+
+ * 5_STARTED_MANUAL
+
+**Methods:**
+
+| `Manual2Auto`()
+
+ | Remove Manual flag from process (if exists) - it will allow the schedule operations via def StatusCheckStart(self): def StatusCheckStorForce(self): def StatusCheckStopSafe(self):
+
+ |
+| `RestartForce`([inIsManualBool])
+
+ | Manual/Auto restart force.
+
+ |
+| `RestartSafe`([inIsManualBool])
+
+ | Manual/Auto restart safe.
+
+ |
+| `ScheduleWeekDay`()
+
+ | Some template def to work with schedule package.
+
+ |
+| `Start`([inIsManualBool])
+
+ | Manual/Auto start.
+
+ |
+| `StatusChangeLog`()
+
+ | Lof information about status change
+
+ |
+| `StatusCheck`()
+
+ | Check if process is alive.
+
+ |
+| `StatusCheckStart`()
+
+ | Check process status and run it if auto stopped self.mStatusStr is “0_STOPPED”
+
+ |
+| `StatusCheckStopForce`()
+
+ | Check process status and auto stop force it if self.mStatusStr is 4_STARTED
+
+ |
+| `StatusCheckStopSafe`()
+
+ | Check process status and auto stop safe it if self.mStatusStr is 4_STARTED
+
+ |
+| `StopForce`([inIsManualBool])
+
+ | Manual/Auto stop force.
+
+ |
+| `StopSafe`([inIsManualBool])
+
+ | Manual/Auto stop safe.
+
+ |
+
+#### Manual2Auto()
+Remove Manual flag from process (if exists) - it will allow the schedule operations via def StatusCheckStart(self): def StatusCheckStorForce(self): def StatusCheckStopSafe(self):
+
+
+* **Returns**
+
+ Process status. See self.mStatusStr. 0_STOPPED 1_STOPPED_MANUAL 2_STOP_SAFE 3_STOP_SAFE_MANUAL 4_STARTED 5_STARTED_MANUAL
+
+
+
+#### RestartForce(inIsManualBool=True)
+Manual/Auto restart force. Force restart dont wait process termination - it just terminate process now ant then start it.
+Manual restart will block scheduling execution. To return schedule execution use def Manual2Auto
+
+
+* **Parameters**
+
+ **inIsManualBool** – Default is True - Mark this operation as manual - StatusCheckStart/Stop will be blocked - only StatusCheck will be working. False - Auto operation
+
+
+
+* **Returns**
+
+
+
+
+#### RestartSafe(inIsManualBool=True)
+Manual/Auto restart safe. Restart safe is the operation which send signal to process to terminate own work (send term signal to process). Then it run process. Managers.Process wait for the mStopSafeTimeoutSecFloat seconds. After that, if process is not terminated - self will StopForce it.
+Manual stop safe will block scheduling execution. To return schedule execution use def Manual2Auto
+
+
+* **Parameters**
+
+ **inIsManualBool** – Default is True - Mark this operation as manual - StatusCheckStart/Stop will be blocked - only StatusCheck will be working. False - Auto operation
+
+
+
+* **Returns**
+
+
+
+
+#### ScheduleWeekDay()
+Some template def to work with schedule package. Configure schedule to start. Stop process in auto mode in all sele.
+
+
+* **Returns**
+
+
+
+
+#### Start(inIsManualBool=True)
+Manual/Auto start. Manual start will block scheduling execution. To return schedule execution use def Manual2Auto
+
+
+* **Parameters**
+
+ **inIsManualBool** – Default is True - Mark this operation as manual - StatusCheckStart/Stop will be blocked - only StatusCheck will be working. False - Auto operation
+
+
+
+* **Returns**
+
+ Process status. See self.mStatusStr. 0_STOPPED 1_STOPPED_MANUAL 2_STOP_SAFE 3_STOP_SAFE_MANUAL 4_STARTED 5_STARTED_MANUAL
+
+
+
+#### StatusChangeLog()
+Lof information about status change
+
+
+* **Returns**
+
+
+
+
+#### StatusCheck()
+Check if process is alive. The def will save the manual flag is exists.
+
+
+* **Returns**
+
+ Process status. See self.mStatusStr. 0_STOPPED 1_STOPPED_MANUAL 2_STOP_SAFE 3_STOP_SAFE_MANUAL 4_STARTED 5_STARTED_MANUAL
+
+
+
+#### StatusCheckStart()
+Check process status and run it if auto stopped self.mStatusStr is “0_STOPPED”
+
+
+* **Returns**
+
+
+
+
+#### StatusCheckStopForce()
+Check process status and auto stop force it if self.mStatusStr is 4_STARTED
+
+
+* **Returns**
+
+
+
+
+#### StatusCheckStopSafe()
+Check process status and auto stop safe it if self.mStatusStr is 4_STARTED
+
+
+* **Returns**
+
+
+
+
+#### StopForce(inIsManualBool=True)
+Manual/Auto stop force. Force stop dont wait process termination - it just terminate process now.
+Manual stop safe will block scheduling execution. To return schedule execution use def Manual2Auto
+
+
+* **Parameters**
+
+ **inIsManualBool** – Default is True - Mark this operation as manual - StatusCheckStart/Stop will be blocked - only StatusCheck will be working. False - Auto operation
+
+
+
+* **Returns**
+
+ Process status. See self.mStatusStr. 0_STOPPED 1_STOPPED_MANUAL 2_STOP_SAFE 3_STOP_SAFE_MANUAL 4_STARTED 5_STARTED_MANUAL
+
+
+
+#### StopSafe(inIsManualBool=True)
+Manual/Auto stop safe. Stop safe is the operation which send signal to process to terminate own work (send term signal to process). Managers.Process wait for the mStopSafeTimeoutSecFloat seconds. After that, if process is not terminated - self will StopForce it.
+Manual stop safe will block scheduling execution. To return schedule execution use def Manual2Auto
+
+
+* **Parameters**
+
+ **inIsManualBool** – Default is True - Mark this operation as manual - StatusCheckStart/Stop will be blocked - only StatusCheck will be working. False - Auto operation
+
+
+
+* **Returns**
+
+
+
+
+### pyOpenRPA.Orchestrator.Managers.Process.ProcessGet(inAgentHostNameStr: str, inAgentUserNameStr: str, inProcessNameWOExeStr: str)
+Return the process instance by the inProcessNameWOExeStr
+
+
+* **Parameters**
+
+
+ * **inAgentHostNameStr** – Agent hostname in any case. Required to identify Process
+
+
+ * **inAgentUserNameStr** – Agent user name in any case. Required to identify Process
+
+
+ * **inProcessNameWOExeStr** – The process name without extension .exe (the key of the Process instance). Any case - will be processed to the upper case
+
+
+
+* **Returns**
+
+ Process instance (if exists) Else None
+
+
+
+### pyOpenRPA.Orchestrator.Managers.Process.ProcessManual2Auto(inAgentHostNameStr: str, inAgentUserNameStr: str, inProcessNameWOExeStr: str)
+Remove Manual flag from process (if exists) - it will allow the schedule operations via def StatusCheckStart(self): def StatusCheckStorForce(self): def StatusCheckStopSafe(self):
+
+
+* **Parameters**
+
+
+ * **inAgentHostNameStr** – Agent hostname in any case. Required to identify Process
+
+
+ * **inAgentUserNameStr** – Agent user name in any case. Required to identify Process
+
+
+ * **inProcessNameWOExeStr** – The process name without extension .exe (the key of the Process instance). Any case - will be processed to the upper case
+
+
+
+* **Returns**
+
+ Process status. See self.mStatusStr.
+ Process instance has the following statuses:
+ - 0_STOPPED
+ - 1_STOPPED_MANUAL
+ - 2_STOP_SAFE
+ - 3_STOP_SAFE_MANUAL
+ - 4_STARTED
+ - 5_STARTED_MANUAL
+ - None (if Process instance not exists)
+
+
+
+### pyOpenRPA.Orchestrator.Managers.Process.ProcessStart(inAgentHostNameStr: str, inAgentUserNameStr: str, inProcessNameWOExeStr: str, inIsManualBool: bool = True)
+Manual/Auto start. Manual start will block scheduling execution. To return schedule execution use def Manual2Auto
+
+
+* **Parameters**
+
+
+ * **inAgentHostNameStr** – Agent hostname in any case. Required to identify Process
+
+
+ * **inAgentUserNameStr** – Agent user name in any case. Required to identify Process
+
+
+ * **inProcessNameWOExeStr** – The process name without extension .exe (the key of the Process instance). Any case - will be processed to the upper case
+
+
+ * **inIsManualBool** – Default is True - Mark this operation as manual - StatusCheckStart/Stop will be blocked - only StatusCheck will be working. False - Auto operation
+
+
+
+* **Returns**
+
+ Process status. See self.mStatusStr.
+ Process instance has the following statuses:
+ - 0_STOPPED
+ - 1_STOPPED_MANUAL
+ - 2_STOP_SAFE
+ - 3_STOP_SAFE_MANUAL
+ - 4_STARTED
+ - 5_STARTED_MANUAL
+ - None (if Process instance not exists)
+
+
+
+### pyOpenRPA.Orchestrator.Managers.Process.ProcessStatusCheck(inAgentHostNameStr: str, inAgentUserNameStr: str, inProcessNameWOExeStr: str)
+Check if process is alive. The def will save the manual flag is exists.
+
+
+* **Parameters**
+
+
+ * **inAgentHostNameStr** – Agent hostname in any case. Required to identify Process
+
+
+ * **inAgentUserNameStr** – Agent user name in any case. Required to identify Process
+
+
+ * **inProcessNameWOExeStr** – The process name without extension .exe (the key of the Process instance). Any case - will be processed to the upper case
+
+
+
+* **Returns**
+
+ Process status. See self.mStatusStr.
+ Process instance has the following statuses:
+ - 0_STOPPED
+ - 1_STOPPED_MANUAL
+ - 2_STOP_SAFE
+ - 3_STOP_SAFE_MANUAL
+ - 4_STARTED
+ - 5_STARTED_MANUAL
+ - None (if Process instance not exists)
+
+
+
+### pyOpenRPA.Orchestrator.Managers.Process.ProcessStatusStrGet(inAgentHostNameStr: str, inAgentUserNameStr: str, inProcessNameWOExeStr: str)
+Get the status of the Process instance.
+
+
+* **Parameters**
+
+
+ * **inAgentHostNameStr** – Agent hostname in any case. Required to identify Process
+
+
+ * **inAgentUserNameStr** – Agent user name in any case. Required to identify Process
+
+
+ * **inProcessNameWOExeStr** – The process name without extension .exe (the key of the Process instance). Any case - will be processed to the upper case
+
+
+
+* **Returns**
+
+ Process status. See self.mStatusStr.
+ Process instance has the following statuses:
+ - 0_STOPPED
+ - 1_STOPPED_MANUAL
+ - 2_STOP_SAFE
+ - 3_STOP_SAFE_MANUAL
+ - 4_STARTED
+ - 5_STARTED_MANUAL
+ - None (if Process instance not exists)
+
+
+
+### pyOpenRPA.Orchestrator.Managers.Process.ProcessStopForce(inAgentHostNameStr: str, inAgentUserNameStr: str, inProcessNameWOExeStr: str, inIsManualBool: bool = True)
+Manual/Auto stop force. Force stop dont wait process termination - it just terminate process now.
+Manual stop safe will block scheduling execution. To return schedule execution use def Manual2Auto
+
+
+* **Parameters**
+
+
+ * **inAgentHostNameStr** – Agent hostname in any case. Required to identify Process
+
+
+ * **inAgentUserNameStr** – Agent user name in any case. Required to identify Process
+
+
+ * **inProcessNameWOExeStr** – The process name without extension .exe (the key of the Process instance). Any case - will be processed to the upper case
+
+
+ * **inIsManualBool** – Default is True - Mark this operation as manual - StatusCheckStart/Stop will be blocked - only StatusCheck will be working. False - Auto operation
+
+
+
+* **Returns**
+
+ Process status. See self.mStatusStr.
+ Process instance has the following statuses:
+ - 0_STOPPED
+ - 1_STOPPED_MANUAL
+ - 2_STOP_SAFE
+ - 3_STOP_SAFE_MANUAL
+ - 4_STARTED
+ - 5_STARTED_MANUAL
+ - None (if Process instance not exists)
+
+
+
+### pyOpenRPA.Orchestrator.Managers.Process.ProcessStopSafe(inAgentHostNameStr: str, inAgentUserNameStr: str, inProcessNameWOExeStr: str, inIsManualBool: bool = True)
+Manual/Auto stop safe. Stop safe is the operation which send signal to process to terminate own work (send term signal to process). Managers.Process wait for the mStopSafeTimeoutSecFloat seconds. After that, if process is not terminated - self will StopForce it.
+Manual stop safe will block scheduling execution. To return schedule execution use def Manual2Auto
+
+
+* **Parameters**
+
+
+ * **inAgentHostNameStr** – Agent hostname in any case. Required to identify Process
+
+
+ * **inAgentUserNameStr** – Agent user name in any case. Required to identify Process
+
+
+ * **inProcessNameWOExeStr** – The process name without extension .exe (the key of the Process instance). Any case - will be processed to the upper case
+
+
+ * **inIsManualBool** – Default is True - Mark this operation as manual - StatusCheckStart/Stop will be blocked - only StatusCheck will be working. False - Auto operation
+
+
+
+* **Returns**
+
+ Process status. See self.mStatusStr.
+ Process instance has the following statuses:
+ - 0_STOPPED
+ - 1_STOPPED_MANUAL
+ - 2_STOP_SAFE
+ - 3_STOP_SAFE_MANUAL
+ - 4_STARTED
+ - 5_STARTED_MANUAL
+ - None (if Process instance not exists)
+
+
+## ControlPanel (General)
+
+```
+# EXAMPLE
+from pyOpenRPA.Orchestrator import Managers
+ lCP = Managers.ControlPanel(inControlPanelNameStr="TestTTT",inRefreshHTMLJinja2TemplatePathStr="ControlPanel\\test.html", inJinja2TemplateRefreshBool = True)
+```
+
+**Classes:**
+
+| `ControlPanel`(inControlPanelNameStr[, …])
+
+ | Manage your control panel on the orchestrator
+
+ |
+
+### class pyOpenRPA.Orchestrator.Managers.ControlPanel.ControlPanel(inControlPanelNameStr, inRefreshHTMLJinja2TemplatePathStr=None, inJinja2TemplateRefreshBool=False, inRobotNameStr=None)
+Manage your control panel on the orchestrator
+
+Control panel has 3 events types:
+- onRefreshHTML - run every n (see settings) second to detect changes in HTML control panel.
+- onRefreshJSON - run every n (see settings) second to detect changes in JSON data container to client side.
+- onInitJS - run when client reload the Orchestrator web page
+
+```
+# Usage example:
+lCPManager = Orchestrator.Managers.ControlPanel(inControlPanelNameStr="TestControlPanel",
+ inRefreshHTMLJinja2TemplatePathStr="ControlPanel\test.html", inJinja2TemplateRefreshBool = True)
+```
+
+If you use Jinja2 you can use next data context:
+StorageRobotDict: Orchestrator.StorageRobotGet(inRobotNameStr=self.mRobotNameStr),
+ControlPanelInstance: self,
+OrchestratorModule:Orchestrator,
+RequestInstance: inRequest,
+UserInfoDict: Orchestrator.WebUserInfoGet(inRequest=inRequest),
+UserUACDict: Orchestrator.UACUserDictGet(inRequest=inRequest),
+UserUACCheckDef: inRequest.UACClientCheck,
+EnumerateDef: enumerate,
+OperatorModule: operator,
+MathModule: math
+
+**Methods:**
+
+| `DataDictGenerate`(inRequest)
+
+ |
+* **param inRequest**
+
+ request handler (from http.server import BaseHTTPRequestHandler)
+
+
+
+ |
+| `InitJSJinja2StrGenerate`(inDataDict)
+
+ | Generate the HTML str from the Jinja2.
+
+ |
+| `InitJSJinja2TemplatePathSet`(…)
+
+ | Create Jinja2 env and load the template html
+
+ |
+| `Jinja2DataUpdateDictSet`(inJinja2DataUpdateDict)
+
+ | Set the data dict from the Jinja2 context (you can add some new params)
+
+ |
+| `OnInitJSDataDict`(inRequest)
+
+ | Event to prepare data context for the futher Jinja2 JS init generation.
+
+ |
+| `OnInitJSStr`(inRequest)
+
+ | Event when orchestrator web page is init on the client side - you can transmit some java script code is str type to execute it once.
+
+ |
+| `OnRefreshHTMLDataDict`(inRequest)
+
+ | Event to prepare data context for the futher Jinja2 HTML generation.
+
+ |
+| `OnRefreshHTMLHashStr`(inRequest)
+
+ | Generate the hash the result output HTML.
+
+ |
+| `OnRefreshHTMLStr`(inRequest)
+
+ | Event to generate HTML code of the control panel when refresh time is over.
+
+ |
+| `OnRefreshJSONDict`(inRequest)
+
+ | Event to transmit some data from server side to the client side in JSON format.
+
+ |
+| `RefreshHTMLJinja2StrGenerate`(inDataDict)
+
+ | Generate the HTML str from the Jinja2.
+
+ |
+| `RefreshHTMLJinja2TemplatePathSet`(…)
+
+ | Create Jinja2 env and load the template html
+
+ |
+
+#### DataDictGenerate(inRequest)
+
+* **Parameters**
+
+ **inRequest** – request handler (from http.server import BaseHTTPRequestHandler)
+
+
+
+* **Returns**
+
+
+
+
+#### InitJSJinja2StrGenerate(inDataDict)
+Generate the HTML str from the Jinja2. Pass the context inDataDict
+:param inDataDict:
+:return:
+
+
+#### InitJSJinja2TemplatePathSet(inJinja2TemplatePathStr)
+Create Jinja2 env and load the template html
+
+
+* **Parameters**
+
+ **inJinja2TemplatePathStr** –
+
+
+
+* **Returns**
+
+
+
+
+#### Jinja2DataUpdateDictSet(inJinja2DataUpdateDict)
+Set the data dict from the Jinja2 context (you can add some new params)
+
+
+* **Parameters**
+
+ **inJinja2DataUpdateDict** – dict, which will be appended to main data context
+
+
+
+* **Returns**
+
+ None
+
+
+
+#### OnInitJSDataDict(inRequest)
+Event to prepare data context for the futher Jinja2 JS init generation. You can override this def if you want some thing more data
+
+
+* **Parameters**
+
+ **inRequest** – request handler (from http.server import BaseHTTPRequestHandler)
+
+
+
+* **Returns**
+
+ dict
+
+
+
+#### OnInitJSStr(inRequest)
+Event when orchestrator web page is init on the client side - you can transmit some java script code is str type to execute it once.
+
+
+* **Parameters**
+
+ **inRequest** – request handler (from http.server import BaseHTTPRequestHandler)
+
+
+
+* **Returns**
+
+ ””
+
+
+
+
+#### OnRefreshHTMLDataDict(inRequest)
+Event to prepare data context for the futher Jinja2 HTML generation. You can override this def if you want some thing more data
+
+
+* **Parameters**
+
+ **inRequest** – request handler (from http.server import BaseHTTPRequestHandler)
+
+
+
+* **Returns**
+
+ dict
+
+
+
+#### OnRefreshHTMLHashStr(inRequest)
+Generate the hash the result output HTML. You can override this function if you know how to optimize HTML rendering.
+TODO NEED TO MODIFY ServerSettings to work with Hash because of all defs are need do use Hash
+
+
+* **Parameters**
+
+ **inRequest** – request handler (from http.server import BaseHTTPRequestHandler)
+
+
+
+* **Returns**
+
+ None - default, hash function is not determined. Str - hash function is working on!
+
+
+
+#### OnRefreshHTMLStr(inRequest)
+Event to generate HTML code of the control panel when refresh time is over.
+Support backward compatibility for previous versions.
+
+
+* **Parameters**
+
+ **inRequest** – request handler (from http.server import BaseHTTPRequestHandler)
+
+
+
+* **Returns**
+
+
+
+
+#### OnRefreshJSONDict(inRequest)
+Event to transmit some data from server side to the client side in JSON format. Call when page refresh is initialized
+
+
+* **Parameters**
+
+ **inRequest** – request handler (from http.server import BaseHTTPRequestHandler)
+
+
+
+* **Returns**
+
+ Dict type
+
+
+
+#### RefreshHTMLJinja2StrGenerate(inDataDict)
+Generate the HTML str from the Jinja2. Pass the context inDataDict
+:param inDataDict:
+:return:
+
+
+#### RefreshHTMLJinja2TemplatePathSet(inJinja2TemplatePathStr)
+Create Jinja2 env and load the template html
+
+
+* **Parameters**
+
+ **inJinja2TemplatePathStr** –
+
+
+
+* **Returns**
+
+
+
+## ControlPanel (Details)
+
+**Classes:**
+
+| `ControlPanel`(inControlPanelNameStr[, …])
+
+ | Manage your control panel on the orchestrator
+
+ |
+
+### class pyOpenRPA.Orchestrator.Managers.ControlPanel.ControlPanel(inControlPanelNameStr, inRefreshHTMLJinja2TemplatePathStr=None, inJinja2TemplateRefreshBool=False, inRobotNameStr=None)
+Manage your control panel on the orchestrator
+
+Control panel has 3 events types:
+- onRefreshHTML - run every n (see settings) second to detect changes in HTML control panel.
+- onRefreshJSON - run every n (see settings) second to detect changes in JSON data container to client side.
+- onInitJS - run when client reload the Orchestrator web page
+
+```
+# Usage example:
+lCPManager = Orchestrator.Managers.ControlPanel(inControlPanelNameStr="TestControlPanel",
+ inRefreshHTMLJinja2TemplatePathStr="ControlPanel\test.html", inJinja2TemplateRefreshBool = True)
+```
+
+If you use Jinja2 you can use next data context:
+StorageRobotDict: Orchestrator.StorageRobotGet(inRobotNameStr=self.mRobotNameStr),
+ControlPanelInstance: self,
+OrchestratorModule:Orchestrator,
+RequestInstance: inRequest,
+UserInfoDict: Orchestrator.WebUserInfoGet(inRequest=inRequest),
+UserUACDict: Orchestrator.UACUserDictGet(inRequest=inRequest),
+UserUACCheckDef: inRequest.UACClientCheck,
+EnumerateDef: enumerate,
+OperatorModule: operator,
+MathModule: math
+
+**Methods:**
+
+| `DataDictGenerate`(inRequest)
+
+ |
+* **param inRequest**
+
+ request handler (from http.server import BaseHTTPRequestHandler)
+
+
+
+ |
+| `InitJSJinja2StrGenerate`(inDataDict)
+
+ | Generate the HTML str from the Jinja2.
+
+ |
+| `InitJSJinja2TemplatePathSet`(…)
+
+ | Create Jinja2 env and load the template html
+
+ |
+| `Jinja2DataUpdateDictSet`(inJinja2DataUpdateDict)
+
+ | Set the data dict from the Jinja2 context (you can add some new params)
+
+ |
+| `OnInitJSDataDict`(inRequest)
+
+ | Event to prepare data context for the futher Jinja2 JS init generation.
+
+ |
+| `OnInitJSStr`(inRequest)
+
+ | Event when orchestrator web page is init on the client side - you can transmit some java script code is str type to execute it once.
+
+ |
+| `OnRefreshHTMLDataDict`(inRequest)
+
+ | Event to prepare data context for the futher Jinja2 HTML generation.
+
+ |
+| `OnRefreshHTMLHashStr`(inRequest)
+
+ | Generate the hash the result output HTML.
+
+ |
+| `OnRefreshHTMLStr`(inRequest)
+
+ | Event to generate HTML code of the control panel when refresh time is over.
+
+ |
+| `OnRefreshJSONDict`(inRequest)
+
+ | Event to transmit some data from server side to the client side in JSON format.
+
+ |
+| `RefreshHTMLJinja2StrGenerate`(inDataDict)
+
+ | Generate the HTML str from the Jinja2.
+
+ |
+| `RefreshHTMLJinja2TemplatePathSet`(…)
+
+ | Create Jinja2 env and load the template html
+
+ |
+
+#### DataDictGenerate(inRequest)
+
+* **Parameters**
+
+ **inRequest** – request handler (from http.server import BaseHTTPRequestHandler)
+
+
+
+* **Returns**
+
+
+
+
+#### InitJSJinja2StrGenerate(inDataDict)
+Generate the HTML str from the Jinja2. Pass the context inDataDict
+:param inDataDict:
+:return:
+
+
+#### InitJSJinja2TemplatePathSet(inJinja2TemplatePathStr)
+Create Jinja2 env and load the template html
+
+
+* **Parameters**
+
+ **inJinja2TemplatePathStr** –
+
+
+
+* **Returns**
+
+
+
+
+#### Jinja2DataUpdateDictSet(inJinja2DataUpdateDict)
+Set the data dict from the Jinja2 context (you can add some new params)
+
+
+* **Parameters**
+
+ **inJinja2DataUpdateDict** – dict, which will be appended to main data context
+
+
+
+* **Returns**
+
+ None
+
+
+
+#### OnInitJSDataDict(inRequest)
+Event to prepare data context for the futher Jinja2 JS init generation. You can override this def if you want some thing more data
+
+
+* **Parameters**
+
+ **inRequest** – request handler (from http.server import BaseHTTPRequestHandler)
+
+
+
+* **Returns**
+
+ dict
+
+
+
+#### OnInitJSStr(inRequest)
+Event when orchestrator web page is init on the client side - you can transmit some java script code is str type to execute it once.
+
+
+* **Parameters**
+
+ **inRequest** – request handler (from http.server import BaseHTTPRequestHandler)
+
+
+
+* **Returns**
+
+ ””
+
+
+
+
+#### OnRefreshHTMLDataDict(inRequest)
+Event to prepare data context for the futher Jinja2 HTML generation. You can override this def if you want some thing more data
+
+
+* **Parameters**
+
+ **inRequest** – request handler (from http.server import BaseHTTPRequestHandler)
+
+
+
+* **Returns**
+
+ dict
+
+
+
+#### OnRefreshHTMLHashStr(inRequest)
+Generate the hash the result output HTML. You can override this function if you know how to optimize HTML rendering.
+TODO NEED TO MODIFY ServerSettings to work with Hash because of all defs are need do use Hash
+
+
+* **Parameters**
+
+ **inRequest** – request handler (from http.server import BaseHTTPRequestHandler)
+
+
+
+* **Returns**
+
+ None - default, hash function is not determined. Str - hash function is working on!
+
+
+
+#### OnRefreshHTMLStr(inRequest)
+Event to generate HTML code of the control panel when refresh time is over.
+Support backward compatibility for previous versions.
+
+
+* **Parameters**
+
+ **inRequest** – request handler (from http.server import BaseHTTPRequestHandler)
+
+
+
+* **Returns**
+
+
+
+
+#### OnRefreshJSONDict(inRequest)
+Event to transmit some data from server side to the client side in JSON format. Call when page refresh is initialized
+
+
+* **Parameters**
+
+ **inRequest** – request handler (from http.server import BaseHTTPRequestHandler)
+
+
+
+* **Returns**
+
+ Dict type
+
+
+
+#### RefreshHTMLJinja2StrGenerate(inDataDict)
+Generate the HTML str from the Jinja2. Pass the context inDataDict
+:param inDataDict:
+:return:
+
+
+#### RefreshHTMLJinja2TemplatePathSet(inJinja2TemplatePathStr)
+Create Jinja2 env and load the template html
+
+
+* **Parameters**
+
+ **inJinja2TemplatePathStr** –
+
+
+
+* **Returns**
diff --git a/Wiki/ENG_Guide/markdown/Robot/02_Defs.md b/Wiki/ENG_Guide/markdown/Robot/02_Defs.md
index 7600181f..f5b63d22 100644
--- a/Wiki/ENG_Guide/markdown/Robot/02_Defs.md
+++ b/Wiki/ENG_Guide/markdown/Robot/02_Defs.md
@@ -29,107 +29,107 @@ UIDesktop.Utils.ProcessBitness.SettingsInit(lPyOpenRPA_SettingsDict)
| #Backend selection - attribute “backend” (“win32” || “uia”) in 1-st list element
- |
+ |
| `PWASpecification_Get_UIO`(…)
| #Backend def selection - attribute “backend” (“win32” || “uia”) in 1-st list element #old name - GetControl
- |
+ |
| `UIOSelectorSecs_WaitAppear_Bool`(…)
| Wait for UI object will appear in GUI for inWaitSecs seconds.
- |
+ |
| `UIOSelectorSecs_WaitDisappear_Bool`(…)
| Wait for UI object will disappear in GUI for inWaitSecs seconds.
- |
+ |
| `UIOSelectorUIOActivity_Run_Dict`(…[, …])
| Run the activity in UIO (UI Object)
- |
+ |
| `UIOSelector_Exist_Bool`(inUIOSelector)
| Check if object is exist by the UIO selector.
- |
+ |
| `UIOSelector_FocusHighlight`(inUIOSelector)
| Set focus and highlight (draw outline) the element (in app) by the UIO selector.
- |
+ |
| `UIOSelector_GetChildList_UIOList`([…])
| Get list of child UIO’s by the parent UIOSelector
- |
+ |
| `UIOSelector_Get_BitnessInt`(inSpecificationList)
| Detect process bitness by the UI Object UIO Selector.
- |
+ |
| `UIOSelector_Get_BitnessStr`(inSpecificationList)
| Detect process bitness by the UI Object UIO Selector.
- |
+ |
| `UIOSelector_Get_UIO`(inSpecificationList[, …])
| Get the pywinauto object by the UIO selector.
- |
+ |
| `UIOSelector_Get_UIOActivityList`(inUIOSelector)
| Get the list of the UI object activities
- |
+ |
| `UIOSelector_Get_UIOInfo`(inUIOSelector)
| Get the UIO dict of the attributes
- |
+ |
| `UIOSelector_Get_UIOList`(inSpecificationList)
| Get the UIO list by the selector
- |
+ |
| `UIOSelector_Highlight`(inUIOSelector)
| Highlight (draw outline) the element (in app) by the UIO selector.
- |
+ |
| `UIOSelector_SafeOtherGet_Process`(inUIOSelector)
| Safe get other process or None if destination app is the other/same bitness
- |
+ |
| `UIOSelector_SearchChildByMouse_UIO`(…)
| UIOSelector (see description on the top of the document) #old name - AutomationSearchMouseElement
- |
+ |
| `UIOSelector_SearchChildByMouse_UIOTree`(…)
| !!!!Safe call is included (you can set activity and UIDesktop will choose the bitness and return the result)!!!!!
- |
+ |
| `UIOSelector_TryRestore_Dict`(inSpecificationList)
| Try to restore (maximize) window, if it’s minimized.
- |
+ |
| `UIOSelectorsSecs_WaitAppear_List`(…[, …])
| Wait for many UI object will appear in GUI for inWaitSecs seconds.
- |
+ |
| `UIOSelectorsSecs_WaitDisappear_List`(…[, …])
| Wait for many UI object will disappear in GUI for inWaitSecs seconds.
- |
+ |
### pyOpenRPA.Robot.UIDesktop.Get_OSBitnessInt()
Detect OS bitness.
diff --git a/Wiki/ENG_Guide/markdown/index.md b/Wiki/ENG_Guide/markdown/index.md
index 30fe9934..2ffa3bd8 100644
--- a/Wiki/ENG_Guide/markdown/index.md
+++ b/Wiki/ENG_Guide/markdown/index.md
@@ -288,6 +288,9 @@ In wiki you can use the following docs:
* Group GSettings…
+ * Group Storage…
+
+
* Group OS…
@@ -333,6 +336,21 @@ In wiki you can use the following docs:
* UAC Dict for Orchestrator WEB UI rights
+* 6. Defs Managers
+
+
+ * Process (General)
+
+
+ * Process (Details)
+
+
+ * ControlPanel (General)
+
+
+ * ControlPanel (Details)
+
+
* 2. Defs
|
|