From a3a3d2002e5de09cf957006c7a417803e5a50114 Mon Sep 17 00:00:00 2001 From: Frederik Jaeckel Date: Tue, 29 Nov 2022 10:30:39 +0100 Subject: [PATCH 1/8] fix: exception beim hochladen eines unbekannten bildtypes --- .hgignore | 3 +++ line.py | 7 +++++-- locale/de.po | 4 ++++ locale/en.po | 4 ++++ message.xml | 3 +++ 5 files changed, 19 insertions(+), 2 deletions(-) diff --git a/.hgignore b/.hgignore index 1b85cd9..913ee1b 100644 --- a/.hgignore +++ b/.hgignore @@ -1,3 +1,6 @@ syntax: glob __pycache__/* locale/convert_de2en.py +build/* +mds_cashbook_media.egg-info/* +dist/* diff --git a/line.py b/line.py index a7a482d..3949a8b 100644 --- a/line.py +++ b/line.py @@ -5,7 +5,7 @@ import mimetypes, magic from io import BytesIO -from PIL import Image +from PIL import Image, UnidentifiedImageError from trytond.model import fields from trytond.pool import Pool, PoolMeta from trytond.config import config @@ -65,7 +65,10 @@ class Line(metaclass=PoolMeta): """ image_data2 = None with BytesIO(image_data) as fhdl: - image = Image.open(fhdl, 'r') + try : + image = Image.open(fhdl, 'r') + except UnidentifiedImageError: + raise UserError(gettext('cashbook_media.msg_file_unknown_type')) (width, height) = image.size if (width > image_limit) or (height > image_limit): diff --git a/locale/de.po b/locale/de.po index 69df498..052a9fb 100644 --- a/locale/de.po +++ b/locale/de.po @@ -14,6 +14,10 @@ msgctxt "model:ir.message,text:msg_file_invalid_mime" msgid "The file type '%(fmime)s' of the record '%(recname)s' is not allowed. (allowed: PNG, JPG, PDF)" msgstr "Der Dateityp '%(fmime)s' des Datensatzes '%(recname)s' ist nicht zugelassen. (erlaubt: PNG, JPG, PDF)" +msgctxt "model:ir.message,text:msg_file_unknown_type" +msgid "cannot identify image file" +msgstr "Bilddatei kann nicht identifiziert werden" + ################# # cashbook.line # diff --git a/locale/en.po b/locale/en.po index 956e614..5ff9df6 100644 --- a/locale/en.po +++ b/locale/en.po @@ -10,6 +10,10 @@ msgctxt "model:ir.message,text:msg_file_invalid_mime" msgid "The file type '%(fmime)s' of the record '%(recname)s' is not allowed. (allowed: PNG, JPG, PDF)" msgstr "The file type '%(fmime)s' of the record '%(recname)s' is not allowed. (allowed: PNG, JPG, PDF)" +msgctxt "model:ir.message,text:msg_file_unknown_type" +msgid "cannot identify image file" +msgstr "cannot identify image file" + msgctxt "view:cashbook.line:" msgid "Image/PDF" msgstr "Image/PDF" diff --git a/message.xml b/message.xml index d88ff9a..3582d1e 100644 --- a/message.xml +++ b/message.xml @@ -11,6 +11,9 @@ full copyright notices and license terms. --> The file type '%(fmime)s' of the record '%(recname)s' is not allowed. (allowed: PNG, JPG, PDF) + + cannot identify image file + From 40a3f4b08276940b2521d703dd123d5758d2a478 Mon Sep 17 00:00:00 2001 From: Frederik Jaeckel Date: Fri, 30 Dec 2022 23:02:04 +0100 Subject: [PATCH 2/8] depends korrigiert --- line.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/line.py b/line.py index 3949a8b..5569506 100644 --- a/line.py +++ b/line.py @@ -28,17 +28,23 @@ except : image_limit = 2000 +STATES2 = {} +STATES2.update(STATES) +DEPENDS2 = [] +DEPENDS2.extend(DEPENDS) + + class Line(metaclass=PoolMeta): __name__ = 'cashbook.line' media = fields.Binary(string='Image of PDF', filename='media_name', file_id='media_id', store_prefix=store_prefix, - states=STATES, depends=DEPENDS) + states=STATES2, depends=DEPENDS2) media_name = fields.Char(string='File name', states={ 'required': Bool(Eval('media')), - 'readonly': STATES['readonly'], - }, depends=DEPENDS) + 'readonly': STATES2['readonly'], + }, depends=DEPENDS2) media_id = fields.Char(string='File ID', readonly=True) media_mime = fields.Char(string='MIME', readonly=True) media_size = fields.Integer(string='File size', readonly=True) From 336d1c74f98ed55086b50c30b1bbb15d364d48fb Mon Sep 17 00:00:00 2001 From: Frederik Jaeckel Date: Mon, 23 Jan 2023 13:11:54 +0100 Subject: [PATCH 3/8] line: show image in tab 'image/pdf' --- line.py | 12 ++++++++++++ locale/de.po | 3 +++ view/line_form.xml | 2 +- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/line.py b/line.py index 5569506..34e32af 100644 --- a/line.py +++ b/line.py @@ -48,6 +48,18 @@ class Line(metaclass=PoolMeta): media_id = fields.Char(string='File ID', readonly=True) media_mime = fields.Char(string='MIME', readonly=True) media_size = fields.Integer(string='File size', readonly=True) + media_image = fields.Function(fields.Binary(string='Image', readonly=True, + states={ + 'invisible': ~Eval('media_mime', '').in_(['image/png', 'image/jpg', 'image/jpeg']), + }, depends=['media_mime']), + 'on_change_with_media_image') + + @fields.depends('media', 'media_mime') + def on_change_with_media_image(self, name=True): + """ return binary if its a image + """ + if (self.media_mime or '-').startswith('image/'): + return self.media @classmethod def _identify_file(cls, data, mime=True): diff --git a/locale/de.po b/locale/de.po index 052a9fb..7618e5c 100644 --- a/locale/de.po +++ b/locale/de.po @@ -46,3 +46,6 @@ msgctxt "field:cashbook.line,media_size:" msgid "File size" msgstr "Dateigröße" +msgctxt "field:cashbook.line,media_image:" +msgid "Image" +msgstr "Bild" diff --git a/view/line_form.xml b/view/line_form.xml index 6785333..0d80ebc 100644 --- a/view/line_form.xml +++ b/view/line_form.xml @@ -13,10 +13,10 @@ full copyright notices and license terms. -->