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 ' #from .Core import Robot \ No newline at end of file diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA-1.2.3.dist-info/INSTALLER b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA-1.2.5.dist-info/INSTALLER similarity index 100% rename from Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA-1.2.3.dist-info/INSTALLER rename to Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA-1.2.5.dist-info/INSTALLER diff --git a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA-1.2.3.dist-info/METADATA b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA-1.2.5.dist-info/METADATA similarity index 98% rename from Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA-1.2.3.dist-info/METADATA rename to Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA-1.2.5.dist-info/METADATA index ffb24fc0..0ce18453 100644 --- a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA-1.2.3.dist-info/METADATA +++ b/Resources/WPy64-3720/python-3.7.2.amd64/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/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA-1.2.3.dist-info/RECORD b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA-1.2.5.dist-info/RECORD similarity index 96% rename from Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA-1.2.3.dist-info/RECORD rename to Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA-1.2.5.dist-info/RECORD index 36c49d75..b9987d04 100644 --- a/Resources/WPy32-3720/python-3.7.2/Lib/site-packages/pyOpenRPA-1.2.3.dist-info/RECORD +++ b/Resources/WPy64-3720/python-3.7.2.amd64/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/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA-1.2.3.dist-info/REQUESTED b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA-1.2.5.dist-info/REQUESTED similarity index 100% rename from Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA-1.2.3.dist-info/REQUESTED rename to Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA-1.2.5.dist-info/REQUESTED diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA-1.2.3.dist-info/WHEEL b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA-1.2.5.dist-info/WHEEL similarity index 100% rename from Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA-1.2.3.dist-info/WHEEL rename to Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA-1.2.5.dist-info/WHEEL diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA-1.2.3.dist-info/top_level.txt b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA-1.2.5.dist-info/top_level.txt similarity index 100% rename from Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA-1.2.3.dist-info/top_level.txt rename to Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA-1.2.5.dist-info/top_level.txt diff --git a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA/Agent/A2O.py b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA/Agent/A2O.py index f16cdf1d..3f302476 100644 --- a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA/Agent/A2O.py +++ b/Resources/WPy64-3720/python-3.7.2.amd64/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/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA/Agent/O2A.py b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA/Agent/O2A.py index 38b92316..0994a0c0 100644 --- a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA/Agent/O2A.py +++ b/Resources/WPy64-3720/python-3.7.2.amd64/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/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA/Agent/__Agent__.py b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA/Agent/__Agent__.py index 2ac32d21..9ac93c19 100644 --- a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA/Agent/__Agent__.py +++ b/Resources/WPy64-3720/python-3.7.2.amd64/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/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA/Orchestrator/BackwardCompatibility.py b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA/Orchestrator/BackwardCompatibility.py index 2bfac13b..727376ee 100644 --- a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA/Orchestrator/BackwardCompatibility.py +++ b/Resources/WPy64-3720/python-3.7.2.amd64/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/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA/Orchestrator/ServerSettings.py b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA/Orchestrator/ServerSettings.py index b3197ee8..ed09b85f 100644 --- a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA/Orchestrator/ServerSettings.py +++ b/Resources/WPy64-3720/python-3.7.2.amd64/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/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA/Orchestrator/SettingsTemplate.py b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA/Orchestrator/SettingsTemplate.py index 923a0ce1..242ddf55 100644 --- a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA/Orchestrator/SettingsTemplate.py +++ b/Resources/WPy64-3720/python-3.7.2.amd64/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/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA/Orchestrator/__Orchestrator__.py b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA/Orchestrator/__Orchestrator__.py index 366db88b..805472d0 100644 --- a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA/Orchestrator/__Orchestrator__.py +++ b/Resources/WPy64-3720/python-3.7.2.amd64/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/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA/__init__.py b/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA/__init__.py index aeff0887..a01645a7 100644 --- a/Resources/WPy64-3720/python-3.7.2.amd64/Lib/site-packages/pyOpenRPA/__init__.py +++ b/Resources/WPy64-3720/python-3.7.2.amd64/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 ' #from .Core import Robot \ No newline at end of file diff --git a/Sources/pyOpenRPA/__init__.py b/Sources/pyOpenRPA/__init__.py index aeff0887..a01645a7 100644 --- a/Sources/pyOpenRPA/__init__.py +++ b/Sources/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 ' #from .Core import Robot \ No newline at end of file diff --git a/Sources/setup.py b/Sources/setup.py index acc919a3..5c206a07 100644 --- a/Sources/setup.py +++ b/Sources/setup.py @@ -53,7 +53,7 @@ setup(name='pyOpenRPA', install_requires=[ 'pywinauto>=0.6.8;platform_system=="win32" and python_version>="3.0"', 'WMI>=1.4.9;platform_system=="win32" and python_version>="3.0"', - 'pillow>=6.0.0','keyboard>=0.13.3','pyautogui>=0.9.44 and pyautogui<=0.9.52', + 'pillow>=6.0.0','keyboard>=0.13.3','pyautogui<=0.9.52', 'pywin32>=224;platform_system=="win32" and python_version>="3.0"', 'crypto>=1.4.1' #'pywin32>=224;platform_system=="Linux" and python_version>="3.0"', 'crypto>=1.4.1' ], diff --git a/Wiki/ENG_Guide/html/Agent/02_Defs.html b/Wiki/ENG_Guide/html/Agent/02_Defs.html index f9e9b5a7..d30b7fb3 100644 --- a/Wiki/ENG_Guide/html/Agent/02_Defs.html +++ b/Wiki/ENG_Guide/html/Agent/02_Defs.html @@ -199,19 +199,22 @@

