Update tasks.py

consume each file of a zipped archive
This commit is contained in:
Thomas 2023-11-02 16:44:35 +01:00 committed by GitHub
parent 899c802c9b
commit 152644e239
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -163,24 +163,61 @@ def consume_file(
overrides.update(template_overrides) overrides.update(template_overrides)
# continue with consumption if no barcode was found document = None
document = Consumer().try_consume_file(
input_doc.original_file, import magic
override_filename=overrides.filename, import zipfile
override_title=overrides.title,
override_correspondent_id=overrides.correspondent_id, mime_type = magic.from_file(input_doc.original_file, mime=True)
override_document_type_id=overrides.document_type_id, if mime_type == "application/zip":
override_tag_ids=overrides.tag_ids, with zipfile.ZipFile(input_doc.original_file, "r") as zip_ref:
override_storage_path_id=overrides.storage_path_id, for member in zip_ref.namelist():
override_created=overrides.created, filename = os.path.basename(member)
override_asn=overrides.asn, # skip directories
override_owner_id=overrides.owner_id, if not filename:
override_view_users=overrides.view_users, continue
override_view_groups=overrides.view_groups,
override_change_users=overrides.change_users, # copy file (taken from zipfile's extract)
override_change_groups=overrides.change_groups, try:
task_id=self.request.id, source = zip_ref.open(member)
) target = open(os.path.join(input_doc.original_file.parent, filename), "wb")
logger.info(f"extracting {filename} from zipfile {path}")
with source, target:
shutil.copyfileobj(source, target)
# continue with consumption if no barcode was found
document = Consumer().try_consume_file(
os.path.join(input_doc.original_file.parent, filename),
override_filename=override_filename,
override_title=override_title,
override_correspondent_id=override_correspondent_id,
override_document_type_id=override_document_type_id,
override_tag_ids=override_tag_ids,
task_id=task_id,
override_created=override_created,
override_date_of_receipt=override_date_of_receipt,
override_asn=asn,
)
except Exception as e:
logger.warning("error extracting zipfile: " + str(e))
else:
# continue with consumption if no barcode was found
document = Consumer().try_consume_file(
input_doc.original_file,
override_filename=overrides.filename,
override_title=overrides.title,
override_correspondent_id=overrides.correspondent_id,
override_document_type_id=overrides.document_type_id,
override_tag_ids=overrides.tag_ids,
override_storage_path_id=overrides.storage_path_id,
override_created=overrides.created,
override_asn=overrides.asn,
override_owner_id=overrides.owner_id,
override_view_users=overrides.view_users,
override_view_groups=overrides.view_groups,
override_change_users=overrides.change_users,
override_change_groups=overrides.change_groups,
task_id=self.request.id,
)
if document: if document:
return f"Success. New document id {document.pk} created" return f"Success. New document id {document.pk} created"