Add inUseCacheBool in web url connect file / folder + autodetect MIME

dev-linux
Ivan Maslov 2 years ago
parent cdd418a1bf
commit 7fefbe7a18

@ -26,6 +26,9 @@ global gSettingsDict
from . import ServerSettings
from . import __Orchestrator__
import copy
import mimetypes
gCacheDict = {}
# Tool to merge complex dictionaries
@ -266,6 +269,8 @@ class testHTTPServer_RequestHandler(BaseHTTPRequestHandler):
#Tech sub def - do item
################################
def URLItemDo(inURLItem,inRequest,inGlobalDict):
global gCacheDict
inResponseDict["Headers"]["Content-type"]= None
inResponseDict = inRequest.OpenRPAResponseDict
#Set status code 200
inResponseDict["StatusCode"] = 200
@ -274,11 +279,27 @@ class testHTTPServer_RequestHandler(BaseHTTPRequestHandler):
inResponseDict["Headers"]["Content-type"] = inURLItem["ResponseContentType"]
#If file path is set
if "ResponseFilePath" in inURLItem:
lFileObject = open(inURLItem["ResponseFilePath"], "rb")
# Write content as utf-8 data
inResponseDict["Body"] = lFileObject.read()
# Закрыть файловый объект
lFileObject.close()
# Check cache
if inURLItem.get("inUseCacheBool",False) == True:
if inURLItem["ResponseFilePath"] in gCacheDict:
# Write content as utf-8 data
inResponseDict["Body"] = gCacheDict[inURLItem["ResponseFilePath"]]
else:
lFileObject = open(inURLItem["ResponseFilePath"], "rb")
# Write content as utf-8 data
gCacheDict[inURLItem["ResponseFilePath"]] = lFileObject.read()
inResponseDict["Body"] = gCacheDict[inURLItem["ResponseFilePath"]]
# Закрыть файловый объект
lFileObject.close()
else:
lFileObject = open(inURLItem["ResponseFilePath"], "rb")
# Write content as utf-8 data
inResponseDict["Body"] = lFileObject.read()
# Закрыть файловый объект
lFileObject.close()
# detect MIME type if none
if inResponseDict["Headers"]["Content-type"] is None:
inResponseDict["Headers"]["Content-type"]= mimetypes.guess_type(inURLItem["ResponseFilePath"])[0]
#If function is set
if "ResponseDefRequestGlobal" in inURLItem:
lDef = inURLItem["ResponseDefRequestGlobal"]
@ -290,6 +311,7 @@ class testHTTPServer_RequestHandler(BaseHTTPRequestHandler):
else:
inURLItem["ResponseDefRequestGlobal"]()
if "ResponseFolderPath" in inURLItem:
#lRequestPath = inRequest.path
lRequestPath = urllib.parse.unquote(inRequest.path)
if inURLItem["URL"][-1]!="/": inURLItem["URL"]+= "/" # Fix for settings
@ -298,12 +320,30 @@ class testHTTPServer_RequestHandler(BaseHTTPRequestHandler):
#print(f"File full path {lFilePath}")
#Check if file exist
if os.path.exists(lFilePath) and os.path.isfile(lFilePath):
lFileObject = open(lFilePath, "rb")
# Write content as utf-8 data
inResponseDict["Body"] = lFileObject.read()
inResponseDict["ContentType"]= "application/octet-stream"
# Закрыть файловый объект
lFileObject.close()
# Check cache
if inURLItem.get("inUseCacheBool",False) == True:
if lFilePath in gCacheDict:
# Write content as utf-8 data
inResponseDict["Body"] = gCacheDict[lFilePath]
else:
lFileObject = open(lFilePath, "rb")
# Write content as utf-8 data
gCacheDict[lFilePath] = lFileObject.read()
inResponseDict["Body"] = gCacheDict[lFilePath]
# Закрыть файловый объект
lFileObject.close()
else:
lFileObject = open(lFilePath, "rb")
# Write content as utf-8 data
inResponseDict["Body"] = lFileObject.read()
# Закрыть файловый объект
lFileObject.close()
# detect MIME type if none
if inResponseDict["Headers"]["Content-type"] is None:
inResponseDict["Headers"]["Content-type"]= mimetypes.guess_type(lFilePath)[0]
# If No content-type
if inResponseDict["Headers"]["Content-type"] is None:
inResponseDict["Headers"]["Content-type"]= "application/octet-stream"
##############################################
# UAC Check
if inOnlyFlagUACBool == True and inURLItem.get("UACBool",None) in [None, True]:

