Skip to content

Commit fea52b1

Browse files
committed
Added file_metadata parameter to import_one and createDocument to set mainfile metadata
1 parent 392888c commit fea52b1

File tree

3 files changed

+40
-7
lines changed

3 files changed

+40
-7
lines changed

CHANGES.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ Changelog
44
1.3.2 (unreleased)
55
------------------
66

7-
- Nothing changed yet.
7+
- Added file_metadata parameter to import_one and createDocument to set mainfile metadata.
8+
[chris-adam]
89

910

1011
1.3.1 (2024-06-06)

src/collective/dms/batchimport/batchimport.py

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,17 @@ def __call__(self):
8888
foldername = basename[len(self.fs_root_directory) :]
8989

9090
metadata = json.load(file(metadata_filepath))
91+
file_metadata = {}
92+
for md in metadata:
93+
if md.startswith("file_"):
94+
file_metadata[md[5:]] = metadata[md]
95+
del metadata[md]
9196

9297
imported_filename = os.path.splitext(filename)[0]
9398
filepath = os.path.join(basename, imported_filename)
9499

95100
try:
96-
self.import_one(filepath, foldername, metadata)
101+
self.import_one(filepath, foldername, metadata, file_metadata)
97102
except BatchImportError as e:
98103
log.warning("error importing %s (%s)" % (os.path.join(foldername, filename), str(e)))
99104
nb_errors += 1
@@ -142,7 +147,7 @@ def convertTitleToId(self, title):
142147
newid = queryUtility(IIDNormalizer).normalize(title)
143148
return newid
144149

145-
def import_one(self, filepath, foldername, metadata=None):
150+
def import_one(self, filepath, foldername, metadata=None, file_metadata=None):
146151
try:
147152
folder = self.get_folder(foldername)
148153
except AttributeError:
@@ -163,7 +168,15 @@ def import_one(self, filepath, foldername, metadata=None):
163168
raise BatchImportError("document already exists")
164169

165170
document_file = NamedBlobFile(file(filepath).read(), filename=unicode(filename))
166-
utils.createDocument(self, folder, portal_type, document_id, document_file, metadata=metadata)
171+
utils.createDocument(
172+
self,
173+
folder,
174+
portal_type,
175+
document_id,
176+
document_file,
177+
metadata=metadata,
178+
file_metadata=file_metadata,
179+
)
167180

168181

169182
class ControlPanelEditForm(controlpanel.RegistryEditForm):

src/collective/dms/batchimport/utils.py

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,15 @@
2222

2323

2424
def createDocument(
25-
context, folder, portal_type, title, file_object, mainfile_type="dmsmainfile", owner=None, metadata=None
25+
context,
26+
folder,
27+
portal_type,
28+
title,
29+
file_object,
30+
mainfile_type="dmsmainfile",
31+
owner=None,
32+
metadata=None,
33+
file_metadata=None,
2634
):
2735
if owner is None:
2836
owner = api.user.get_current().id
@@ -55,10 +63,21 @@ def createDocument(
5563
)
5664
)
5765

58-
file_title = _("Scanned Mail")
66+
if not file_metadata:
67+
file_metadata = {}
68+
# title
5969
if "file_title" in metadata:
6070
file_title = metadata["file_title"]
6171
del metadata["file_title"]
72+
if "title" not in file_metadata:
73+
file_title = _("Scanned Mail")
74+
file_metadata["title"] = file_title
75+
# portal_type
76+
if mainfile_type:
77+
file_metadata["portal_type"] = mainfile_type
78+
# file
79+
if file_object:
80+
file_metadata["file"] = file_object
6281

6382
with api.env.adopt_user(username=owner):
6483
document = createContentInContainer(folder, portal_type, **metadata)
@@ -67,6 +86,6 @@ def createDocument(
6786
if IDeadline and IDeadline.providedBy(document):
6887
document.deadline = deadlineDefaultValue(None)
6988

70-
version = createContentInContainer(document, mainfile_type, title=file_title, file=file_object)
89+
version = createContentInContainer(document, **file_metadata)
7190
log.info("file document has been created (id: %s)" % version.id)
7291
return (document, version)

0 commit comments

Comments
 (0)