import psutil import datetime import logging import os #RobotDB settings def Settings(): import os import pyOpenRPA.Orchestrator lOrchestratorFolder = "\\".join(pyOpenRPA.Orchestrator.__file__.split("\\")[:-1]) mDict = { "SQLite":{ "DBPath":os.path.join("\\".join(__file__.split("\\")[:-1]),"DB.db") }, "Server": { "ListenPort_": "Порт, по которому можно подключиться к демону", "ListenPort": 8081, "ListenURLList": [ { "Description": "Local machine test", "URL_": "Сетевое расположение сервера демона", "URL": "http://127.0.0.1:8081" } ], "AccessUsers": { #Default - all URL is blocked "FlagCredentialsAsk": False, #Turn on Authentication "RuleDomainUserDict": { #("DOMAIN", "USER"): { !!!!!only in upper case!!!! # "MethodMatchURLBeforeList": [ # { # "Method":"GET|POST", # "MatchType":"BeginWith|Contains|Equal|EqualCase", # "URL":"", # "FlagAccessDefRequestGlobalAuthenticate": None, #Return bool # "FlagAccess": True # } # ] #} }, "RuleMethodMatchURLBeforeList": [ #General MethodMatchURL list (no domain/user) # { # "Method":"GET|POST", # "MatchType":"BeginWith|Contains|Equal|EqualCase", # "URL":"", # "FlagAccessDefRequestGlobalAuthenticate": None, #Return bool # "FlagAccess": True # } ], "AuthTokensDict": { #"":{"User":"", "Domain":"", "TokenDatetime":, "FlagDoNotExpire":True} } }, "URLList":[ #List of available URLs with the orchestrator server #{ # "Method":"GET|POST", # "URL": "/index", #URL of the request # "MatchType": "", #"BeginWith|Contains|Equal|EqualCase", # "ResponseFilePath": "", #Absolute or relative path # "ResponseFolderPath": "", #Absolute or relative path # "ResponseContentType": "", #HTTP Content-type # "ResponseDefRequestGlobal": None #Function with str result #} ] }, "Logger": logging.getLogger("RobotDB"), "Storage": {} #Orchestrator storage - not used } #Создать файл логирования # add filemode="w" to overwrite if not os.path.exists("Reports"): os.makedirs("Reports") ########################## #Подготовка логгера Robot ######################### mRobotLogger=mDict["Logger"] mRobotLogger.setLevel(logging.INFO) # create the logging file handler mRobotLoggerFH = logging.FileHandler("Reports\ReportRobotDB_"+datetime.datetime.now().strftime("%Y_%m_%d")+".log") mRobotLoggerFormatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') mRobotLoggerFH.setFormatter(mRobotLoggerFormatter) # add handler to logger object mRobotLogger.addHandler(mRobotLoggerFH) ############################################ ################################### #Init .py files from Settings folder #################################### #Get file list from Settings folder import os import pdb #lFunction to call in subfiles lSubmoduleFunctionName = "SettingsUpdate" #lSettingsPath = os.path.join(inSettingsFolderPath, "Settings") lSettingsPath = "\\".join(os.path.join(os.getcwd(),__file__).split("\\")[:-1]) #lSettingsPath = os.path.join(os.getcwd(), "Settings") #Lambda function to get files .py from settings folder except Settings.py lFileList = [f for f in os.listdir(lSettingsPath) if os.path.isfile(os.path.join(lSettingsPath, f)) and f.split(".")[-1] == "py" and os.path.join(lSettingsPath, f) != __file__] import importlib.util for lModuleFilePathItem in lFileList: lModuleName = lModuleFilePathItem[0:-3] lFileFullPath = os.path.join(lSettingsPath, lModuleFilePathItem) lTechSpecification = importlib.util.spec_from_file_location(lModuleName, lFileFullPath) lTechModuleFromSpec = importlib.util.module_from_spec(lTechSpecification) lTechSpecificationModuleLoader = lTechSpecification.loader.exec_module(lTechModuleFromSpec) if lSubmoduleFunctionName in dir(lTechModuleFromSpec): #Run SettingUpdate function in submodule getattr(lTechModuleFromSpec, lSubmoduleFunctionName)(mDict) return mDict