From 165b6290b11f6276e5852f9ad82de4df20031738 Mon Sep 17 00:00:00 2001 From: Ivan Maslov Date: Mon, 6 May 2019 04:32:16 +0300 Subject: [PATCH] #Robot_Refactoring(+ClipboardModule+JSONNormalize,GUI_40%) --- Robot/Clipboard.py | 22 ++++++++++++ Robot/GUI.py | 21 ----------- Robot/JSONNormalize.py | 69 ++++++++++++++++++++++++++++++++++++ Robot/ProcessCommunicator.py | 3 ++ 4 files changed, 94 insertions(+), 21 deletions(-) create mode 100644 Robot/Clipboard.py create mode 100644 Robot/JSONNormalize.py diff --git a/Robot/Clipboard.py b/Robot/Clipboard.py new file mode 100644 index 00000000..d081e55c --- /dev/null +++ b/Robot/Clipboard.py @@ -0,0 +1,22 @@ +import win32clipboard +#################################### +#Info: Clipboard module of the Robot app (OpenRPA - Robot) +#################################### +# GUI Module - interaction with Windows clipboard + +################ +###ClipboardGet +################ +def ClipboardGet(): + win32clipboard.OpenClipboard() + lResult = win32clipboard.GetClipboardData() + win32clipboard.CloseClipboard() + return lResult +################ +###ClipboardSet +################ +def ClipboardSet(inText): + win32clipboard.OpenClipboard() + win32clipboard.EmptyClipboard() + win32clipboard.SetClipboardText(inText) + win32clipboard.CloseClipboard() diff --git a/Robot/GUI.py b/Robot/GUI.py index c77ec702..1f6e5b8f 100644 --- a/Robot/GUI.py +++ b/Robot/GUI.py @@ -1066,27 +1066,6 @@ def draw_outline_new(lWrapperObject,colour='green',thickness=2,fill=win32defines def draw_outline_new_focus(lWrapperObject,colour='green',thickness=2,fill=win32defines.BS_NULL,rect=None): draw_outline_new(lWrapperObject,'green',2,win32defines.BS_NULL,None,True) - -################ -###GeneralClipboardGet -################ -def GeneralClipboardGet(): - win32clipboard.OpenClipboard() - lResult = win32clipboard.GetClipboardData() - win32clipboard.CloseClipboard() - return lResult -################ -###GeneralClipboardSet -################ -def GeneralClipboardSet(inText): - win32clipboard.OpenClipboard() - win32clipboard.EmptyClipboard() - win32clipboard.SetClipboardText(inText) - win32clipboard.CloseClipboard() -#Уснуть на 2 секунды -def GeneralSleep2s(): - time.sleep(2) - #run() lText = "Bitness:" + str(struct.calcsize("P") * 8) #for line in sys.stdin: diff --git a/Robot/JSONNormalize.py b/Robot/JSONNormalize.py new file mode 100644 index 00000000..ad6bf55f --- /dev/null +++ b/Robot/JSONNormalize.py @@ -0,0 +1,69 @@ +import json + +#################################### +#Info: Internal JSONNormalize module of the Robot app (OpenRPA - Robot) +#################################### +# JSONNormalize Module - Prepare dict or list for JSON (delete object from the structure) + +############################### +####Нормализация под JSON (в JSON нельзя передавать классы - только null, числа, строки, словари и массивы) +############################### +#Нормализация словаря под JSON +def JSONNormalizeDict(inDictionary): + #Сделать копию объекта + lResult=inDictionary.copy() + #Перебор всех элементов + for lItemKey,lItemValue in inDictionary.items(): + #Флаг удаления атрибута + lFlagRemoveAttribute=False + #Если строка или число или массив или объект или None - оставить + if ( + type(lItemValue) is dict or + type(lItemValue) is int or + type(lItemValue) is str or + type(lItemValue) is list or + lItemValue is None): + True==True + else: + lFlagRemoveAttribute=True + #Рекурсивный вызов, если объект является словарем + if type(lItemValue) is dict: + lResult[lItemKey]=JSONNormalizeDictionary(lItemValue) + #Рекурсивный вызов, если объект является списком + if type(lItemValue) is list: + lResult[lItemKey]=JSONNormalizeList(lItemValue) + ############################# + #Конструкция по удалению ключа из словаря + if lFlagRemoveAttribute: + lResult.pop(lItemKey) + #Вернуть результат + return lResult +#Нормализация массива под JSON +def JSONNormalizeList(inList): + lResult=[] + #Циклический обход + for lItemValue in inList: + #Если строка или число или массив или объект или None - оставить + if ( + type(lItemValue) is int or + type(lItemValue) is str or + lItemValue is None): + lResult.append(lItemValue) + #Если является словарем - вызвать функцию нормализации словаря + if type(lItemValue) is dict: + lResult.append(JSONNormalizeDictionary(lItemValue)) + #Если является массиваом - вызвать функцию нормализации массива + if type(lItemValue) is list: + lResult.append(JSONNormalizeList(lItemValue)) + #Вернуть результат + return lResult +#Определить объект - dict or list - и нормализовать его для JSON +def JSONNormalizeDictList(inDictList): + lResult={} + if type(inDictList) is dict: + lResult=JSONNormalizeDictionary(inDictList) + if type(inDictList) is list: + lResult=JSONNormalizeList(inDictList) + return lResult; + + diff --git a/Robot/ProcessCommunicator.py b/Robot/ProcessCommunicator.py index 1875b8b9..9f1dfdd6 100644 --- a/Robot/ProcessCommunicator.py +++ b/Robot/ProcessCommunicator.py @@ -3,6 +3,7 @@ import subprocess import zlib import sys import os +import JSONNormalize ############################################ ####Межпроцессное взаимодействие ############################################ @@ -51,6 +52,8 @@ def ProcessParentWriteString(lString): return #ProcessParentWriteObject def ProcessParentWriteObject(inObject): + #Выполнить нормализацию объекта перед форматированием в JSON + JSONNormalize.JSONNormalizeDictList(inObject) #Выполнить отправку сконвертированного объекта в JSON ProcessParentWriteString(json.dumps(inObject)) return