ducpy 3.3.6__tar.gz → 3.3.7__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 (65) hide show
  1. {ducpy-3.3.6 → ducpy-3.3.7}/Cargo.lock +1 -1
  2. {ducpy-3.3.6 → ducpy-3.3.7}/PKG-INFO +1 -1
  3. {ducpy-3.3.6 → ducpy-3.3.7}/packages/ducpy/crate/Cargo.toml +1 -1
  4. {ducpy-3.3.6 → ducpy-3.3.7}/packages/ducrs/Cargo.toml +11 -0
  5. {ducpy-3.3.6 → ducpy-3.3.7}/src/ducpy/builders/state_builders.py +3 -3
  6. {ducpy-3.3.6 → ducpy-3.3.7}/src/ducpy/serialize.py +1 -17
  7. {ducpy-3.3.6 → ducpy-3.3.7}/src/ducpy/utils/convert.py +11 -3
  8. ducpy-3.3.6/packages/ducrs/.gitignore +0 -21
  9. ducpy-3.3.6/packages/ducrs/package.json +0 -13
  10. ducpy-3.3.6/packages/ducrs/release.config.cjs +0 -31
  11. ducpy-3.3.6/packages/ducrs/sst-env.d.ts +0 -10
  12. ducpy-3.3.6/packages/ducrs/tests/.gitignore +0 -2
  13. ducpy-3.3.6/packages/ducrs/tests/common/mod.rs +0 -1009
  14. ducpy-3.3.6/packages/ducrs/tests/parser_assets.rs +0 -227
  15. ducpy-3.3.6/packages/ducrs/tests/synthetic_roundtrip.rs +0 -25
  16. {ducpy-3.3.6 → ducpy-3.3.7}/Cargo.toml +0 -0
  17. {ducpy-3.3.6 → ducpy-3.3.7}/LICENSE +0 -0
  18. {ducpy-3.3.6 → ducpy-3.3.7}/README.md +0 -0
  19. {ducpy-3.3.6 → ducpy-3.3.7}/packages/ducpy/crate/src/lib.rs +0 -0
  20. {ducpy-3.3.6 → ducpy-3.3.7}/packages/ducrs/LICENSE +0 -0
  21. {ducpy-3.3.6 → ducpy-3.3.7}/packages/ducrs/README.md +0 -0
  22. {ducpy-3.3.6 → ducpy-3.3.7}/packages/ducrs/build.rs +0 -0
  23. {ducpy-3.3.6 → ducpy-3.3.7}/packages/ducrs/src/api/document.rs +0 -0
  24. {ducpy-3.3.6 → ducpy-3.3.7}/packages/ducrs/src/api/meta.rs +0 -0
  25. {ducpy-3.3.6 → ducpy-3.3.7}/packages/ducrs/src/api/mod.rs +0 -0
  26. {ducpy-3.3.6 → ducpy-3.3.7}/packages/ducrs/src/api/version_control.rs +0 -0
  27. {ducpy-3.3.6 → ducpy-3.3.7}/packages/ducrs/src/db/bootstrap.rs +0 -0
  28. {ducpy-3.3.6 → ducpy-3.3.7}/packages/ducrs/src/db/mod.rs +0 -0
  29. {ducpy-3.3.6 → ducpy-3.3.7}/packages/ducrs/src/db/native.rs +0 -0
  30. {ducpy-3.3.6 → ducpy-3.3.7}/packages/ducrs/src/db/wasm.rs +0 -0
  31. {ducpy-3.3.6 → ducpy-3.3.7}/packages/ducrs/src/lib.rs +0 -0
  32. {ducpy-3.3.6 → ducpy-3.3.7}/packages/ducrs/src/parse.rs +0 -0
  33. {ducpy-3.3.6 → ducpy-3.3.7}/packages/ducrs/src/serde_utils.rs +0 -0
  34. {ducpy-3.3.6 → ducpy-3.3.7}/packages/ducrs/src/serialize.rs +0 -0
  35. {ducpy-3.3.6 → ducpy-3.3.7}/packages/ducrs/src/types.rs +0 -0
  36. {ducpy-3.3.6 → ducpy-3.3.7}/pyproject.toml +0 -0
  37. {ducpy-3.3.6 → ducpy-3.3.7}/schema/duc.sql +0 -0
  38. {ducpy-3.3.6 → ducpy-3.3.7}/schema/migrations/3000000_to_3000001.sql +0 -0
  39. {ducpy-3.3.6 → ducpy-3.3.7}/schema/migrations/3000001_to_3000002.sql +0 -0
  40. {ducpy-3.3.6 → ducpy-3.3.7}/schema/migrations/3000002_to_3000003.sql +0 -0
  41. {ducpy-3.3.6 → ducpy-3.3.7}/schema/migrations/3000003_to_3000004.sql +0 -0
  42. {ducpy-3.3.6 → ducpy-3.3.7}/schema/search.sql +0 -0
  43. {ducpy-3.3.6 → ducpy-3.3.7}/schema/version_control.sql +0 -0
  44. {ducpy-3.3.6 → ducpy-3.3.7}/src/ducpy/__init__.py +0 -0
  45. {ducpy-3.3.6 → ducpy-3.3.7}/src/ducpy/_version.py +0 -0
  46. {ducpy-3.3.6 → ducpy-3.3.7}/src/ducpy/builders/__init__.py +0 -0
  47. {ducpy-3.3.6 → ducpy-3.3.7}/src/ducpy/builders/block_instance_builder.py +0 -0
  48. {ducpy-3.3.6 → ducpy-3.3.7}/src/ducpy/builders/block_utils.py +0 -0
  49. {ducpy-3.3.6 → ducpy-3.3.7}/src/ducpy/builders/element_builders.py +0 -0
  50. {ducpy-3.3.6 → ducpy-3.3.7}/src/ducpy/builders/mutate_builder.py +0 -0
  51. {ducpy-3.3.6 → ducpy-3.3.7}/src/ducpy/builders/sql_builder.py +0 -0
  52. {ducpy-3.3.6 → ducpy-3.3.7}/src/ducpy/builders/style_builders.py +0 -0
  53. {ducpy-3.3.6 → ducpy-3.3.7}/src/ducpy/classes/DataStateClass.py +0 -0
  54. {ducpy-3.3.6 → ducpy-3.3.7}/src/ducpy/classes/ElementsClass.py +0 -0
  55. {ducpy-3.3.6 → ducpy-3.3.7}/src/ducpy/classes/__init__.py +0 -0
  56. {ducpy-3.3.6 → ducpy-3.3.7}/src/ducpy/enums.py +0 -0
  57. {ducpy-3.3.6 → ducpy-3.3.7}/src/ducpy/parse.py +0 -0
  58. {ducpy-3.3.6 → ducpy-3.3.7}/src/ducpy/search/__init__.py +0 -0
  59. {ducpy-3.3.6 → ducpy-3.3.7}/src/ducpy/search/search_elements.py +0 -0
  60. {ducpy-3.3.6 → ducpy-3.3.7}/src/ducpy/utils/__init__.py +0 -0
  61. {ducpy-3.3.6 → ducpy-3.3.7}/src/ducpy/utils/constants.py +0 -0
  62. {ducpy-3.3.6 → ducpy-3.3.7}/src/ducpy/utils/io.py +0 -0
  63. {ducpy-3.3.6 → ducpy-3.3.7}/src/ducpy/utils/mutate_utils.py +0 -0
  64. {ducpy-3.3.6 → ducpy-3.3.7}/src/ducpy/utils/rand_utils.py +0 -0
  65. {ducpy-3.3.6 → ducpy-3.3.7}/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.6"
