stbkit 0.1.0a9.dev1__py3-none-any.whl
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.
- stbkit/__main__.py +10 -0
- stbkit/api/__init__.py +48 -0
- stbkit/api/experimental/__init__.py +19 -0
- stbkit/api/experimental/repository/__init__.py +30 -0
- stbkit/api/py.typed +0 -0
- stbkit/api/stb_latest.py +7 -0
- stbkit/api/stb_v2_0_2.py +11 -0
- stbkit/api/stb_v2_1_1.py +9 -0
- stbkit/cli/__init__.py +17 -0
- stbkit/cli/_internal/cli_main.py +114 -0
- stbkit/cli/_internal/common.py +126 -0
- stbkit/cli/_internal/constants_exit_code.py +59 -0
- stbkit/cli/_internal/converter.py +693 -0
- stbkit/cli/_internal/diff.py +213 -0
- stbkit/cli/_internal/entry_points.py +25 -0
- stbkit/cli/_internal/global_parent.py +70 -0
- stbkit/cli/_internal/show_versions.py +36 -0
- stbkit/cli/_internal/validate.py +310 -0
- stbkit/cli/commands/convert.py +16 -0
- stbkit/cli/commands/diff.py +16 -0
- stbkit/cli/commands/validate.py +16 -0
- stbkit/cli/py.typed +0 -0
- stbkit/tools/__init__.py +12 -0
- stbkit/tools/_internal/__init__.py +5 -0
- stbkit/tools/_internal/constants.py +21 -0
- stbkit/tools/_internal/data_model/building_geometry.py +1208 -0
- stbkit/tools/_internal/data_model/building_geometry_web.py +106 -0
- stbkit/tools/_internal/data_model/element_data.py +93 -0
- stbkit/tools/_internal/data_model/ifc_data/entity_data.py +67 -0
- stbkit/tools/_internal/data_model/ifc_data/entity_names.py +32 -0
- stbkit/tools/_internal/data_model/shape_data.py +1089 -0
- stbkit/tools/_internal/diff/__init__.py +5 -0
- stbkit/tools/_internal/diff/common.py +50 -0
- stbkit/tools/_internal/diff/diff_xml.py +796 -0
- stbkit/tools/_internal/matrix.py +51 -0
- stbkit/tools/_internal/optional_dependencies/__init__.py +5 -0
- stbkit/tools/_internal/optional_dependencies/ifc_common.py +28 -0
- stbkit/tools/_internal/optional_dependencies/ifc_exporter/ifc_entity_exporter.py +473 -0
- stbkit/tools/_internal/optional_dependencies/ifc_exporter/ifc_profile_exporter.py +267 -0
- stbkit/tools/_internal/optional_dependencies/ifc_exporter/ifc_representation_exporter.py +178 -0
- stbkit/tools/_internal/optional_dependencies/ifc_pipeline.py +133 -0
- stbkit/tools/_internal/optional_dependencies/ifc_to_building_geometry.py +64 -0
- stbkit/tools/_internal/stb_io.py +116 -0
- stbkit/tools/_internal/stb_repair/_common.py +24 -0
- stbkit/tools/_internal/stb_repair/_stb_repair.py +197 -0
- stbkit/tools/_internal/stb_repair/_stb_v2_0_2_repair.py +53 -0
- stbkit/tools/_internal/stb_repair/_stb_v2_1_0_repair.py +109 -0
- stbkit/tools/_internal/stb_repair/_stb_v2_1_1_repair.py +109 -0
- stbkit/tools/_internal/studio_report.py +49 -0
- stbkit/tools/_internal/utils/atomic_writer.py +57 -0
- stbkit/tools/_internal/utils/float_rounding.py +49 -0
- stbkit/tools/_internal/utils/girder_utils.py +91 -0
- stbkit/tools/_internal/utils/guid_utils.py +30 -0
- stbkit/tools/_internal/utils/mesh_utils.py +1305 -0
- stbkit/tools/_internal/utils/node_utils.py +50 -0
- stbkit/tools/_internal/utils/unit_utils.py +23 -0
- stbkit/tools/_internal/vectors.py +222 -0
- stbkit/tools/converters/__init__.py +39 -0
- stbkit/tools/converters/_internal/__init__.py +5 -0
- stbkit/tools/converters/_internal/building_geometry_to_ply_text.py +32 -0
- stbkit/tools/converters/_internal/coord_converter.py +151 -0
- stbkit/tools/converters/_internal/element_data_to_building_geometry.py +549 -0
- stbkit/tools/converters/_internal/ifc_to_ply_text.py +21 -0
- stbkit/tools/converters/_internal/name_converter.py +23 -0
- stbkit/tools/converters/_internal/pipeline/__init__.py +5 -0
- stbkit/tools/converters/_internal/pipeline/data.py +188 -0
- stbkit/tools/converters/_internal/pipeline/execution.py +569 -0
- stbkit/tools/converters/_internal/pipeline/ply_pipeline.py +52 -0
- stbkit/tools/converters/_internal/pipeline/stb_pipeline.py +226 -0
- stbkit/tools/converters/_internal/pipeline/stb_pipeline_latest.py +39 -0
- stbkit/tools/converters/_internal/pipeline/step.py +139 -0
- stbkit/tools/converters/_internal/stb_latest_to_element_data/__init__.py +17 -0
- stbkit/tools/converters/_internal/stb_latest_to_element_data/_stb_latest_to_element_data.py +186 -0
- stbkit/tools/converters/_internal/stb_latest_to_element_data/member/member_footing.py +49 -0
- stbkit/tools/converters/_internal/stb_latest_to_element_data/member/member_line.py +533 -0
- stbkit/tools/converters/_internal/stb_latest_to_element_data/member/member_pile.py +100 -0
- stbkit/tools/converters/_internal/stb_latest_to_element_data/member/member_plane.py +103 -0
- stbkit/tools/converters/_internal/stb_latest_to_element_data/open.py +70 -0
- stbkit/tools/converters/_internal/stb_latest_to_element_data/section/sec.py +214 -0
- stbkit/tools/converters/_internal/stb_latest_to_element_data/section/sec_beam_rc.py +67 -0
- stbkit/tools/converters/_internal/stb_latest_to_element_data/section/sec_beam_s.py +97 -0
- stbkit/tools/converters/_internal/stb_latest_to_element_data/section/sec_beam_src.py +28 -0
- stbkit/tools/converters/_internal/stb_latest_to_element_data/section/sec_brace_s.py +49 -0
- stbkit/tools/converters/_internal/stb_latest_to_element_data/section/sec_column_cft.py +217 -0
- stbkit/tools/converters/_internal/stb_latest_to_element_data/section/sec_column_rc.py +41 -0
- stbkit/tools/converters/_internal/stb_latest_to_element_data/section/sec_column_s.py +127 -0
- stbkit/tools/converters/_internal/stb_latest_to_element_data/section/sec_column_src.py +173 -0
- stbkit/tools/converters/_internal/stb_latest_to_element_data/section/sec_foundation.py +225 -0
- stbkit/tools/converters/_internal/stb_latest_to_element_data/section/sec_parapet_rc.py +53 -0
- stbkit/tools/converters/_internal/stb_latest_to_element_data/section/sec_pile_rc.py +106 -0
- stbkit/tools/converters/_internal/stb_latest_to_element_data/section/sec_pile_s.py +100 -0
- stbkit/tools/converters/_internal/stb_latest_to_element_data/section/sec_steel.py +432 -0
- stbkit/tools/converters/_internal/stb_to_building_geometry.py +44 -0
- stbkit/tools/converters/_internal/stb_to_ifc_data/__init__.py +5 -0
- stbkit/tools/converters/_internal/stb_to_ifc_data/_stb_to_ifc_data.py +59 -0
- stbkit/tools/converters/_internal/stb_to_ifc_data/convert_option.py +22 -0
- stbkit/tools/converters/_internal/stb_to_ply_text.py +22 -0
- stbkit/tools/py.typed +0 -0
- stbkit/tools/upgrade/__init__.py +13 -0
- stbkit/tools/upgrade/_internal/__init__.py +5 -0
- stbkit/tools/upgrade/_internal/common.py +205 -0
- stbkit/tools/upgrade/_internal/upgrade.py +228 -0
- stbkit/tools/upgrade/_internal/v2_0_2_to_v2_1_0/__init__.py +60 -0
- stbkit/tools/upgrade/_internal/v2_0_2_to_v2_1_0/hook_funcs/hook_common.py +62 -0
- stbkit/tools/upgrade/_internal/v2_0_2_to_v2_1_0/hook_funcs/hook_joint_beam_shape_h.py +44 -0
- stbkit/tools/upgrade/_internal/v2_0_2_to_v2_1_0/hook_funcs/hook_sec_pile_rc.py +101 -0
- stbkit/tools/upgrade/_internal/v2_0_2_to_v2_1_0/hook_funcs/hook_sec_pile_s.py +78 -0
- stbkit/tools/upgrade/_internal/v2_0_2_to_v2_1_0/hook_funcs/hook_sec_slab_deck.py +56 -0
- stbkit/tools/upgrade/_internal/v2_0_2_to_v2_1_0/hook_funcs/hook_sec_slab_rc.py +128 -0
- stbkit/tools/upgrade/_internal/v2_0_2_to_v2_1_0/hook_funcs/post_girder.py +126 -0
- stbkit/tools/upgrade/_internal/v2_0_2_to_v2_1_0/hook_funcs/post_open.py +110 -0
- stbkit/tools/upgrade/_internal/v2_0_2_to_v2_1_0/hook_funcs/post_sec_beam_rc.py +227 -0
- stbkit/tools/upgrade/_internal/v2_0_2_to_v2_1_0/hook_funcs/post_sec_beam_s.py +1153 -0
- stbkit/tools/upgrade/_internal/v2_0_2_to_v2_1_0/hooks.py +22 -0
- stbkit/tools/upgrade/_internal/v2_0_2_to_v2_1_0/post.py +42 -0
- stbkit/tools/upgrade/_internal/v2_0_2_to_v2_1_0/tables.py +99 -0
- stbkit/tools/upgrade/_internal/v2_1_0_to_v2_1_1/__init__.py +58 -0
- stbkit/tools/upgrade/_internal/v2_1_0_to_v2_1_1/hooks.py +32 -0
- stbkit/tools/upgrade/_internal/v2_1_0_to_v2_1_1/tables.py +56 -0
- stbkit-0.1.0a9.dev1.dist-info/METADATA +196 -0
- stbkit-0.1.0a9.dev1.dist-info/RECORD +125 -0
- stbkit-0.1.0a9.dev1.dist-info/WHEEL +5 -0
- stbkit-0.1.0a9.dev1.dist-info/entry_points.txt +2 -0
- stbkit-0.1.0a9.dev1.dist-info/licenses/LICENSE +373 -0
- stbkit-0.1.0a9.dev1.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
# Copyright 2025-2026 TAISEI CORPORATION
|
|
2
|
+
# SPDX-License-Identifier: MPL-2.0
|
|
3
|
+
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
6
|
+
|
|
7
|
+
from collections.abc import Mapping
|
|
8
|
+
from types import ModuleType
|
|
9
|
+
from typing import Any, Protocol
|
|
10
|
+
|
|
11
|
+
from stbkit.core._internal.name_converter import (
|
|
12
|
+
xml_element_name_to_key,
|
|
13
|
+
xml_element_name_to_python_class_name,
|
|
14
|
+
)
|
|
15
|
+
from stbkit.core.data_model.common import (
|
|
16
|
+
StBridgeElement,
|
|
17
|
+
StBridgeRoot,
|
|
18
|
+
_StBridgeExtensionElement,
|
|
19
|
+
)
|
|
20
|
+
from stbkit.core.stb_reporting import Code, Phase, Reporter
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class ElementHook(Protocol):
|
|
24
|
+
"""変換が終わった後に呼ばれる後処理"""
|
|
25
|
+
|
|
26
|
+
def __call__(
|
|
27
|
+
self, before: StBridgeElement, after: StBridgeElement, *, reporter: Reporter
|
|
28
|
+
) -> None: ...
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _clone_extension_element(element: StBridgeElement) -> _StBridgeExtensionElement:
|
|
32
|
+
clone = _StBridgeExtensionElement(element._xml_name())
|
|
33
|
+
_copy_extension(element, clone)
|
|
34
|
+
return clone
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _copy_extension(source: StBridgeElement, new_element: StBridgeElement) -> None:
|
|
38
|
+
extension = source._extension
|
|
39
|
+
if extension is None:
|
|
40
|
+
return
|
|
41
|
+
if extension._attributes:
|
|
42
|
+
for name, value in extension._attributes.items():
|
|
43
|
+
new_element._ensure_extension._set_attribute(name, value)
|
|
44
|
+
if extension._children:
|
|
45
|
+
for child in extension._children:
|
|
46
|
+
new_element._ensure_extension._set_child(_clone_extension_element(child))
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def _resolve_renamed_child_attr_name(
|
|
50
|
+
element: StBridgeElement,
|
|
51
|
+
attr_name: str,
|
|
52
|
+
class_name_table: dict[str, str],
|
|
53
|
+
) -> str | None:
|
|
54
|
+
if not element._is_child(attr_name):
|
|
55
|
+
return None
|
|
56
|
+
source_child_xml_name: str = element._xml_name(attr_name)
|
|
57
|
+
target_child_xml_name: str | None = class_name_table.get(source_child_xml_name)
|
|
58
|
+
if target_child_xml_name is None:
|
|
59
|
+
return None
|
|
60
|
+
|
|
61
|
+
source_child_key: str = xml_element_name_to_key(source_child_xml_name)
|
|
62
|
+
if attr_name == source_child_key:
|
|
63
|
+
return xml_element_name_to_key(target_child_xml_name)
|
|
64
|
+
return None
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def convert_element(
|
|
68
|
+
element: StBridgeElement,
|
|
69
|
+
module_to: ModuleType,
|
|
70
|
+
*,
|
|
71
|
+
ignore_field: dict[str, list[str]] | None = None,
|
|
72
|
+
class_name_table: dict[str, str] | None = None,
|
|
73
|
+
attr_name_table: dict[str, dict[str, str]] | None = None,
|
|
74
|
+
hooks: Mapping[str, ElementHook] | None = None,
|
|
75
|
+
post: ElementHook | None = None,
|
|
76
|
+
reporter: Reporter,
|
|
77
|
+
) -> StBridgeElement | None:
|
|
78
|
+
"""要素を変換後バージョンのモジュールの同等クラスへ複製する。
|
|
79
|
+
|
|
80
|
+
変換後のバージョンに対応するクラスが無い場合はNoneを返す。
|
|
81
|
+
"""
|
|
82
|
+
if ignore_field is None:
|
|
83
|
+
ignore_field = {}
|
|
84
|
+
old_class_name: str = element.__class__.__name__
|
|
85
|
+
old_element_name: str = element._xml_name()
|
|
86
|
+
new_class_name: str = old_class_name
|
|
87
|
+
if class_name_table and old_element_name in class_name_table:
|
|
88
|
+
new_class_name = xml_element_name_to_python_class_name(
|
|
89
|
+
class_name_table[old_element_name]
|
|
90
|
+
)
|
|
91
|
+
NewClass: type[StBridgeElement] | None = getattr(module_to, new_class_name, None)
|
|
92
|
+
if NewClass is None:
|
|
93
|
+
reporter.warning(
|
|
94
|
+
message=(
|
|
95
|
+
f"変換後のバージョンにクラス[{new_class_name}]がないためスキップします"
|
|
96
|
+
),
|
|
97
|
+
code=Code.NOT_IMPLEMENTED,
|
|
98
|
+
phase=Phase.UPGRADE,
|
|
99
|
+
stb_element=element,
|
|
100
|
+
)
|
|
101
|
+
return None
|
|
102
|
+
new_element: StBridgeElement = NewClass()
|
|
103
|
+
for key in element._fields:
|
|
104
|
+
attr_name: str = key
|
|
105
|
+
if attr_name.startswith("_"):
|
|
106
|
+
continue
|
|
107
|
+
new_attr_name: str = attr_name
|
|
108
|
+
if attr_name in ignore_field.get(old_element_name, []):
|
|
109
|
+
continue
|
|
110
|
+
if (
|
|
111
|
+
attr_name_table
|
|
112
|
+
and old_element_name in attr_name_table
|
|
113
|
+
and attr_name in attr_name_table[old_element_name]
|
|
114
|
+
):
|
|
115
|
+
new_attr_name = attr_name_table[old_element_name][attr_name]
|
|
116
|
+
elif class_name_table:
|
|
117
|
+
auto_renamed_attr_name = _resolve_renamed_child_attr_name(
|
|
118
|
+
element,
|
|
119
|
+
attr_name,
|
|
120
|
+
class_name_table,
|
|
121
|
+
)
|
|
122
|
+
if auto_renamed_attr_name is not None:
|
|
123
|
+
new_attr_name = auto_renamed_attr_name
|
|
124
|
+
value: Any = getattr(element, f"_{attr_name}")
|
|
125
|
+
if not hasattr(new_element, f"_{new_attr_name}"):
|
|
126
|
+
if value is not None:
|
|
127
|
+
reporter.warning(
|
|
128
|
+
message=(f"変換後のバージョンに属性[{new_attr_name}]がありません"),
|
|
129
|
+
code=Code.NOT_IMPLEMENTED,
|
|
130
|
+
phase=Phase.UPGRADE,
|
|
131
|
+
stb_element=element,
|
|
132
|
+
attr_name=attr_name,
|
|
133
|
+
)
|
|
134
|
+
continue
|
|
135
|
+
else:
|
|
136
|
+
continue
|
|
137
|
+
elif element._is_child(attr_name) and new_element._is_child(new_attr_name):
|
|
138
|
+
source_is_children: bool = element._is_children(attr_name)
|
|
139
|
+
target_is_children: bool = new_element._is_children(new_attr_name)
|
|
140
|
+
if source_is_children and target_is_children:
|
|
141
|
+
new_items: list[StBridgeElement] = []
|
|
142
|
+
for item in getattr(element, attr_name):
|
|
143
|
+
new_item: StBridgeElement | None = convert_element(
|
|
144
|
+
item,
|
|
145
|
+
module_to,
|
|
146
|
+
ignore_field=ignore_field,
|
|
147
|
+
class_name_table=class_name_table,
|
|
148
|
+
attr_name_table=attr_name_table,
|
|
149
|
+
hooks=hooks,
|
|
150
|
+
reporter=reporter,
|
|
151
|
+
)
|
|
152
|
+
if new_item is not None:
|
|
153
|
+
new_items.append(new_item)
|
|
154
|
+
setattr(new_element, new_attr_name, new_items)
|
|
155
|
+
elif not source_is_children and not target_is_children:
|
|
156
|
+
if value:
|
|
157
|
+
new_child: StBridgeElement | None = convert_element(
|
|
158
|
+
value,
|
|
159
|
+
module_to,
|
|
160
|
+
ignore_field=ignore_field,
|
|
161
|
+
class_name_table=class_name_table,
|
|
162
|
+
attr_name_table=attr_name_table,
|
|
163
|
+
hooks=hooks,
|
|
164
|
+
reporter=reporter,
|
|
165
|
+
)
|
|
166
|
+
if new_child is not None:
|
|
167
|
+
setattr(new_element, new_attr_name, new_child)
|
|
168
|
+
elif not source_is_children and target_is_children:
|
|
169
|
+
if value:
|
|
170
|
+
new_child = convert_element(
|
|
171
|
+
value,
|
|
172
|
+
module_to,
|
|
173
|
+
ignore_field=ignore_field,
|
|
174
|
+
class_name_table=class_name_table,
|
|
175
|
+
attr_name_table=attr_name_table,
|
|
176
|
+
hooks=hooks,
|
|
177
|
+
reporter=reporter,
|
|
178
|
+
)
|
|
179
|
+
if new_child is not None:
|
|
180
|
+
setattr(new_element, new_attr_name, [new_child])
|
|
181
|
+
else:
|
|
182
|
+
reporter.warning(
|
|
183
|
+
message=("子要素の最大回数が異なります"),
|
|
184
|
+
code=Code.SCHEMA_VERSION_MISMATCH,
|
|
185
|
+
phase=Phase.UPGRADE,
|
|
186
|
+
stb_element=element,
|
|
187
|
+
attr_name=attr_name,
|
|
188
|
+
)
|
|
189
|
+
else:
|
|
190
|
+
if value is not None:
|
|
191
|
+
new_element._set_attribute_by_any(new_attr_name, value)
|
|
192
|
+
_copy_extension(element, new_element)
|
|
193
|
+
if hooks is not None:
|
|
194
|
+
hook: ElementHook | None = hooks.get(old_element_name)
|
|
195
|
+
if hook is not None:
|
|
196
|
+
hook(element, new_element, reporter=reporter)
|
|
197
|
+
if post is not None:
|
|
198
|
+
post(
|
|
199
|
+
element,
|
|
200
|
+
new_element,
|
|
201
|
+
reporter=reporter,
|
|
202
|
+
)
|
|
203
|
+
if isinstance(new_element, StBridgeRoot):
|
|
204
|
+
new_element._set_version(reporter=reporter, phase=Phase.UPGRADE)
|
|
205
|
+
return new_element
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
# Copyright 2025-2026 TAISEI CORPORATION
|
|
2
|
+
# SPDX-License-Identifier: MPL-2.0
|
|
3
|
+
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
6
|
+
|
|
7
|
+
from logging import Logger
|
|
8
|
+
from typing import TYPE_CHECKING, Literal, overload
|
|
9
|
+
|
|
10
|
+
from stbkit.core.data_model import (
|
|
11
|
+
stb_v2_0_0,
|
|
12
|
+
stb_v2_0_1,
|
|
13
|
+
stb_v2_0_2,
|
|
14
|
+
stb_v2_1_0,
|
|
15
|
+
stb_v2_1_1,
|
|
16
|
+
)
|
|
17
|
+
from stbkit.core.data_model.common import StBridgeRoot
|
|
18
|
+
from stbkit.core.stb_exceptions import UnsupportedStbVersionError
|
|
19
|
+
from stbkit.core.stb_reporting import Code, Phase, Reporter, get_reporter
|
|
20
|
+
from stbkit.core.validation._internal.validator import _validate
|
|
21
|
+
|
|
22
|
+
from .common import convert_element
|
|
23
|
+
from .v2_0_2_to_v2_1_0 import upgrade_v2_0_2_to_v2_1_0
|
|
24
|
+
from .v2_1_0_to_v2_1_1 import upgrade_v2_1_0_to_v2_1_1
|
|
25
|
+
|
|
26
|
+
if TYPE_CHECKING:
|
|
27
|
+
from stbkit.api import stb_latest
|
|
28
|
+
|
|
29
|
+
__all__ = ["upgrade_v2_0_2_to_v2_1_0", "upgrade_v2_1_0_to_v2_1_1"]
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def upgrade_v2_0_0_to_v2_0_1(
|
|
33
|
+
stb: stb_v2_0_0.StBridge,
|
|
34
|
+
*,
|
|
35
|
+
reporter: Reporter,
|
|
36
|
+
) -> stb_v2_0_1.StBridge:
|
|
37
|
+
reporter.info(
|
|
38
|
+
"---v2.0.0->v2.0.1変換処理開始---",
|
|
39
|
+
code=Code.PROGRESS_INFO,
|
|
40
|
+
phase=Phase.UPGRADE,
|
|
41
|
+
)
|
|
42
|
+
new_stb = convert_element(
|
|
43
|
+
stb,
|
|
44
|
+
stb_v2_0_1,
|
|
45
|
+
reporter=reporter,
|
|
46
|
+
)
|
|
47
|
+
if isinstance(new_stb, stb_v2_0_1.StBridge):
|
|
48
|
+
new_stb.version = stb_v2_0_1.VERSION
|
|
49
|
+
reporter.info(
|
|
50
|
+
"---v2.0.0->v2.0.1変換処理完了---",
|
|
51
|
+
code=Code.PROGRESS_INFO,
|
|
52
|
+
phase=Phase.UPGRADE,
|
|
53
|
+
)
|
|
54
|
+
reporter.info(
|
|
55
|
+
"---v2.0.1バリデーション開始---",
|
|
56
|
+
code=Code.PROGRESS_INFO,
|
|
57
|
+
phase=Phase.UPGRADE,
|
|
58
|
+
)
|
|
59
|
+
_validate(reporter=reporter, stb=new_stb)
|
|
60
|
+
reporter.info(
|
|
61
|
+
"---v2.0.1バリデーション完了---",
|
|
62
|
+
code=Code.PROGRESS_INFO,
|
|
63
|
+
phase=Phase.UPGRADE,
|
|
64
|
+
)
|
|
65
|
+
return new_stb
|
|
66
|
+
else:
|
|
67
|
+
raise TypeError("ST-Bridgeのバージョン変換に失敗しました")
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def upgrade_v2_0_1_to_v2_0_2(
|
|
71
|
+
stb: stb_v2_0_1.StBridge,
|
|
72
|
+
*,
|
|
73
|
+
reporter: Reporter,
|
|
74
|
+
) -> stb_v2_0_2.StBridge:
|
|
75
|
+
reporter.info(
|
|
76
|
+
"---v2.0.1->v2.0.2変換処理開始---",
|
|
77
|
+
code=Code.PROGRESS_INFO,
|
|
78
|
+
phase=Phase.UPGRADE,
|
|
79
|
+
)
|
|
80
|
+
new_stb = convert_element(
|
|
81
|
+
stb,
|
|
82
|
+
stb_v2_0_2,
|
|
83
|
+
reporter=reporter,
|
|
84
|
+
)
|
|
85
|
+
if isinstance(new_stb, stb_v2_0_2.StBridge):
|
|
86
|
+
new_stb.version = stb_v2_0_2.VERSION
|
|
87
|
+
reporter.info(
|
|
88
|
+
"---v2.0.1->v2.0.2変換処理完了---",
|
|
89
|
+
code=Code.PROGRESS_INFO,
|
|
90
|
+
phase=Phase.UPGRADE,
|
|
91
|
+
)
|
|
92
|
+
reporter.info(
|
|
93
|
+
"---v2.0.2バリデーション開始---",
|
|
94
|
+
code=Code.PROGRESS_INFO,
|
|
95
|
+
phase=Phase.UPGRADE,
|
|
96
|
+
)
|
|
97
|
+
_validate(reporter=reporter, stb=new_stb)
|
|
98
|
+
reporter.info(
|
|
99
|
+
"---v2.0.2バリデーション完了---",
|
|
100
|
+
code=Code.PROGRESS_INFO,
|
|
101
|
+
phase=Phase.UPGRADE,
|
|
102
|
+
)
|
|
103
|
+
return new_stb
|
|
104
|
+
else:
|
|
105
|
+
raise TypeError("ST-Bridgeのバージョン変換に失敗しました")
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def upgrade_to_v2_0_1(stb: StBridgeRoot, *, reporter: Reporter) -> stb_v2_0_1.StBridge:
|
|
109
|
+
if isinstance(stb, stb_v2_0_1.StBridge):
|
|
110
|
+
return stb
|
|
111
|
+
elif isinstance(stb, stb_v2_0_0.StBridge):
|
|
112
|
+
return upgrade_v2_0_0_to_v2_0_1(stb, reporter=reporter)
|
|
113
|
+
else:
|
|
114
|
+
raise NotImplementedError()
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def upgrade_to_v2_0_2(stb: StBridgeRoot, *, reporter: Reporter) -> stb_v2_0_2.StBridge:
|
|
118
|
+
if isinstance(stb, stb_v2_0_2.StBridge):
|
|
119
|
+
return stb
|
|
120
|
+
elif isinstance(stb, stb_v2_0_1.StBridge):
|
|
121
|
+
return upgrade_v2_0_1_to_v2_0_2(stb, reporter=reporter)
|
|
122
|
+
else:
|
|
123
|
+
raise NotImplementedError()
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
def upgrade_to_v2_1_0(stb: StBridgeRoot, *, reporter: Reporter) -> stb_v2_1_0.StBridge:
|
|
127
|
+
if isinstance(stb, stb_v2_1_0.StBridge):
|
|
128
|
+
return stb
|
|
129
|
+
elif not isinstance(stb, stb_v2_0_2.StBridge):
|
|
130
|
+
stb = upgrade_to_v2_0_2(stb, reporter=reporter)
|
|
131
|
+
return upgrade_v2_0_2_to_v2_1_0(stb, reporter=reporter)
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def upgrade_to_v2_1_1(stb: StBridgeRoot, *, reporter: Reporter) -> stb_v2_1_1.StBridge:
|
|
135
|
+
if isinstance(stb, stb_v2_1_1.StBridge):
|
|
136
|
+
return stb
|
|
137
|
+
elif not isinstance(stb, stb_v2_1_0.StBridge):
|
|
138
|
+
stb = upgrade_to_v2_1_0(stb, reporter=reporter)
|
|
139
|
+
return upgrade_v2_1_0_to_v2_1_1(stb, reporter=reporter)
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
@overload
|
|
143
|
+
def upgrade_to(
|
|
144
|
+
stb: StBridgeRoot,
|
|
145
|
+
to_version: Literal["2.0.1"],
|
|
146
|
+
*,
|
|
147
|
+
logger: Logger | None = None,
|
|
148
|
+
reporter: Reporter | None = None,
|
|
149
|
+
) -> stb_v2_0_1.StBridge: ...
|
|
150
|
+
@overload
|
|
151
|
+
def upgrade_to(
|
|
152
|
+
stb: StBridgeRoot,
|
|
153
|
+
to_version: Literal["2.0.2"],
|
|
154
|
+
*,
|
|
155
|
+
logger: Logger | None = None,
|
|
156
|
+
reporter: Reporter | None = None,
|
|
157
|
+
) -> stb_v2_0_2.StBridge: ...
|
|
158
|
+
@overload
|
|
159
|
+
def upgrade_to(
|
|
160
|
+
stb: StBridgeRoot,
|
|
161
|
+
to_version: Literal["2.1.0"],
|
|
162
|
+
*,
|
|
163
|
+
logger: Logger | None = None,
|
|
164
|
+
reporter: Reporter | None = None,
|
|
165
|
+
) -> stb_v2_1_0.StBridge: ...
|
|
166
|
+
@overload
|
|
167
|
+
def upgrade_to(
|
|
168
|
+
stb: StBridgeRoot,
|
|
169
|
+
to_version: Literal["2.1.1", "latest"],
|
|
170
|
+
*,
|
|
171
|
+
logger: Logger | None = None,
|
|
172
|
+
reporter: Reporter | None = None,
|
|
173
|
+
) -> stb_v2_1_1.StBridge: ...
|
|
174
|
+
def upgrade_to(
|
|
175
|
+
stb: StBridgeRoot,
|
|
176
|
+
to_version: Literal["2.0.1", "2.0.2", "2.1.0", "2.1.1", "latest"] = "latest",
|
|
177
|
+
*,
|
|
178
|
+
logger: Logger | None = None,
|
|
179
|
+
reporter: Reporter | None = None,
|
|
180
|
+
) -> StBridgeRoot:
|
|
181
|
+
"""指定したバージョンにST-Bridgeを変換する"""
|
|
182
|
+
reporter = get_reporter(logger=logger, reporter=reporter)
|
|
183
|
+
if to_version == "latest":
|
|
184
|
+
return upgrade_to_latest(stb, reporter=reporter)
|
|
185
|
+
match to_version:
|
|
186
|
+
case "2.0.1":
|
|
187
|
+
return upgrade_to_v2_0_1(stb, reporter=reporter)
|
|
188
|
+
case "2.0.2":
|
|
189
|
+
return upgrade_to_v2_0_2(stb, reporter=reporter)
|
|
190
|
+
case "2.1.0":
|
|
191
|
+
return upgrade_to_v2_1_0(stb, reporter=reporter)
|
|
192
|
+
case "2.1.1":
|
|
193
|
+
return upgrade_to_v2_1_1(stb, reporter=reporter)
|
|
194
|
+
case _:
|
|
195
|
+
raise UnsupportedStbVersionError(version=to_version)
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
def upgrade_to_latest(
|
|
199
|
+
stb: StBridgeRoot,
|
|
200
|
+
*,
|
|
201
|
+
logger: Logger | None = None,
|
|
202
|
+
reporter: Reporter | None = None,
|
|
203
|
+
) -> "stb_latest.StBridge":
|
|
204
|
+
"""ST-Bridgeモデルをstbkitが対応する最新版へ変換します。
|
|
205
|
+
|
|
206
|
+
既に最新版の場合は、変換せず同じインスタンスをそのまま返します。
|
|
207
|
+
変換後のモデルはバリデーションを行い、結果をreporterへ記録します。
|
|
208
|
+
|
|
209
|
+
変換が実装されていない要素や属性があっても例外にせず、reporterへ記録して変換を続けます。
|
|
210
|
+
|
|
211
|
+
Args:
|
|
212
|
+
stb: 変換元のST-Bridgeのルート要素。
|
|
213
|
+
logger: 出力先Logger
|
|
214
|
+
reporter: 出力先Reporter。
|
|
215
|
+
|
|
216
|
+
Returns:
|
|
217
|
+
stb_latest.StBridge: 最新版のST-Bridgeのルート要素。
|
|
218
|
+
|
|
219
|
+
Raises:
|
|
220
|
+
UnsupportedStbVersionError: 対応していないバージョンのモデルを渡した場合。
|
|
221
|
+
TypeError: バージョン変換に失敗した場合。
|
|
222
|
+
|
|
223
|
+
Examples:
|
|
224
|
+
>>> import stbkit.api
|
|
225
|
+
>>> stb = stbkit.api.upgrade_stb(stbkit.api.load("model_v2_0_1.stb"))
|
|
226
|
+
"""
|
|
227
|
+
reporter = get_reporter(logger, reporter)
|
|
228
|
+
return upgrade_to_v2_1_1(stb, reporter=reporter)
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Copyright 2025-2026 TAISEI CORPORATION
|
|
2
|
+
# SPDX-License-Identifier: MPL-2.0
|
|
3
|
+
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
6
|
+
|
|
7
|
+
from stbkit.core.data_model import (
|
|
8
|
+
stb_v2_0_2,
|
|
9
|
+
stb_v2_1_0,
|
|
10
|
+
)
|
|
11
|
+
from stbkit.core.stb_reporting import Code, Phase, Reporter
|
|
12
|
+
from stbkit.core.validation._internal.validator import _validate
|
|
13
|
+
|
|
14
|
+
from .. import common
|
|
15
|
+
from . import tables
|
|
16
|
+
from .hooks import HOOKS
|
|
17
|
+
from .post import post_conversion
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def upgrade_v2_0_2_to_v2_1_0(
|
|
21
|
+
stb: stb_v2_0_2.StBridge,
|
|
22
|
+
*,
|
|
23
|
+
reporter: Reporter,
|
|
24
|
+
) -> stb_v2_1_0.StBridge:
|
|
25
|
+
reporter.info(
|
|
26
|
+
"---v2.0.2->v2.1.0変換処理開始---",
|
|
27
|
+
code=Code.PROGRESS_INFO,
|
|
28
|
+
phase=Phase.UPGRADE,
|
|
29
|
+
)
|
|
30
|
+
new_stb = common.convert_element(
|
|
31
|
+
stb,
|
|
32
|
+
stb_v2_1_0,
|
|
33
|
+
ignore_field=tables.ignore_field,
|
|
34
|
+
class_name_table=tables.class_name_table,
|
|
35
|
+
attr_name_table=tables.attr_name_table,
|
|
36
|
+
hooks=HOOKS,
|
|
37
|
+
post=post_conversion,
|
|
38
|
+
reporter=reporter,
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
if isinstance(new_stb, stb_v2_1_0.StBridge):
|
|
42
|
+
reporter.info(
|
|
43
|
+
"---v2.0.2->v2.1.0変換処理完了---",
|
|
44
|
+
code=Code.PROGRESS_INFO,
|
|
45
|
+
phase=Phase.UPGRADE,
|
|
46
|
+
)
|
|
47
|
+
reporter.info(
|
|
48
|
+
"---v2.1.0バリデーション開始---",
|
|
49
|
+
code=Code.PROGRESS_INFO,
|
|
50
|
+
phase=Phase.UPGRADE,
|
|
51
|
+
)
|
|
52
|
+
_validate(reporter=reporter, stb=new_stb)
|
|
53
|
+
reporter.info(
|
|
54
|
+
"---v2.1.0バリデーション完了---",
|
|
55
|
+
code=Code.PROGRESS_INFO,
|
|
56
|
+
phase=Phase.UPGRADE,
|
|
57
|
+
)
|
|
58
|
+
return new_stb
|
|
59
|
+
else:
|
|
60
|
+
raise TypeError("ST-Bridgeのバージョン変換に失敗しました")
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Copyright 2025-2026 TAISEI CORPORATION
|
|
2
|
+
# SPDX-License-Identifier: MPL-2.0
|
|
3
|
+
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
6
|
+
|
|
7
|
+
from stbkit.core.data_model import stb_v2_0_2, stb_v2_1_0
|
|
8
|
+
from stbkit.core.data_model.common import StBridgeElement
|
|
9
|
+
from stbkit.core.stb_exceptions import NoneAccessError
|
|
10
|
+
from stbkit.core.stb_reporting import Reporter
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def column_rc_rebar_position_apply_to_stb_apply_column(
|
|
14
|
+
v202: stb_v2_0_2.StbColumnRcRebarPositionApply,
|
|
15
|
+
) -> stb_v2_1_0.StbApplyRcColumn:
|
|
16
|
+
v210: stb_v2_1_0.StbApplyRcColumn = stb_v2_1_0.StbApplyRcColumn()
|
|
17
|
+
v210.depth_cover_start_x_or_none = v202.depth_cover_or_none
|
|
18
|
+
v210.depth_cover_start_y_or_none = v202.depth_cover_or_none
|
|
19
|
+
v210.depth_cover_end_x_or_none = v202.depth_cover_or_none
|
|
20
|
+
v210.depth_cover_end_y_or_none = v202.depth_cover_or_none
|
|
21
|
+
v210.interval_or_none = v202.interval_or_none
|
|
22
|
+
v210.center_start_x_or_none = v202.center_or_none
|
|
23
|
+
v210.center_start_y_or_none = v202.center_or_none
|
|
24
|
+
v210.center_end_x_or_none = v202.center_or_none
|
|
25
|
+
v210.center_end_y_or_none = v202.center_or_none
|
|
26
|
+
v210.center_interval_or_none = v202.length_to_center_or_none
|
|
27
|
+
# set_defaultは無視
|
|
28
|
+
return v210
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def post_common(v202: stb_v2_0_2.StBridge, v210: stb_v2_1_0.StBridge) -> None:
|
|
32
|
+
"""TODO:作成中。要対応"""
|
|
33
|
+
try:
|
|
34
|
+
v202_c_r_r_p_a = (
|
|
35
|
+
v202.stb_common.stb_apply_conditions_list.stb_column_rc_rebar_position_apply
|
|
36
|
+
)
|
|
37
|
+
except NoneAccessError:
|
|
38
|
+
return
|
|
39
|
+
v210_a_c_l_r: stb_v2_1_0.StbApplyConditionListRc = (
|
|
40
|
+
v210.ensure.stb_common()
|
|
41
|
+
.ensure.stb_apply_conditions_list()
|
|
42
|
+
.ensure.stb_apply_condition_list_rc()
|
|
43
|
+
)
|
|
44
|
+
v210_a_c_l_r.stb_apply_rc_column = (
|
|
45
|
+
column_rc_rebar_position_apply_to_stb_apply_column(v202_c_r_r_p_a)
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def hook_apply_conditions_list(
|
|
50
|
+
before: StBridgeElement, after: StBridgeElement, *, reporter: Reporter
|
|
51
|
+
) -> None:
|
|
52
|
+
if not isinstance(before, stb_v2_0_2.StbApplyConditionsList) or not isinstance(
|
|
53
|
+
after, stb_v2_1_0.StbApplyConditionsList
|
|
54
|
+
):
|
|
55
|
+
return
|
|
56
|
+
try:
|
|
57
|
+
v202_apply = before.stb_column_rc_rebar_position_apply
|
|
58
|
+
except NoneAccessError:
|
|
59
|
+
return
|
|
60
|
+
after.ensure.stb_apply_condition_list_rc().stb_apply_rc_column = (
|
|
61
|
+
column_rc_rebar_position_apply_to_stb_apply_column(v202_apply)
|
|
62
|
+
)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Copyright 2026 TAISEI CORPORATION
|
|
2
|
+
# SPDX-License-Identifier: MPL-2.0
|
|
3
|
+
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
6
|
+
|
|
7
|
+
from stbkit.core.data_model import stb_v2_0_2, stb_v2_1_0
|
|
8
|
+
from stbkit.core.data_model.common import StBridgeElement
|
|
9
|
+
from stbkit.core.stb_reporting import Reporter
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def joint_beam_shape_h(
|
|
13
|
+
before: StBridgeElement, after: StBridgeElement, *, reporter: Reporter
|
|
14
|
+
) -> None:
|
|
15
|
+
if not isinstance(before, stb_v2_0_2.StbJointBeamShapeH) or not isinstance(
|
|
16
|
+
after, stb_v2_1_0.StbJointBeamShapeH
|
|
17
|
+
):
|
|
18
|
+
return
|
|
19
|
+
frange_202: stb_v2_0_2.StbJointShapeHFlange | None = (
|
|
20
|
+
before.stb_joint_shape_h_flange_or_none
|
|
21
|
+
)
|
|
22
|
+
if frange_202:
|
|
23
|
+
nf: int | None = frange_202.nf_or_none
|
|
24
|
+
mf: int | None = frange_202.mf_or_none
|
|
25
|
+
frange_210: stb_v2_1_0.StbJointShapeHFlange = (
|
|
26
|
+
after.ensure.stb_joint_shape_h_flange()
|
|
27
|
+
)
|
|
28
|
+
if nf is not None and mf is not None:
|
|
29
|
+
for i in range(1, nf + 1):
|
|
30
|
+
frange_bolt: stb_v2_1_0.StbJointShapeHFlangeBolt = (
|
|
31
|
+
stb_v2_1_0.StbJointShapeHFlangeBolt(id_order=i, mf=mf)
|
|
32
|
+
)
|
|
33
|
+
frange_210.stb_joint_shape_h_flange_bolt.append(frange_bolt)
|
|
34
|
+
web_202: stb_v2_0_2.StbJointShapeHWeb | None = before.stb_joint_shape_h_web_or_none
|
|
35
|
+
if web_202:
|
|
36
|
+
nw: int | None = web_202.nw_or_none
|
|
37
|
+
mw: int | None = web_202.mw_or_none
|
|
38
|
+
web_210: stb_v2_1_0.StbJointShapeHWeb = after.ensure.stb_joint_shape_h_web()
|
|
39
|
+
if nw is not None and mw is not None:
|
|
40
|
+
for i in range(1, nw + 1):
|
|
41
|
+
web_bolt: stb_v2_1_0.StbJointShapeHWebBolt = (
|
|
42
|
+
stb_v2_1_0.StbJointShapeHWebBolt(id_order=i, mw=mw)
|
|
43
|
+
)
|
|
44
|
+
web_210.stb_joint_shape_h_web_bolt.append(web_bolt)
|