From 26b108b7ec927beb6c783fcb6c127fde898d3e64 Mon Sep 17 00:00:00 2001 From: dobri1408 <50819975+dobri1408@users.noreply.github.com> Date: Tue, 23 Jul 2024 13:43:39 +0300 Subject: [PATCH 1/6] Update svg_utils.py to look for viewbox also --- plone/namedfile/utils/svg_utils.py | 47 ++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/plone/namedfile/utils/svg_utils.py b/plone/namedfile/utils/svg_utils.py index 59c8dd50..105cd93f 100644 --- a/plone/namedfile/utils/svg_utils.py +++ b/plone/namedfile/utils/svg_utils.py @@ -7,6 +7,31 @@ log = getLogger(__name__) +def dimension_int(dimension): + if isinstance(dimension, str): + try: + _dimension = int(float(re.sub(r"[^\d\.]", "", dimension))) + except ValueError: + _dimension = 0 + elif isinstance(dimension, int): + _dimension = dimension + elif isinstance(dimension, float): + _dimension = int(dimension) + else: + _dimension = 0 + + return _dimension + + +def calculate_dimensions_from_viewbox(view_box): + parts = [float(x) for x in view_box.split()] + print(f"Parsed viewBox parts: {parts}") + if len(parts) == 4: + width = int(parts[2] - parts[0]) + height = int(parts[3] - parts[1]) + return width, height + return 1, 1 + def process_svg(data): content_type = None @@ -15,12 +40,18 @@ def process_svg(data): size = len(data) tag = None + view_box = None try: for event, el in et.iterparse(BytesIO(data), ("start",)): tag = el.tag w = dimension_int(el.attrib.get("width")) h = dimension_int(el.attrib.get("height")) + view_box = el.attrib.get("viewBox") break + + if (w == 0 or h == 0) and view_box: + w, h = calculate_dimensions_from_viewbox(view_box) + print(w,h) w = w if w > 1 else 1 h = h if h > 1 else 1 except et.ParseError as e: @@ -33,19 +64,3 @@ def process_svg(data): content_type = "image/svg+xml" return content_type, w, h - - -def dimension_int(dimension): - if isinstance(dimension, str): - try: - _dimension = int(float(re.sub(r"[^\d\.]", "", dimension))) - except ValueError: - _dimension = 0 - elif isinstance(dimension, int): - _dimension = dimension - elif isinstance(dimension, float): - _dimension = int(dimension) - else: - _dimension = 0 - - return _dimension From 0ed951f25ed8204eb9c080a38c9e0c142646d744 Mon Sep 17 00:00:00 2001 From: dobri1408 <50819975+dobri1408@users.noreply.github.com> Date: Tue, 23 Jul 2024 13:49:33 +0300 Subject: [PATCH 2/6] Update svg_utils.py --- plone/namedfile/utils/svg_utils.py | 32 +++++++++++++++--------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/plone/namedfile/utils/svg_utils.py b/plone/namedfile/utils/svg_utils.py index 105cd93f..875e47ea 100644 --- a/plone/namedfile/utils/svg_utils.py +++ b/plone/namedfile/utils/svg_utils.py @@ -7,22 +7,6 @@ log = getLogger(__name__) -def dimension_int(dimension): - if isinstance(dimension, str): - try: - _dimension = int(float(re.sub(r"[^\d\.]", "", dimension))) - except ValueError: - _dimension = 0 - elif isinstance(dimension, int): - _dimension = dimension - elif isinstance(dimension, float): - _dimension = int(dimension) - else: - _dimension = 0 - - return _dimension - - def calculate_dimensions_from_viewbox(view_box): parts = [float(x) for x in view_box.split()] print(f"Parsed viewBox parts: {parts}") @@ -64,3 +48,19 @@ def process_svg(data): content_type = "image/svg+xml" return content_type, w, h + + +def dimension_int(dimension): + if isinstance(dimension, str): + try: + _dimension = int(float(re.sub(r"[^\d\.]", "", dimension))) + except ValueError: + _dimension = 0 + elif isinstance(dimension, int): + _dimension = dimension + elif isinstance(dimension, float): + _dimension = int(dimension) + else: + _dimension = 0 + + return _dimension From 8b90cc6d04d9d60cca2dd3ea4013d38fda8d09f1 Mon Sep 17 00:00:00 2001 From: dobri1408 <50819975+dobri1408@users.noreply.github.com> Date: Tue, 23 Jul 2024 13:50:20 +0300 Subject: [PATCH 3/6] Update svg_utils.py --- plone/namedfile/utils/svg_utils.py | 1 - 1 file changed, 1 deletion(-) diff --git a/plone/namedfile/utils/svg_utils.py b/plone/namedfile/utils/svg_utils.py index 875e47ea..9602c561 100644 --- a/plone/namedfile/utils/svg_utils.py +++ b/plone/namedfile/utils/svg_utils.py @@ -35,7 +35,6 @@ def process_svg(data): if (w == 0 or h == 0) and view_box: w, h = calculate_dimensions_from_viewbox(view_box) - print(w,h) w = w if w > 1 else 1 h = h if h > 1 else 1 except et.ParseError as e: From f8c49bee5a0df1efb313cab6818d2a81c1e0c513 Mon Sep 17 00:00:00 2001 From: dobri1408 <50819975+dobri1408@users.noreply.github.com> Date: Tue, 23 Jul 2024 13:50:33 +0300 Subject: [PATCH 4/6] Update svg_utils.py --- plone/namedfile/utils/svg_utils.py | 1 - 1 file changed, 1 deletion(-) diff --git a/plone/namedfile/utils/svg_utils.py b/plone/namedfile/utils/svg_utils.py index 9602c561..2180f7f3 100644 --- a/plone/namedfile/utils/svg_utils.py +++ b/plone/namedfile/utils/svg_utils.py @@ -9,7 +9,6 @@ def calculate_dimensions_from_viewbox(view_box): parts = [float(x) for x in view_box.split()] - print(f"Parsed viewBox parts: {parts}") if len(parts) == 4: width = int(parts[2] - parts[0]) height = int(parts[3] - parts[1]) From 9e056c51405c78496cc11e05383c9f61b1fff254 Mon Sep 17 00:00:00 2001 From: dobri1408 <50819975+dobri1408@users.noreply.github.com> Date: Tue, 23 Jul 2024 13:52:54 +0300 Subject: [PATCH 5/6] Create 161.bugfix --- news/161.bugfix | 1 + 1 file changed, 1 insertion(+) create mode 100644 news/161.bugfix diff --git a/news/161.bugfix b/news/161.bugfix new file mode 100644 index 00000000..90ad8cac --- /dev/null +++ b/news/161.bugfix @@ -0,0 +1 @@ +Fix: Upload a svg without width and height set @dobri1408 From e94e42f3c687c37df1d898cd38b2633422489205 Mon Sep 17 00:00:00 2001 From: dobri1408 <50819975+dobri1408@users.noreply.github.com> Date: Tue, 23 Jul 2024 14:06:53 +0300 Subject: [PATCH 6/6] Update svg_utils.py --- plone/namedfile/utils/svg_utils.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/plone/namedfile/utils/svg_utils.py b/plone/namedfile/utils/svg_utils.py index 2180f7f3..33e36176 100644 --- a/plone/namedfile/utils/svg_utils.py +++ b/plone/namedfile/utils/svg_utils.py @@ -10,9 +10,7 @@ def calculate_dimensions_from_viewbox(view_box): parts = [float(x) for x in view_box.split()] if len(parts) == 4: - width = int(parts[2] - parts[0]) - height = int(parts[3] - parts[1]) - return width, height + return int(parts[2]), int(parts[3]) return 1, 1