diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA-1.2.3.dist-info/INSTALLER b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA-1.2.5.dist-info/INSTALLER
similarity index 100%
rename from Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA-1.2.3.dist-info/INSTALLER
rename to Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA-1.2.5.dist-info/INSTALLER
diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA-1.2.3.dist-info/METADATA b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA-1.2.5.dist-info/METADATA
similarity index 98%
rename from Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA-1.2.3.dist-info/METADATA
rename to Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA-1.2.5.dist-info/METADATA
index ffb24fc0..0ce18453 100644
--- a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA-1.2.3.dist-info/METADATA
+++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA-1.2.5.dist-info/METADATA
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: pyOpenRPA
-Version: 1.2.3
+Version: 1.2.5
Summary: First open source RPA platform for business
Home-page: https://gitlab.com/UnicodeLabs/OpenRPA
Author: Ivan Maslov
@@ -23,7 +23,7 @@ Classifier: Topic :: Home Automation
Description-Content-Type: text/markdown
Requires-Dist: pillow (>=6.0.0)
Requires-Dist: keyboard (>=0.13.3)
-Requires-Dist: pyautogui (>=0.9.44)
+Requires-Dist: pyautogui (<=0.9.52)
Requires-Dist: crypto (>=1.4.1)
Requires-Dist: pywinauto (>=0.6.8) ; platform_system == "win32" and python_version >= "3.0"
Requires-Dist: WMI (>=1.4.9) ; platform_system == "win32" and python_version >= "3.0"
diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA-1.2.3.dist-info/RECORD b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA-1.2.5.dist-info/RECORD
similarity index 96%
rename from Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA-1.2.3.dist-info/RECORD
rename to Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA-1.2.5.dist-info/RECORD
index 36c49d75..b9987d04 100644
--- a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA-1.2.3.dist-info/RECORD
+++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA-1.2.5.dist-info/RECORD
@@ -1,19 +1,19 @@
-pyOpenRPA-1.2.3.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
-pyOpenRPA-1.2.3.dist-info/METADATA,sha256=JhjZUhqMXGka3uVYTABHekXvly9bG89Dm0VyfqhnUA4,3612
-pyOpenRPA-1.2.3.dist-info/RECORD,,
-pyOpenRPA-1.2.3.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
-pyOpenRPA-1.2.3.dist-info/WHEEL,sha256=qB97nP5e4MrOsXW5bIU5cUn_KSVr10EV0l-GCHG9qNs,97
-pyOpenRPA-1.2.3.dist-info/top_level.txt,sha256=RPzwQXgYBRo_m5L3ZLs6Voh8aEkMeT29Xsul1w1qE0g,10
+pyOpenRPA-1.2.5.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
+pyOpenRPA-1.2.5.dist-info/METADATA,sha256=IeBQ9YskhMg5mmzeY-DBQVnCbKUI4pgnl8E9XLlGrQs,3612
+pyOpenRPA-1.2.5.dist-info/RECORD,,
+pyOpenRPA-1.2.5.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
+pyOpenRPA-1.2.5.dist-info/WHEEL,sha256=qB97nP5e4MrOsXW5bIU5cUn_KSVr10EV0l-GCHG9qNs,97
+pyOpenRPA-1.2.5.dist-info/top_level.txt,sha256=RPzwQXgYBRo_m5L3ZLs6Voh8aEkMeT29Xsul1w1qE0g,10
pyOpenRPA/.idea/inspectionProfiles/profiles_settings.xml,sha256=YXLFmX7rPNGcnKK1uX1uKYPN0fpgskYNe7t0BV7cqkY,174
pyOpenRPA/.idea/misc.xml,sha256=V-fQnOz-bYEZULgfbFgm-8mURphZrKfXMSd0wKjeEyA,188
pyOpenRPA/.idea/modules.xml,sha256=Q__U1JIA2cjxbLRXAv-SfYY00fZA0TNlpkkbY4s3ncg,277
pyOpenRPA/.idea/pyOpenRPA.iml,sha256=EXh41F8lqRiSBMVg-n2tKaEaHC6_3gGSuKkPJA12Na0,408
pyOpenRPA/.idea/vcs.xml,sha256=2HygA1oRAwc3VBf-irxHrX5JJG9DXuQwrN0BlubhoKY,191
pyOpenRPA/.idea/workspace.xml,sha256=6tJZehshdK4And6tEoUvkIB0KE7waL_NnTSkTYYAeFA,3802
-pyOpenRPA/Agent/A2O.py,sha256=ZVXNamhKOB1y3j9b4gp_rzJq55Nr5pBGeoBgMnCtNKc,1657
-pyOpenRPA/Agent/O2A.py,sha256=4W2bbU34MBmuveXkPvkCzmzKAryR_YB-gnA013fxMoY,3356
+pyOpenRPA/Agent/A2O.py,sha256=PlIZZCTnVrYF2i6DSAi_KbzZfc2gtcBPmOerrEZq68U,1718
+pyOpenRPA/Agent/O2A.py,sha256=vu7UgiB0qY6-1i9qVWEBGyXWSi68TTNfkvnpMIZH7Vo,4458
pyOpenRPA/Agent/Processor.py,sha256=Co8nWpffgsnEE_TpG9WrpKxz3N0sDF7eFnKxDOk1sd8,4653
-pyOpenRPA/Agent/__Agent__.py,sha256=Id75cxA6kwed1r8NaLWHfYIyUrTZx7RPlxw1PdzropI,10006
+pyOpenRPA/Agent/__Agent__.py,sha256=JcMFvSC3_M94HEdZe8AK2IHuJOxeDJi4RpnY_LivWpM,10639
pyOpenRPA/Agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
pyOpenRPA/Agent/__pycache__/A2O.cpython-37.pyc,,
pyOpenRPA/Agent/__pycache__/O2A.cpython-37.pyc,,
@@ -22,7 +22,7 @@ pyOpenRPA/Agent/__pycache__/__Agent__.cpython-37.pyc,,
pyOpenRPA/Agent/__pycache__/__init__.cpython-37.pyc,,
pyOpenRPA/Agent/readme.md,sha256=QF_Bnv204OK3t1JUEhjfICkxFmSdX6bvaRl_HI6lH9I,19
pyOpenRPA/Info.md,sha256=u4Nv-PjniSF0Zlbtr6jEJX2vblK3_1zhSLNUgOdtDaA,85
-pyOpenRPA/Orchestrator/BackwardCompatibility.py,sha256=-pV_zaPcqD5lYz-2OXUJQ7tB2BZknd3_ci0HPHKcLFg,33110
+pyOpenRPA/Orchestrator/BackwardCompatibility.py,sha256=a2UZINDnHCKZVvHtOOPMyFZmDynzfcyQhFJCEEMhadY,34599
pyOpenRPA/Orchestrator/ControlPanel.py,sha256=OzS8HjG__8OZgqhajr8L8owyugXPuSLWHLtXuKdEP78,103
pyOpenRPA/Orchestrator/Core.py,sha256=Kjphtu0g6iaS4D_fIWmzRaLLgBQ9fcwccpQJhOETTAc,521
pyOpenRPA/Orchestrator/Processor.py,sha256=Z1SglmX6ykTLifD3M1mzWEJQUgweWo6HjjCjHldjGyM,8594
@@ -60,8 +60,8 @@ pyOpenRPA/Orchestrator/RobotScreenActive/__pycache__/Screen.cpython-37.pyc,,
pyOpenRPA/Orchestrator/RobotScreenActive/__pycache__/__init__.cpython-37.pyc,,
pyOpenRPA/Orchestrator/RobotScreenActive/__pycache__/__main__.cpython-37.pyc,,
pyOpenRPA/Orchestrator/Server.py,sha256=Ke89zh5iZezhA_qyQ3sfWJmL9bfc1rBBYeq-WzznfsE,30432
-pyOpenRPA/Orchestrator/ServerSettings.py,sha256=Ndo30YHn6XmNDLP9hPMM1867Gyx2hcYbh0UP2H1Tx_c,31205
-pyOpenRPA/Orchestrator/SettingsTemplate.py,sha256=d6l3YrJnh8eteBUc7DX-Qu7Ioc5mZ0ZVBAkw7i0NMa0,20139
+pyOpenRPA/Orchestrator/ServerSettings.py,sha256=zVI-brV_58uKJ-MWESTZGYv89nN_0iW_-HfVNhip4jE,32890
+pyOpenRPA/Orchestrator/SettingsTemplate.py,sha256=-LIyHRKVnbrALAyss6r6L56jBX_yOAdMEhnj8N2fN9A,20532
pyOpenRPA/Orchestrator/Timer.py,sha256=HvYtEeH2Q5WVVjgds9XaBpWRmvZgwgBXurJDdVVq_T0,2097
pyOpenRPA/Orchestrator/Utils/LoggerHandlerDumpLogList.py,sha256=hD47TiOuKR-G8IWu9lJD2kG28qlH7YZV63i3qv1N5Dk,681
pyOpenRPA/Orchestrator/Utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -72,7 +72,7 @@ pyOpenRPA/Orchestrator/Web/Index.js,sha256=Blo3LHe_a3zrW7MqYo4BSIwoOx7nlO7Ko9LWx
pyOpenRPA/Orchestrator/Web/Index.xhtml,sha256=a4N_reLA6_Zb2KXiL73a7cWtJwO0W0Dr5lZ-RpUwuI0,16428
pyOpenRPA/Orchestrator/Web/__pycache__/Basic.cpython-37.pyc,,
pyOpenRPA/Orchestrator/Web/favicon.ico,sha256=6S8XwSQ_3FXPpaX6zYkf8uUewVXO9bHnrrDHEoWrEgw,112922
-pyOpenRPA/Orchestrator/__Orchestrator__.py,sha256=uqH9ma0C8OxnnfgZ4mMNl15rE5tc9k9v3hn6CY67PMU,111546
+pyOpenRPA/Orchestrator/__Orchestrator__.py,sha256=2WbaatF0yN1Sx3P1Zru3clMbUTq4N-ErjMmsi0V7TKE,117659
pyOpenRPA/Orchestrator/__init__.py,sha256=f1RFDzOkL3IVorCtqogjGdXYPtHH-P-y-5CqT7PGy7A,183
pyOpenRPA/Orchestrator/__main__.py,sha256=czJrc7_57WiO3EPIYfPeF_LG3pZsQVmuAYgbl_YXcVU,273
pyOpenRPA/Orchestrator/__pycache__/BackwardCompatibility.cpython-37.pyc,,
@@ -341,6 +341,6 @@ pyOpenRPA/Tools/Terminator.py,sha256=VcjX3gFXiCGu3MMCidhrTNsmC9wsAqfjRJdTSU9fLnU
pyOpenRPA/Tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
pyOpenRPA/Tools/__pycache__/Terminator.cpython-37.pyc,,
pyOpenRPA/Tools/__pycache__/__init__.cpython-37.pyc,,
-pyOpenRPA/__init__.py,sha256=O8SOldPlZbE_YguduoMHJNJaRtlVN3dHXEC0JVpQMYY,174
+pyOpenRPA/__init__.py,sha256=7jBgAILYoa342lTEQGpNGus8Zpiei0bAZkw1sVLtsGI,174
pyOpenRPA/__pycache__/__init__.cpython-37.pyc,,
pyOpenRPA/test.txt,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA-1.2.3.dist-info/REQUESTED b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA-1.2.5.dist-info/REQUESTED
similarity index 100%
rename from Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA-1.2.3.dist-info/REQUESTED
rename to Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA-1.2.5.dist-info/REQUESTED
diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA-1.2.3.dist-info/WHEEL b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA-1.2.5.dist-info/WHEEL
similarity index 100%
rename from Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA-1.2.3.dist-info/WHEEL
rename to Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA-1.2.5.dist-info/WHEEL
diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA-1.2.3.dist-info/top_level.txt b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA-1.2.5.dist-info/top_level.txt
similarity index 100%
rename from Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA-1.2.3.dist-info/top_level.txt
rename to Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA-1.2.5.dist-info/top_level.txt
diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/Agent/A2O.py b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/Agent/A2O.py
index f16cdf1d..3f302476 100644
--- a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/Agent/A2O.py
+++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/Agent/A2O.py
@@ -16,7 +16,7 @@ def _A2ODataSend(inGSettings, inDataDict):
lHostStr = inGSettings["OrchestratorDict"]["HostStr"]
lPortInt = inGSettings["OrchestratorDict"]["PortInt"]
lURLStr=f"{lProtocolStr}://{lHostStr}:{lPortInt}/pyOpenRPA/Agent/A2O"
- lResponse = requests.post(url= lURLStr, cookies = {"AuthToken":inGSettings["OrchestratorDict"]["SuperTokenStr"]}, json=inDataDict)
+ lResponse = requests.post(url= lURLStr, cookies = {"AuthToken":inGSettings["OrchestratorDict"]["SuperTokenStr"]}, json=inDataDict, timeout=inGSettings["A2ODict"]["ConnectionTimeoutSecFloat"])
except Exception as e:
if lL: lL.exception(f"A2O Error handler.")
diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/Agent/O2A.py b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/Agent/O2A.py
index 38b92316..0994a0c0 100644
--- a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/Agent/O2A.py
+++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/Agent/O2A.py
@@ -26,25 +26,37 @@ def O2A_Loop(inGSettings):
lPortInt = inGSettings["OrchestratorDict"]["PortInt"]
lURLStr=f"{lProtocolStr}://{lHostStr}:{lPortInt}/pyOpenRPA/Agent/O2A"
lDataDict = { "HostNameUpperStr": inGSettings["AgentDict"]["HostNameUpperStr"], "UserUpperStr": inGSettings["AgentDict"]["UserUpperStr"], "ActivityLastGUIDStr": lActivityLastGUIDStr}
- lResponse = requests.post(url= lURLStr, cookies = {"AuthToken":inGSettings["OrchestratorDict"]["SuperTokenStr"]}, json=lDataDict)
+ lResponse = requests.post(url= lURLStr, cookies = {"AuthToken":inGSettings["OrchestratorDict"]["SuperTokenStr"]}, json=lDataDict, timeout=inGSettings["O2ADict"]["ConnectionTimeoutSecFloat"])
if lResponse.status_code != 200:
if lL: lL.warning(f"Agent can not connect to Orchestrator. Below the response from the orchestrator:{lResponse}")
time.sleep(inGSettings["O2ADict"]["RetryTimeoutSecFloat"])
else:
lRequestBody = lResponse.text
- lQueueItem = lResponse.json() # Try to get JSON
- # Append QUEUE item in ProcessorDict > ActivityList
- lActivityLastGUIDStr = lQueueItem["GUIDStr"]
- inGSettings["ProcessorDict"]["ActivityList"].append(lQueueItem)
- if lL: lL.debug(f"ActivityItem was received from orchestrator: {lQueueItem}");
+ lBodyLenInt = len(lRequestBody)
+ if lBodyLenInt != 0: # CHeck if not empty result when close the connection from orch
+ lQueueItem = lResponse.json() # Try to get JSON
+ # Append QUEUE item in ProcessorDict > ActivityList
+ lActivityLastGUIDStr = lQueueItem["GUIDStr"]
+ inGSettings["ProcessorDict"]["ActivityList"].append(lQueueItem)
+ # Log full version if bytes size is less than limit . else short
+ lAgentLimitLogSizeBytesInt = 500
+ if lBodyLenInt <= lAgentLimitLogSizeBytesInt:
+ if lL: lL.info(f"ActivityItem was received from orchestrator: {lQueueItem}");
+ else:
+ if lL: lL.info(f"ActivityItem was received from orchestrator: Was supressed because of big size. Max is {lAgentLimitLogSizeBytesInt} bytes");
+ else:
+ if lL: lL.debug(f"Empty response from the orchestrator - loop when refresh the connection between Orc and Agent");
except requests.exceptions.ConnectionError as e:
if lL: lL.error(f"O2A Connection error - orchestrator is not available. Sleep for {inGSettings['A2ODict']['RetryTimeoutSecFloat']} s.")
time.sleep(inGSettings["O2ADict"]["RetryTimeoutSecFloat"])
except ConnectionResetError as e:
- if lL: lL.error(f"O2A Connection error - orchestrator is not available. Sleep for {inGSettings['A2ODict']['RetryTimeoutSecFloat']} s.")
+ if lL: lL.error(f"O2A Connection reset error - orchestrator is not available. Sleep for {inGSettings['A2ODict']['RetryTimeoutSecFloat']} s.")
time.sleep(inGSettings["O2ADict"]["RetryTimeoutSecFloat"])
except json.decoder.JSONDecodeError as e:
- if lL: lL.error(f"See body of the recieved content from the Orchestrator: {lRequestBody}")
+ if lL: lL.error(f"O2A JSON decode error - See body of the recieved content from the Orchestrator: {lRequestBody}")
+ time.sleep(inGSettings["O2ADict"]["RetryTimeoutSecFloat"])
+ except requests.exceptions.Timeout as e:
+ if lL: lL.exception(f"O2A requests timeout error (no response for long time). Sleep for {inGSettings['A2ODict']['RetryTimeoutSecFloat']} s.")
time.sleep(inGSettings["O2ADict"]["RetryTimeoutSecFloat"])
except Exception as e:
if lL: lL.exception(f"O2A Error handler. Sleep for {inGSettings['A2ODict']['RetryTimeoutSecFloat']} s.")
diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/Agent/__Agent__.py b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/Agent/__Agent__.py
index 2ac32d21..9ac93c19 100644
--- a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/Agent/__Agent__.py
+++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/Agent/__Agent__.py
@@ -17,6 +17,20 @@ def OSFileBinaryDataBase64StrCreate(inFilePathStr, inFileDataBase64Str,inGSettin
if lL: lL.info(lMessageStr)
A2O.LogListSend(inGSettings=inGSettings, inLogList=[lMessageStr])
+# Append binary file by the base64 string (safe for JSON transmition)
+def OSFileBinaryDataBase64StrAppend(inFilePathStr, inFileDataBase64Str,inGSettings = None):
+ """
+ Create binary file by the base64 string (safe for JSON transmition)
+
+ """
+ lFile = open(inFilePathStr, "ab")
+ lFile.write(base64.b64decode(inFileDataBase64Str))
+ lFile.close()
+ lL = inGSettings.get("Logger", None) if type(inGSettings) is dict else None
+ lMessageStr = f"AGENT Binary file {inFilePathStr} has been appended."
+ if lL: lL.info(lMessageStr)
+ A2O.LogListSend(inGSettings=inGSettings, inLogList=[lMessageStr])
+
# Create text file by the string
def OSFileTextDataStrCreate(inFilePathStr, inFileDataStr, inEncodingStr = "utf-8",inGSettings = None):
"""
diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/Orchestrator/BackwardCompatibility.py b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/Orchestrator/BackwardCompatibility.py
index 2bfac13b..727376ee 100644
--- a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/Orchestrator/BackwardCompatibility.py
+++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/Orchestrator/BackwardCompatibility.py
@@ -468,4 +468,24 @@ def Update(inGSettings):
}
}
if lL: lL.warning(
- f"Backward compatibility (v1.2.2 to v1.2.3): Add new key ServerDict > ListenDict. Transfer port from ServerDict > ListenPort") # Log about compatibility
\ No newline at end of file
+ f"Backward compatibility (v1.2.2 to v1.2.3): Add new key ServerDict > ListenDict. Transfer port from ServerDict > ListenPort") # Log about compatibility
+ # Add new key
+ #"ServerDict": {
+ # "AgentFileChunkBytesSizeInt": 50000000, # size of the each chunk for the agent transmition
+ # "AgentFileChunkCheckIntervalSecFloat": 0.2, # The interval for check last activity item was successfully sent
+ if "AgentFileChunkBytesSizeInt" not in inGSettings["ServerDict"]:
+ inGSettings["ServerDict"]["AgentFileChunkBytesSizeInt"]= 50000000
+ if lL: lL.warning(
+ f"Backward compatibility (v1.2.3 to v1.2.4): Add new key ServerDict > AgentFileChunkBytesSizeInt") # Log about compatibility
+ if "AgentFileChunkCheckIntervalSecFloat" not in inGSettings["ServerDict"]:
+ inGSettings["ServerDict"]["AgentFileChunkCheckIntervalSecFloat"]= 0.2
+ if lL: lL.warning(
+ f"Backward compatibility (v1.2.3 to v1.2.4): Add new key ServerDict > AgentFileChunkCheckIntervalSecFloat") # Log about compatibility
+ if "ServerThread" not in inGSettings["ServerDict"]:
+ inGSettings["ServerDict"]["ServerThread"]= None
+ if lL: lL.warning(
+ f"Backward compatibility (v1.2.3 to v1.2.4): Add new key ServerDict > ServerThread") # Log about compatibility
+ if "AgentLimitLogSizeBytesInt" not in inGSettings["ServerDict"]:
+ inGSettings["ServerDict"]["AgentLimitLogSizeBytesInt"] = 300
+ if lL: lL.warning(
+ f"Backward compatibility (v1.2.3 to v1.2.4): Add new key ServerDict > AgentLimitLogSizeBytesInt") # Log about compatibility
\ No newline at end of file
diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/Orchestrator/ServerSettings.py b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/Orchestrator/ServerSettings.py
index b3197ee8..ed09b85f 100644
--- a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/Orchestrator/ServerSettings.py
+++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/Orchestrator/ServerSettings.py
@@ -397,8 +397,16 @@ def pyOpenRPA_Agent_O2A(inRequest, inGSettings):
lReturnActivityItemDict = copy.deepcopy(lReturnActivityItemDict)
if "CreatedByDatetime" in lReturnActivityItemDict:
del lReturnActivityItemDict["CreatedByDatetime"]
- if lL: lL.info(f"Activity item to agent Hostname {lInput['HostNameUpperStr']}, User {lInput['UserUpperStr']}. Activity item: {lReturnActivityItemDict}")
inRequest.OpenRPAResponseDict["Body"] = bytes(json.dumps(lReturnActivityItemDict), "utf8")
+ # Log full version if bytes size is less than limit . else short
+ lBodyLenInt = len(inRequest.OpenRPAResponseDict["Body"])
+ lAgentLimitLogSizeBytesInt = inGSettings["ServerDict"]["AgentLimitLogSizeBytesInt"]
+ if lBodyLenInt <= lAgentLimitLogSizeBytesInt:
+ if lL: lL.info(f"Activity item to agent Hostname {lInput['HostNameUpperStr']}, User {lInput['UserUpperStr']}. Activity item: {lReturnActivityItemDict}")
+ else:
+ if lL: lL.info(
+ f"Activity item to agent Hostname {lInput['HostNameUpperStr']}, User {lInput['UserUpperStr']}. "
+ f"Activity item: Was suppressed because of body size of {lBodyLenInt} bytes. Max is {lAgentLimitLogSizeBytesInt}")
lDoLoopBool = False # CLose the connection
else: # Nothing to send - sleep for the next iteration
time.sleep(lAgentLoopSleepSecFloat)
@@ -417,6 +425,7 @@ def pyOpenRPA_Agent_A2O(inRequest, inGSettings):
lInputByteArray = inRequest.rfile.read(lInputByteArrayLength)
# Превращение массива байт в объект
lInput = json.loads(lInputByteArray.decode('utf8'))
+ lAgentDictItemKeyTurple = (lInput["HostNameUpperStr"], lInput["UserUpperStr"])
if "LogList" in lInput:
for lLogItemStr in lInput["LogList"]:
inGSettings["Logger"].info(lLogItemStr)
@@ -426,7 +435,17 @@ def pyOpenRPA_Agent_A2O(inRequest, inGSettings):
# Create item in gSettings
inGSettings["AgentActivityReturnDict"][lActivityReturnItemKeyStr]=SettingsTemplate.__AgentActivityReturnDictItemCreate__(inReturn=lActivityReturnItemValue)
if lL: lL.debug(f"SERVER: pyOpenRPA_Agent_A2O:: Has recieved result of the activity items from agent! ActivityItem GUID Str: {lActivityReturnItemKeyStr}; Return value: {lActivityReturnItemValue}")
-
+ # Delete the source activity item from AgentDict
+ if lAgentDictItemKeyTurple in inGSettings["AgentDict"]:
+ lAgentDictActivityListNew = []
+ lAgentDict = inGSettings["AgentDict"][lAgentDictItemKeyTurple]
+ for lActivityItem in lAgentDict["ActivityList"]:
+ if lActivityReturnItemKeyStr != lActivityItem.get("GUIDStr",None):
+ lAgentDictActivityListNew.append(lActivityItem)
+ else:
+ del lActivityItem
+ if lL: lL.debug(f"SERVER: pyOpenRPA_Agent_A2O:: Source activity item request was deleted from the orchestrator. ActivityItem GUID Str: {lActivityReturnItemKeyStr}")
+ inGSettings["AgentDict"][lAgentDictItemKeyTurple]["ActivityList"] = lAgentDictActivityListNew
def SettingsUpdate(inGlobalConfiguration):
import os
import pyOpenRPA.Orchestrator
diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/Orchestrator/SettingsTemplate.py b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/Orchestrator/SettingsTemplate.py
index 923a0ce1..242ddf55 100644
--- a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/Orchestrator/SettingsTemplate.py
+++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/Orchestrator/SettingsTemplate.py
@@ -39,9 +39,13 @@ def __Create__():
# # # # # # # # # # # # # # # # # #
},
"ServerDict": {
+ "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
"AgentConnectionLifetimeSecFloat": 300.0, # Time in seconds to handle the open connection to the Agent
"AgentLoopSleepSecFloat": 2.0, # Time in seconds to sleep between loops when check to send some activity to the agent
+ "AgentFileChunkBytesSizeInt": 50000000, # size of the each chunk for the agent transmition
+ "AgentFileChunkCheckIntervalSecFloat": 0.2, # The interval for check last activity item was successfully sent
"WorkingDirectoryPathStr": None, # Will be filled automatically
"RequestTimeoutSecFloat": 300, # Time to handle request in seconds,
"ListenDict": { # Prototype
diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/Orchestrator/__Orchestrator__.py b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/Orchestrator/__Orchestrator__.py
index 366db88b..805472d0 100644
--- a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/Orchestrator/__Orchestrator__.py
+++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/Orchestrator/__Orchestrator__.py
@@ -26,6 +26,7 @@ from .RobotScreenActive import Monitor #Start robot screen active
from . import SettingsTemplate # Settings template
import uuid # Generate uuid
import datetime # datetime
+import math
#Единый глобальный словарь (За основу взять из Settings.py)
gSettingsDict = None
@@ -60,6 +61,26 @@ def AgentActivityItemAdd(inGSettings, inHostNameStr, inUserStr, inActivityItemDi
# Return the result
return lGUIDStr
+
+def AgentActivityItemExists(inGSettings, inHostNameStr, inUserStr, inGUIDStr):
+ """
+ Check by GUID if ActivityItem has exists in request list. If exist - the result response has not been recieved from the agent
+
+ :param inGSettings: Global settings dict (singleton)
+ :param inGUIDStr: GUID String of the ActivityItem
+ :return: True - ActivityItem is exist in AgentDict ; False - else case
+ """
+ # Check if GUID is exists in dict - has been recieved
+ # Main alg
+ lAgentDictItemKeyTurple = (inHostNameStr.upper(),inUserStr.upper())
+ lResultBool = False
+ if lAgentDictItemKeyTurple in inGSettings["AgentDict"]:
+ for lActivityItem in inGSettings["AgentDict"][lAgentDictItemKeyTurple]["ActivityList"]:
+ if inGUIDStr == lActivityItem.get("GUIDStr",None):
+ lResultBool = True
+ break
+ return lResultBool
+
def AgentActivityItemReturnExists(inGSettings, inGUIDStr):
"""
Check by GUID if ActivityItem has been executed and result has come to the Orchestrator
@@ -117,6 +138,73 @@ def AgentOSCMD(inGSettings, inHostNameStr, inUserStr, inCMDStr, inRunAsyncBool=T
#Send item in AgentDict for the futher data transmition
return AgentActivityItemAdd(inGSettings=inGSettings, inHostNameStr=inHostNameStr, inUserStr=inUserStr, inActivityItemDict=lActivityItemDict)
+
+def AgentOSFileSend(inGSettings, inHostNameStr, inUserStr, inOrchestratorFilePathStr, inAgentFilePathStr):
+ """
+ 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
+
+ :param inGSettings: Global settings dict (singleton)
+ :param inHostNameStr:
+ :param inUserStr:
+ :param inFilePathStr:
+ :param inFileDataBytes:
+ :return: GUID String of the ActivityItem - you can wait (sync or async) result by this guid!
+ """
+
+
+ # 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.")
+ lResult = {
+ "Def": AgentOSFileSend, # def link or def alias (look gSettings["Processor"]["AliasDefDict"])
+ "ArgList": [], # Args list
+ "ArgDict": {"inHostNameStr":inHostNameStr, "inUserStr":inUserStr, "inOrchestratorFilePathStr":inOrchestratorFilePathStr, "inAgentFilePathStr": inAgentFilePathStr}, # Args dictionary
+ "ArgGSettings": "inGSettings", # Name of GSettings attribute: str (ArgDict) or index (for ArgList)
+ "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList)
+ }
+ inGSettings["ProcessorDict"]["ActivityList"].append(lResult)
+ else: # In processor - do execution
+ lActivityItemCheckIntervalSecFloat = inGSettings["ServerDict"]["AgentFileChunkCheckIntervalSecFloat"]
+
+ # Get the chunk limit
+ lChunkByteSizeInt = inGSettings["ServerDict"]["AgentFileChunkBytesSizeInt"]
+
+ lL = inGSettings.get("Logger",None)
+
+ # Open the file and get the size (in bytes)
+ lFile = open(inOrchestratorFilePathStr,"rb")
+ lFileSizeBytesInt = lFile.seek(0,2)
+ lFile.seek(0)
+ #import pdb
+ #pdb.set_trace()
+ lChunkCountInt = math.ceil(lFileSizeBytesInt/lChunkByteSizeInt)
+ if lL: lL.info(f"O2A: Start to send binary file via chunks. Chunk count: {lChunkCountInt}, From (Orch side): {inOrchestratorFilePathStr}, To (Agent side): {inAgentFilePathStr}")
+ for lChunkNumberInt in range(lChunkCountInt):
+ # Read chunk
+ lFileChunkBytes = lFile.read(lChunkByteSizeInt)
+ # Convert to base64
+ lFileChunkBase64Str = base64.b64encode(lFileChunkBytes).decode("utf-8")
+ # Send chunk
+ if lChunkNumberInt == 0:
+ lActivityItemGUIDStr = AgentOSFileBinaryDataBase64StrCreate(inGSettings=inGSettings,inHostNameStr=inHostNameStr,
+ inUserStr=inUserStr,inFilePathStr=inAgentFilePathStr,
+ inFileDataBase64Str=lFileChunkBase64Str)
+ else:
+ lActivityItemGUIDStr = AgentOSFileBinaryDataBase64StrAppend(inGSettings=inGSettings, inHostNameStr=inHostNameStr,
+ inUserStr=inUserStr, inFilePathStr=inAgentFilePathStr,
+ inFileDataBase64Str=lFileChunkBase64Str)
+ # Wait for the activity will be deleted
+ while AgentActivityItemExists(inGSettings=inGSettings,inHostNameStr=inHostNameStr,inUserStr=inUserStr,inGUIDStr=lActivityItemGUIDStr):
+ time.sleep(lActivityItemCheckIntervalSecFloat)
+ if lL: lL.debug(
+ f"O2A: BINARY SEND: Current chunk index: {lChunkNumberInt}")
+ if lL: lL.info(
+ f"O2A: BINARY SEND: Transmition has been complete")
+ # Close the file
+ lFile.close()
+
def AgentOSFileBinaryDataBytesCreate(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inFileDataBytes):
"""
Create binary file by the base64 string by the pyOpenRPA.Agent daemon process (safe for JSON transmition)
@@ -163,6 +251,30 @@ def AgentOSFileBinaryDataBase64StrCreate(inGSettings, inHostNameStr, inUserStr,
#Send item in AgentDict for the futher data transmition
return AgentActivityItemAdd(inGSettings=inGSettings, inHostNameStr=inHostNameStr, inUserStr=inUserStr, inActivityItemDict=lActivityItemDict)
+
+def AgentOSFileBinaryDataBase64StrAppend(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inFileDataBase64Str):
+ """
+ Append binary file by the base64 string by the pyOpenRPA.Agent daemon process (safe for JSON transmission)
+
+ :param inGSettings: Global settings dict (singleton)
+ :param inHostNameStr:
+ :param inUserStr:
+ :param inFilePathStr:
+ :param inFileDataBase64Str:
+ :return: GUID String of the ActivityItem - you can wait (sync or async) result by this guid!
+ """
+
+ lActivityItemDict = {
+ "Def":"OSFileBinaryDataBase64StrAppend", # def alias (look pyOpeRPA.Agent gSettings["ProcessorDict"]["AliasDefDict"])
+ "ArgList":[], # Args list
+ "ArgDict":{"inFilePathStr":inFilePathStr,"inFileDataBase64Str":inFileDataBase64Str}, # Args dictionary
+ "ArgGSettings": "inGSettings", # Name of GSettings attribute: str (ArgDict) or index (for ArgList)
+ "ArgLogger": None # Name of GSettings attribute: str (ArgDict) or index (for ArgList)
+ }
+ #Send item in AgentDict for the futher data transmition
+ return AgentActivityItemAdd(inGSettings=inGSettings, inHostNameStr=inHostNameStr, inUserStr=inUserStr, inActivityItemDict=lActivityItemDict)
+
+
# Send text file to Agent (string)
def AgentOSFileTextDataStrCreate(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inFileDataStr, inEncodingStr = "utf-8"):
"""
@@ -2036,6 +2148,7 @@ def Orchestrator(inGSettings, inDumpRestoreBool = True, inRunAsAdministratorBool
lItemDict = lListenDict[lItemKeyStr]
lThreadServer = Server.RobotDaemonServer(lItemKeyStr, gSettingsDict)
lThreadServer.start()
+ gSettingsDict["ServerDict"]["ServerThread"] = lThreadServer
lItemDict["ServerInstance"] = lThreadServer
# Init the RobotScreenActive in another thread
diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/__init__.py b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/__init__.py
index aeff0887..a01645a7 100644
--- a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/__init__.py
+++ b/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA/__init__.py
@@ -3,7 +3,7 @@ r"""
The OpenRPA package (from UnicodeLabs)
"""
-__version__ = 'v1.2.3'
+__version__ = 'v1.2.5'
__all__ = []
__author__ = 'Ivan Maslov Execute CMD on the Agent daemonic process Create binary file by the base64 string (safe for JSON transmition) Create binary file by the base64 string (safe for JSON transmition) Read binary file and encode in base64 to transmit (safe for JSON transmition) Create text file in the agent GUI session Read text file in the agent GUI session Return the process list only for the current user (where Agent is running) without .EXE in upper case.
-OSCMD
(inCMDStr[, inRunAsyncBool, …])
+OSFileBinaryDataBase64StrCreate
(…[, …])
-OSFileBinaryDataBase64StrAppend
(…[, …])
+OSFileBinaryDataBase64StrReceive
(inFilePathStr)
+
+OSFileBinaryDataBase64StrCreate
(…[, …])
+
-OSFileBinaryDataBase64StrReceive
(inFilePathStr)
+OSFileTextDataStrCreate
(inFilePathStr, …)
-OSFileTextDataStrCreate
(inFilePathStr, …)
+OSFileTextDataStrReceive
(inFilePathStr[, …])
-OSFileTextDataStrReceive
(inFilePathStr[, …])
+
@@ -235,6 +238,12 @@
:return:
pyOpenRPA.Agent.__Agent__.
OSFileBinaryDataBase64StrAppend
(inFilePathStr, inFileDataBase64Str, inGSettings=None)[source]¶Create binary file by the base64 string (safe for JSON transmition)
+pyOpenRPA.Agent.__Agent__.
OSFileBinaryDataBase64StrCreate
(inFilePathStr, inFileDataBase64Str, inGSettings=None)[source]¶AgentActivityItemAdd
(inGSettings, …)
Add activity in AgentDict.
AgentActivityItemReturnExists
(inGSettings, …)
AgentActivityItemExists
(inGSettings, …)
Check by GUID if ActivityItem has exists in request list.
AgentActivityItemReturnExists
(inGSettings, …)
Check by GUID if ActivityItem has been executed and result has come to the Orchestrator
AgentActivityItemReturnGet
(inGSettings, …)
AgentActivityItemReturnGet
(inGSettings, …)
Work synchroniously! Wait while result will be recieved.
AgentOSCMD
(inGSettings, inHostNameStr, …)
AgentOSCMD
(inGSettings, inHostNameStr, …)
Send CMD to OS thought the pyOpenRPA.Agent daemon.
Append 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)
Create binary file by the base64 string by the pyOpenRPA.Agent daemon process (safe for JSON transmition)
AgentOSFileTextDataStrCreate
(inGSettings, …)
AgentOSFileSend
(inGSettings, inHostNameStr, …)
Send the file from the Orchestrator to Agent (synchroniously) pyOpenRPA.Agent daemon process (safe for JSON transmition).
AgentOSFileTextDataStrCreate
(inGSettings, …)
Create text file by the string by the pyOpenRPA.Agent daemon process
AgentOSFileTextDataStrReceive
(inGSettings, …)
AgentOSFileTextDataStrReceive
(inGSettings, …)
Read text file in the agent GUI session
Return the process list only for the current user (where Agent is running) without .EXE in upper case.
GSettingsAutocleaner
(inGSettings)
GSettingsAutocleaner
(inGSettings)
HIDDEN Interval gSettings auto cleaner def to clear some garbage.
GSettingsKeyListValueAppend
(inGSettings, inValue)
GSettingsKeyListValueAppend
(inGSettings, inValue)
Append value in GSettings by the key list
GSettingsKeyListValueGet
(inGSettings[, …])
GSettingsKeyListValueGet
(inGSettings[, …])
Get the value from the GSettings by the key list
Execute plus operation between 2 lists (1:inValue and 2:gSettings by the inKeyList)
GSettingsKeyListValueSet
(inGSettings, inValue)
GSettingsKeyListValueSet
(inGSettings, inValue)
Set value in GSettings by the key list
OSCMD
(inCMDStr[, inRunAsyncBool, inLogger])
OSCMD
(inCMDStr[, inRunAsyncBool, inLogger])
OS send command in shell locally
OSCredentialsVerify
(inUserStr, inPasswordStr)
OSCredentialsVerify
(inUserStr, inPasswordStr)
Verify user credentials in windows.
OSRemotePCRestart
(inLogger, inHostStr[, …])
OSRemotePCRestart
(inLogger, inHostStr[, …])
Send signal via power shell to restart remote PC ATTENTION: Orchestrator user need to have restart right on the Remote machine to restart PC.
Check if Orchestrator process is running as administrator
Check if not admin - then rerun orchestrator as administrator
OrchestratorRestart
([inGSettings])
OrchestratorRestart
([inGSettings])
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).
OrchestratorSessionSave
(inGSettings)
OrchestratorSessionSave
(inGSettings)
Orchestrator session save in file
ProcessDefIntervalCall
(inGSettings, inDef, …)
ProcessDefIntervalCall
(inGSettings, inDef, …)
Use this procedure if you need to run periodically some def.
ProcessIsStarted
(inProcessNameWOExeStr)
ProcessIsStarted
(inProcessNameWOExeStr)
Check if there is any running process that contains the given name processName.
ProcessListGet
([inProcessNameWOExeList])
ProcessListGet
([inProcessNameWOExeList])
Return process list on the orchestrator machine sorted by Memory Usage.
ProcessStart
(inPathStr, inArgList[, …])
ProcessStart
(inPathStr, inArgList[, …])
Start process locally.
ProcessStop
(inProcessNameWOExeStr, …[, …])
ProcessStop
(inProcessNameWOExeStr, …[, …])
Stop process on the orchestrator machine.
ProcessorActivityItemAppend
(inGSettings[, …])
ProcessorActivityItemAppend
(inGSettings[, …])
Create and add activity item in processor queue.
ProcessorActivityItemCreate
(inDef[, …])
ProcessorActivityItemCreate
(inDef[, …])
Create activity item.
ProcessorAliasDefCreate
(inGSettings, inDef)
ProcessorAliasDefCreate
(inGSettings, inDef)
Create alias for def (can be used in ActivityItem in field Def) !WHEN DEF ALIAS IS REQUIRED! - Def alias is required when you try to call Python def from the Orchestrator WEB side (because you can’t transmit Python def object out of the Python environment)
ProcessorAliasDefUpdate
(inGSettings, inDef, …)
ProcessorAliasDefUpdate
(inGSettings, inDef, …)
Update alias for def (can be used in ActivityItem in field Def).
PythonStart
(inModulePathStr, inDefNameStr[, …])
PythonStart
(inModulePathStr, inDefNameStr[, …])
Import module and run def in the Orchestrator process.
RDPSessionCMDRun
(inGSettings, …[, inModeStr])
RDPSessionCMDRun
(inGSettings, …[, inModeStr])
Send CMD command to the RDP session “RUN” window
RDPSessionConnect
(inGSettings, …[, …])
RDPSessionConnect
(inGSettings, …[, …])
Create new RDPSession in RobotRDPActive. Attention - activity will be ignored if RDP key is already exists
RDPSessionDisconnect
(inGSettings, …[, …])
RDPSessionDisconnect
(inGSettings, …[, …])
Disconnect the RDP session and stop monitoring it.
RDPSessionDublicatesResolve
(inGSettings)
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)
RDPSessionFileStoredSend
(inGSettings, …)
RDPSessionFileStoredSend
(inGSettings, …)
Send file from Orchestrator session to the RDP session using shared drive in RDP (see RDP Configuration Dict, Shared drive)
RDPSessionLogoff
(inGSettings, inRDPSessionKeyStr)
RDPSessionLogoff
(inGSettings, inRDPSessionKeyStr)
Logoff the RDP session from the Orchestrator process (close all apps in session when logoff)
RDPSessionMonitorStop
(inGSettings, …)
RDPSessionMonitorStop
(inGSettings, …)
Stop monitoring the RDP session by the Orchestrator process.
Start process in RDP if it is not running (check by the arg inProcessNameWEXEStr)
RDPSessionProcessStop
(inGSettings, …)
RDPSessionProcessStop
(inGSettings, …)
Send CMD command to the RDP session “RUN” window.
RDPSessionReconnect
(inGSettings, …[, …])
RDPSessionReconnect
(inGSettings, …[, …])
Reconnect the RDP session
RDPSessionResponsibilityCheck
(inGSettings, …)
RDPSessionResponsibilityCheck
(inGSettings, …)
DEVELOPING, MAYBE NOT USEFUL Check RDP Session responsibility TODO NEED DEV + TEST
RDPTemplateCreate
(inLoginStr, inPasswordStr)
RDPTemplateCreate
(inLoginStr, inPasswordStr)
Create RDP connect dict item/ Use it connect/reconnect (Orchestrator.RDPSessionConnect)
SchedulerActivityTimeAddWeekly
(inGSettings)
SchedulerActivityTimeAddWeekly
(inGSettings)
Add activity item list in scheduler.
UACKeyListCheck
(inRequest, inRoleKeyList)
UACKeyListCheck
(inRequest, inRoleKeyList)
Check is client is has access for the key list
UACSuperTokenUpdate
(inGSettings, inSuperTokenStr)
UACSuperTokenUpdate
(inGSettings, inSuperTokenStr)
Add supertoken for the all access (it is need for the robot communication without human)
UACUpdate
(inGSettings, inADLoginStr[, …])
UACUpdate
(inGSettings, inADLoginStr[, …])
Update user access (UAC)
UACUserDictGet
(inRequest)
UACUserDictGet
(inRequest)
Return user UAC hierarchy dict of the inRequest object.
WebAuditMessageCreate
(inRequest[, …])
WebAuditMessageCreate
(inRequest[, …])
Create message string with request user details (IP, Login etc…).
WebCPUpdate
(inGSettings, inCPKeyStr[, …])
WebCPUpdate
(inGSettings, inCPKeyStr[, …])
Add control panel HTML, JSON generator or JS when page init
WebListenCreate
(inGSettings[, …])
WebListenCreate
(inGSettings[, …])
Create listen interface for the web server
WebURLConnectDef
(inGSettings, inMethodStr, …)
WebURLConnectDef
(inGSettings, inMethodStr, …)
Connect URL to DEF
WebURLConnectFile
(inGSettings, inMethodStr, …)
WebURLConnectFile
(inGSettings, inMethodStr, …)
Connect URL to File
WebURLConnectFolder
(inGSettings, …)
WebURLConnectFolder
(inGSettings, …)
Connect URL to Folder
WebUserInfoGet
(inRequest)
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)
WebUserUACHierarchyGet
(inRequest)
WebUserUACHierarchyGet
(inRequest)
Return User UAC Hierarchy DICT Return {…}
pyOpenRPA.Orchestrator.__Orchestrator__.
AgentActivityItemExists
(inGSettings, inHostNameStr, inUserStr, inGUIDStr)[source]¶Check by GUID if ActivityItem has exists in request list. If exist - the result response has not been recieved from the agent
+inGSettings – Global settings dict (singleton)
inGUIDStr – GUID String of the ActivityItem
True - ActivityItem is exist in AgentDict ; False - else case
+pyOpenRPA.Orchestrator.__Orchestrator__.
AgentActivityItemReturnExists
(inGSettings, inGUIDStr)[source]¶pyOpenRPA.Orchestrator.__Orchestrator__.
AgentOSFileBinaryDataBase64StrAppend
(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inFileDataBase64Str)[source]¶Append binary file by the base64 string by the pyOpenRPA.Agent daemon process (safe for JSON transmission)
+inGSettings – Global settings dict (singleton)
inHostNameStr –
inUserStr –
inFilePathStr –
inFileDataBase64Str –
GUID String of the ActivityItem - you can wait (sync or async) result by this guid!
+pyOpenRPA.Orchestrator.__Orchestrator__.
AgentOSFileBinaryDataBase64StrCreate
(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inFileDataBase64Str)[source]¶pyOpenRPA.Orchestrator.__Orchestrator__.
AgentOSFileSend
(inGSettings, inHostNameStr, inUserStr, inOrchestratorFilePathStr, inAgentFilePathStr)[source]¶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
++++
+- param inGSettings
+- +
Global settings dict (singleton)
+- param inHostNameStr
+- +
- param inUserStr
+- +
- param inFilePathStr
+- +
- param inFileDataBytes
+- +
- return
+- +
GUID String of the ActivityItem - you can wait (sync or async) result by this guid!
+
pyOpenRPA.Orchestrator.__Orchestrator__.
AgentOSFileTextDataStrCreate
(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inFileDataStr, inEncodingStr='utf-8')[source]¶
|
|
|