OSCMD(inCMDStr[, inRunAsyncBool, …])

Execute CMD on the Agent daemonic process

-

OSFileBinaryDataBase64StrCreate(…[, …])

+

OSFileBinaryDataBase64StrAppend(…[, …])

Create binary file by the base64 string (safe for JSON transmition)

-

OSFileBinaryDataBase64StrReceive(inFilePathStr)

+

OSFileBinaryDataBase64StrCreate(…[, …])

+

Create binary file by the base64 string (safe for JSON transmition)

+ +

OSFileBinaryDataBase64StrReceive(inFilePathStr)

Read binary file and encode in base64 to transmit (safe for JSON transmition)

-

OSFileTextDataStrCreate(inFilePathStr, …)

+

OSFileTextDataStrCreate(inFilePathStr, …)

Create text file in the agent GUI session

-

OSFileTextDataStrReceive(inFilePathStr[, …])

+

OSFileTextDataStrReceive(inFilePathStr[, …])

Read text file in the agent GUI session

-

ProcessWOExeUpperUserListGet()

+

ProcessWOExeUpperUserListGet()

Return the process list only for the current user (where Agent is running) without .EXE in upper case.

@@ -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]
diff --git a/Wiki/ENG_Guide/html/Orchestrator/02_Defs.html b/Wiki/ENG_Guide/html/Orchestrator/02_Defs.html index 7de85958..993087d9 100644 --- a/Wiki/ENG_Guide/html/Orchestrator/02_Defs.html +++ b/Wiki/ENG_Guide/html/Orchestrator/02_Defs.html @@ -261,15 +261,21 @@

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.

+

AgentOSFileBinaryDataBase64StrAppend(…)

+

Append binary file by the base64 string by the pyOpenRPA.Agent daemon process (safe for JSON transmission)

+

AgentOSFileBinaryDataBase64StrCreate(…)

Create binary file by the base64 string by the pyOpenRPA.Agent daemon process (safe for JSON transmission)

@@ -279,163 +285,166 @@

AgentOSFileBinaryDataBytesCreate(…)

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

-

AgentProcessWOExeUpperUserListGet(…)

+

AgentProcessWOExeUpperUserListGet(…)

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

-

GSettingsKeyListValueOperatorPlus(…[, …])

+

GSettingsKeyListValueOperatorPlus(…[, …])

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.

-

OrchestratorIsAdmin()

+

OrchestratorIsAdmin()

Check if Orchestrator process is running as administrator

-

OrchestratorRerunAsAdmin()

+

OrchestratorRerunAsAdmin()

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.

-

RDPSessionProcessStartIfNotRunning(…[, …])

+

RDPSessionProcessStartIfNotRunning(…[, …])

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 {…}

@@ -459,6 +468,23 @@
+
+
+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

