Skip to content

Commit 509707d

Browse files
authored
Merge pull request #164 from Algebraic-UG/prep_for_5.1
Prep for 5.1
2 parents 627d6b3 + c30493d commit 509707d

28 files changed

Lines changed: 570 additions & 254 deletions

.github/workflows/test.yml

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,6 @@ on:
66
pull_request:
77
branches: ["*"]
88
workflow_dispatch:
9-
inputs:
10-
bpy_spec:
11-
description: 'Override bpy requirement (e.g. "bpy==5.1.0" or "bpy>=5.0,<5.2")'
12-
required: false
13-
default: ""
149

1510
# Cancel in-progress runs when a new workflow with the same group is triggered
1611
concurrency:
@@ -49,10 +44,6 @@ jobs:
4944
- name: Install uv
5045
uses: astral-sh/setup-uv@v5
5146

52-
- name: Lock with bpy override
53-
if: ${{ github.event.inputs.bpy_spec != '' }}
54-
run: uv lock --upgrade-package "${{ github.event.inputs.bpy_spec }}"
55-
5647
- name: Install tree_clipper
5748
run: uv sync --all-extras
5849

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ ipython_config.py
8585
# pyenv
8686
# For a library or package, you might want to ignore these files since the code is
8787
# intended to run in multiple environments; otherwise, check them in:
88-
# .python-version
88+
.python-version
8989

9090
# pipenv
9191
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.

.python-version

Lines changed: 0 additions & 1 deletion
This file was deleted.

.vscode/tasks.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
"command": "uv",
88
"args": [
99
"run",
10+
"--prerelease=allow",
1011
"python-vendorize",
1112
],
1213
"options": {

packages/tree_clipper/pyproject.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
[project]
22
name = "tree-clipper"
33
version = "0.1.5"
4-
requires-python = ">=3.11"
54
dependencies = []
65
maintainers = [
76
{ name="Algebraic", email="tree.clipper@algebraic.games" },
@@ -26,7 +25,7 @@ Homepage = "https://github.com/Algebraic-UG/tree_clipper"
2625
Issues = "https://github.com/Algebraic-UG/tree_clipper/issues"
2726

2827
[project.optional-dependencies]
29-
bpy = [ "bpy >= 5.0.0, < 5.1" ]
28+
bpy = [ "bpy >= 5" ]
3029

3130
[build-system]
3231
requires = ["uv_build >= 0.9.18, < 0.10.0"]

packages/tree_clipper/src/tree_clipper/common.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,3 +148,4 @@ def most_specific_type_handled(
148148
EXTERNAL_SERIALIZATION = dict[str, int | str | None]
149149

150150
DEFAULT_FILE = str(Path(tempfile.gettempdir()) / "default.json")
151+
DEFAULT_HINT = "Hint for Import"

packages/tree_clipper/src/tree_clipper/export_nodes.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,9 @@ def _export_property_simple(
223223

224224
# https://github.com/Algebraic-UG/tree_clipper/issues/96
225225
def clamp_and_report(value: int | float) -> int | float:
226+
# https://github.com/Algebraic-UG/tree_clipper/issues/162
227+
if isinstance(obj, bpy.types.NodeTreeInterfaceSocket):
228+
return value
226229
# https://github.com/Algebraic-UG/tree_clipper/issues/132
227230
if (
228231
isinstance(obj, bpy.types.NodeSocket)

packages/tree_clipper/src/tree_clipper/import_nodes.py

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,14 @@ def __init__(
6767
class Importer:
6868
def __init__(
6969
self,
70+
*,
71+
blender_version: list[int],
7072
specific_handlers: dict[type, DESERIALIZER],
7173
getters: dict[int, GETTER],
7274
debug_prints: bool,
7375
) -> None:
76+
self.blender_version = blender_version
77+
7478
self.specific_handlers = specific_handlers
7579
self.getters = getters
7680
self.debug_prints = debug_prints
@@ -498,10 +502,15 @@ def getter() -> bpy.types.ShaderNodeTree:
498502

499503

500504
def _check_version(data: dict) -> None:
501-
exporter_blender_version = data[BLENDER_VERSION]
502-
importer_blender_version = bpy.app.version_string
503-
504-
if exporter_blender_version != importer_blender_version:
505+
exporter_blender_version = [
506+
int(v) for v in data[BLENDER_VERSION].split(" ")[0].split(".")
507+
]
508+
importer_blender_version = bpy.app.version
509+
510+
if (
511+
exporter_blender_version[0] != importer_blender_version[0]
512+
or exporter_blender_version[1] > importer_blender_version[1]
513+
):
505514
raise RuntimeError(
506515
f"Blender version mismatch. File version: {exporter_blender_version}, but running {importer_blender_version}"
507516
)
@@ -586,7 +595,7 @@ def get_external(self) -> dict[str, EXTERNAL_SERIALIZATION]:
586595

587596
def set_external(
588597
self,
589-
ids_and_references: Iterator[Tuple[int, bpy.types.ID]],
598+
ids_and_references: Iterator[Tuple[int, bpy.types.ID | None]],
590599
) -> None:
591600
for external_id, external_item in ids_and_references:
592601
scene_id = self.get_external()[str(external_id)][EXTERNAL_SCENE_ID]
@@ -620,11 +629,18 @@ def set_external(
620629
assert int(external_id) in self.getters
621630

622631
def start_import(self, parameters: ImportParameters) -> None:
632+
version_cycle = self.data[BLENDER_VERSION].split(" ")
633+
blender_version = [int(v) for v in version_cycle[0].split(".")]
623634
self.importer = Importer(
635+
blender_version=blender_version,
624636
specific_handlers=parameters.specific_handlers,
625637
getters=self.getters,
626638
debug_prints=parameters.debug_prints,
627639
)
640+
if len(version_cycle) > 1:
641+
self.importer.report.warnings.append(
642+
f"This was exported from a Blender {version_cycle[1]} version."
643+
)
628644

629645
def step(self) -> bool:
630646
assert isinstance(self.importer, Importer)

packages/tree_clipper/src/tree_clipper/specific_abstract.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,30 @@ def import_all_simple_writable_properties_and_list(self, id_list: list[str]):
275275
self.import_all_simple_writable_properties()
276276
self.import_properties_from_id_list(id_list)
277277

278+
def only_create_getters(self, id_list: list[str]):
279+
for identifier in id_list:
280+
self.register_getter(
281+
getter=lambda: getattr(self.getter(), identifier),
282+
serialization=self.serialization[identifier],
283+
from_root=self.from_root.add_prop(
284+
self.getter().bl_rna.properties[identifier]
285+
),
286+
)
287+
288+
def register_getter(
289+
self,
290+
*,
291+
getter: GETTER,
292+
serialization: dict[str, Any],
293+
from_root,
294+
):
295+
self.importer._import_obj_with_deserializer(
296+
getter=getter,
297+
serialization=serialization,
298+
deserializer=default_deserializer,
299+
from_root=from_root,
300+
)
301+
278302
@abstractmethod
279303
def deserialize(self) -> None:
280304
"""Do the actual importing here"""

0 commit comments

Comments
 (0)