415
+ version = "3.3.7"
416
416
  dependencies = [
417
417
  "duc",
418
418
  "pyo3",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ducpy
3
- Version: 3.3.6
3
+ Version: 3.3.7
4
4
  Classifier: License :: OSI Approved :: MIT License
5
5
  Requires-Dist: nanoid>=2.0.0
6
6
  License-File: LICENSE
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "ducpy-native"
3
- version = "3.3.6"
3
+ version = "3.3.7"
4
4
  edition = "2021"
5
5
  description = "Python native extension for the duc file format (used by ducpy)"
6
6
  publish = false
@@ -7,6 +7,17 @@ license = "MIT"
7
7
  authors = ["Ducflair support@ducflair.com"]
8
8
  repository = "https://github.com/ducflair/duc/tree/main/packages/ducrs"
9
9
  readme = "README.md"
10
+ include = [
11
+ "src/**",
12
+ "build.rs",
13
+ "Cargo.toml",
14
+ "README.md",
15
+ "LICENSE",
16
+ "schema/duc.sql",
17
+ "schema/version_control.sql",
18
+ "schema/search.sql",
19
+ "schema/migrations/*.sql",
20
+ ]
10
21
 
11
22
  [dependencies]
12
23
  base64 = "0.21.5"
@@ -446,9 +446,9 @@ def create_local_state_from_base(base: BaseStateParams, **kwargs) -> DucLocalSta
446
446
  current_item_stroke=kwargs.get('current_item_stroke', None),
447
447
  current_item_background=kwargs.get('current_item_background', None),
448
448
  current_item_opacity=kwargs.get('current_item_opacity', 1.0),
449
- current_item_font_family=kwargs.get('current_item_font_family', "Virgil"),
449
+ current_item_font_family=kwargs.get('current_item_font_family', "Roboto Mono"),
450
450
  current_item_font_size=kwargs.get('current_item_font_size', 20.0),
451
- current_item_text_align=kwargs.get('current_item_text_align', None),
451
+ current_item_text_align=kwargs.get('current_item_text_align', TEXT_ALIGN.LEFT),
452
452
  current_item_roundness=kwargs.get('current_item_roundness', 0.0),
453
453
  current_item_start_line_head=kwargs.get('current_item_start_line_head', None),
454
454
  current_item_end_line_head=kwargs.get('current_item_end_line_head', None),
@@ -457,7 +457,7 @@ def create_local_state_from_base(base: BaseStateParams, **kwargs) -> DucLocalSta
457
457
  objects_snap_mode_enabled=kwargs.get('objects_snap_mode_enabled', True),
458
458
  grid_mode_enabled=kwargs.get('grid_mode_enabled', True),
459
459
  outline_mode_enabled=kwargs.get('outline_mode_enabled', False),
460
- manual_save_mode=kwargs.get('manual_save_mode', None),
460
+ manual_save_mode=kwargs.get('manual_save_mode', False),
461
461
  decimal_places=kwargs.get('decimal_places', 2),
462
462
  )
463
463
 
@@ -16,7 +16,7 @@ from typing import Any, Dict, List, Optional, Tuple
16
16
 
17
17
  import ducpy_native
18
18
  from ducpy.utils.convert import (deep_snake_to_camel, snake_to_camel,
19
- to_serializable)
19
+ to_serializable, _flatten_dict)
20
20
 
21
21
  logger = logging.getLogger(__name__)
22
22
 
@@ -104,22 +104,6 @@ _ELEMENT_CLASS_TO_TYPE: Dict[str, str] = {
104
104
  "DucModelElement": "model",
105
105
  }
106
106
 
107
- # Keys in the asdict() output that should be flattened (merged into the parent),
108
- # mirroring Rust's #[serde(flatten)] on base / styles / linear_base / stack_element_base.
109
- _FLATTEN_KEYS = frozenset({"base", "styles", "linear_base", "stack_element_base"})
110
-
111
-
112
- def _flatten_dict(d: dict) -> dict:
113
- """Recursively flatten nested dicts whose key is in ``_FLATTEN_KEYS``."""
114
- result: dict = {}
115
- for k, v in d.items():
116
- if k in _FLATTEN_KEYS and isinstance(v, dict):
117
- result.update(_flatten_dict(v))
118
- else:
119
- result[k] = v
120
- return result
121
-
122
-
123
107
  def _element_to_camel(wrapper_or_element: Any) -> dict:
