Hallo,
ich erstelle in einer function eine Datei, die ich dann als Attachment einem DocType hinzufüge. Leider wird dabei immer automatisch ein Teil des Content-Hashs an den Dateinamen angehängt. Beispiel:
from frappe.utils.file_manager import save_file
with open("/home/frappe/mein_attachment.txt", "rb") as f:
save_file("mein_attachment.txt", f.read(), "Purchase Order", "PUR-ORD-2023-00010-1", is_private=True)
Und das wird dann daraus:
Ich würde gern die automatische Namensergänzung unterdrücken.
Diese ist allerdings tief in files.py implementiert, und ich habe keinen Weg gefunden, sie über die Parameter von save_file() zu unterdrücken.
Um die Eindeutigkeit des Dateinamens kann ich mich selbst kümmern.
Kennt jemand eine andere Möglichkeit, um ein File anzulegen, ohne das der Dateiname automatisch ergänzt wird?
Workaround: Nach dem Speichern Datei wieder umbenennen und auch das von save_file() gelieferte File-Objekt anpassen:
def get_site_name():
"""
Liefert den Namen der aktuellen Site, z.B. erpnextdevelop.schloss.ituc.de
"""
return frappe.utils.cstr(frappe.local.site)
def get_site_path():
"""
Liefert den Dateipfad der aktuellen Site, z.B. /home/frappe/frappe-bench/sites/erpnextdevelop.schloss.ituc.de
"""
return f"{os.getcwd()}/{get_site_name()}"
file = save_file(file_name, content, doctype, name, df=field, is_private=True)
if file.file_name != file_name:
# Patch: save_file() fügt Hash an Dateinamen an, das wollen wir nicht
os.rename(f"{get_site_path()}{file.file_url}", f"{get_site_path()}/private/files/{file_name}")
file.file_name = file_name
file.file_url = f"/private/files/{file_name}"
file.save (ignore_permissions=True, ignore_version=True)
Dies löst auch das hier beschriebene Problem: save_file creates unwanted duplicates in file system · Issue #26558 · frappe/frappe (github.com)