@ -905,6 +905,151 @@ def UACSuperTokenUpdate(inSuperTokenStr, inGSettings=None):
{ inSuperTokenStr : { " User " : lLoginStr , " Domain " : " " , " TokenDatetime " : datetime . datetime . now ( ) , " FlagDoNotExpire " : True } }
)
## GSettings defs
from . import SettingsTemplate
GSettings = SettingsTemplate . Create ( inModeStr = " BASIC " )
# Modules alias for pyOpenRPA.Orchestrator and pyOpenRPA.Orchestrator.__Orchestrator__
lCurrentModule = sys . modules [ __name__ ]
if __name__ == " pyOpenRPA.Orchestrator " and " pyOpenRPA.Orchestrator.__Orchestrator__ " not in sys . modules :
sys . modules [ " pyOpenRPA.Orchestrator.__Orchestrator__ " ] = lCurrentModule
if __name__ == " pyOpenRPA.Orchestrator.__Orchestrator__ " and " pyOpenRPA.Orchestrator " not in sys . modules :
sys . modules [ " pyOpenRPA.Orchestrator " ] = lCurrentModule
def GSettingsGet ( inGSettings = None ) :
""" L+,W+: Вернуть глобальный словарь настроек Оркестратора. В о время выполнения программы глобальный словарь настроек существует в единственном экземпляре (синглтон)
: param inGSettings : Дополнительный словарь настроек , который необходимо добавить в основной глобальный словарь настроек Оркестратора ( синглтон )
: return : Глобальный словарь настроек GSettings
"""
global GSettings # identify the global variable
# Merge dictionaries if some new dictionary has come
if inGSettings is not None and GSettings is not inGSettings :
GSettings = Dictionary . MergeNoException ( in1Dict = inGSettings , in2Dict = GSettings )
return GSettings # Return the result
def GSettingsKeyListValueSet ( inValue , inKeyList = None , inGSettings = None ) :
""" L+,W+: Установить значение из глобального словаря настроек Оркестратора GSettings по списку ключей.
Пример : Для того , чтобы установить значение для ключа car в словаре { " complex " : { " car " : " green " } , " simple " : " HELLO " } , необходимо передать список ключей : [ " complex " , " car " ]
: param inGSettings : Глобальный словарь настроек Оркестратора ( синглтон )
: param inValue : Значение для установки в глобальный словарь настроек Оркестратора GSettings
: param inKeyList : Список ключей , по адресу которого установить значение в GSettings
"""
inGSettings = GSettingsGet ( inGSettings = inGSettings ) # Set the global settings
if inKeyList is None : inKeyList = [ ]
lDict = inGSettings
for lItem2 in inKeyList [ : - 1 ] :
#Check if key - value exists
if lItem2 in lDict :
pass
else :
lDict [ lItem2 ] = { }
lDict = lDict [ lItem2 ]
lDict [ inKeyList [ - 1 ] ] = inValue #Set value
return True
def GSettingsKeyListValueGet ( inKeyList = None , inGSettings = None ) :
""" L+,W+: Получить значение из глобального словаря настроек Оркестратора GSettings по списку ключей.
: param inGSettings : Глобальный словарь настроек Оркестратора ( синглтон )
: param inKeyList : Список ключей , по адресу которого получить значение из GSettings
: return : Значение ( тип данных определяется форматом хранения в GSettings )
"""
inGSettings = GSettingsGet ( inGSettings = inGSettings ) # Set the global settings
if inKeyList is None : inKeyList = [ ]
lDict = inGSettings
for lItem2 in inKeyList [ : - 1 ] :
#Check if key - value exists
if lItem2 in lDict :
pass
else :
lDict [ lItem2 ] = { }
lDict = lDict [ lItem2 ]
return lDict . get ( inKeyList [ - 1 ] , None )
def GSettingsKeyListValueAppend ( inValue , inKeyList = None , inGSettings = None ) :
""" L+,W+: Применить операцию .append к обьекту, расположенному по адресу списка ключей inKeyList в глобальном словаре настроек Оркестратора GSettings. Пример: Добавить значение в конец списка (list).
. . code - block : : python
# ПРИМЕР
from pyOpenRPA import Orchestrator
Orchestrator . GSettingsKeyListValueAppend (
inGSettings = gSettings ,
inValue = " NewValue " ,
inKeyList = [ " NewKeyDict " , " NewKeyList " ] ) :
# result inGSettings: {
# ... another keys in gSettings ...,
# "NewKeyDict":{
# "NewKeyList":[
# "NewValue"
# ]
# }
#}
: param inGSettings : Глобальный словарь настроек Оркестратора ( синглтон )
: param inValue : Значение для установки в глобальный словарь настроек Оркестратора GSettings
: param inKeyList : Список ключей , по адресу которого выполнить добавление в конец списка ( list )
"""
inGSettings = GSettingsGet ( inGSettings = inGSettings ) # Set the global settings
if inKeyList is None : inKeyList = [ ]
lDict = inGSettings
for lItem2 in inKeyList [ : - 1 ] :
#Check if key - value exists
if lItem2 in lDict :
pass
else :
lDict [ lItem2 ] = { }
lDict = lDict [ lItem2 ]
lDict [ inKeyList [ - 1 ] ] . append ( inValue ) #Set value
return True
def GSettingsKeyListValueOperatorPlus ( inValue , inKeyList = None , inGSettings = None ) :
""" L+,W+: Применить оператор сложения (+) к обьекту, расположенному по адресу списка ключей inKeyList в глобальном словаре настроек Оркестратора GSettings. Пример: соединить 2 списка (list).
. . code - block : : python
# ПРИМЕР
from pyOpenRPA import Orchestrator
Orchestrator . GSettingsKeyListValueOperatorPlus (
inGSettings = gSettings ,
inValue = [ 1 , 2 , 3 ] ,
inKeyList = [ " NewKeyDict " , " NewKeyList " ] ) :
# result inGSettings: {
# ... another keys in gSettings ...,
# "NewKeyDict":{
# "NewKeyList":[
# "NewValue",
# 1,
# 2,
# 3
# ]
# }
#}
: param inGSettings : Глобальный словарь настроек Оркестратора ( синглтон )
: param inValue : Значение для установки в глобальный словарь настроек Оркестратора GSettings
: param inKeyList : Список ключей , по адресу которого выполнить добавление в конец списка ( list )
"""
inGSettings = GSettingsGet ( inGSettings = inGSettings ) # Set the global settings
if inKeyList is None : inKeyList = [ ]
lDict = inGSettings
for lItem2 in inKeyList [ : - 1 ] :
#Check if key - value exists
if lItem2 in lDict :
pass
else :
lDict [ lItem2 ] = { }
lDict = lDict [ lItem2 ]
lDict [ inKeyList [ - 1 ] ] + = inValue #Set value
return True
# # # # # # # # # # # # # # # # # # # # # # #
# OrchestratorWeb defs
# # # # # # # # # # # # # # # # # # # # # # #
@ -1170,13 +1315,11 @@ def WebRequestGet():
lCurrentThread = threading . current_thread ( )
if hasattr ( lCurrentThread , " request " ) :
return lCurrentThread . request
from fastapi import FastAPI
def WebAppGet ( ) - > FastAPI :
""" L+,W+: Вернуть экземпляр веб сервера fastapi.FastAPI (app). Подробнее про app см. https://fastapi.tiangolo.com/tutorial/first-steps/
"""
return Server . app
def WebUserLoginGet ( inAuthTokenStr : str = None ) - > str :
""" L+,W+: Получить логин авторизованного пользователя. Если авторизация не производилась - вернуть None
@ -1197,22 +1340,24 @@ def WebUserDomainGet(inAuthTokenStr: str=None) -> str:
: return : Домен пользователя
: rtype : str
"""
if inAuthTokenStr is None : return None
inGS = GSettingsGet ( ) # Get the global settings
return inGS . get ( " ServerDict " , { } ) . get ( " AccessUsers " , { } ) . get ( " AuthTokensDict " , { } ) . get ( inAuthTokenStr , { } ) . get ( " Domain " , None )
def WebUserInfoGet ( in Request = None ) :
""" L+,W+: [ПРЕКРАЩЕНИЕ ПОДДЕРЖКИ В 1.3.2, см. WebUserLoginGet, WebUserDomainGet] Информация о пользователе, который отправил HTTP запрос.
def WebUserInfoGet ( in AuthTokenStr = None ) :
""" L+,W+: Информация о пользователе, который отправил HTTP запрос.
: param inRequest : Экземпляр HTTP request . Опционален , если сообщение фиксируется из под потока , который был инициирован запросом пользователя
: return : Сведения в формате { " DomainUpperStr " : " PYOPENRPA " , " UserNameUpperStr " : " IVAN.MASLOV " }
"""
if inRequest is None : inRequest = WebRequestGet ( )
try :
lDomainUpperStr = inRequest . OpenRPA [ " Domain " ] . upper ( )
lUserUpperStr = inRequest . OpenRPA [ " User " ] . upper ( )
return { " DomainUpperStr " : lDomainUpperStr , " UserNameUpperStr " : lUserUpperStr }
lResultDict = {
" DomainUpperStr " : WebUserDomainGet ( inAuthTokenStr = inAuthTokenStr ) . upper ( ) ,
" UserNameUpperStr " : WebUserLoginGet ( inAuthTokenStr = inAuthTokenStr ) . upper ( )
}
return lResultDict
except Exception as e :
return { " DomainUpperStr " : None , " UserNameUpperStr " : None }
@ -1270,149 +1415,7 @@ def WebUserUACCheck(inAuthTokenStr:str=None, inKeyList:list=None) -> bool:
break # Close the loop
return lResult # Return the result
## GSettings defs
from . import SettingsTemplate
GSettings = SettingsTemplate . Create ( inModeStr = " BASIC " )
# Modules alias for pyOpenRPA.Orchestrator and pyOpenRPA.Orchestrator.__Orchestrator__
lCurrentModule = sys . modules [ __name__ ]
if __name__ == " pyOpenRPA.Orchestrator " and " pyOpenRPA.Orchestrator.__Orchestrator__ " not in sys . modules :
sys . modules [ " pyOpenRPA.Orchestrator.__Orchestrator__ " ] = lCurrentModule
if __name__ == " pyOpenRPA.Orchestrator.__Orchestrator__ " and " pyOpenRPA.Orchestrator " not in sys . modules :
sys . modules [ " pyOpenRPA.Orchestrator " ] = lCurrentModule
def GSettingsGet ( inGSettings = None ) :
""" L+,W+: Вернуть глобальный словарь настроек Оркестратора. В о время выполнения программы глобальный словарь настроек существует в единственном экземпляре (синглтон)
: param inGSettings : Дополнительный словарь настроек , который необходимо добавить в основной глобальный словарь настроек Оркестратора ( синглтон )
: return : Глобальный словарь настроек GSettings
"""
global GSettings # identify the global variable
# Merge dictionaries if some new dictionary has come
if inGSettings is not None and GSettings is not inGSettings :
GSettings = Dictionary . MergeNoException ( in1Dict = inGSettings , in2Dict = GSettings )
return GSettings # Return the result
def GSettingsKeyListValueSet ( inValue , inKeyList = None , inGSettings = None ) :
""" L+,W+: Установить значение из глобального словаря настроек Оркестратора GSettings по списку ключей.
Пример : Для того , чтобы установить значение для ключа car в словаре { " complex " : { " car " : " green " } , " simple " : " HELLO " } , необходимо передать список ключей : [ " complex " , " car " ]
: param inGSettings : Глобальный словарь настроек Оркестратора ( синглтон )
: param inValue : Значение для установки в глобальный словарь настроек Оркестратора GSettings
: param inKeyList : Список ключей , по адресу которого установить значение в GSettings
"""
inGSettings = GSettingsGet ( inGSettings = inGSettings ) # Set the global settings
if inKeyList is None : inKeyList = [ ]
lDict = inGSettings
for lItem2 in inKeyList [ : - 1 ] :
#Check if key - value exists
if lItem2 in lDict :
pass
else :
lDict [ lItem2 ] = { }
lDict = lDict [ lItem2 ]
lDict [ inKeyList [ - 1 ] ] = inValue #Set value
return True
def GSettingsKeyListValueGet ( inKeyList = None , inGSettings = None ) :
""" L+,W+: Получить значение из глобального словаря настроек Оркестратора GSettings по списку ключей.
: param inGSettings : Глобальный словарь настроек Оркестратора ( синглтон )
: param inKeyList : Список ключей , по адресу которого получить значение из GSettings
: return : Значение ( тип данных определяется форматом хранения в GSettings )
"""
inGSettings = GSettingsGet ( inGSettings = inGSettings ) # Set the global settings
if inKeyList is None : inKeyList = [ ]
lDict = inGSettings
for lItem2 in inKeyList [ : - 1 ] :
#Check if key - value exists
if lItem2 in lDict :
pass
else :
lDict [ lItem2 ] = { }
lDict = lDict [ lItem2 ]
return lDict . get ( inKeyList [ - 1 ] , None )
def GSettingsKeyListValueAppend ( inValue , inKeyList = None , inGSettings = None ) :
""" L+,W+: Применить операцию .append к обьекту, расположенному по адресу списка ключей inKeyList в глобальном словаре настроек Оркестратора GSettings. Пример: Добавить значение в конец списка (list).
. . code - block : : python
# ПРИМЕР
from pyOpenRPA import Orchestrator
Orchestrator . GSettingsKeyListValueAppend (
inGSettings = gSettings ,
inValue = " NewValue " ,
inKeyList = [ " NewKeyDict " , " NewKeyList " ] ) :
# result inGSettings: {
# ... another keys in gSettings ...,
# "NewKeyDict":{
# "NewKeyList":[
# "NewValue"
# ]
# }
#}
: param inGSettings : Глобальный словарь настроек Оркестратора ( синглтон )
: param inValue : Значение для установки в глобальный словарь настроек Оркестратора GSettings
: param inKeyList : Список ключей , по адресу которого выполнить добавление в конец списка ( list )
"""
inGSettings = GSettingsGet ( inGSettings = inGSettings ) # Set the global settings
if inKeyList is None : inKeyList = [ ]
lDict = inGSettings
for lItem2 in inKeyList [ : - 1 ] :
#Check if key - value exists
if lItem2 in lDict :
pass
else :
lDict [ lItem2 ] = { }
lDict = lDict [ lItem2 ]
lDict [ inKeyList [ - 1 ] ] . append ( inValue ) #Set value
return True
def GSettingsKeyListValueOperatorPlus ( inValue , inKeyList = None , inGSettings = None ) :
""" L+,W+: Применить оператор сложения (+) к обьекту, расположенному по адресу списка ключей inKeyList в глобальном словаре настроек Оркестратора GSettings. Пример: соединить 2 списка (list).
. . code - block : : python
# ПРИМЕР
from pyOpenRPA import Orchestrator
Orchestrator . GSettingsKeyListValueOperatorPlus (
inGSettings = gSettings ,
inValue = [ 1 , 2 , 3 ] ,
inKeyList = [ " NewKeyDict " , " NewKeyList " ] ) :
# result inGSettings: {
# ... another keys in gSettings ...,
# "NewKeyDict":{
# "NewKeyList":[
# "NewValue",
# 1,
# 2,
# 3
# ]
# }
#}
: param inGSettings : Глобальный словарь настроек Оркестратора ( синглтон )
: param inValue : Значение для установки в глобальный словарь настроек Оркестратора GSettings
: param inKeyList : Список ключей , по адресу которого выполнить добавление в конец списка ( list )
"""
inGSettings = GSettingsGet ( inGSettings = inGSettings ) # Set the global settings
if inKeyList is None : inKeyList = [ ]
lDict = inGSettings
for lItem2 in inKeyList [ : - 1 ] :
#Check if key - value exists
if lItem2 in lDict :
pass
else :
lDict [ lItem2 ] = { }
lDict = lDict [ lItem2 ]
lDict [ inKeyList [ - 1 ] ] + = inValue #Set value
return True
def StorageRobotExists ( inRobotNameStr ) :
""" L+,W+: Проверить, существует ли ключ inRobotNameStr в хранилище пользовательской информации StorageDict (GSettings > StarageDict)