papyru 2.11.0.dev102__tar.gz → 2.11.1.dev114__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {papyru-2.11.0.dev102/papyru.egg-info → papyru-2.11.1.dev114}/PKG-INFO +1 -1
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/create_variant/component.py +10 -6
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/create_variant/constants.py +13 -1
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/create_variant/edit_template/ean.py +11 -5
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/create_variant/edit_template/manufacturer_address.py +4 -2
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/create_variant/edit_template/render_text.py +3 -1
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/create_variant/edit_template/title.py +17 -7
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/create_variant/resi.py +4 -2
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/utils.py +0 -17
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114/papyru.egg-info}/PKG-INFO +1 -1
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/setup.py +1 -1
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/LICENSE.txt +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/README.md +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/bin/generate_jsonschema.py +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/__init__.py +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/auth.py +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/context.py +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/create_variant/__init__.py +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/create_variant/edit_template/__init__.py +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/create_variant/edit_template/motive.py +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/create_variant/edit_template/xml.py +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/logger.py +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/logger_stdout.py +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/logger_types.py +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/middleware.py +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/problem.py +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/profiler.py +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/resource.py +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/serializer.py +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/stack_context.py +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/static/__init__.py +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/static/apps.py +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/static/urls.py +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/static/views.py +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/validation.py +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/varspool/__init__.py +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/varspool/assets/Job.json +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/varspool/assets/JobStatusHistory.json +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/varspool/command/__init__.py +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/varspool/command/config.py +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/varspool/command/types.py +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/varspool/serializers.py +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/varspool/types.py +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/xml_helper.py +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru.egg-info/SOURCES.txt +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru.egg-info/dependency_links.txt +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru.egg-info/requires.txt +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru.egg-info/top_level.txt +0 -0
- {papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/setup.cfg +0 -0
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
import resi
|
|
4
|
+
|
|
1
5
|
from papyru import XMLHelper
|
|
2
6
|
|
|
3
7
|
from .edit_template.ean import insert_ean
|
|
@@ -10,15 +14,15 @@ from .resi import import_into_resi
|
|
|
10
14
|
|
|
11
15
|
def create_component(template: str,
|
|
12
16
|
motive_image_info: ImageInfo,
|
|
13
|
-
resi_instance:
|
|
17
|
+
resi_instance: resi.Instance,
|
|
14
18
|
resi_url: str,
|
|
15
19
|
disposition_component: str,
|
|
16
20
|
disposition_manufacturer_address: str,
|
|
17
|
-
disposition_title=None,
|
|
18
|
-
motive_title=None,
|
|
19
|
-
disposition_ean=None,
|
|
20
|
-
ean=None,
|
|
21
|
-
properties=None,
|
|
21
|
+
disposition_title: Optional[str] = None,
|
|
22
|
+
motive_title: Optional[str] = None,
|
|
23
|
+
disposition_ean: Optional[str] = None,
|
|
24
|
+
ean: Optional[str] = None,
|
|
25
|
+
properties: Optional[resi.VersionProperties] = None,
|
|
22
26
|
) -> str:
|
|
23
27
|
|
|
24
28
|
doc = XMLHelper(template)
|
|
@@ -1,7 +1,19 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Constants for specific templates
|
|
3
|
+
|
|
4
|
+
These constants are used in specific templates to ensure that SVG
|
|
5
|
+
components are generated correctly, e.g.:
|
|
6
|
+
|
|
7
|
+
- https://masa.productdesignerd.puzzleandplay.de/
|
|
8
|
+
templates/single-image-4-3-landscape/structure/original
|
|
9
|
+
- https://masa.productdesignerd.puzzleandplay.de/
|
|
10
|
+
templates/box_small_500_landscape_grey/structure/original
|
|
11
|
+
"""
|
|
12
|
+
|
|
1
13
|
from .edit_template.render_text import (Alignment, HorizontalAlignment,
|
|
2
14
|
RGBAColor, VerticalAlignment)
|
|
3
15
|
|
|
4
|
-
# Preview types can be overwritten by ShopAttributes.
|
|
16
|
+
# Preview types can be overwritten by ShopAttributes in Masa.
|
|
5
17
|
PREVIEW_TYPE_BOX = 'box'
|
|
6
18
|
PREVIEW_TYPE_PARTS = 'pieces'
|
|
7
19
|
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
from os import getpid
|
|
2
2
|
from subprocess import PIPE, Popen
|
|
3
|
+
from typing import Optional
|
|
4
|
+
|
|
5
|
+
import resi
|
|
3
6
|
|
|
4
7
|
from papyru import XMLHelper
|
|
5
8
|
from papyru.create_variant.constants import EAN_PLACEHOLDER_ID
|
|
@@ -9,11 +12,14 @@ from .xml import ImageInfo, find_placeholder, fit_image
|
|
|
9
12
|
|
|
10
13
|
|
|
11
14
|
def insert_ean(doc: XMLHelper,
|
|
12
|
-
ean: str,
|
|
13
|
-
disposition: str,
|
|
14
|
-
resi_instance:
|
|
15
|
-
resi_url: str,
|
|
15
|
+
ean: Optional[str] = None,
|
|
16
|
+
disposition: Optional[str] = None,
|
|
17
|
+
resi_instance: Optional[resi.Instance] = None,
|
|
18
|
+
resi_url: Optional[str] = None,
|
|
16
19
|
) -> XMLHelper:
|
|
20
|
+
if ean is None:
|
|
21
|
+
return doc
|
|
22
|
+
|
|
17
23
|
ph = find_placeholder(doc, 'image', EAN_PLACEHOLDER_ID)
|
|
18
24
|
|
|
19
25
|
if ph is None:
|
|
@@ -36,7 +42,7 @@ def _create_ean(ean: str,
|
|
|
36
42
|
width: int,
|
|
37
43
|
height: int,
|
|
38
44
|
disposition: str,
|
|
39
|
-
resi_instance:
|
|
45
|
+
resi_instance: resi.Instance,
|
|
40
46
|
resi_url: str) -> str:
|
|
41
47
|
_, ean_bytes = resi_instance.provide_version_bytes(
|
|
42
48
|
generate_barcode_svg(ean).encode(),
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
from logging import getLogger
|
|
2
2
|
|
|
3
|
+
import resi
|
|
4
|
+
|
|
3
5
|
from papyru import XMLHelper
|
|
4
6
|
from papyru.create_variant.constants import (
|
|
5
7
|
MANUFACTURER_ADDRESS_ALIGNMENT, MANUFACTURER_ADDRESS_COLOR_BACKGROUND,
|
|
@@ -16,7 +18,7 @@ log = getLogger(__name__)
|
|
|
16
18
|
|
|
17
19
|
def insert_manufacturer_address(doc: XMLHelper,
|
|
18
20
|
disposition: str,
|
|
19
|
-
resi_instance:
|
|
21
|
+
resi_instance: resi.Instance,
|
|
20
22
|
resi_url: str,
|
|
21
23
|
) -> XMLHelper:
|
|
22
24
|
ph = find_placeholder(doc, 'text', MANUFACTURER_ADDRESS_PLACEHOLDER_ID)
|
|
@@ -46,7 +48,7 @@ def _create_text_manufacturer_address(address: str,
|
|
|
46
48
|
width: int,
|
|
47
49
|
height: int,
|
|
48
50
|
disposition: str,
|
|
49
|
-
resi_instance:
|
|
51
|
+
resi_instance: resi.Instance,
|
|
50
52
|
resi_url: str) -> str:
|
|
51
53
|
text_bytes = render_text(
|
|
52
54
|
TextConfig(
|
{papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/create_variant/edit_template/render_text.py
RENAMED
|
@@ -5,6 +5,8 @@ from subprocess import run
|
|
|
5
5
|
from tempfile import TemporaryDirectory
|
|
6
6
|
from uuid import uuid4
|
|
7
7
|
|
|
8
|
+
import resi
|
|
9
|
+
|
|
8
10
|
|
|
9
11
|
@dataclass(frozen=True)
|
|
10
12
|
class RGBAColor:
|
|
@@ -43,7 +45,7 @@ class TextConfig:
|
|
|
43
45
|
height: int
|
|
44
46
|
|
|
45
47
|
|
|
46
|
-
def render_text(config: TextConfig, resi_instance:
|
|
48
|
+
def render_text(config: TextConfig, resi_instance: resi.Instance) -> bytes:
|
|
47
49
|
# see `convert -list gravity`
|
|
48
50
|
def _get_gravity(alignment: Alignment) -> str:
|
|
49
51
|
h = ''
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
import resi
|
|
4
|
+
|
|
1
5
|
from papyru import XMLHelper
|
|
2
6
|
from papyru.create_variant.constants import (TITLE_ALIGNMENT,
|
|
3
7
|
TITLE_COLOR_BACKGROUND,
|
|
@@ -11,19 +15,25 @@ from .xml import (ImageInfo, find_placeholder, fit_image,
|
|
|
11
15
|
|
|
12
16
|
|
|
13
17
|
def insert_title(doc: XMLHelper,
|
|
14
|
-
title: str,
|
|
15
|
-
disposition: str,
|
|
16
|
-
resi_instance:
|
|
17
|
-
resi_url:
|
|
18
|
+
title: Optional[str] = None,
|
|
19
|
+
disposition: Optional[str] = None,
|
|
20
|
+
resi_instance: Optional[resi.Instance] = None,
|
|
21
|
+
resi_url: Optional[str] = None
|
|
18
22
|
) -> XMLHelper:
|
|
19
|
-
if title is None:
|
|
20
|
-
return doc
|
|
21
23
|
|
|
22
24
|
ph = find_placeholder(doc, 'text', TITLE_PLACEHOLDER_ID)
|
|
23
25
|
|
|
24
26
|
if ph is None:
|
|
25
27
|
return doc
|
|
26
28
|
|
|
29
|
+
if title is None:
|
|
30
|
+
for tspan in ph.placeholder.findall('./{%s}%s'
|
|
31
|
+
% (doc.default_namespace,
|
|
32
|
+
'tspan')):
|
|
33
|
+
tspan.text = ''
|
|
34
|
+
|
|
35
|
+
return doc
|
|
36
|
+
|
|
27
37
|
width = float(doc.get_attribute(ph.wrapper, 'width'))
|
|
28
38
|
height = float(doc.get_attribute(ph.wrapper, 'height'))
|
|
29
39
|
|
|
@@ -42,7 +52,7 @@ def _create_title_image(title: str,
|
|
|
42
52
|
width: int,
|
|
43
53
|
height: int,
|
|
44
54
|
disposition: str,
|
|
45
|
-
resi_instance:
|
|
55
|
+
resi_instance: resi.Instance,
|
|
46
56
|
resi_url: str
|
|
47
57
|
) -> str:
|
|
48
58
|
text_bytes = render_text(
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
from os import getpid
|
|
2
2
|
from typing import Optional
|
|
3
3
|
|
|
4
|
+
import resi
|
|
5
|
+
|
|
4
6
|
|
|
5
7
|
def import_into_resi(data: bytes,
|
|
6
|
-
resi_instance:
|
|
8
|
+
resi_instance: resi.Instance,
|
|
7
9
|
resi_url: str,
|
|
8
|
-
properties: Optional[
|
|
10
|
+
properties: Optional[resi.VersionProperties] = None,
|
|
9
11
|
disposition: Optional[str] = None
|
|
10
12
|
) -> str:
|
|
11
13
|
|
|
@@ -233,23 +233,6 @@ def delete_in_chunks(query: QuerySet,
|
|
|
233
233
|
return delete_in_chunks(query, chunk_size, chunks_to_delete)
|
|
234
234
|
|
|
235
235
|
|
|
236
|
-
def update_in_chunks(query: QuerySet,
|
|
237
|
-
chunk_size: int = 1024,
|
|
238
|
-
chunks_to_update: int = 512,
|
|
239
|
-
**update_kw_args):
|
|
240
|
-
chunks_to_update -= 1
|
|
241
|
-
rows_matched = (
|
|
242
|
-
query.model
|
|
243
|
-
.objects
|
|
244
|
-
.filter(pk__in=list(
|
|
245
|
-
query.only('pk').values_list('pk', flat=True)[:chunk_size]))
|
|
246
|
-
.update(**update_kw_args))
|
|
247
|
-
|
|
248
|
-
if rows_matched > 0 and chunks_to_update > 0:
|
|
249
|
-
return update_in_chunks(
|
|
250
|
-
query, chunk_size, chunks_to_update, **update_kw_args)
|
|
251
|
-
|
|
252
|
-
|
|
253
236
|
def cursor_to_dict(cursor) -> List[Dict[str, Union[str, int]]]:
|
|
254
237
|
columns = [col[0] for col in cursor.description]
|
|
255
238
|
return [
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{papyru-2.11.0.dev102 → papyru-2.11.1.dev114}/papyru/create_variant/edit_template/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|