v1.0.22 (beta of 1.0.1) work stable #PyPiPackage fully supported

Signed-off-by: Ivan Maslov <Ivan.Maslov@UnicodeLabs.ru>
dev-linux
Ivan Maslov 5 years ago
parent 215ca959eb
commit ac13d6044a

@ -1,23 +0,0 @@
pyOpenRPA-1.0.16.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
pyOpenRPA-1.0.16.dist-info/METADATA,sha256=IxqPZ8XpKYmxZBKQJFZR1j41tmovw8AqcFBpZv03ubY,3510
pyOpenRPA-1.0.16.dist-info/RECORD,,
pyOpenRPA-1.0.16.dist-info/WHEEL,sha256=qB97nP5e4MrOsXW5bIU5cUn_KSVr10EV0l-GCHG9qNs,97
pyOpenRPA-1.0.16.dist-info/top_level.txt,sha256=RPzwQXgYBRo_m5L3ZLs6Voh8aEkMeT29Xsul1w1qE0g,10
pyOpenRPA/Clipboard.py,sha256=q76X8L21zJwcwdoJJNPeCEwAV30xS6ylHP1WwvtxoWI,722
pyOpenRPA/IntegrationOrchestrator.py,sha256=T1g1jJM7_JMTSVP50DTM5WHrMh1w8wovvcBXl1nEokU,2656
pyOpenRPA/JSONNormalize.py,sha256=aIuVzuZDazhxkCOzoOjfhHVz66mp2FWdfPv5E7KWF5Y,3890
pyOpenRPA/ProcessCommunicator.py,sha256=eT_NgoAQBUxSu9alCGxuauuussrP50HDoiBA9JcUkOc,8114
pyOpenRPA/Robot.py,sha256=41eZQMflqf7B8GnTn1mTJ_Dm8-k8CfSRFy1_He6ZLME,9471
pyOpenRPA/UIDesktop.py,sha256=AJPHt5z2W4AL9xsM1-YptCjFOUO-dj5kQVraelux_yU,68732
pyOpenRPA/ValueVerify.py,sha256=ObskxU4fOMoCGw74_nzYt6-a5jjrAckb3sdBLYyhYxY,777
pyOpenRPA/Window.py,sha256=UJl-sg4RvvJ35aG9jZOzqGVwE15XK7qPHqoOBD13xFk,431
pyOpenRPA/__init__.py,sha256=BTpZhIhxiw-a5cDUoMZxNpPiTEAvRV6v09sDC0MtRVI,399
pyOpenRPA/__pycache__/Clipboard.cpython-37.pyc,,
pyOpenRPA/__pycache__/IntegrationOrchestrator.cpython-37.pyc,,
pyOpenRPA/__pycache__/JSONNormalize.cpython-37.pyc,,
pyOpenRPA/__pycache__/ProcessCommunicator.cpython-37.pyc,,
pyOpenRPA/__pycache__/Robot.cpython-37.pyc,,
pyOpenRPA/__pycache__/UIDesktop.cpython-37.pyc,,
pyOpenRPA/__pycache__/ValueVerify.cpython-37.pyc,,
pyOpenRPA/__pycache__/Window.cpython-37.pyc,,
pyOpenRPA/__pycache__/__init__.cpython-37.pyc,,

@ -1,6 +1,6 @@
Metadata-Version: 2.1 Metadata-Version: 2.1
Name: pyOpenRPA Name: pyOpenRPA
Version: 1.0.16 Version: 1.0.22
Summary: First open source RPA platform for business Summary: First open source RPA platform for business
Home-page: https://gitlab.com/UnicodeLabs/OpenRPA Home-page: https://gitlab.com/UnicodeLabs/OpenRPA
Author: Ivan Maslov Author: Ivan Maslov

@ -0,0 +1,27 @@
pyOpenRPA-1.0.22.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
pyOpenRPA-1.0.22.dist-info/METADATA,sha256=GrJ-YM4RtTzh2wmphmCaGjTXG77VNqi9H94eSqsJor8,3510
pyOpenRPA-1.0.22.dist-info/RECORD,,
pyOpenRPA-1.0.22.dist-info/WHEEL,sha256=qB97nP5e4MrOsXW5bIU5cUn_KSVr10EV0l-GCHG9qNs,97
pyOpenRPA-1.0.22.dist-info/top_level.txt,sha256=RPzwQXgYBRo_m5L3ZLs6Voh8aEkMeT29Xsul1w1qE0g,10
pyOpenRPA/Core/Clipboard.py,sha256=q76X8L21zJwcwdoJJNPeCEwAV30xS6ylHP1WwvtxoWI,722
pyOpenRPA/Core/IntegrationOrchestrator.py,sha256=T1g1jJM7_JMTSVP50DTM5WHrMh1w8wovvcBXl1nEokU,2656
pyOpenRPA/Core/JSONNormalize.py,sha256=aIuVzuZDazhxkCOzoOjfhHVz66mp2FWdfPv5E7KWF5Y,3890
pyOpenRPA/Core/ProcessCommunicator.py,sha256=Mpo2WoCrEUmY6aCSbQEXkT4qVKtN1N5NcVvG_UZxGVo,8245
pyOpenRPA/Core/Robot.py,sha256=z7tn7JVBPVWEwDFHVLJljxiOjKcT0u878SPoPwmipyQ,9429
pyOpenRPA/Core/UIDesktop.py,sha256=sUDelnGuL-9Kcw-eS5RzMnR3ynjoDokmJvkHZJdeY3o,66206
pyOpenRPA/Core/ValueVerify.py,sha256=ObskxU4fOMoCGw74_nzYt6-a5jjrAckb3sdBLYyhYxY,777
pyOpenRPA/Core/Window.py,sha256=UJl-sg4RvvJ35aG9jZOzqGVwE15XK7qPHqoOBD13xFk,431
pyOpenRPA/Core/__init__.py,sha256=iEW3SGBJf3kYa1zocGH5vEK0woejzJpnQfOmQtIA3P0,324
pyOpenRPA/Core/__pycache__/Clipboard.cpython-37.pyc,,
pyOpenRPA/Core/__pycache__/IntegrationOrchestrator.cpython-37.pyc,,
pyOpenRPA/Core/__pycache__/JSONNormalize.cpython-37.pyc,,
pyOpenRPA/Core/__pycache__/ProcessCommunicator.cpython-37.pyc,,
pyOpenRPA/Core/__pycache__/Robot.cpython-37.pyc,,
pyOpenRPA/Core/__pycache__/UIDesktop.cpython-37.pyc,,
pyOpenRPA/Core/__pycache__/ValueVerify.cpython-37.pyc,,
pyOpenRPA/Core/__pycache__/Window.cpython-37.pyc,,
pyOpenRPA/Core/__pycache__/__init__.cpython-37.pyc,,
pyOpenRPA/__init__.py,sha256=dur8ut_EUSobQtipejot0tiYeVoMhtaFLISIkoydBrU,204
pyOpenRPA/__main__.py,sha256=uJUcpj4bbAno4uaks8TxUh5woV-RK5_E8s5h6PqYw_M,1916
pyOpenRPA/__pycache__/__init__.cpython-37.pyc,,
pyOpenRPA/__pycache__/__main__.cpython-37.pyc,,

@ -101,8 +101,11 @@ def ProcessChildReadWaitString(lProcess):
lResult = lResult.replace(b'{{{f}}}',b'\f') lResult = lResult.replace(b'{{{f}}}',b'\f')
#print("check") #print("check")
#print(str(lResult)) #print(str(lResult))
lResult = zlib.decompress(lResult[0:-1]) try:
lResult = lResult.decode("utf-8") lResult = zlib.decompress(lResult[0:-1])
lResult = lResult.decode("utf-8")
except zlib.error as e:
raise Exception(f"Exception from child process: {lProcess.stderr.read()}")
#Вернуть результат #Вернуть результат
return lResult return lResult

