fixed type defintion error in datafiles (issue with fileName)
This commit is contained in:
parent
548762c446
commit
bf91207b55
2 changed files with 48 additions and 19 deletions
|
|
@ -350,6 +350,9 @@ class ComponentObjects:
|
||||||
# If fileName is provided, check for exact name+hash match first
|
# If fileName is provided, check for exact name+hash match first
|
||||||
if fileName:
|
if fileName:
|
||||||
for file in accessibleFiles:
|
for file in accessibleFiles:
|
||||||
|
# Skip files without fileName key or with None/empty fileName
|
||||||
|
if "fileName" not in file or not file["fileName"]:
|
||||||
|
continue
|
||||||
if file["fileName"] == fileName:
|
if file["fileName"] == fileName:
|
||||||
return FileItem(
|
return FileItem(
|
||||||
id=file["id"],
|
id=file["id"],
|
||||||
|
|
@ -361,16 +364,24 @@ class ComponentObjects:
|
||||||
creationDate=file["creationDate"]
|
creationDate=file["creationDate"]
|
||||||
)
|
)
|
||||||
|
|
||||||
# Return first file with matching hash (for general duplicate detection)
|
# Return first valid file with matching hash (for general duplicate detection)
|
||||||
return FileItem(
|
for file in accessibleFiles:
|
||||||
id=accessibleFiles[0]["id"],
|
# Skip files without fileName key or with None/empty fileName
|
||||||
mandateId=accessibleFiles[0]["mandateId"],
|
if "fileName" not in file or not file["fileName"]:
|
||||||
fileName=accessibleFiles[0]["fileName"],
|
continue
|
||||||
mimeType=accessibleFiles[0]["mimeType"],
|
# Use first valid file
|
||||||
fileHash=accessibleFiles[0]["fileHash"],
|
return FileItem(
|
||||||
fileSize=accessibleFiles[0]["fileSize"],
|
id=file["id"],
|
||||||
creationDate=accessibleFiles[0]["creationDate"]
|
mandateId=file["mandateId"],
|
||||||
)
|
fileName=file["fileName"],
|
||||||
|
mimeType=file["mimeType"],
|
||||||
|
fileHash=file["fileHash"],
|
||||||
|
fileSize=file["fileSize"],
|
||||||
|
creationDate=file["creationDate"]
|
||||||
|
)
|
||||||
|
|
||||||
|
# If no valid files found, return None
|
||||||
|
return None
|
||||||
|
|
||||||
def getMimeType(self, fileName: str) -> str:
|
def getMimeType(self, fileName: str) -> str:
|
||||||
"""Determines the MIME type based on the file extension."""
|
"""Determines the MIME type based on the file extension."""
|
||||||
|
|
@ -454,15 +465,23 @@ class ComponentObjects:
|
||||||
fileItems = []
|
fileItems = []
|
||||||
for file in filteredFiles:
|
for file in filteredFiles:
|
||||||
try:
|
try:
|
||||||
|
# Ensure proper values, use defaults for invalid data
|
||||||
|
creationDate = file.get("creationDate")
|
||||||
|
if creationDate is None or not isinstance(creationDate, (int, float)) or creationDate <= 0:
|
||||||
|
creationDate = get_utc_timestamp()
|
||||||
|
|
||||||
|
fileName = file.get("fileName")
|
||||||
|
if not fileName or fileName == "None":
|
||||||
|
continue # Skip records with invalid fileName
|
||||||
|
|
||||||
fileItem = FileItem(
|
fileItem = FileItem(
|
||||||
id=file.get("id"),
|
id=file.get("id"),
|
||||||
mandateId=file.get("mandateId"),
|
mandateId=file.get("mandateId"),
|
||||||
fileName=file.get("fileName"),
|
fileName=fileName,
|
||||||
mimeType=file.get("mimeType"),
|
mimeType=file.get("mimeType"),
|
||||||
workflowId=file.get("workflowId"),
|
|
||||||
fileHash=file.get("fileHash"),
|
fileHash=file.get("fileHash"),
|
||||||
fileSize=file.get("fileSize"),
|
fileSize=file.get("fileSize"),
|
||||||
creationDate=file.get("creationDate")
|
creationDate=creationDate
|
||||||
)
|
)
|
||||||
fileItems.append(fileItem)
|
fileItems.append(fileItem)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|
@ -511,6 +530,9 @@ class ComponentObjects:
|
||||||
|
|
||||||
# Check if fileName exists (excluding the current file if updating)
|
# Check if fileName exists (excluding the current file if updating)
|
||||||
for file in files:
|
for file in files:
|
||||||
|
# Skip files without fileName key or with None/empty fileName
|
||||||
|
if "fileName" not in file or not file["fileName"]:
|
||||||
|
continue
|
||||||
if file["fileName"] == fileName and (excludeFileId is None or file["id"] != excludeFileId):
|
if file["fileName"] == fileName and (excludeFileId is None or file["id"] != excludeFileId):
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
@ -544,9 +566,12 @@ class ComponentObjects:
|
||||||
fileSize = len(content)
|
fileSize = len(content)
|
||||||
fileHash = hashlib.sha256(content).hexdigest()
|
fileHash = hashlib.sha256(content).hexdigest()
|
||||||
|
|
||||||
|
# Ensure mandateId is valid
|
||||||
|
mandateId = self.currentUser.mandateId or "default"
|
||||||
|
|
||||||
# Create FileItem instance
|
# Create FileItem instance
|
||||||
fileItem = FileItem(
|
fileItem = FileItem(
|
||||||
mandateId=self.currentUser.mandateId,
|
mandateId=mandateId,
|
||||||
fileName=uniqueName,
|
fileName=uniqueName,
|
||||||
mimeType=mimeType,
|
mimeType=mimeType,
|
||||||
fileSize=fileSize,
|
fileSize=fileSize,
|
||||||
|
|
|
||||||
|
|
@ -84,13 +84,13 @@ async def upload_file(
|
||||||
)
|
)
|
||||||
|
|
||||||
# Save file via LucyDOM interface in the database
|
# Save file via LucyDOM interface in the database
|
||||||
fileItem, duplicateType = managementInterface.saveUploadedFile(fileContent, file.fileName)
|
fileItem, duplicateType = managementInterface.saveUploadedFile(fileContent, file.filename)
|
||||||
|
|
||||||
# Determine response message based on duplicate type
|
# Determine response message based on duplicate type
|
||||||
if duplicateType == "exact_duplicate":
|
if duplicateType == "exact_duplicate":
|
||||||
message = f"File '{file.fileName}' already exists with identical content. Reusing existing file."
|
message = f"File '{file.filename}' already exists with identical content. Reusing existing file."
|
||||||
elif duplicateType == "name_conflict":
|
elif duplicateType == "name_conflict":
|
||||||
message = f"File '{file.fileName}' already exists with different content. Uploaded as '{fileItem.fileName}'."
|
message = f"File '{file.filename}' already exists with different content. Uploaded as '{fileItem.fileName}'."
|
||||||
else: # new_file
|
else: # new_file
|
||||||
message = "File uploaded successfully"
|
message = "File uploaded successfully"
|
||||||
|
|
||||||
|
|
@ -108,7 +108,7 @@ async def upload_file(
|
||||||
"message": message,
|
"message": message,
|
||||||
"file": fileMeta,
|
"file": fileMeta,
|
||||||
"duplicateType": duplicateType,
|
"duplicateType": duplicateType,
|
||||||
"originalFileName": file.fileName,
|
"originalFileName": file.filename,
|
||||||
"storedFileName": fileItem.fileName,
|
"storedFileName": fileItem.fileName,
|
||||||
"isDuplicate": duplicateType != "new_file"
|
"isDuplicate": duplicateType != "new_file"
|
||||||
})
|
})
|
||||||
|
|
@ -313,11 +313,15 @@ async def download_file(
|
||||||
)
|
)
|
||||||
|
|
||||||
# Return file as response
|
# Return file as response
|
||||||
|
# Properly encode filename for Content-Disposition header to handle Unicode characters
|
||||||
|
import urllib.parse
|
||||||
|
encoded_filename = urllib.parse.quote(fileData.fileName)
|
||||||
|
|
||||||
return Response(
|
return Response(
|
||||||
content=fileContent,
|
content=fileContent,
|
||||||
media_type=fileData.mimeType,
|
media_type=fileData.mimeType,
|
||||||
headers={
|
headers={
|
||||||
"Content-Disposition": f"attachment; fileName={fileData.fileName}"
|
"Content-Disposition": f"attachment; filename*=UTF-8''{encoded_filename}"
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
except HTTPException:
|
except HTTPException:
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue