ducpy 3.3.1__tar.gz → 3.3.3__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.
Files changed (66) hide show
  1. {ducpy-3.3.1 → ducpy-3.3.3}/Cargo.lock +1 -1
  2. {ducpy-3.3.1 → ducpy-3.3.3}/PKG-INFO +1 -2
  3. {ducpy-3.3.1 → ducpy-3.3.3}/packages/ducpy/crate/Cargo.toml +1 -1
  4. {ducpy-3.3.1 → ducpy-3.3.3}/pyproject.toml +0 -1
  5. ducpy-3.3.3/src/ducpy/__init__.py +32 -0
  6. ducpy-3.3.3/src/ducpy/_version.py +3 -0
  7. {ducpy-3.3.1 → ducpy-3.3.3}/src/ducpy/builders/element_builders.py +0 -7
  8. {ducpy-3.3.1 → ducpy-3.3.3}/src/ducpy/parse.py +16 -3
  9. {ducpy-3.3.1 → ducpy-3.3.3}/src/ducpy/serialize.py +42 -3
  10. ducpy-3.3.1/src/ducpy/__init__.py +0 -19
  11. {ducpy-3.3.1 → ducpy-3.3.3}/Cargo.toml +0 -0
  12. {ducpy-3.3.1 → ducpy-3.3.3}/LICENSE +0 -0
  13. {ducpy-3.3.1 → ducpy-3.3.3}/README.md +0 -0
  14. {ducpy-3.3.1 → ducpy-3.3.3}/packages/ducpy/crate/src/lib.rs +0 -0
  15. {ducpy-3.3.1 → ducpy-3.3.3}/packages/ducrs/.gitignore +0 -0
  16. {ducpy-3.3.1 → ducpy-3.3.3}/packages/ducrs/Cargo.toml +0 -0
  17. {ducpy-3.3.1 → ducpy-3.3.3}/packages/ducrs/LICENSE +0 -0
  18. {ducpy-3.3.1 → ducpy-3.3.3}/packages/ducrs/README.md +0 -0
  19. {ducpy-3.3.1 → ducpy-3.3.3}/packages/ducrs/build.rs +0 -0
  20. {ducpy-3.3.1 → ducpy-3.3.3}/packages/ducrs/package.json +0 -0
  21. {ducpy-3.3.1 → ducpy-3.3.3}/packages/ducrs/release.config.cjs +0 -0
  22. {ducpy-3.3.1 → ducpy-3.3.3}/packages/ducrs/src/api/document.rs +0 -0
  23. {ducpy-3.3.1 → ducpy-3.3.3}/packages/ducrs/src/api/meta.rs +0 -0
  24. {ducpy-3.3.1 → ducpy-3.3.3}/packages/ducrs/src/api/mod.rs +0 -0
  25. {ducpy-3.3.1 → ducpy-3.3.3}/packages/ducrs/src/api/version_control.rs +0 -0
  26. {ducpy-3.3.1 → ducpy-3.3.3}/packages/ducrs/src/db/bootstrap.rs +0 -0
  27. {ducpy-3.3.1 → ducpy-3.3.3}/packages/ducrs/src/db/mod.rs +0 -0
  28. {ducpy-3.3.1 → ducpy-3.3.3}/packages/ducrs/src/db/native.rs +0 -0
  29. {ducpy-3.3.1 → ducpy-3.3.3}/packages/ducrs/src/db/wasm.rs +0 -0
  30. {ducpy-3.3.1 → ducpy-3.3.3}/packages/ducrs/src/lib.rs +0 -0
  31. {ducpy-3.3.1 → ducpy-3.3.3}/packages/ducrs/src/parse.rs +0 -0
  32. {ducpy-3.3.1 → ducpy-3.3.3}/packages/ducrs/src/serde_utils.rs +0 -0
  33. {ducpy-3.3.1 → ducpy-3.3.3}/packages/ducrs/src/serialize.rs +0 -0
  34. {ducpy-3.3.1 → ducpy-3.3.3}/packages/ducrs/src/types.rs +0 -0
  35. {ducpy-3.3.1 → ducpy-3.3.3}/packages/ducrs/sst-env.d.ts +0 -0
  36. {ducpy-3.3.1 → ducpy-3.3.3}/packages/ducrs/tests/.gitignore +0 -0
  37. {ducpy-3.3.1 → ducpy-3.3.3}/packages/ducrs/tests/common/mod.rs +0 -0
  38. {ducpy-3.3.1 → ducpy-3.3.3}/packages/ducrs/tests/parser_assets.rs +0 -0
  39. {ducpy-3.3.1 → ducpy-3.3.3}/packages/ducrs/tests/synthetic_roundtrip.rs +0 -0
  40. {ducpy-3.3.1 → ducpy-3.3.3}/schema/duc.sql +0 -0
  41. {ducpy-3.3.1 → ducpy-3.3.3}/schema/migrations/3000000_to_3000001.sql +0 -0
  42. {ducpy-3.3.1 → ducpy-3.3.3}/schema/migrations/3000001_to_3000002.sql +0 -0
  43. {ducpy-3.3.1 → ducpy-3.3.3}/schema/migrations/3000002_to_3000003.sql +0 -0
  44. {ducpy-3.3.1 → ducpy-3.3.3}/schema/migrations/3000003_to_3000004.sql +0 -0
  45. {ducpy-3.3.1 → ducpy-3.3.3}/schema/search.sql +0 -0
  46. {ducpy-3.3.1 → ducpy-3.3.3}/schema/version_control.sql +0 -0
  47. {ducpy-3.3.1 → ducpy-3.3.3}/src/ducpy/builders/__init__.py +0 -0
  48. {ducpy-3.3.1 → ducpy-3.3.3}/src/ducpy/builders/block_instance_builder.py +0 -0
  49. {ducpy-3.3.1 → ducpy-3.3.3}/src/ducpy/builders/block_utils.py +0 -0
  50. {ducpy-3.3.1 → ducpy-3.3.3}/src/ducpy/builders/mutate_builder.py +0 -0
  51. {ducpy-3.3.1 → ducpy-3.3.3}/src/ducpy/builders/sql_builder.py +0 -0
  52. {ducpy-3.3.1 → ducpy-3.3.3}/src/ducpy/builders/state_builders.py +0 -0
  53. {ducpy-3.3.1 → ducpy-3.3.3}/src/ducpy/builders/style_builders.py +0 -0
  54. {ducpy-3.3.1 → ducpy-3.3.3}/src/ducpy/classes/DataStateClass.py +0 -0
  55. {ducpy-3.3.1 → ducpy-3.3.3}/src/ducpy/classes/ElementsClass.py +0 -0
  56. {ducpy-3.3.1 → ducpy-3.3.3}/src/ducpy/classes/__init__.py +0 -0
  57. {ducpy-3.3.1 → ducpy-3.3.3}/src/ducpy/enums.py +0 -0
  58. {ducpy-3.3.1 → ducpy-3.3.3}/src/ducpy/search/__init__.py +0 -0
  59. {ducpy-3.3.1 → ducpy-3.3.3}/src/ducpy/search/search_elements.py +0 -0
  60. {ducpy-3.3.1 → ducpy-3.3.3}/src/ducpy/utils/__init__.py +0 -0
  61. {ducpy-3.3.1 → ducpy-3.3.3}/src/ducpy/utils/constants.py +0 -0
  62. {ducpy-3.3.1 → ducpy-3.3.3}/src/ducpy/utils/convert.py +0 -0
  63. {ducpy-3.3.1 → ducpy-3.3.3}/src/ducpy/utils/io.py +0 -0
  64. {ducpy-3.3.1 → ducpy-3.3.3}/src/ducpy/utils/mutate_utils.py +0 -0
  65. {ducpy-3.3.1 → ducpy-3.3.3}/src/ducpy/utils/rand_utils.py +0 -0
  66. {ducpy-3.3.1 → ducpy-3.3.3}/src/ducpy_native/__init__.py +0 -0
@@ -412,7 +412,7 @@ dependencies = [
412
412
 
413
413
  [[package]]
414
414
  name = "ducpy-native"
415
- version = "3.3.1"
415
+ version = "3.3.3"
416
416
  dependencies = [
417
417
  "duc",
418
418
  "pyo3",
@@ -1,9 +1,8 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ducpy
3
- Version: 3.3.1
3
+ Version: 3.3.3
4
4
  Classifier: License :: OSI Approved :: MIT License
5
5
  Requires-Dist: nanoid>=2.0.0
6
- Requires-Dist: numpy>=1.20.0
7
6
  License-File: LICENSE
8
7
  Summary: The library for the Duc 2D CAD file format
9
8
  Author: Jorge Soares
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "ducpy-native"
3
- version = "3.3.1"
3
+ version = "3.3.3"
4
4
  edition = "2021"
5
5
  description = "Python native extension for the duc file format (used by ducpy)"
6
6
  publish = false
@@ -6,7 +6,6 @@ readme = "README.md"
6
6
  requires-python = ">=3.10"
7
7
  dependencies = [
8
8
  "nanoid>=2.0.0",
9
- "numpy>=1.20.0",
10
9
  ]
11
10
 
12
11
  license = { text = "MIT" }
@@ -0,0 +1,32 @@
1
+ """Python library for the DUC 2D CAD file format.
2
+
3
+ Usage::
4
+ ``import ducpy as duc``
5
+
6
+ Builders API (High-level):
7
+ The easy way to build, manage ``.duc`` files.
8
+ Construct elements, apply styles, manage layers, build blocks,
9
+ and handle document state with the ``duc.builders`` module.
10
+
11
+ SQL Builder (Low-level):
12
+ A ``.duc`` file is a zlib-compressed SQLite database. Use
13
+ ``duc.builders.sql_builder`` for direct schema access, bulk
14
+ queries, and low-level manipulation.
15
+
16
+ Search:
17
+ Query/search elements and files programmatically via the
18
+ ``duc.search`` API.
19
+
20
+ File I/O:
21
+ Read and write ``.duc`` files using the ``duc.parse``
22
+ and ``duc.serialize`` modules.
23
+ """
24
+
25
+ from .builders import *
26
+ from .classes import *
27
+ from .enums import *
28
+ from .parse import (DucData, get_external_file, list_external_files, parse_duc,
29
+ parse_duc_lazy)
30
+ from .search import *
31
+ from .serialize import DUC_SCHEMA_VERSION, serialize_duc
32
+ from .utils import *
@@ -0,0 +1,3 @@
1
+ # This file is auto-generated by setup.py when the package is built.
2
+ # Do not edit this file manually.
3
+ DUC_SCHEMA_VERSION = "3.0.0"
@@ -7,7 +7,6 @@ from dataclasses import dataclass, field
7
7
  from math import pi
8
8
  from typing import Any, Dict, List, Optional, Union
9
9
 
10
- import numpy as np
11
10
  from ducpy.enums import (IMAGE_STATUS, STROKE_CAP, STROKE_JOIN,
12
11
  STROKE_PLACEMENT, STROKE_PREFERENCE, TEXT_ALIGN,
13
12
  VERTICAL_ALIGN)
@@ -192,9 +191,6 @@ def _create_element_wrapper(element_class, base_params, element_params, explicit
192
191
  )
193
192
  specific_element = element_class(stack_element_base=stack_element_base)
194
193
  elif element_class == DucImageElement:
195
- scale = element_params.get('scale', [1.0, 1.0])
196
- if isinstance(scale, list):
197
- element_params['scale'] = np.array(scale, dtype=np.float32)
198
194
  element_params['base'] = base_element
199
195
  specific_element = element_class(**element_params)
200
196
  elif element_class == DucFreeDrawElement:
@@ -204,9 +200,6 @@ def _create_element_wrapper(element_class, base_params, element_params, explicit
204
200
  for p in points
205
201
  ]
206
202
  element_params['points'] = duc_points
207
- pressures = element_params.get('pressures', [])
208
- if isinstance(pressures, list):
209
- element_params['pressures'] = np.array(pressures, dtype=np.float32)
210
203
  element_params['base'] = base_element
211
204
  specific_element = element_class(**element_params)
212
205
  elif element_class == DucTableElement:
@@ -57,16 +57,29 @@ def _read_bytes(source: Union[bytes, bytearray, BinaryIO, str]) -> bytes:
57
57
  def parse_duc(source: Union[bytes, bytearray, BinaryIO, str]) -> DucData:
58
58
  """Parse a ``.duc`` file into a :class:`DucData` dict.
59
59
 
60
+ This function reads a raw `.duc` binary blob or file path and parses it using
61
+ the Rust native extension. It returns a specialized dictionary (`DucData`)
62
+ that allows attribute-style access to the parsed properties (e.g. `data.elements[0].id`),
63
+ using `snake_case` keys instead of the internal `camelCase` format.
64
+
60
65
  Parameters
61
66
  ----------
62
67
  source : bytes | file | str
63
- Raw bytes, an open binary file, or a path to a ``.duc`` file.
68
+ Raw bytes, an open binary file, or a string path to a ``.duc`` file.
64
69
 
65
70
  Returns
66
71
  -------
67
72
  DucData
68
- Attribute-accessible dict matching the ExportedDataState schema with
69
- snake_case keys.
73
+ An attribute-accessible dictionary matching the internal `ExportedDataState`
74
+ schema with snake_case keys. Common keys include `elements`, `global_state`,
75
+ `local_state`, and `version_graph`.
76
+
77
+ Examples
78
+ --------
79
+ >>> data = duc.parse_duc("path/to/file.duc")
80
+ >>> data = duc.parse_duc(binary_data)
81
+ >>> print(f"Found {len(data.elements)} elements")
82
+ >>> print(f"First element type: {data.elements[0].type}")
70
83
  """
71
84
  buf = _read_bytes(source)
72
85
  raw = ducpy_native.parse_duc(buf)
@@ -216,9 +216,48 @@ def serialize_duc(
216
216
  layers: Optional[list] = None,
217
217
  external_files: Optional[list] = None,
218
218
  ) -> bytes:
219
- """Serialize elements to ``.duc`` format.
220
- Element instances and state dataclasses are automatically converted to the
221
- camelCase dicts expected by the Rust native module.
219
+ """Serialize elements and document state to raw ``.duc`` binary format.
220
+
221
+ This function accepts lists of elements created via the `ducpy.builders` API
222
+ (e.g., `ElementBuilder`) and serializes them into the compressed format
223
+ expected by `.duc` files. Element instances and state dataclasses are
224
+ automatically converted to the camelCase dicts expected by the Rust native module.
225
+
226
+ Parameters
227
+ ----------
228
+ name : str
229
+ The document name or identifier (used to populate the `source` field).
230
+ thumbnail : Optional[bytes], default=None
231
+ Raw PNG bytes representing a thumbnail of the document.
232
+ dictionary : Optional[list], default=None
233
+ List of Key-Value string pairs for dictionary entries.
234
+ elements : Optional[list], default=None
235
+ A list of elements (e.g., created via `ElementBuilder`) to include.
236
+ duc_local_state : Any, default=None
237
+ A `DucLocalState` object representing viewport state (pan, zoom, etc).
238
+ duc_global_state : Any, default=None
239
+ A `DucGlobalState` object representing document-wide settings.
240
+ version_graph : Any, default=None
241
+ Version history metadata of the document.
242
+ blocks : Optional[list], default=None
243
+ List of block definitions.
244
+ block_instances : Optional[list], default=None
245
+ List of block instances.
246
+ block_collections : Optional[list], default=None
247
+ List of block collections (libraries).
248
+ groups : Optional[list], default=None
249
+ List of element groups.
250
+ regions : Optional[list], default=None
251
+ List of boolean regions.
252
+ layers : Optional[list], default=None
253
+ List of document layers.
254
+ external_files : Optional[list], default=None
255
+ List of external files (e.g., embedded images or PDFs).
256
+
257
+ Returns
258
+ -------
259
+ bytes
260
+ The raw `.duc` binary data, ready to be written to a file.
222
261
  """
223
262
  thumb = bytes(thumbnail) if thumbnail is not None else None
224
263
 
@@ -1,19 +0,0 @@
1
- """Main module for duc_py package.
2
-
3
- Import usage examples:
4
- import ducpy as duc
5
-
6
- duc.classes.SomeClass
7
- duc.parse_duc(source)
8
- duc.serialize_duc(name=..., elements=...)
9
- duc.utils.some_utility
10
- """
11
-
12
- from .builders import *
13
- from .classes import *
14
- from .enums import *
15
- from .parse import (DucData, get_external_file, list_external_files, parse_duc,
16
- parse_duc_lazy)
17
- from .search import *
18
- from .serialize import DUC_SCHEMA_VERSION, serialize_duc
19
- from .utils import *
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