@ -880,7 +880,7 @@ def WebURLConnectDef(inMethodStr, inURLStr, inMatchTypeStr, inDef, inContentType
inGSettings["ServerDict"]["URLList"].append(lURLItemDict)
def WebURLConnectFolder(inMethodStr, inURLStr, inMatchTypeStr, inFolderPathStr, inGSettings = None, inUACBool = None):
def WebURLConnectFolder(inMethodStr, inURLStr, inMatchTypeStr, inFolderPathStr, inGSettings = None, inUACBool = None, inUseCacheBool= False):
"""
Connect URL to Folder
"inMethodStr":"GET|POST",
@ -895,6 +895,7 @@ def WebURLConnectFolder(inMethodStr, inURLStr, inMatchTypeStr, inFolderPathStr,
:param inMatchTypeStr:
:param inFolderPathStr:
:param inUACBool: default: None; True - check user access before do this URL item. None - get Server flag if ask user
:param inUseCacheBool: True - cache this page - dont open ever
"""
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
# Check if last symbol is "/" - append if not exist
@ -909,12 +910,13 @@ def WebURLConnectFolder(inMethodStr, inURLStr, inMatchTypeStr, inFolderPathStr,
"ResponseFolderPath": lFolderPathStr, # Absolute or relative path
"ResponseContentType": "application/octet-stream", #HTTP Content-type
#"ResponseDefRequestGlobal": inDef #Function with str result
"UACBool": inUACBool
"UACBool": inUACBool,
"UseCacheBool": inUseCacheBool
}
inGSettings["ServerDict"]["URLList"].append(lURLItemDict)
def WebURLConnectFile(inMethodStr, inURLStr, inMatchTypeStr, inFilePathStr, inContentTypeStr="application/octet-stream", inGSettings = None, inUACBool = None):
def WebURLConnectFile(inMethodStr, inURLStr, inMatchTypeStr, inFilePathStr, inContentTypeStr="application/octet-stream", inGSettings = None, inUACBool = None, inUseCacheBool = False):
"""
Connect URL to File
"inMethodStr":"GET|POST",
@ -929,6 +931,7 @@ def WebURLConnectFile(inMethodStr, inURLStr, inMatchTypeStr, inFilePathStr, inCo
:param inFilePathStr:
:param inContentTypeStr:
:param inUACBool: default: None; True - check user access before do this URL item. None - get Server flag if ask user
:param inUseCacheBool: True - cache this page - dont open ever
"""
inGSettings = GSettingsGet(inGSettings=inGSettings) # Set the global settings
lURLItemDict = {
@ -939,7 +942,8 @@ def WebURLConnectFile(inMethodStr, inURLStr, inMatchTypeStr, inFilePathStr, inCo
#"ResponseFolderPath": os.path.abspath(inFilePathStr), # Absolute or relative path
"ResponseContentType": inContentTypeStr, #HTTP Content-type
#"ResponseDefRequestGlobal": inDef #Function with str result
"UACBool":inUACBool
"UACBool":inUACBool,
"UseCacheBool": inUseCacheBool
}
inGSettings["ServerDict"]["URLList"].append(lURLItemDict)

@ -70,7 +70,7 @@ def ConsoleVerify() -> bool:
Цифровой сертификат pyOpenRPA не обнаружен.
Получить или проверить сертификат, а также ознакомиться с текстом лицензионного соглашения Вы можете по адресу:
https://pyopenrpa.ru/certificate
https://pyopenrpa.ru/verification
Операция формирования сертификата является автоматизированной и занимает несколько секунд.
pyOpenRPA не использует какие-либо инструменты физической блокировки функциональности своего ПО.
@ -89,7 +89,7 @@ https://pyopenrpa.ru/Index/pyOpenRPA_product_service.pdf
Обнаружен цифровой сертификат pyOpenRPA: {0}.
Проверить сертификат, а также ознакомиться с текстом лицензионного соглашения Вы можете по адресу:
https://pyopenrpa.ru/certificate
https://pyopenrpa.ru/verification
pyOpenRPA не использует какие-либо инструменты физической блокировки функциональности своего ПО.
По всем вопросам Вы можете обратиться к правообладателю, контакты см. по адресу:
@ -143,7 +143,7 @@ pyOpenRPA - это открытое программное обеспечени
Данный сертификат является свидетельством того, что Вы наделены правами в отношении pyOpenRPA в соответствии с законодательством Российской Федерации.
Получить или проверить сертификат, а также ознакомиться с текстом лицензионного соглашения Вы можете по адресу:
https://pyopenrpa.ru/certificate
https://pyopenrpa.ru/verification
Операция формирования сертификата является автоматизированной и занимает несколько секунд.
pyOpenRPA не использует какие-либо инструменты физической блокировки функциональности своего ПО.

@ -1,6 +1,8 @@
[1.2.12]
2022_Q2
- ORCHESTRATOR
- - WebURL... Support inUseCacheBool - cache the web pages
- - Web server auto detect MIME type from the file name
- - Raise debug session from production. Support init_debug file in working directory
- - MANAGERS
- - - ControlPanel

Loading…
Cancel
Save