124
108
  """Convert an element (or ElementWrapper) to the camelCase dict Rust expects."""
125
109
  el = wrapper_or_element
@@ -65,11 +65,19 @@ def deep_snake_to_camel(obj: Any) -> Any:
65
65
 
66
66
 
67
67
  def _flatten_dict(d: dict) -> dict:
68
- """Recursively flatten keys that Rust serde #[serde(flatten)] would flatten."""
68
+ """Recursively flatten keys that Rust serde #[serde(flatten)] would flatten.
69
+
70
+ Walks the entire dict so that nested flatten keys (e.g. ``stack_element_base``
71
+ -> ``stack_base`` -> ``styles``) are all merged into the appropriate level.
72
+ """
69
73
  result: dict = {}
70
74
  for k, v in d.items():
71
- if k in _FLATTEN_KEYS and isinstance(v, dict):
72
- result.update(_flatten_dict(v))
75
+ if isinstance(v, dict):
76
+ v = _flatten_dict(v)
77
+ if k in _FLATTEN_KEYS:
78
+ result.update(v)
79
+ else:
80
+ result[k] = v
73
81
  else:
74
82
  result[k] = v
75
83
  return result
@@ -1,21 +0,0 @@
1
- # Generated by Cargo
2
- # will have compiled files and executables
3
- debug/
4
- target/
5
-
6
- # Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
7
- # More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
8
- Cargo.lock
9
-
10
- # These are backup files generated by rustfmt
11
- **/*.rs.bk
12
-
13
- # MSVC Windows builds of rustc generate these, which store debugging information
14
- *.pdb
15
-
16
- # RustRover
17
- # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
18
- # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
19
- # and can be added to the global gitignore or merged into this file. For a more nuclear
20
- # option (not recommended) you can uncomment the following to ignore the entire idea folder.
21
- #.idea/
@@ -1,13 +0,0 @@
1
- {
2
- "name": "ducrs",
3
- "version": "0.0.0-development",
4
- "private": true,
5
- "scripts": {
6
- "build": "cargo build --release",
7
- "test": "cargo test",
8
- "semantic-release": "semantic-release"
9
- },
10
- "devDependencies": {
11
- "semantic-release": "^24.1.2"
12
- }
13
- }
@@ -1,31 +0,0 @@
1
- module.exports = {
2
- branches: ["main", { name: "next", prerelease: true }, { name: "dev", prerelease: true }],
3
- plugins: [
4
- [
5
- require.resolve("../../scripts/semrel-path-filter.cjs"),
6
- {
7
- paths: [
8
- "packages/ducrs"
9
- ],
10
- analyzer: { preset: "conventionalcommits" },
11
- notes: { preset: "conventionalcommits" },
12
- },
13
- ],
14
- [
15
- "@semantic-release/github",
16
- ],
17
- [
18
- "@semantic-release/exec",
19
- {
20
- // Prepare step: Set the crate version and build the project
21
- prepareCmd:
22
- "cargo set-version ${nextRelease.version} && cargo build --release",
23
-
24
- // Publish step: Publish the crate to crates.io
25
- publishCmd:
26
- "cargo publish --allow-dirty --token ${process.env.CARGO_REGISTRY_TOKEN}",
27
- },
28
- ],
29
- ],
30
- tagFormat: "ducrs@${version}",
31
- };
@@ -1,10 +0,0 @@
1
- /* This file is auto-generated by SST. Do not edit. */
2
- /* tslint:disable */
3
- /* eslint-disable */
4
- /* deno-fmt-ignore-file */
5
- /* biome-ignore-all lint: auto-generated */
6
-
7
- /// <reference path="../../sst-env.d.ts" />
8
-
9
- import "sst"
10
- export {}
@@ -1,2 +0,0 @@
1
- inputs
2
- output