Skip to content

Commit c048f21

Browse files
Split svg_string from svg_path (#24)
* add * Update Cargo.lock * Update lib.rs * Update lib.rs * Update CI.yaml * add * Update CI.yaml * add * Update CI.yaml * add * add * add * Update CI.yaml * Update CI.yaml * Revert "Update CI.yaml" This reverts commit 93209d4. * Update CI.yaml * ad * Update CI.yaml * Update CI.yaml * add
1 parent b2211be commit c048f21

File tree

7 files changed

+41
-68
lines changed

7 files changed

+41
-68
lines changed

.github/dependabot.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ updates:
1010
schedule:
1111
interval: "monthly"
1212
open-pull-requests-limit: 100
13-
- package-ecosystem: "github-actions" # See documentation for possible values
14-
directory: "/" # Location of package manifests
15-
schedule:
16-
interval: "daily"
13+
# - package-ecosystem: "github-actions" # See documentation for possible values
14+
# directory: "/" # Location of package manifests
15+
# schedule:
16+
# interval: "daily"
1717
open-pull-requests-limit: 100
1818
- package-ecosystem: "pip" # See documentation for possible values
1919
directory: "/" # Location of package manifests

.github/workflows/CI.yaml

Lines changed: 5 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,27 @@
11
# This file is autogenerated by maturin v1.5.1
22
# To update, run
33
#
4-
# maturin generate-ci --pytest github
4+
# maturin generate-ci github
55
#
66
name: CI
77

88
on:
99
push:
1010
branches:
11-
- "*"
11+
- main
12+
- master
1213
tags:
1314
- '*'
1415
pull_request:
1516
workflow_dispatch:
1617

17-
env:
18-
RUST_BACKTRACE: "full"
19-
2018
permissions:
2119
contents: read
2220

2321
jobs:
2422
linux:
2523
runs-on: ${{ matrix.platform.runner }}
2624
strategy:
27-
fail-fast: false
2825
matrix:
2926
platform:
3027
- runner: ubuntu-latest
@@ -35,6 +32,8 @@ jobs:
3532
target: aarch64
3633
- runner: ubuntu-latest
3734
target: armv7
35+
- runner: ubuntu-latest
36+
target: s390x
3837
- runner: ubuntu-latest
3938
target: ppc64le
4039
steps:
@@ -54,29 +53,6 @@ jobs:
5453
with:
5554
name: wheels-linux-${{ matrix.platform.target }}
5655
path: dist
57-
- name: pytest
58-
if: ${{ startsWith(matrix.platform.target, 'x86_64') }}
59-
shell: bash
60-
run: |
61-
set -e
62-
pip install resvg_py --find-links dist --force-reinstall
63-
pip install pytest
64-
pytest -rP
65-
- name: pytest
66-
if: ${{ !startsWith(matrix.platform.target, 'x86') && matrix.platform.target != 'ppc64' }}
67-
uses: uraimo/[email protected]
68-
with:
69-
arch: ${{ matrix.platform.target }}
70-
distro: ubuntu22.04
71-
githubToken: ${{ github.token }}
72-
install: |
73-
apt-get update
74-
apt-get install -y --no-install-recommends python3 python3-pip
75-
pip3 install -U pip pytest
76-
run: |
77-
set -e
78-
pip3 install resvg_py --find-links dist --force-reinstall
79-
pytest -rP
8056

8157
windows:
8258
runs-on: ${{ matrix.platform.runner }}
@@ -104,14 +80,6 @@ jobs:
10480
with:
10581
name: wheels-windows-${{ matrix.platform.target }}
10682
path: dist
107-
- name: pytest
108-
if: ${{ !startsWith(matrix.platform.target, 'aarch64') }}
109-
shell: bash
110-
run: |
111-
set -e
112-
pip install resvg_py --find-links dist --force-reinstall
113-
pip install pytest
114-
pytest -rP
11583

11684
macos:
11785
runs-on: ${{ matrix.platform.runner }}
@@ -138,14 +106,6 @@ jobs:
138106
with:
139107
name: wheels-macos-${{ matrix.platform.target }}
140108
path: dist
141-
- name: pytest
142-
if: ${{ !startsWith(matrix.platform.target, 'aarch64') }}
143-
shell: bash
144-
run: |
145-
set -e
146-
pip install resvg_py --find-links dist --force-reinstall
147-
pip install pytest
148-
pytest -rP
149109

150110
sdist:
151111
runs-on: ubuntu-latest

src/rust/lib.rs

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,8 @@ fn resvg_magic(mut options: Opts, svg_string: String) -> Result<Vec<u8>, String>
135135
#[pyfunction]
136136
#[pyo3(name = "svg_to_base64")]
137137
fn svg_to_base64(
138-
svg: String,
138+
svg_string: Option<String>,
139+
svg_path: Option<String>,
139140
// Control width, height, zoom, dpi
140141
width: Option<u32>,
141142
height: Option<u32>,
@@ -161,19 +162,31 @@ fn svg_to_base64(
161162
// Background
162163
background: Option<String>,
163164
) -> PyResult<String> {
164-
let svg_string: String;
165+
let mut _svg_string = String::new();
165166

166-
if std::path::Path::new(&svg).exists() {
167-
let mut svg_data = std::fs::read(&svg).expect("failed to open the provided file");
168-
if svg_data.starts_with(&[0x1f, 0x8b]) {
169-
svg_data =
170-
resvg::usvg::decompress_svgz(&svg_data).expect("can't decompress the svg file");
171-
};
172-
svg_string = std::str::from_utf8(&svg_data)
173-
.expect("can't convert bytes to utf-8")
174-
.to_owned();
175-
} else {
176-
svg_string = svg;
167+
if let Some(svg_string) = svg_string {
168+
_svg_string = svg_string;
169+
}
170+
171+
// Only check for path if provided string is empty
172+
if _svg_string.is_empty() {
173+
if let Some(svg_path) = svg_path {
174+
if std::path::Path::new(&svg_path).exists() {
175+
let mut svg_data =
176+
std::fs::read(&svg_path).expect("failed to open the provided file");
177+
if svg_data.starts_with(&[0x1f, 0x8b]) {
178+
svg_data = resvg::usvg::decompress_svgz(&svg_data)
179+
.expect("can't decompress the svg file");
180+
};
181+
_svg_string = std::str::from_utf8(&svg_data)
182+
.expect("can't convert bytes to utf-8")
183+
.to_owned();
184+
}
185+
}
186+
}
187+
188+
if _svg_string.is_empty() {
189+
panic!("`svg_string` is empty or `svg_path` contains empty invalid svg");
177190
}
178191

179192
let mut fit_to = FitTo::Original;
@@ -259,7 +272,7 @@ fn svg_to_base64(
259272
font_files,
260273
font_dirs,
261274
};
262-
let pixmap = resvg_magic(options, svg_string.trim().to_owned()).unwrap();
275+
let pixmap = resvg_magic(options, _svg_string.trim().to_owned()).unwrap();
263276
Ok(general_purpose::STANDARD.encode(&pixmap))
264277
}
265278

tests/test_complex_camera.py

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

tests/test_multiple_layer_svg.py

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

tests/test_normal_shape.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99

1010
def test_rectangle():
11-
base64 = resvg_py.svg_to_base64(svg_string)
11+
base64 = resvg_py.svg_to_base64(svg_string=svg_string)
1212
assert (
1313
base64
1414
== "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"

tests/test_path.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ def test_path():
1111
path = os.path.join(BASE_DIR, "acid.svg")
1212
print(path)
1313

14-
base = resvg_py.svg_to_base64(path)
14+
base = resvg_py.svg_to_base64(svg_path=path)
1515
assert base == svg_output
1616

1717

1818
def test_gzip_path():
1919
path = os.path.join(BASE_DIR, "acid.svg.gz")
2020
print(path)
2121

22-
base = resvg_py.svg_to_base64(path)
22+
base = resvg_py.svg_to_base64(svg_path=path)
2323
assert base == svg_output
2424

2525

0 commit comments

Comments
 (0)