Skip to content

Commit 578bb77

Browse files
committed
[FIX] dms_import: fallback too large image error
1 parent f3bb1f7 commit 578bb77

File tree

3 files changed

+56
-12
lines changed

3 files changed

+56
-12
lines changed

dms_import/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
from . import models
22

33
from .hooks import post_init_hook
4+
from .hooks import post_load_hook

dms_import/__manifest__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,5 @@
1414
"depends": ["dms"],
1515
"external_dependencies": {"python": ["pathvalidate", "openupgradelib"]},
1616
"post_init_hook": "post_init_hook",
17+
"post_load": "post_load_hook",
1718
}

dms_import/hooks.py

Lines changed: 54 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,16 @@
99

1010
from openupgradelib import openupgrade
1111
from pathvalidate import sanitize_filename
12+
from PIL import Image
1213
from psycopg2.sql import SQL, Identifier
1314

1415
from odoo import SUPERUSER_ID, Command, api, models
16+
from odoo.exceptions import UserError
1517
from odoo.tools import table_exists
1618
from odoo.tools.misc import get_lang, split_every
1719

20+
from odoo.addons.dms.models.dms_file import File
21+
1822
from .tools import file
1923

2024
_logger = logging.getLogger(__name__)
@@ -416,12 +420,24 @@ def migrate_documents_files(cr, env, folder_mapping, tag_mapping, batch_size):
416420
continue
417421
original_name = doc["name"]
418422
batch_original_names.append(original_name)
419-
sanitized_name = sanitize_filename(original_name, replacement_text="_")
420-
if not sanitized_name:
421-
sanitized_name = "Unnamed Document"
423+
if original_name.startswith(".") and len(original_name) > 1:
424+
base_name = "Unnamed Document"
425+
extension = original_name
426+
else:
427+
base_name, extension = os.path.splitext(original_name)
428+
if not extension and base_name.startswith("."):
429+
base_name = "Unnamed Document"
430+
extension = original_name
431+
elif not base_name:
432+
base_name = "Unnamed Document"
433+
sanitized_base = sanitize_filename(base_name, replacement_text="_")
434+
sanitized_ext = sanitize_filename(extension, replacement_text="_")
435+
if not sanitized_base:
436+
sanitized_base = "Unnamed Document"
437+
sanitized_name = f"{sanitized_base}{sanitized_ext}"
422438
if original_name != sanitized_name:
423439
_logger.debug(
424-
"Sanitized filename: '%s' -> '%s'", original_name, sanitized_name
440+
"Sanitized filename: '%s' to '%s'", original_name, sanitized_name
425441
)
426442
names_in_directory = existing_names_by_dir[directory_id]
427443
unique_name = file.unique_name_new(
@@ -432,15 +448,13 @@ def migrate_documents_files(cr, env, folder_mapping, tag_mapping, batch_size):
432448
mimetype = att_data.get("mimetype") if att_data else None
433449
file_size = att_data.get("file_size") if att_data else 0
434450
checksum = att_data.get("checksum") if att_data else None
435-
extension = None
436-
if mimetype:
451+
extension_str = sanitized_ext[1:].strip().lower() if sanitized_ext else ""
452+
if not extension_str and mimetype:
437453
guessed_ext = mimetypes.guess_extension(mimetype)
438454
if guessed_ext:
439-
extension = guessed_ext[1:].strip().lower()
440-
if not extension and original_name:
441-
extension = os.path.splitext(original_name)[1][1:].strip().lower()
442-
if not extension:
443-
extension = "bin"
455+
extension_str = guessed_ext[1:].strip().lower()
456+
if not extension_str:
457+
extension_str = "bin"
444458
file_vals = {
445459
"name": unique_name,
446460
"directory_id": directory_id,
@@ -488,7 +502,7 @@ def migrate_documents_files(cr, env, folder_mapping, tag_mapping, batch_size):
488502
"""
489503
).format(cases=SQL(" ").join(case_clauses))
490504

491-
openupgrade.logged_query(cr, query, params)
505+
cr.execute(query, params)
492506
except Exception:
493507
_logger.exception("A critical error occurred during batch creation")
494508
for name in batch_original_names:
@@ -532,3 +546,31 @@ def post_init_hook(cr, registry):
532546
except Exception:
533547
_logger.exception("Migration from 'documents' to 'dms' failed!")
534548
raise
549+
550+
551+
def post_load_hook():
552+
@api.depends("mimetype", "content")
553+
def _compute_image_1920_new(self):
554+
"""Provide thumbnail automatically if possible."""
555+
for one in self.filtered("mimetype"):
556+
if one.mimetype != "application/pdf" and one.mimetype in (
557+
*Image.MIME.values(),
558+
"image/svg+xml",
559+
):
560+
# catch this error: https://github.com/odoo/odoo/blob/c27d978a/odoo/tools/image.py#L94
561+
# start hooks
562+
try:
563+
one.image_1920 = one.content
564+
except (UserError, TypeError) as e:
565+
_logger.warning(
566+
"Failed to generate image_1920 for file %s (ID %s): ",
567+
one.name,
568+
one.id,
569+
str(e),
570+
)
571+
one.image_1920 = False
572+
# end hooks
573+
574+
if not hasattr(File, "_compute_image_1920_origin"):
575+
File._compute_image_1920_origin = File._compute_image_1920
576+
File._compute_image_1920 = _compute_image_1920_new

0 commit comments

Comments
 (0)