+
+
Parameters
+
    +
  • inGSettings – Global settings dict (singleton)

  • +
  • inGUIDStr – GUID String of the ActivityItem

  • +
+
+
Returns
+

True - ActivityItem is exist in AgentDict ; False - else case

+
+
+
+
pyOpenRPA.Orchestrator.__Orchestrator__.AgentActivityItemReturnExists(inGSettings, inGUIDStr)[source]
@@ -517,6 +543,26 @@
+
+
+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)

+
+
Parameters
+
    +
  • inGSettings – Global settings dict (singleton)

  • +
  • inHostNameStr

  • +
  • inUserStr

  • +
  • inFilePathStr

  • +
  • inFileDataBase64Str

  • +
+
+
Returns
+

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]
@@ -576,6 +622,32 @@
+
+
+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]
diff --git a/Wiki/ENG_Guide/html/Orchestrator/03_gSettingsTemplate.html b/Wiki/ENG_Guide/html/Orchestrator/03_gSettingsTemplate.html index 235974da..a8bfa1c2 100644 --- a/Wiki/ENG_Guide/html/Orchestrator/03_gSettingsTemplate.html +++ b/Wiki/ENG_Guide/html/Orchestrator/03_gSettingsTemplate.html @@ -226,9 +226,13 @@ # # # # # # # # # # # # # # # # # # }, "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/Wiki/ENG_Guide/html/_modules/pyOpenRPA/Agent/__Agent__.html b/Wiki/ENG_Guide/html/_modules/pyOpenRPA/Agent/__Agent__.html index 3ab64f78..0308047c 100644 --- a/Wiki/ENG_Guide/html/_modules/pyOpenRPA/Agent/__Agent__.html +++ b/Wiki/ENG_Guide/html/_modules/pyOpenRPA/Agent/__Agent__.html @@ -198,6 +198,20 @@ if lL: lL.info(lMessageStr) A2O.LogListSend(inGSettings=inGSettings, inLogList=[lMessageStr]) +# Append binary file by the base64 string (safe for JSON transmition) +
[docs]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
[docs]def OSFileTextDataStrCreate(inFilePathStr, inFileDataStr, inEncodingStr = "utf-8",inGSettings = None): """ diff --git a/Wiki/ENG_Guide/html/_modules/pyOpenRPA/Orchestrator/__Orchestrator__.html b/Wiki/ENG_Guide/html/_modules/pyOpenRPA/Orchestrator/__Orchestrator__.html index ba5d1a6a..f12fe695 100644 --- a/Wiki/ENG_Guide/html/_modules/pyOpenRPA/Orchestrator/__Orchestrator__.html +++ b/Wiki/ENG_Guide/html/_modules/pyOpenRPA/Orchestrator/__Orchestrator__.html @@ -207,6 +207,7 @@ from . import SettingsTemplate # Settings template import uuid # Generate uuid import datetime # datetime +import math #Единый глобальный словарь (За основу взять из Settings.py) gSettingsDict = None @@ -241,6 +242,26 @@ # Return the result return lGUIDStr
+ +
[docs]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
+
[docs]def AgentActivityItemReturnExists(inGSettings, inGUIDStr): """ Check by GUID if ActivityItem has been executed and result has come to the Orchestrator @@ -298,6 +319,73 @@ #Send item in AgentDict for the futher data transmition return AgentActivityItemAdd(inGSettings=inGSettings, inHostNameStr=inHostNameStr, inUserStr=inUserStr, inActivityItemDict=lActivityItemDict)
+ +
[docs]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()
+
[docs]def AgentOSFileBinaryDataBytesCreate(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inFileDataBytes): """ Create binary file by the base64 string by the pyOpenRPA.Agent daemon process (safe for JSON transmition) @@ -344,6 +432,30 @@ #Send item in AgentDict for the futher data transmition return AgentActivityItemAdd(inGSettings=inGSettings, inHostNameStr=inHostNameStr, inUserStr=inUserStr, inActivityItemDict=lActivityItemDict)
+ +
[docs]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)
[docs]def AgentOSFileTextDataStrCreate(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inFileDataStr, inEncodingStr = "utf-8"): """ @@ -2217,6 +2329,7 @@ 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/Wiki/ENG_Guide/html/genindex.html b/Wiki/ENG_Guide/html/genindex.html index c4fca017..3be0eab4 100644 --- a/Wiki/ENG_Guide/html/genindex.html +++ b/Wiki/ENG_Guide/html/genindex.html @@ -198,6 +198,8 @@
  • OSCredentialsVerify() (in module pyOpenRPA.Orchestrator.__Orchestrator__) +
  • +
  • OSFileBinaryDataBase64StrAppend() (in module pyOpenRPA.Agent.__Agent__)
  • OSFileBinaryDataBase64StrCreate() (in module pyOpenRPA.Agent.__Agent__)
  • diff --git a/Wiki/ENG_Guide/html/objects.inv b/Wiki/ENG_Guide/html/objects.inv index 9c1487fb..70ec8047 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/searchindex.js b/Wiki/ENG_Guide/html/searchindex.js index bade822c..4c35771f 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,""],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,""],AgentActivityItemReturnExists:[5,1,1,""],AgentActivityItemReturnGet:[5,1,1,""],AgentOSCMD:[5,1,1,""],AgentOSFileBinaryDataBase64StrCreate:[5,1,1,""],AgentOSFileBinaryDataBase64StrReceive:[5,1,1,""],AgentOSFileBinaryDataBytesCreate:[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,""],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,"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,"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,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,agentactivityitemreturnexist:5,agentactivityitemreturnget:5,agentactivitylifetimesecfloat:6,agentactivityreturndict:6,agentactivityreturnlifetimesecfloat:6,agentconnectionlifetimesecfloat:6,agentdict:[5,6],agentkeydict:[6,8],agentkeystr:[6,8],agentloopsleepsecfloat:6,agentoscmd:5,agentosfilebinarydatabase64strcr:5,agentosfilebinarydatabase64strrec:5,agentosfilebinarydatabytescr: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,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,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,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,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,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:[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],filehandl:6,filemanag:6,filemod:6,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],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,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,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,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,paramet:[3,4,5,6,10],parent:[10,11,14],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],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,sequenc:4,server:[0,3,4,5,6,8,14,15],serverdict:6,serverinst:6,serverset: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],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,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],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],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","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,""],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,"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: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:[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],filehandl:6,filemanag:6,filemod:6,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],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],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 diff --git a/Wiki/ENG_Guide/markdown/Agent/02_Defs.md b/Wiki/ENG_Guide/markdown/Agent/02_Defs.md index 0c9c529e..b61819f5 100644 --- a/Wiki/ENG_Guide/markdown/Agent/02_Defs.md +++ b/Wiki/ENG_Guide/markdown/Agent/02_Defs.md @@ -8,6 +8,11 @@ | Execute CMD on the Agent daemonic process + | +| `OSFileBinaryDataBase64StrAppend`(…[, …]) + + | Create binary file by the base64 string (safe for JSON transmition) + | | `OSFileBinaryDataBase64StrCreate`(…[, …]) @@ -59,6 +64,10 @@ Execute CMD on the Agent daemonic process :return: +### pyOpenRPA.Agent.__Agent__.OSFileBinaryDataBase64StrAppend(inFilePathStr, inFileDataBase64Str, inGSettings=None) +Create binary file by the base64 string (safe for JSON transmition) + + ### pyOpenRPA.Agent.__Agent__.OSFileBinaryDataBase64StrCreate(inFilePathStr, inFileDataBase64Str, inGSettings=None) Create binary file by the base64 string (safe for JSON transmition) diff --git a/Wiki/ENG_Guide/markdown/Orchestrator/02_Defs.md b/Wiki/ENG_Guide/markdown/Orchestrator/02_Defs.md index 75d6c11f..2e0aa1cb 100644 --- a/Wiki/ENG_Guide/markdown/Orchestrator/02_Defs.md +++ b/Wiki/ENG_Guide/markdown/Orchestrator/02_Defs.md @@ -59,6 +59,11 @@ Work with activity scheduling. | Add activity in AgentDict. | +| `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 @@ -74,6 +79,11 @@ Work with activity scheduling. | Send CMD to OS thought the pyOpenRPA.Agent daemon. | +| `AgentOSFileBinaryDataBase64StrAppend`(…) + + | Append binary file by the base64 string by the pyOpenRPA.Agent daemon process (safe for JSON transmission) + + | | `AgentOSFileBinaryDataBase64StrCreate`(…) | Create binary file by the base64 string by the pyOpenRPA.Agent daemon process (safe for JSON transmission) @@ -89,56 +99,61 @@ Work with activity scheduling. | Create binary file by the base64 string by the pyOpenRPA.Agent daemon process (safe for JSON transmition) | +| `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, …) | Read text file in the agent GUI session - | + | | `AgentProcessWOExeUpperUserListGet`(…) | 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. - | + | | `GSettingsKeyListValueAppend`(inGSettings, inValue) | Append value in GSettings by the key list - | + | | `GSettingsKeyListValueGet`(inGSettings[, …]) | Get the value from the GSettings by the key list - | + | | `GSettingsKeyListValueOperatorPlus`(…[, …]) | Execute plus operation between 2 lists (1:inValue and 2:gSettings by the inKeyList) - | + | | `GSettingsKeyListValueSet`(inGSettings, inValue) | Set value in GSettings by the key list - | + | | `OSCMD`(inCMDStr[, inRunAsyncBool, inLogger]) | OS send command in shell locally - | + | | `OSCredentialsVerify`(inUserStr, inPasswordStr) | Verify user credentials in windows. - | + | | `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. @@ -381,6 +396,26 @@ Add activity in AgentDict. Check if item is created +### pyOpenRPA.Orchestrator.__Orchestrator__.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 + + +* **Parameters** + + + * **inGSettings** – Global settings dict (singleton) + + + * **inGUIDStr** – GUID String of the ActivityItem + + + +* **Returns** + + True - ActivityItem is exist in AgentDict ; False - else case + + + ### pyOpenRPA.Orchestrator.__Orchestrator__.AgentActivityItemReturnExists(inGSettings, inGUIDStr) Check by GUID if ActivityItem has been executed and result has come to the Orchestrator @@ -461,6 +496,35 @@ Send CMD to OS thought the pyOpenRPA.Agent daemon. Result return to log + Orches +### pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSFileBinaryDataBase64StrAppend(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inFileDataBase64Str) +Append binary file by the base64 string by the pyOpenRPA.Agent daemon process (safe for JSON transmission) + + +* **Parameters** + + + * **inGSettings** – Global settings dict (singleton) + + + * **inHostNameStr** – + + + * **inUserStr** – + + + * **inFilePathStr** – + + + * **inFileDataBase64Str** – + + + +* **Returns** + + GUID String of the ActivityItem - you can wait (sync or async) result by this guid! + + + ### pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSFileBinaryDataBase64StrCreate(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inFileDataBase64Str) Create binary file by the base64 string by the pyOpenRPA.Agent daemon process (safe for JSON transmission) @@ -545,6 +609,40 @@ Create binary file by the base64 string by the pyOpenRPA.Agent daemon process (s +### pyOpenRPA.Orchestrator.__Orchestrator__.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! + + + ### pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSFileTextDataStrCreate(inGSettings, inHostNameStr, inUserStr, inFilePathStr, inFileDataStr, inEncodingStr='utf-8') Create text file by the string by the pyOpenRPA.Agent daemon process diff --git a/Wiki/ENG_Guide/markdown/Orchestrator/03_gSettingsTemplate.md b/Wiki/ENG_Guide/markdown/Orchestrator/03_gSettingsTemplate.md index 9e43109e..ba57b6ae 100644 --- a/Wiki/ENG_Guide/markdown/Orchestrator/03_gSettingsTemplate.md +++ b/Wiki/ENG_Guide/markdown/Orchestrator/03_gSettingsTemplate.md @@ -44,9 +44,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/Wiki/ENG_Guide/pdf/pyOpenRPA_Guide_ENG.pdf b/Wiki/ENG_Guide/pdf/pyOpenRPA_Guide_ENG.pdf index 2888ae0c..b5f8db45 100644 Binary files a/Wiki/ENG_Guide/pdf/pyOpenRPA_Guide_ENG.pdf and b/Wiki/ENG_Guide/pdf/pyOpenRPA_Guide_ENG.pdf differ diff --git a/v1.2.4 b/v1.2.5 similarity index 100% rename from v1.2.4 rename to v1.2.5