@ -61,9 +61,10 @@ logging.basicConfig(filename="Reports\ReportRobotRun_"+datetime.datetime.now().s
#Section: Module initialization #Section: Module initialization
#################### ####################
#Start childprocess - GUI Module 32 bit #Start childprocess - GUI Module 32 bit
#pdb.set_trace()
if not os.path.isfile("..\\Resources\\WPy32-3720\\python-3.7.2\\OpenRPARobotGUIx32.exe"): if not os.path.isfile("..\\Resources\\WPy32-3720\\python-3.7.2\\OpenRPARobotGUIx32.exe"):
shutil.copyfile('..\\Resources\\WPy32-3720\\python-3.7.2\\python.exe',"..\\Resources\\WPy32-3720\\python-3.7.2\\OpenRPARobotGUIx32.exe") shutil.copyfile('..\\Resources\\WPy32-3720\\python-3.7.2\\python.exe',"..\\Resources\\WPy32-3720\\python-3.7.2\\OpenRPARobotGUIx32.exe")
mProcessGUI_x32 = subprocess.Popen(['..\\Resources\\WPy32-3720\\python-3.7.2\\OpenRPARobotGUIx32.exe','..\\Robot\\pyOpenRPA\\UIDesktop.py','release'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE) mProcessGUI_x32 = subprocess.Popen(['..\\Resources\\WPy32-3720\\python-3.7.2\\OpenRPARobotGUIx32.exe',"-m",'pyOpenRPA'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
#Start childprocess - GUI Module 64 bit - uncomment after WPy64 installation #Start childprocess - GUI Module 64 bit - uncomment after WPy64 installation
ProcessCommunicator.ProcessChildSendObject(mProcessGUI_x32,{"ModuleName":"UIDesktop","ActivityName":"Get_OSBitnessInt","ArgumentList":[],"ArgumentDict":{}}) ProcessCommunicator.ProcessChildSendObject(mProcessGUI_x32,{"ModuleName":"UIDesktop","ActivityName":"Get_OSBitnessInt","ArgumentList":[],"ArgumentDict":{}})
lOSBitness = ProcessCommunicator.ProcessChildReadWaitObject(mProcessGUI_x32)["Result"] lOSBitness = ProcessCommunicator.ProcessChildReadWaitObject(mProcessGUI_x32)["Result"]
@ -74,7 +75,7 @@ mProcessGUI_x64= None
if lOSBitness == 64: if lOSBitness == 64:
if not os.path.isfile("..\\Resources\\WPy64-3720\\python-3.7.2.amd64\\OpenRPARobotGUIx64.exe"): if not os.path.isfile("..\\Resources\\WPy64-3720\\python-3.7.2.amd64\\OpenRPARobotGUIx64.exe"):
shutil.copyfile('..\\Resources\\WPy64-3720\\python-3.7.2.amd64\\python.exe',"..\\Resources\\WPy64-3720\\python-3.7.2.amd64\\OpenRPARobotGUIx64.exe") shutil.copyfile('..\\Resources\\WPy64-3720\\python-3.7.2.amd64\\python.exe',"..\\Resources\\WPy64-3720\\python-3.7.2.amd64\\OpenRPARobotGUIx64.exe")
mProcessGUI_x64 = subprocess.Popen(['..\\Resources\\WPy64-3720\\python-3.7.2.amd64\\OpenRPARobotGUIx64.exe','..\\Robot\\pyOpenRPA\\UIDesktop.py','release'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE) mProcessGUI_x64 = subprocess.Popen(['..\\Resources\\WPy64-3720\\python-3.7.2.amd64\\OpenRPARobotGUIx64.exe',"-m",'pyOpenRPA'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
#################### ####################
#Section: Activity #Section: Activity

@ -1150,61 +1150,7 @@ def UIO_Highlight(lWrapperObject,colour='green',thickness=2,fill=win32defines.BS
def UIO_FocusHighlight(lWrapperObject,colour='green',thickness=2,fill=win32defines.BS_NULL,rect=None): def UIO_FocusHighlight(lWrapperObject,colour='green',thickness=2,fill=win32defines.BS_NULL,rect=None):
UIO_Highlight(lWrapperObject,'green',2,win32defines.BS_NULL,None,True) UIO_Highlight(lWrapperObject,'green',2,win32defines.BS_NULL,None,True)
#Определить разрядность процесса #Определить разрядность процесса
lProcessBitnessStr = str(struct.calcsize("P") * 8) lProcessBitnessStr = str(struct.calcsize("P") * 8)
############################
#Старая версия
# Определять флаг Debug, если как второй входной параметр не поступил ключ RELEASE
############################
mFlagIsDebug=True
if (len(sys.argv)>=2):
if (sys.argv[1].upper()=="RELEASE"):
mFlagIsDebug=False
#Оповещение о выбранном режиме
if mFlagIsDebug:
mRobotLogger.info("Robot/GUI: Debug mode, x"+lProcessBitnessStr)
print ("Robot/GUI: Debug mode, x"+lProcessBitnessStr)
else:
mRobotLogger.info("Robot/GUI: Release mode, x"+lProcessBitnessStr)
#Нельзя делать print в release mode тк print делает вывод в PIPE поток, что нарушает последовательность взаимодействия с родительским процессом
#print ("Robot/GUI: Release mode, x"+lProcessBitnessStr)
#for line in sys.stdin:
# lText=lText+line;
#ctypes.windll.user32.MessageBoxW(0, lText, "Your title", 1)
buffer = ""
lJSONInputString=""
#Выполнить чтение буфера, если не отладка библиотеки
if not mFlagIsDebug:
while True:
lProcessResponse={"ErrorFlag":False}
try:
#Ожидаем синхронно поступление объекта
lJSONInput = ProcessCommunicator.ProcessParentReadWaitObject()
lProcessResponse["ActivitySpecificationDict"]=lJSONInput
#Выполнить вызов функции
lProcessResponse["Result"]=JSONNormalize.JSONNormalizeDictListStrIntBool(locals()[lJSONInput['ActivityName']](*lJSONInput['ArgumentList'],**lJSONInput['ArgumentDict']))
except Exception as e:
#Установить флаг ошибки
lProcessResponse["ErrorFlag"]=True
#Зафиксировать traceback
lProcessResponse["ErrorTraceback"]=traceback.format_exc()
#Зафиксировать Error message
lProcessResponse["ErrorMessage"]=str(e)
#lProcessResponse["ErrorArgs"]=str(e.args)
#Отправить ответ в родительский процесс
ProcessCommunicator.ProcessParentWriteObject(lProcessResponse)
else:
print('Debug mode is turned on!')
#if __name__ == '__main__':
# if len(sys.argv) > 1:
# lFunctionArgs = sys.argv[2:]
# print(locals()[sys.argv[1]](*lFunctionArgs))

@ -0,0 +1,13 @@
r"""
The OpenRPA package (from UnicodeLabs)
"""
__all__ = [
'UIDesktop', 'Clipboard', 'IntegrationOrchestrator', 'Window', 'ProcessCommunicator'
]
__author__ = 'Ivan Maslov <ivan.maslov@unicodelabs.ru>'
#from . import UIDesktop
from . import Clipboard
from . import Window
from . import ProcessCommunicator

@ -3,13 +3,8 @@ r"""
The OpenRPA package (from UnicodeLabs) The OpenRPA package (from UnicodeLabs)
""" """
__version__ = 'v1.0.16' __version__ = 'v1.0.22'
__all__ = [ __all__ = []
'UIDesktop.py', 'Clipboard', 'IntegrationOrchestrator', 'Window', 'ProcessCommunicator', 'Robot'
]
__author__ = 'Ivan Maslov <ivan.maslov@unicodelabs.ru>' __author__ = 'Ivan Maslov <ivan.maslov@unicodelabs.ru>'
from . import UIDesktop from .Core import UIDesktop
from . import Clipboard #from .Core import Robot
from . import IntegrationOrchestrator
from . import Window
from . import ProcessCommunicator

@ -0,0 +1,39 @@
r"""
The OpenRPA package (from UnicodeLabs/Ivan Maslov)
__main__ file goes outside the package and used like a main file when the python runs module directly from start
"""
#If run as python executable module, need to set python path in pyOpenRPA package to load subpackge
import sys
lFolderPath= "\\".join(__file__.split("\\")[:-1])
sys.path.append(lFolderPath)
################################
import traceback
from Core import ProcessCommunicator
from Core import JSONNormalize
from Core import UIDesktop
##########################################
#Run UIDesktop from new process. Communication with paren process by PIPE channel
##########################################
#Определить разрядность процесса
buffer = ""
lJSONInputString=""
while True:
#Reset the lProcessResponse
lProcessResponse={"ErrorFlag":False}
try:
#Ожидаем синхронно поступление объекта
lJSONInput = ProcessCommunicator.ProcessParentReadWaitObject()
lProcessResponse["ActivitySpecificationDict"]=lJSONInput
#Выполнить вызов функции
lFunction = getattr(UIDesktop,lJSONInput['ActivityName'])
lProcessResponse["Result"]=JSONNormalize.JSONNormalizeDictListStrIntBool(lFunction(*lJSONInput['ArgumentList'],**lJSONInput['ArgumentDict']))
except Exception as e:
#Установить флаг ошибки
lProcessResponse["ErrorFlag"]=True
#Зафиксировать traceback
lProcessResponse["ErrorTraceback"]=traceback.format_exc()
#Зафиксировать Error message
lProcessResponse["ErrorMessage"]=str(e)
#lProcessResponse["ErrorArgs"]=str(e.args)
#Отправить ответ в родительский процесс
ProcessCommunicator.ProcessParentWriteObject(lProcessResponse)

@ -1,23 +0,0 @@
pyOpenRPA-1.0.16.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
pyOpenRPA-1.0.16.dist-info/METADATA,sha256=IxqPZ8XpKYmxZBKQJFZR1j41tmovw8AqcFBpZv03ubY,3510
pyOpenRPA-1.0.16.dist-info/RECORD,,
pyOpenRPA-1.0.16.dist-info/WHEEL,sha256=qB97nP5e4MrOsXW5bIU5cUn_KSVr10EV0l-GCHG9qNs,97
pyOpenRPA-1.0.16.dist-info/top_level.txt,sha256=RPzwQXgYBRo_m5L3ZLs6Voh8aEkMeT29Xsul1w1qE0g,10
pyOpenRPA/Clipboard.py,sha256=q76X8L21zJwcwdoJJNPeCEwAV30xS6ylHP1WwvtxoWI,722
pyOpenRPA/IntegrationOrchestrator.py,sha256=T1g1jJM7_JMTSVP50DTM5WHrMh1w8wovvcBXl1nEokU,2656
pyOpenRPA/JSONNormalize.py,sha256=aIuVzuZDazhxkCOzoOjfhHVz66mp2FWdfPv5E7KWF5Y,3890
pyOpenRPA/ProcessCommunicator.py,sha256=eT_NgoAQBUxSu9alCGxuauuussrP50HDoiBA9JcUkOc,8114
pyOpenRPA/Robot.py,sha256=41eZQMflqf7B8GnTn1mTJ_Dm8-k8CfSRFy1_He6ZLME,9471
pyOpenRPA/UIDesktop.py,sha256=AJPHt5z2W4AL9xsM1-YptCjFOUO-dj5kQVraelux_yU,68732
pyOpenRPA/ValueVerify.py,sha256=ObskxU4fOMoCGw74_nzYt6-a5jjrAckb3sdBLYyhYxY,777
pyOpenRPA/Window.py,sha256=UJl-sg4RvvJ35aG9jZOzqGVwE15XK7qPHqoOBD13xFk,431
pyOpenRPA/__init__.py,sha256=BTpZhIhxiw-a5cDUoMZxNpPiTEAvRV6v09sDC0MtRVI,399
pyOpenRPA/__pycache__/Clipboard.cpython-37.pyc,,
pyOpenRPA/__pycache__/IntegrationOrchestrator.cpython-37.pyc,,
pyOpenRPA/__pycache__/JSONNormalize.cpython-37.pyc,,
pyOpenRPA/__pycache__/ProcessCommunicator.cpython-37.pyc,,
pyOpenRPA/__pycache__/Robot.cpython-37.pyc,,
pyOpenRPA/__pycache__/UIDesktop.cpython-37.pyc,,
pyOpenRPA/__pycache__/ValueVerify.cpython-37.pyc,,
pyOpenRPA/__pycache__/Window.cpython-37.pyc,,
pyOpenRPA/__pycache__/__init__.cpython-37.pyc,,

@ -1,6 +1,6 @@
Metadata-Version: 2.1 Metadata-Version: 2.1
Name: pyOpenRPA Name: pyOpenRPA
Version: 1.0.16 Version: 1.0.22
Summary: First open source RPA platform for business Summary: First open source RPA platform for business
Home-page: https://gitlab.com/UnicodeLabs/OpenRPA Home-page: https://gitlab.com/UnicodeLabs/OpenRPA
Author: Ivan Maslov Author: Ivan Maslov

@ -0,0 +1,27 @@
pyOpenRPA-1.0.22.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
pyOpenRPA-1.0.22.dist-info/METADATA,sha256=GrJ-YM4RtTzh2wmphmCaGjTXG77VNqi9H94eSqsJor8,3510
pyOpenRPA-1.0.22.dist-info/RECORD,,
pyOpenRPA-1.0.22.dist-info/WHEEL,sha256=qB97nP5e4MrOsXW5bIU5cUn_KSVr10EV0l-GCHG9qNs,97
pyOpenRPA-1.0.22.dist-info/top_level.txt,sha256=RPzwQXgYBRo_m5L3ZLs6Voh8aEkMeT29Xsul1w1qE0g,10
pyOpenRPA/Core/Clipboard.py,sha256=q76X8L21zJwcwdoJJNPeCEwAV30xS6ylHP1WwvtxoWI,722
pyOpenRPA/Core/IntegrationOrchestrator.py,sha256=T1g1jJM7_JMTSVP50DTM5WHrMh1w8wovvcBXl1nEokU,2656
pyOpenRPA/Core/JSONNormalize.py,sha256=aIuVzuZDazhxkCOzoOjfhHVz66mp2FWdfPv5E7KWF5Y,3890
pyOpenRPA/Core/ProcessCommunicator.py,sha256=Mpo2WoCrEUmY6aCSbQEXkT4qVKtN1N5NcVvG_UZxGVo,8245
pyOpenRPA/Core/Robot.py,sha256=z7tn7JVBPVWEwDFHVLJljxiOjKcT0u878SPoPwmipyQ,9429
pyOpenRPA/Core/UIDesktop.py,sha256=sUDelnGuL-9Kcw-eS5RzMnR3ynjoDokmJvkHZJdeY3o,66206
pyOpenRPA/Core/ValueVerify.py,sha256=ObskxU4fOMoCGw74_nzYt6-a5jjrAckb3sdBLYyhYxY,777
pyOpenRPA/Core/Window.py,sha256=UJl-sg4RvvJ35aG9jZOzqGVwE15XK7qPHqoOBD13xFk,431
pyOpenRPA/Core/__init__.py,sha256=iEW3SGBJf3kYa1zocGH5vEK0woejzJpnQfOmQtIA3P0,324
pyOpenRPA/Core/__pycache__/Clipboard.cpython-37.pyc,,
pyOpenRPA/Core/__pycache__/IntegrationOrchestrator.cpython-37.pyc,,
pyOpenRPA/Core/__pycache__/JSONNormalize.cpython-37.pyc,,
pyOpenRPA/Core/__pycache__/ProcessCommunicator.cpython-37.pyc,,
pyOpenRPA/Core/__pycache__/Robot.cpython-37.pyc,,
pyOpenRPA/Core/__pycache__/UIDesktop.cpython-37.pyc,,
pyOpenRPA/Core/__pycache__/ValueVerify.cpython-37.pyc,,
pyOpenRPA/Core/__pycache__/Window.cpython-37.pyc,,
pyOpenRPA/Core/__pycache__/__init__.cpython-37.pyc,,
pyOpenRPA/__init__.py,sha256=dur8ut_EUSobQtipejot0tiYeVoMhtaFLISIkoydBrU,204
pyOpenRPA/__main__.py,sha256=uJUcpj4bbAno4uaks8TxUh5woV-RK5_E8s5h6PqYw_M,1916
pyOpenRPA/__pycache__/__init__.cpython-37.pyc,,
pyOpenRPA/__pycache__/__main__.cpython-37.pyc,,

@ -101,8 +101,11 @@ def ProcessChildReadWaitString(lProcess):
lResult = lResult.replace(b'{{{f}}}',b'\f') lResult = lResult.replace(b'{{{f}}}',b'\f')
#print("check") #print("check")
#print(str(lResult)) #print(str(lResult))
lResult = zlib.decompress(lResult[0:-1]) try:
lResult = lResult.decode("utf-8") lResult = zlib.decompress(lResult[0:-1])
lResult = lResult.decode("utf-8")
except zlib.error as e:
raise Exception(f"Exception from child process: {lProcess.stderr.read()}")
#Вернуть результат #Вернуть результат
return lResult return lResult

@ -61,9 +61,10 @@ logging.basicConfig(filename="Reports\ReportRobotRun_"+datetime.datetime.now().s
#Section: Module initialization #Section: Module initialization
#################### ####################
#Start childprocess - GUI Module 32 bit #Start childprocess - GUI Module 32 bit
#pdb.set_trace()
if not os.path.isfile("..\\Resources\\WPy32-3720\\python-3.7.2\\OpenRPARobotGUIx32.exe"): if not os.path.isfile("..\\Resources\\WPy32-3720\\python-3.7.2\\OpenRPARobotGUIx32.exe"):
shutil.copyfile('..\\Resources\\WPy32-3720\\python-3.7.2\\python.exe',"..\\Resources\\WPy32-3720\\python-3.7.2\\OpenRPARobotGUIx32.exe") shutil.copyfile('..\\Resources\\WPy32-3720\\python-3.7.2\\python.exe',"..\\Resources\\WPy32-3720\\python-3.7.2\\OpenRPARobotGUIx32.exe")
mProcessGUI_x32 = subprocess.Popen(['..\\Resources\\WPy32-3720\\python-3.7.2\\OpenRPARobotGUIx32.exe','..\\Robot\\pyOpenRPA\\UIDesktop.py','release'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE) mProcessGUI_x32 = subprocess.Popen(['..\\Resources\\WPy32-3720\\python-3.7.2\\OpenRPARobotGUIx32.exe',"-m",'pyOpenRPA'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
#Start childprocess - GUI Module 64 bit - uncomment after WPy64 installation #Start childprocess - GUI Module 64 bit - uncomment after WPy64 installation
ProcessCommunicator.ProcessChildSendObject(mProcessGUI_x32,{"ModuleName":"UIDesktop","ActivityName":"Get_OSBitnessInt","ArgumentList":[],"ArgumentDict":{}}) ProcessCommunicator.ProcessChildSendObject(mProcessGUI_x32,{"ModuleName":"UIDesktop","ActivityName":"Get_OSBitnessInt","ArgumentList":[],"ArgumentDict":{}})
lOSBitness = ProcessCommunicator.ProcessChildReadWaitObject(mProcessGUI_x32)["Result"] lOSBitness = ProcessCommunicator.ProcessChildReadWaitObject(mProcessGUI_x32)["Result"]
@ -74,7 +75,7 @@ mProcessGUI_x64= None
if lOSBitness == 64: if lOSBitness == 64:
if not os.path.isfile("..\\Resources\\WPy64-3720\\python-3.7.2.amd64\\OpenRPARobotGUIx64.exe"): if not os.path.isfile("..\\Resources\\WPy64-3720\\python-3.7.2.amd64\\OpenRPARobotGUIx64.exe"):
shutil.copyfile('..\\Resources\\WPy64-3720\\python-3.7.2.amd64\\python.exe',"..\\Resources\\WPy64-3720\\python-3.7.2.amd64\\OpenRPARobotGUIx64.exe") shutil.copyfile('..\\Resources\\WPy64-3720\\python-3.7.2.amd64\\python.exe',"..\\Resources\\WPy64-3720\\python-3.7.2.amd64\\OpenRPARobotGUIx64.exe")
mProcessGUI_x64 = subprocess.Popen(['..\\Resources\\WPy64-3720\\python-3.7.2.amd64\\OpenRPARobotGUIx64.exe','..\\Robot\\pyOpenRPA\\UIDesktop.py','release'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE) mProcessGUI_x64 = subprocess.Popen(['..\\Resources\\WPy64-3720\\python-3.7.2.amd64\\OpenRPARobotGUIx64.exe',"-m",'pyOpenRPA'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
#################### ####################
#Section: Activity #Section: Activity

@ -1150,61 +1150,7 @@ def UIO_Highlight(lWrapperObject,colour='green',thickness=2,fill=win32defines.BS
def UIO_FocusHighlight(lWrapperObject,colour='green',thickness=2,fill=win32defines.BS_NULL,rect=None): def UIO_FocusHighlight(lWrapperObject,colour='green',thickness=2,fill=win32defines.BS_NULL,rect=None):
UIO_Highlight(lWrapperObject,'green',2,win32defines.BS_NULL,None,True) UIO_Highlight(lWrapperObject,'green',2,win32defines.BS_NULL,None,True)
#Определить разрядность процесса #Определить разрядность процесса
lProcessBitnessStr = str(struct.calcsize("P") * 8) lProcessBitnessStr = str(struct.calcsize("P") * 8)
############################
#Старая версия
# Определять флаг Debug, если как второй входной параметр не поступил ключ RELEASE
############################
mFlagIsDebug=True
if (len(sys.argv)>=2):
if (sys.argv[1].upper()=="RELEASE"):
mFlagIsDebug=False
#Оповещение о выбранном режиме
if mFlagIsDebug:
mRobotLogger.info("Robot/GUI: Debug mode, x"+lProcessBitnessStr)
print ("Robot/GUI: Debug mode, x"+lProcessBitnessStr)
else:
mRobotLogger.info("Robot/GUI: Release mode, x"+lProcessBitnessStr)
#Нельзя делать print в release mode тк print делает вывод в PIPE поток, что нарушает последовательность взаимодействия с родительским процессом
#print ("Robot/GUI: Release mode, x"+lProcessBitnessStr)
#for line in sys.stdin:
# lText=lText+line;
#ctypes.windll.user32.MessageBoxW(0, lText, "Your title", 1)
buffer = ""
lJSONInputString=""
#Выполнить чтение буфера, если не отладка библиотеки
if not mFlagIsDebug:
while True:
lProcessResponse={"ErrorFlag":False}
try:
#Ожидаем синхронно поступление объекта
lJSONInput = ProcessCommunicator.ProcessParentReadWaitObject()
lProcessResponse["ActivitySpecificationDict"]=lJSONInput
#Выполнить вызов функции
lProcessResponse["Result"]=JSONNormalize.JSONNormalizeDictListStrIntBool(locals()[lJSONInput['ActivityName']](*lJSONInput['ArgumentList'],**lJSONInput['ArgumentDict']))
except Exception as e:
#Установить флаг ошибки
lProcessResponse["ErrorFlag"]=True
#Зафиксировать traceback
lProcessResponse["ErrorTraceback"]=traceback.format_exc()
#Зафиксировать Error message
lProcessResponse["ErrorMessage"]=str(e)
#lProcessResponse["ErrorArgs"]=str(e.args)
#Отправить ответ в родительский процесс
ProcessCommunicator.ProcessParentWriteObject(lProcessResponse)
else:
print('Debug mode is turned on!')
#if __name__ == '__main__':
# if len(sys.argv) > 1:
# lFunctionArgs = sys.argv[2:]
# print(locals()[sys.argv[1]](*lFunctionArgs))

@ -0,0 +1,13 @@
r"""
The OpenRPA package (from UnicodeLabs)
"""
__all__ = [
'UIDesktop', 'Clipboard', 'IntegrationOrchestrator', 'Window', 'ProcessCommunicator'
]
__author__ = 'Ivan Maslov <ivan.maslov@unicodelabs.ru>'
#from . import UIDesktop
from . import Clipboard
from . import Window
from . import ProcessCommunicator

@ -3,13 +3,8 @@ r"""
The OpenRPA package (from UnicodeLabs) The OpenRPA package (from UnicodeLabs)
""" """
__version__ = 'v1.0.16' __version__ = 'v1.0.22'
__all__ = [ __all__ = []
'UIDesktop.py', 'Clipboard', 'IntegrationOrchestrator', 'Window', 'ProcessCommunicator', 'Robot'
]
__author__ = 'Ivan Maslov <ivan.maslov@unicodelabs.ru>' __author__ = 'Ivan Maslov <ivan.maslov@unicodelabs.ru>'
from . import UIDesktop from .Core import UIDesktop
from . import Clipboard #from .Core import Robot
from . import IntegrationOrchestrator
from . import Window
from . import ProcessCommunicator

@ -0,0 +1,39 @@
r"""
The OpenRPA package (from UnicodeLabs/Ivan Maslov)
__main__ file goes outside the package and used like a main file when the python runs module directly from start
"""
#If run as python executable module, need to set python path in pyOpenRPA package to load subpackge
import sys
lFolderPath= "\\".join(__file__.split("\\")[:-1])
sys.path.append(lFolderPath)
################################
import traceback
from Core import ProcessCommunicator
from Core import JSONNormalize
from Core import UIDesktop
##########################################
#Run UIDesktop from new process. Communication with paren process by PIPE channel
##########################################
#Определить разрядность процесса
buffer = ""
lJSONInputString=""
while True:
#Reset the lProcessResponse
lProcessResponse={"ErrorFlag":False}
try:
#Ожидаем синхронно поступление объекта
lJSONInput = ProcessCommunicator.ProcessParentReadWaitObject()
lProcessResponse["ActivitySpecificationDict"]=lJSONInput
#Выполнить вызов функции
lFunction = getattr(UIDesktop,lJSONInput['ActivityName'])
lProcessResponse["Result"]=JSONNormalize.JSONNormalizeDictListStrIntBool(lFunction(*lJSONInput['ArgumentList'],**lJSONInput['ArgumentDict']))
except Exception as e:
#Установить флаг ошибки
lProcessResponse["ErrorFlag"]=True
#Зафиксировать traceback
lProcessResponse["ErrorTraceback"]=traceback.format_exc()
#Зафиксировать Error message
lProcessResponse["ErrorMessage"]=str(e)
#lProcessResponse["ErrorArgs"]=str(e.args)
#Отправить ответ в родительский процесс
ProcessCommunicator.ProcessParentWriteObject(lProcessResponse)

@ -3,7 +3,7 @@ RD /S /Q "build"
RD /S /Q "dist" RD /S /Q "dist"
.\..\Resources\WPy64-3720\python-3.7.2.amd64\python.exe setup.py sdist bdist_wheel .\..\Resources\WPy64-3720\python-3.7.2.amd64\python.exe setup.py sdist bdist_wheel
.\..\Resources\WPy64-3720\python-3.7.2.amd64\python.exe -m twine upload dist/* .\..\Resources\WPy64-3720\python-3.7.2.amd64\python.exe -m twine upload dist/*
timeout 5 timeout 10
cd .. cd ..
Resources\WPy64-3720\python-3.7.2.amd64\python.exe -m pip install --upgrade pyOpenRPA Resources\WPy64-3720\python-3.7.2.amd64\python.exe -m pip install --upgrade pyOpenRPA
Resources\WPy32-3720\python-3.7.2\python.exe -m pip install --upgrade pyOpenRPA Resources\WPy32-3720\python-3.7.2\python.exe -m pip install --upgrade pyOpenRPA

@ -1,6 +1,6 @@
Metadata-Version: 2.1 Metadata-Version: 2.1
Name: pyOpenRPA Name: pyOpenRPA
Version: 1.0.16 Version: 1.0.22
Summary: First open source RPA platform for business Summary: First open source RPA platform for business
Home-page: https://gitlab.com/UnicodeLabs/OpenRPA Home-page: https://gitlab.com/UnicodeLabs/OpenRPA
Author: Ivan Maslov Author: Ivan Maslov

@ -1,16 +1,18 @@
setup.py setup.py
pyOpenRPA/Clipboard.py
pyOpenRPA/IntegrationOrchestrator.py
pyOpenRPA/JSONNormalize.py
pyOpenRPA/ProcessCommunicator.py
pyOpenRPA/Robot.py
pyOpenRPA/UIDesktop.py
pyOpenRPA/ValueVerify.py
pyOpenRPA/Window.py
pyOpenRPA/__init__.py pyOpenRPA/__init__.py
pyOpenRPA/__main__.py
pyOpenRPA.egg-info/PKG-INFO pyOpenRPA.egg-info/PKG-INFO
pyOpenRPA.egg-info/SOURCES.txt pyOpenRPA.egg-info/SOURCES.txt
pyOpenRPA.egg-info/dependency_links.txt pyOpenRPA.egg-info/dependency_links.txt
pyOpenRPA.egg-info/not-zip-safe pyOpenRPA.egg-info/not-zip-safe
pyOpenRPA.egg-info/requires.txt pyOpenRPA.egg-info/requires.txt
pyOpenRPA.egg-info/top_level.txt pyOpenRPA.egg-info/top_level.txt
pyOpenRPA/Core/Clipboard.py
pyOpenRPA/Core/IntegrationOrchestrator.py
pyOpenRPA/Core/JSONNormalize.py
pyOpenRPA/Core/ProcessCommunicator.py
pyOpenRPA/Core/Robot.py
pyOpenRPA/Core/UIDesktop.py
pyOpenRPA/Core/ValueVerify.py
pyOpenRPA/Core/Window.py
pyOpenRPA/Core/__init__.py

@ -101,8 +101,11 @@ def ProcessChildReadWaitString(lProcess):
lResult = lResult.replace(b'{{{f}}}',b'\f') lResult = lResult.replace(b'{{{f}}}',b'\f')
#print("check") #print("check")
#print(str(lResult)) #print(str(lResult))
lResult = zlib.decompress(lResult[0:-1]) try:
lResult = lResult.decode("utf-8") lResult = zlib.decompress(lResult[0:-1])
lResult = lResult.decode("utf-8")
except zlib.error as e:
raise Exception(f"Exception from child process: {lProcess.stderr.read()}")
#Вернуть результат #Вернуть результат
return lResult return lResult

@ -0,0 +1,58 @@
# OpenRPA
First open source RPA platform for business is released!
# How to run
Studio
Double click to Studio\StudioRun_32.cmd or Studio\StudioRun_64.cmd
# Robot how to debug
Robot\PythonDebug_64.cmd
import Robot
Robot.ActivityRun(
{
ModuleName: <"GUI"|..., str>,
ActivityName: <Function or procedure name in module, str>,
ArgumentList: [<Argument 1, any type>, ...] - optional,
ArgumentDict: {<Argument 1 name, str>:<Argument 1 value, any type>, ...} - optional
}
)
# Robot example script:
Robot\Examples\GetFolderList\Python_32_Script_Run.cmd
# Python 32 bit
Resources\WPy32-3720\python-3.7.2\python.exe
# Python 64 bit
Resources\WPy64-3720\python-3.7.2.amd64\python.exe
# Module GUI activity List:
############################
Новая версия
############################
Получить список элементов, который удовлетворяет условиям через расширенный движок поиска
[
{
"index":<Позиция элемента в родительском объекте>,
"depth_start" - глубина, с которой начинается поиск (по умолчанию 1)
"depth_end" - глубина, до которой ведется поиск (по умолчанию 1)
"class_name" - наименование класса, который требуется искать
"title" - наименование заголовка
"rich_text" - наименование rich_text
}
]
# Open RPA Wiki
- [Home](https://gitlab.com/UnicodeLabs/OpenRPA/wikis/home)
- [04. Desktop app access (win32 & ui automation)](https://gitlab.com/UnicodeLabs/OpenRPA/wikis/04.-Desktop-app-access-(win32-&-ui-automation))
#Dependencies
* Python 3 x32 [psutil, pywinauto, wmi, PIL, keyboard, pyautogui, win32api (pywin32), selenium, openCV, tesseract, requests, lxml, PyMuPDF]
* Python 3 x64 [psutil, pywinauto, wmi, PIL, keyboard, pyautogui, win32api (pywin32), selenium, openCV, tesseract, requests, lxml, PyMuPDF]
* pywinauto (Windows GUI automation)
* Semantic UI CSS framework
* JsRender by https://www.jsviews.com (switch to Handlebars)
* Handlebars
Created by Unicode Labs (Ivan Maslov)

@ -61,9 +61,10 @@ logging.basicConfig(filename="Reports\ReportRobotRun_"+datetime.datetime.now().s
#Section: Module initialization #Section: Module initialization
#################### ####################
#Start childprocess - GUI Module 32 bit #Start childprocess - GUI Module 32 bit
#pdb.set_trace()
if not os.path.isfile("..\\Resources\\WPy32-3720\\python-3.7.2\\OpenRPARobotGUIx32.exe"): if not os.path.isfile("..\\Resources\\WPy32-3720\\python-3.7.2\\OpenRPARobotGUIx32.exe"):
shutil.copyfile('..\\Resources\\WPy32-3720\\python-3.7.2\\python.exe',"..\\Resources\\WPy32-3720\\python-3.7.2\\OpenRPARobotGUIx32.exe") shutil.copyfile('..\\Resources\\WPy32-3720\\python-3.7.2\\python.exe',"..\\Resources\\WPy32-3720\\python-3.7.2\\OpenRPARobotGUIx32.exe")
mProcessGUI_x32 = subprocess.Popen(['..\\Resources\\WPy32-3720\\python-3.7.2\\OpenRPARobotGUIx32.exe','..\\Robot\\pyOpenRPA\\UIDesktop.py','release'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE) mProcessGUI_x32 = subprocess.Popen(['..\\Resources\\WPy32-3720\\python-3.7.2\\OpenRPARobotGUIx32.exe',"-m",'pyOpenRPA'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
#Start childprocess - GUI Module 64 bit - uncomment after WPy64 installation #Start childprocess - GUI Module 64 bit - uncomment after WPy64 installation
ProcessCommunicator.ProcessChildSendObject(mProcessGUI_x32,{"ModuleName":"UIDesktop","ActivityName":"Get_OSBitnessInt","ArgumentList":[],"ArgumentDict":{}}) ProcessCommunicator.ProcessChildSendObject(mProcessGUI_x32,{"ModuleName":"UIDesktop","ActivityName":"Get_OSBitnessInt","ArgumentList":[],"ArgumentDict":{}})
lOSBitness = ProcessCommunicator.ProcessChildReadWaitObject(mProcessGUI_x32)["Result"] lOSBitness = ProcessCommunicator.ProcessChildReadWaitObject(mProcessGUI_x32)["Result"]
@ -74,7 +75,7 @@ mProcessGUI_x64= None
if lOSBitness == 64: if lOSBitness == 64:
if not os.path.isfile("..\\Resources\\WPy64-3720\\python-3.7.2.amd64\\OpenRPARobotGUIx64.exe"): if not os.path.isfile("..\\Resources\\WPy64-3720\\python-3.7.2.amd64\\OpenRPARobotGUIx64.exe"):
shutil.copyfile('..\\Resources\\WPy64-3720\\python-3.7.2.amd64\\python.exe',"..\\Resources\\WPy64-3720\\python-3.7.2.amd64\\OpenRPARobotGUIx64.exe") shutil.copyfile('..\\Resources\\WPy64-3720\\python-3.7.2.amd64\\python.exe',"..\\Resources\\WPy64-3720\\python-3.7.2.amd64\\OpenRPARobotGUIx64.exe")
mProcessGUI_x64 = subprocess.Popen(['..\\Resources\\WPy64-3720\\python-3.7.2.amd64\\OpenRPARobotGUIx64.exe','..\\Robot\\pyOpenRPA\\UIDesktop.py','release'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE) mProcessGUI_x64 = subprocess.Popen(['..\\Resources\\WPy64-3720\\python-3.7.2.amd64\\OpenRPARobotGUIx64.exe',"-m",'pyOpenRPA'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
#################### ####################
#Section: Activity #Section: Activity

@ -1150,61 +1150,7 @@ def UIO_Highlight(lWrapperObject,colour='green',thickness=2,fill=win32defines.BS
def UIO_FocusHighlight(lWrapperObject,colour='green',thickness=2,fill=win32defines.BS_NULL,rect=None): def UIO_FocusHighlight(lWrapperObject,colour='green',thickness=2,fill=win32defines.BS_NULL,rect=None):
UIO_Highlight(lWrapperObject,'green',2,win32defines.BS_NULL,None,True) UIO_Highlight(lWrapperObject,'green',2,win32defines.BS_NULL,None,True)
#Определить разрядность процесса #Определить разрядность процесса
lProcessBitnessStr = str(struct.calcsize("P") * 8) lProcessBitnessStr = str(struct.calcsize("P") * 8)
############################
#Старая версия
# Определять флаг Debug, если как второй входной параметр не поступил ключ RELEASE
############################
mFlagIsDebug=True
if (len(sys.argv)>=2):
if (sys.argv[1].upper()=="RELEASE"):
mFlagIsDebug=False
#Оповещение о выбранном режиме
if mFlagIsDebug:
mRobotLogger.info("Robot/GUI: Debug mode, x"+lProcessBitnessStr)
print ("Robot/GUI: Debug mode, x"+lProcessBitnessStr)
else:
mRobotLogger.info("Robot/GUI: Release mode, x"+lProcessBitnessStr)
#Нельзя делать print в release mode тк print делает вывод в PIPE поток, что нарушает последовательность взаимодействия с родительским процессом
#print ("Robot/GUI: Release mode, x"+lProcessBitnessStr)
#for line in sys.stdin:
# lText=lText+line;
#ctypes.windll.user32.MessageBoxW(0, lText, "Your title", 1)
buffer = ""
lJSONInputString=""
#Выполнить чтение буфера, если не отладка библиотеки
if not mFlagIsDebug:
while True:
lProcessResponse={"ErrorFlag":False}
try:
#Ожидаем синхронно поступление объекта
lJSONInput = ProcessCommunicator.ProcessParentReadWaitObject()
lProcessResponse["ActivitySpecificationDict"]=lJSONInput
#Выполнить вызов функции
lProcessResponse["Result"]=JSONNormalize.JSONNormalizeDictListStrIntBool(locals()[lJSONInput['ActivityName']](*lJSONInput['ArgumentList'],**lJSONInput['ArgumentDict']))
except Exception as e:
#Установить флаг ошибки
lProcessResponse["ErrorFlag"]=True
#Зафиксировать traceback
lProcessResponse["ErrorTraceback"]=traceback.format_exc()
#Зафиксировать Error message
lProcessResponse["ErrorMessage"]=str(e)
#lProcessResponse["ErrorArgs"]=str(e.args)
#Отправить ответ в родительский процесс
ProcessCommunicator.ProcessParentWriteObject(lProcessResponse)
else:
print('Debug mode is turned on!')
#if __name__ == '__main__':
# if len(sys.argv) > 1:
# lFunctionArgs = sys.argv[2:]
# print(locals()[sys.argv[1]](*lFunctionArgs))

@ -0,0 +1,13 @@
r"""
The OpenRPA package (from UnicodeLabs)
"""
__all__ = [
'UIDesktop', 'Clipboard', 'IntegrationOrchestrator', 'Window', 'ProcessCommunicator'
]
__author__ = 'Ivan Maslov <ivan.maslov@unicodelabs.ru>'
#from . import UIDesktop
from . import Clipboard
from . import Window
from . import ProcessCommunicator

@ -0,0 +1 @@
Main pyOpenRPA level is designed to has 2 method of module call: by PIPE or by import

@ -3,13 +3,8 @@ r"""
The OpenRPA package (from UnicodeLabs) The OpenRPA package (from UnicodeLabs)
""" """
__version__ = 'v1.0.16' __version__ = 'v1.0.22'
__all__ = [ __all__ = []
'UIDesktop.py', 'Clipboard', 'IntegrationOrchestrator', 'Window', 'ProcessCommunicator', 'Robot'
]
__author__ = 'Ivan Maslov <ivan.maslov@unicodelabs.ru>' __author__ = 'Ivan Maslov <ivan.maslov@unicodelabs.ru>'
from . import UIDesktop from .Core import UIDesktop
from . import Clipboard #from .Core import Robot
from . import IntegrationOrchestrator
from . import Window
from . import ProcessCommunicator

@ -0,0 +1,39 @@
r"""
The OpenRPA package (from UnicodeLabs/Ivan Maslov)
__main__ file goes outside the package and used like a main file when the python runs module directly from start
"""
#If run as python executable module, need to set python path in pyOpenRPA package to load subpackge
import sys
lFolderPath= "\\".join(__file__.split("\\")[:-1])
sys.path.append(lFolderPath)
################################
import traceback
from Core import ProcessCommunicator
from Core import JSONNormalize
from Core import UIDesktop
##########################################
#Run UIDesktop from new process. Communication with paren process by PIPE channel
##########################################
#Определить разрядность процесса
buffer = ""
lJSONInputString=""
while True:
#Reset the lProcessResponse
lProcessResponse={"ErrorFlag":False}
try:
#Ожидаем синхронно поступление объекта
lJSONInput = ProcessCommunicator.ProcessParentReadWaitObject()
lProcessResponse["ActivitySpecificationDict"]=lJSONInput
#Выполнить вызов функции
lFunction = getattr(UIDesktop,lJSONInput['ActivityName'])
lProcessResponse["Result"]=JSONNormalize.JSONNormalizeDictListStrIntBool(lFunction(*lJSONInput['ArgumentList'],**lJSONInput['ArgumentDict']))
except Exception as e:
#Установить флаг ошибки
lProcessResponse["ErrorFlag"]=True
#Зафиксировать traceback
lProcessResponse["ErrorTraceback"]=traceback.format_exc()
#Зафиксировать Error message
lProcessResponse["ErrorMessage"]=str(e)
#lProcessResponse["ErrorArgs"]=str(e.args)
#Отправить ответ в родительский процесс
ProcessCommunicator.ProcessParentWriteObject(lProcessResponse)

@ -0,0 +1,3 @@
cd %~dp0
.\..\Resources\WPy64-3720\python-3.7.2.amd64\python.exe
pause >nul

@ -8,7 +8,7 @@ import os
import ProcessCommunicator import ProcessCommunicator
import sys import sys
import traceback import traceback
from pyOpenRPA import Robot from pyOpenRPA.Core import Robot
# HTTPRequestHandler class # HTTPRequestHandler class
class testHTTPServer_RequestHandler(BaseHTTPRequestHandler): class testHTTPServer_RequestHandler(BaseHTTPRequestHandler):
@ -47,26 +47,6 @@ class testHTTPServer_RequestHandler(BaseHTTPRequestHandler):
#Мост между файлом и http запросом (новый формат) #Мост между файлом и http запросом (новый формат)
if self.path == '/favicon.ico': if self.path == '/favicon.ico':
self.SendResponseContentTypeFile('image/x-icon',"Web\\favicon.ico") self.SendResponseContentTypeFile('image/x-icon',"Web\\favicon.ico")
#Action ObjectInspector GetObjectList
if self.path == '/ObjectDetector/JSONGetWindowList':
#ReadRequest
#lInputByteArray=self.rfile.read()
#print(str(len(os.stat(self.rfile).st_size)))
# Send response status code
self.send_response(200)
# Send headers
self.send_header('Content-type','application/json')
self.end_headers()
# Send message back to client
#{'functionName':'', 'argsArray':[]}
lRequestObject={'functionName':'ElementGetChildElementList','argsArray':[]}
#Отправить запрос в дочерний процесс, который отвечает за работу с Windows окнами
ProcessChildSendObject(p,lRequestObject)
#Получить ответ от дочернего процесса
lResponseObject=ProcessCommunicator.ProcessChildReadWaitObject(p)
message = json.dumps(lResponseObject)
# Write content as utf-8 data
self.wfile.write(bytes(message, "utf8"))
# POST # POST
def do_POST(self): def do_POST(self):
#Restart studio #Restart studio
@ -82,33 +62,6 @@ class testHTTPServer_RequestHandler(BaseHTTPRequestHandler):
self.wfile.write(bytes(message, "utf8")) self.wfile.write(bytes(message, "utf8"))
os.execl(sys.executable,os.path.abspath(__file__),*sys.argv) os.execl(sys.executable,os.path.abspath(__file__),*sys.argv)
sys.exit(0) sys.exit(0)
#Action ObjectInspector GetObjectList
if self.path == '/ObjectDetector/JSONGetWindowListArgs':
#ReadRequest
lInputByteArrayLength = int(self.headers.get('Content-Length'))
lInputByteArray=self.rfile.read(lInputByteArrayLength)
#Превращение массива байт в объект
print(lInputByteArray.decode('utf8'))
lInputObject=json.loads(lInputByteArray.decode('utf8'))
# Send response status code
self.send_response(200)
# Send headers
self.send_header('Content-type','application/json')
self.end_headers()
# Send message back to client
#{'functionName':'', 'argsArray':[]}
lRequestObject={'functionName':'ElementGetChildElementList','argsArray':lInputObject}
#Отправить запрос в дочерний процесс, который отвечает за работу с Windows окнами
ProcessCommunicator.ProcessChildSendObject(p,lRequestObject)
#Получить ответ от дочернего процесса
lResponseObject=ProcessCommunicator.ProcessChildReadWaitObject(p)
print(str(lResponseObject))
message = json.dumps(lResponseObject)
# Write content as utf-8 data
self.wfile.write(bytes(message, "utf8"))
if self.path == '/GUIAction': if self.path == '/GUIAction':
#Обернуть в try, чтобы вернуть ответ, что сообщение не может быть обработано #Обернуть в try, чтобы вернуть ответ, что сообщение не может быть обработано
# pdb.set_trace() # pdb.set_trace()
@ -176,9 +129,5 @@ def run():
#Запуск адреса в браузере #Запуск адреса в браузере
os.system("explorer http://127.0.0.1:8081") os.system("explorer http://127.0.0.1:8081")
httpd.serve_forever() httpd.serve_forever()
#Start childprocess 32 bit
#p = subprocess.Popen(['..\\Resources\\WPy32-3720\\python-3.7.2\\python.exe','winGUI.py'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
#print(ChildProcessReadWaitString(p)) #print(ChildProcessReadWaitString(p))
run() run()

@ -110,7 +110,7 @@
$.ajax({ $.ajax({
type: "POST", type: "POST",
url: 'GUIAction', url: 'GUIAction',
data: '{"ModuleName":"GUI", "ActivityName":"UIOSelector_SearchChildByMouse_UIOTree","ArgumentList":['+JSON.stringify(lSpecificationArray)+']}', data: '{"ModuleName":"UIDesktop", "ActivityName":"UIOSelector_SearchChildByMouse_UIOTree","ArgumentList":['+JSON.stringify(lSpecificationArray)+']}',
success: success:
function(lData,l2,l3) function(lData,l2,l3)
{ {
@ -237,7 +237,7 @@
$.ajax({ $.ajax({
type: "POST", type: "POST",
url: 'GUIAction', url: 'GUIAction',
data: '{"ModuleName":"GUI", "ActivityName":"UIOSelector_GetChildList_UIOList","ArgumentList":['+JSON.stringify(lSpecificationArray)+']}', data: '{"ModuleName":"UIDesktop", "ActivityName":"UIOSelector_GetChildList_UIOList","ArgumentList":['+JSON.stringify(lSpecificationArray)+']}',
success: success:
function(lData,l2,l3) function(lData,l2,l3)
{ {
@ -337,7 +337,7 @@
$.ajax({ $.ajax({
type: "POST", type: "POST",
url: 'GUIAction', url: 'GUIAction',
data: '{"ModuleName":"GUI", "ActivityName":"UIOSelectorUIOActivity_Run_Dict","ArgumentList":['+JSON.stringify(lSpecificationArray)+',"get_properties"]}', data: '{"ModuleName":"UIDesktop", "ActivityName":"UIOSelectorUIOActivity_Run_Dict","ArgumentList":['+JSON.stringify(lSpecificationArray)+',"get_properties"]}',
success: success:
function(lData,l2,l3) function(lData,l2,l3)
{ {
@ -372,7 +372,7 @@
$.ajax({ $.ajax({
type: "POST", type: "POST",
url: 'GUIAction', url: 'GUIAction',
data: '{"ModuleName":"GUI","ActivityName":"UIOSelectorUIOActivity_Run_Dict","ArgumentList":[[{"handle":'+inHandleId+'}],"draw_outline"]}', data: '{"ModuleName":"UIDesktop","ActivityName":"UIOSelectorUIOActivity_Run_Dict","ArgumentList":[[{"handle":'+inHandleId+'}],"draw_outline"]}',
success: success:
function(lData,l2,l3) function(lData,l2,l3)
{ {
@ -394,7 +394,7 @@
$.ajax({ $.ajax({
type: "POST", type: "POST",
url: 'GUIAction', url: 'GUIAction',
data: '{"ModuleName":"GUI","ActivityName":"UIOSelector_FocusHighlight","ArgumentList":['+JSON.stringify(lSpecificationArray)+']}', data: '{"ModuleName":"UIDesktop","ActivityName":"UIOSelector_FocusHighlight","ArgumentList":['+JSON.stringify(lSpecificationArray)+']}',
success: success:
function(lData,l2,l3) function(lData,l2,l3)
{ {
@ -414,7 +414,7 @@
$.ajax({ $.ajax({
type: "POST", type: "POST",
url: 'GUIAction', url: 'GUIAction',
data: '{"ModuleName":"GUI","ActivityName":"UIOSelector_FocusHighlight","ArgumentList":['+lSpecificationArray+']}', data: '{"ModuleName":"UIDesktop","ActivityName":"UIOSelector_FocusHighlight","ArgumentList":['+lSpecificationArray+']}',
success: success:
function(lData,l2,l3) function(lData,l2,l3)
{ {
@ -433,7 +433,7 @@
$.ajax({ $.ajax({
type: "POST", type: "POST",
url: 'GUIAction', url: 'GUIAction',
data: '{"ModuleName":"GUI","ActivityName":"UIOSelector_Get_UIOInfoList","ArgumentList":['+lSpecificationArray+']}', data: '{"ModuleName":"UIDesktop","ActivityName":"UIOSelector_Get_UIOInfoList","ArgumentList":['+lSpecificationArray+']}',
success: success:
function(lData,l2,l3) function(lData,l2,l3)
{ {
@ -461,7 +461,7 @@
$.ajax({ $.ajax({
type: "POST", type: "POST",
url: 'GUIAction', url: 'GUIAction',
data: '{"ModuleName":"GUI","ActivityName":"UIOSelector_Get_UIOActivityList","ArgumentList":['+lActionElementSpecification+']}', data: '{"ModuleName":"UIDesktop","ActivityName":"UIOSelector_Get_UIOActivityList","ArgumentList":['+lActionElementSpecification+']}',
success: success:
function(lData,l2,l3) function(lData,l2,l3)
{ {
@ -495,8 +495,8 @@
var lActionArgumentList = $('.rpa-argument-list')[0].value var lActionArgumentList = $('.rpa-argument-list')[0].value
if (lActionArgumentList=="") lActionArgumentList="[]" if (lActionArgumentList=="") lActionArgumentList="[]"
///Сформировать строку спецификации действия ///Сформировать строку спецификации действия
lActionSpecificationObject = {"ModuleName":"GUI","ActivityName":"UIOSelectorUIOActivity_Run_Dict","ArgumentList":[JSON.parse(lActionElementSpecification),lActionName,JSON.parse(lActionArgumentList)]} lActionSpecificationObject = {"ModuleName":"UIDesktop","ActivityName":"UIOSelectorUIOActivity_Run_Dict","ArgumentList":[JSON.parse(lActionElementSpecification),lActionName,JSON.parse(lActionArgumentList)]}
lActionSpecificationString = '{"ModuleName":"GUI","ActivityName":"UIOSelectorUIOActivity_Run_Dict","ArgumentList":['+lActionElementSpecification+',"'+lActionName+'",'+lActionArgumentList+']}' lActionSpecificationString = '{"ModuleName":"UIDesktop","ActivityName":"UIOSelectorUIOActivity_Run_Dict","ArgumentList":['+lActionElementSpecification+',"'+lActionName+'",'+lActionArgumentList+']}'
///Добавить в массив действий ///Добавить в массив действий
mGlobal.ActionSpecificationList.push(lActionSpecificationObject) mGlobal.ActionSpecificationList.push(lActionSpecificationObject)
///Обновить визуализацию ///Обновить визуализацию
@ -509,8 +509,8 @@
var lActionArgumentList = $('.rpa-argument-list')[0].value var lActionArgumentList = $('.rpa-argument-list')[0].value
if (lActionArgumentList=="") lActionArgumentList="[]" if (lActionArgumentList=="") lActionArgumentList="[]"
///Сформировать строку спецификации действия ///Сформировать строку спецификации действия
lActionSpecificationObject = {"ModuleName":"GUI","ActivityName":"PywinautoExtElementWaitAppear","ArgumentList":[JSON.parse(lActionElementSpecification)]} lActionSpecificationObject = {"ModuleName":"UIDesktop","ActivityName":"PywinautoExtElementWaitAppear","ArgumentList":[JSON.parse(lActionElementSpecification)]}
lActionSpecificationString = '{"ModuleName":"GUI","ActivityName":"PywinautoExtElementWaitAppear","ArgumentList":['+lActionElementSpecification+']}' lActionSpecificationString = '{"ModuleName":"UIDesktop","ActivityName":"PywinautoExtElementWaitAppear","ArgumentList":['+lActionElementSpecification+']}'
///Добавить в массив действий ///Добавить в массив действий
mGlobal.ActionSpecificationList.push(lActionSpecificationObject) mGlobal.ActionSpecificationList.push(lActionSpecificationObject)
///Обновить визуализацию ///Обновить визуализацию
@ -578,7 +578,7 @@
$.ajax({ $.ajax({
type: "POST", type: "POST",
url: 'GUIActionList', url: 'GUIActionList',
data: '[{"ModuleName":"GUI","ActivityName":"UIOSelector_FocusHighlight","ArgumentList":['+lActionElementSpecification+']},{"ModuleName":"GUI","ActivityName":"UIOSelectorUIOActivity_Run_Dict","ArgumentList":['+lActionElementSpecification+',"'+lActionName+'",'+lActionArgumentList+']}]', data: '[{"ModuleName":"UIDesktop","ActivityName":"UIOSelector_FocusHighlight","ArgumentList":['+lActionElementSpecification+']},{"ModuleName":"UIDesktop","ActivityName":"UIOSelectorUIOActivity_Run_Dict","ArgumentList":['+lActionElementSpecification+',"'+lActionName+'",'+lActionArgumentList+']}]',
success: success:
function(lData,l2,l3) function(lData,l2,l3)
{ {
@ -668,7 +668,7 @@
$.ajax({ $.ajax({
type: "POST", type: "POST",
url: 'GUIAction', url: 'GUIAction',
data: '{"ModuleName":"GUI","ActivityName":"UIOSelector_GetChildList_UIOList","ArgumentList":[[]],"ArgumentDict":{"inBackend":"'+$(".openrpa-value-backend")[0].value+'"}}', data: '{"ModuleName":"UIDesktop","ActivityName":"UIOSelector_GetChildList_UIOList","ArgumentList":[[]],"ArgumentDict":{"inBackend":"'+$(".openrpa-value-backend")[0].value+'"}}',
success: success:
function(lData,l2,l3) function(lData,l2,l3)
{ {

@ -0,0 +1,7 @@
Beta before 1.0.1 (new way of OpenRPA with improovments. Sorry, but no backward compatibility)/ Backward compatibility will start from 1.0.1
[1.0.22]
1.0.1 Beta
[1.0.19]
MinorFix in pyOpenRPA.Core
[1.0.18]
MinorFix in pyOpenRPA.Core
Loading…
Cancel
Save