openepd 3.0.0__py3-none-any.whl → 3.1.0__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.
Files changed (48) hide show
  1. openepd/__version__.py +1 -1
  2. openepd/model/specs/__init__.py +71 -19
  3. openepd/model/specs/aluminium.py +1 -1
  4. openepd/model/specs/concrete.py +1 -167
  5. openepd/model/specs/generated/accessories.py +63 -0
  6. openepd/model/specs/generated/aggregates.py +71 -0
  7. openepd/model/specs/generated/aluminium.py +66 -0
  8. openepd/model/specs/generated/asphalt.py +86 -0
  9. openepd/model/specs/generated/bulk_materials.py +26 -0
  10. openepd/model/specs/generated/cast_decks_and_underlayment.py +26 -0
  11. openepd/model/specs/generated/cladding.py +214 -0
  12. openepd/model/specs/generated/cmu.py +46 -0
  13. openepd/model/specs/generated/common.py +27 -0
  14. openepd/model/specs/generated/concrete.py +151 -0
  15. openepd/model/specs/generated/conveying_equipment.py +57 -0
  16. openepd/model/specs/generated/electrical.py +297 -0
  17. openepd/model/specs/generated/electrical_transmission_and_distribution_equipment.py +63 -0
  18. openepd/model/specs/generated/electricity.py +26 -0
  19. openepd/model/specs/generated/enums.py +2420 -0
  20. openepd/model/specs/generated/finishes.py +519 -0
  21. openepd/model/specs/generated/fire_and_smoke_protection.py +79 -0
  22. openepd/model/specs/generated/furnishings.py +95 -0
  23. openepd/model/specs/generated/grouting.py +26 -0
  24. openepd/model/specs/generated/manufacturing_inputs.py +131 -0
  25. openepd/model/specs/generated/masonry.py +77 -0
  26. openepd/model/specs/generated/material_handling.py +35 -0
  27. openepd/model/specs/generated/mechanical.py +271 -0
  28. openepd/model/specs/generated/mechanical_insulation.py +41 -0
  29. openepd/model/specs/generated/network_infrastructure.py +181 -0
  30. openepd/model/specs/generated/openings.py +423 -0
  31. openepd/model/specs/generated/other_electrical_equipment.py +26 -0
  32. openepd/model/specs/generated/other_materials.py +123 -0
  33. openepd/model/specs/generated/plumbing.py +153 -0
  34. openepd/model/specs/generated/precast_concrete.py +68 -0
  35. openepd/model/specs/generated/sheathing.py +74 -0
  36. openepd/model/specs/generated/steel.py +224 -0
  37. openepd/model/specs/generated/thermal_moisture_protection.py +233 -0
  38. openepd/model/specs/generated/utility_piping.py +65 -0
  39. openepd/model/specs/generated/wood.py +167 -0
  40. openepd/model/specs/generated/wood_joists.py +38 -0
  41. openepd/model/specs/glass.py +1 -45
  42. openepd/model/specs/steel.py +1 -10
  43. openepd/model/validation/quantity.py +4 -3
  44. {openepd-3.0.0.dist-info → openepd-3.1.0.dist-info}/METADATA +1 -1
  45. openepd-3.1.0.dist-info/RECORD +95 -0
  46. openepd-3.0.0.dist-info/RECORD +0 -59
  47. {openepd-3.0.0.dist-info → openepd-3.1.0.dist-info}/LICENSE +0 -0
  48. {openepd-3.0.0.dist-info → openepd-3.1.0.dist-info}/WHEEL +0 -0
@@ -0,0 +1,214 @@
1
+ #
2
+ # Copyright 2024 by C Change Labs Inc. www.c-change-labs.com
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+ # This software was developed with support from the Skanska USA,
17
+ # Charles Pankow Foundation, Microsoft Sustainability Fund, Interface, MKA Foundation, and others.
18
+ # Find out more at www.BuildingTransparency.org
19
+ #
20
+ from openepd.compat.pydantic import pyd
21
+ from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
22
+ from openepd.model.specs.generated.enums import CladdingFacingMaterial, CladdingInsulatingMaterial, SidingFormFactor
23
+ from openepd.model.validation.quantity import LengthMmStr, LengthMStr, validate_unit_factory
24
+
25
+
26
+ class AluminiumSidingV1(BaseOpenEpdHierarchicalSpec):
27
+ """Aluminium siding performance specification."""
28
+
29
+ _EXT_VERSION = "1.0"
30
+
31
+
32
+ class SteelSidingV1(BaseOpenEpdHierarchicalSpec):
33
+ """Steel siding performance specification."""
34
+
35
+ _EXT_VERSION = "1.0"
36
+
37
+
38
+ class ZincSidingV1(BaseOpenEpdHierarchicalSpec):
39
+ """Zinc siding performance specification."""
40
+
41
+ _EXT_VERSION = "1.0"
42
+
43
+
44
+ class ShingleAndShakeSidingV1(BaseOpenEpdHierarchicalSpec):
45
+ """Shingle and shake siding performance specification."""
46
+
47
+ _EXT_VERSION = "1.0"
48
+
49
+
50
+ class MetalSidingV1(BaseOpenEpdHierarchicalSpec):
51
+ """Metal siding performance specification."""
52
+
53
+ _EXT_VERSION = "1.0"
54
+
55
+ # Nested specs:
56
+ AluminiumSiding: AluminiumSidingV1 | None = None
57
+ SteelSiding: SteelSidingV1 | None = None
58
+ ZincSiding: ZincSidingV1 | None = None
59
+
60
+
61
+ class CompositionSidingV1(BaseOpenEpdHierarchicalSpec):
62
+ """Composition siding performance specification."""
63
+
64
+ _EXT_VERSION = "1.0"
65
+
66
+
67
+ class FiberCementSidingV1(BaseOpenEpdHierarchicalSpec):
68
+ """Fiber cement siding performance specification."""
69
+
70
+ _EXT_VERSION = "1.0"
71
+
72
+
73
+ class InsulatedVinylSidingV1(BaseOpenEpdHierarchicalSpec):
74
+ """Insulated vinyl siding performance specification."""
75
+
76
+ _EXT_VERSION = "1.0"
77
+
78
+ # Own fields:
79
+ thickness: LengthMmStr | None = pyd.Field(default=None, description="", example="1 mm")
80
+
81
+ _vinyl_siding_thickness_is_quantity_validator = pyd.validator("thickness", allow_reuse=True)(
82
+ validate_unit_factory("m")
83
+ )
84
+
85
+
86
+ class PlywoodSidingV1(BaseOpenEpdHierarchicalSpec):
87
+ """Plywood siding performance specification."""
88
+
89
+ _EXT_VERSION = "1.0"
90
+
91
+
92
+ class PolypropyleneSidingV1(BaseOpenEpdHierarchicalSpec):
93
+ """Polypropylene siding performance specification."""
94
+
95
+ _EXT_VERSION = "1.0"
96
+
97
+
98
+ class SolidWoodSidingV1(BaseOpenEpdHierarchicalSpec):
99
+ """Solid wood siding performance specification."""
100
+
101
+ _EXT_VERSION = "1.0"
102
+
103
+ # Nested specs:
104
+ ShingleAndShakeSiding: ShingleAndShakeSidingV1 | None = None
105
+
106
+
107
+ class VinylSidingV1(BaseOpenEpdHierarchicalSpec):
108
+ """Vinyl siding performance specification."""
109
+
110
+ _EXT_VERSION = "1.0"
111
+
112
+ # Own fields:
113
+ thickness: LengthMmStr | None = pyd.Field(default=None, description="", example="5 mm")
114
+
115
+ _vinyl_siding_thickness_is_quantity_validator = pyd.validator("thickness", allow_reuse=True)(
116
+ validate_unit_factory("m")
117
+ )
118
+
119
+
120
+ class SidingV1(BaseOpenEpdHierarchicalSpec):
121
+ """Siding performance specification."""
122
+
123
+ _EXT_VERSION = "1.0"
124
+
125
+ # Own fields:
126
+ insulated: bool | None = pyd.Field(default=None, description="", example=True)
127
+ ventilated: bool | None = pyd.Field(default=None, description="", example=True)
128
+ paint_or_stain_required: bool | None = pyd.Field(default=None, description="", example=True)
129
+ r_value: str | None = pyd.Field(default=None, description="", example="1 K * m2 / W")
130
+ form_factor: SidingFormFactor | None = pyd.Field(default=None, description="", example="Lap")
131
+
132
+ _siding_r_value_is_quantity_validator = pyd.validator("r_value", allow_reuse=True)(
133
+ validate_unit_factory("K * m2 / W")
134
+ )
135
+
136
+ # Nested specs:
137
+ MetalSiding: MetalSidingV1 | None = None
138
+ CompositionSiding: CompositionSidingV1 | None = None
139
+ FiberCementSiding: FiberCementSidingV1 | None = None
140
+ InsulatedVinylSiding: InsulatedVinylSidingV1 | None = None
141
+ PlywoodSiding: PlywoodSidingV1 | None = None
142
+ PolypropyleneSiding: PolypropyleneSidingV1 | None = None
143
+ SolidWoodSiding: SolidWoodSidingV1 | None = None
144
+ VinylSiding: VinylSidingV1 | None = None
145
+
146
+
147
+ class InsulatedRoofPanelsV1(BaseOpenEpdHierarchicalSpec):
148
+ """Insulated roof panels performance specification."""
149
+
150
+ _EXT_VERSION = "1.0"
151
+
152
+ # Own fields:
153
+ r_value: str | None = pyd.Field(default=None, description="", example="1 K * m2 / W")
154
+ insulating_material: CladdingInsulatingMaterial | None = pyd.Field(
155
+ default=None, description="", example="No Insulation"
156
+ )
157
+
158
+ _cladding_r_value_is_quantity_validator = pyd.validator("r_value", allow_reuse=True)(
159
+ validate_unit_factory("K * m2 / W")
160
+ )
161
+
162
+
163
+ class InsulatedWallPanelsV1(BaseOpenEpdHierarchicalSpec):
164
+ """Insulated wall panels performance specification."""
165
+
166
+ _EXT_VERSION = "1.0"
167
+
168
+ # Own fields:
169
+ r_value: str | None = pyd.Field(default=None, description="", example="1 K * m2 / W")
170
+ insulating_material: CladdingInsulatingMaterial | None = pyd.Field(
171
+ default=None, description="", example="No Insulation"
172
+ )
173
+
174
+ _cladding_r_value_is_quantity_validator = pyd.validator("r_value", allow_reuse=True)(
175
+ validate_unit_factory("K * m2 / W")
176
+ )
177
+
178
+
179
+ class RoofPanelsV1(BaseOpenEpdHierarchicalSpec):
180
+ """Roof panels performance specification."""
181
+
182
+ _EXT_VERSION = "1.0"
183
+
184
+
185
+ class StoneCladdingV1(BaseOpenEpdHierarchicalSpec):
186
+ """Stone cladding performance specification."""
187
+
188
+ _EXT_VERSION = "1.0"
189
+
190
+
191
+ class WallPanelsV1(BaseOpenEpdHierarchicalSpec):
192
+ """Wall panels performance specification."""
193
+
194
+ _EXT_VERSION = "1.0"
195
+
196
+
197
+ class CladdingV1(BaseOpenEpdHierarchicalSpec):
198
+ """Cladding performance specification."""
199
+
200
+ _EXT_VERSION = "1.0"
201
+
202
+ # Own fields:
203
+ thickness: LengthMStr | None = pyd.Field(default=None, description="", example="10 mm")
204
+ facing_material: CladdingFacingMaterial | None = pyd.Field(default=None, description="", example="Steel")
205
+
206
+ _thickness_is_quantity_validator = pyd.validator("thickness", allow_reuse=True)(validate_unit_factory("m"))
207
+
208
+ # Nested specs:
209
+ Siding: SidingV1 | None = None
210
+ InsulatedRoofPanels: InsulatedRoofPanelsV1 | None = None
211
+ InsulatedWallPanels: InsulatedWallPanelsV1 | None = None
212
+ RoofPanels: RoofPanelsV1 | None = None
213
+ StoneCladding: StoneCladdingV1 | None = None
214
+ WallPanels: WallPanelsV1 | None = None
@@ -0,0 +1,46 @@
1
+ #
2
+ # Copyright 2024 by C Change Labs Inc. www.c-change-labs.com
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+ # This software was developed with support from the Skanska USA,
17
+ # Charles Pankow Foundation, Microsoft Sustainability Fund, Interface, MKA Foundation, and others.
18
+ # Find out more at www.BuildingTransparency.org
19
+ #
20
+ from openepd.compat.pydantic import pyd
21
+ from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
22
+ from openepd.model.specs.generated.enums import CmuBlockType, CmuWeightClassification
23
+ from openepd.model.validation.quantity import GwpKgCo2eStr, PressureMPaStr, validate_unit_factory
24
+
25
+
26
+ class CMUV1(BaseOpenEpdHierarchicalSpec):
27
+ """CMU performance specification."""
28
+
29
+ _EXT_VERSION = "1.0"
30
+
31
+ # Own fields:
32
+ white_cement: bool | None = pyd.Field(default=None, description="", example=True)
33
+ strength_28d: PressureMPaStr | None = pyd.Field(default=None, description="", example="1 MPa")
34
+ weight_classification: CmuWeightClassification | None = pyd.Field(default=None, description="", example="Normal")
35
+ block_type: CmuBlockType | None = pyd.Field(default=None, description="", example="Gray")
36
+ insulated: bool | None = pyd.Field(default=None, description="", example=True)
37
+ sound_performance: bool | None = pyd.Field(default=None, description="", example=True)
38
+ b1_recarbonation: GwpKgCo2eStr | None = pyd.Field(default=None, description="", example="1 kgCO2e")
39
+ b1_recarbonation_z: float | None = pyd.Field(default=None, description="", example=2.3)
40
+
41
+ _concrete_compressive_strength_28d_is_quantity_validator = pyd.validator("strength_28d", allow_reuse=True)(
42
+ validate_unit_factory("MPa")
43
+ )
44
+ _b1_recarbonation_is_quantity_validator = pyd.validator("b1_recarbonation", allow_reuse=True)(
45
+ validate_unit_factory("kgCO2e")
46
+ )
@@ -0,0 +1,27 @@
1
+ #
2
+ # Copyright 2024 by C Change Labs Inc. www.c-change-labs.com
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+ # This software was developed with support from the Skanska USA,
17
+ # Charles Pankow Foundation, Microsoft Sustainability Fund, Interface, MKA Foundation, and others.
18
+ # Find out more at www.BuildingTransparency.org
19
+ #
20
+ from openepd.model.base import BaseOpenEpdSchema
21
+ from openepd.model.org import OrgRef
22
+
23
+
24
+ class HasForestPracticesCertifiers(BaseOpenEpdSchema):
25
+ """An interface for models which are linked to forest practices certifiers."""
26
+
27
+ forest_practices_certifiers: list[OrgRef] | None
@@ -0,0 +1,151 @@
1
+ #
2
+ # Copyright 2024 by C Change Labs Inc. www.c-change-labs.com
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+ # This software was developed with support from the Skanska USA,
17
+ # Charles Pankow Foundation, Microsoft Sustainability Fund, Interface, MKA Foundation, and others.
18
+ # Find out more at www.BuildingTransparency.org
19
+ #
20
+ from typing import Literal
21
+
22
+ from openepd.compat.pydantic import pyd
23
+ from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
24
+ from openepd.model.specs.concrete import Cementitious, ConcreteTypicalApplication
25
+ from openepd.model.specs.generated.enums import AciExposureClass, CsaExposureClass, EnExposureClass
26
+ from openepd.model.validation.numbers import RatioFloat
27
+ from openepd.model.validation.quantity import (
28
+ LengthInchStr,
29
+ LengthMmStr,
30
+ MassKgStr,
31
+ PressureMPaStr,
32
+ validate_unit_factory,
33
+ )
34
+
35
+
36
+ class CementGroutV1(BaseOpenEpdHierarchicalSpec):
37
+ """Cement grout performance specification."""
38
+
39
+ _EXT_VERSION = "1.0"
40
+
41
+
42
+ class ConcretePavingV1(BaseOpenEpdHierarchicalSpec):
43
+ """Concrete paving performance specification."""
44
+
45
+ _EXT_VERSION = "1.0"
46
+
47
+ # Own fields:
48
+ flexion_strength: PressureMPaStr | None = pyd.Field(
49
+ default=None, description="Paving flexion strength", example="30 MPa"
50
+ )
51
+
52
+ _concrete_flexion_strength_is_quantity_validator = pyd.validator("flexion_strength", allow_reuse=True)(
53
+ validate_unit_factory("MPa")
54
+ )
55
+
56
+
57
+ class FlowableFillV1(BaseOpenEpdHierarchicalSpec):
58
+ """Flowable fill performance specification."""
59
+
60
+ _EXT_VERSION = "1.0"
61
+
62
+
63
+ class OilPatchV1(BaseOpenEpdHierarchicalSpec):
64
+ """Oil patch performance specification."""
65
+
66
+ _EXT_VERSION = "1.0"
67
+
68
+
69
+ class ReadyMixV1(BaseOpenEpdHierarchicalSpec):
70
+ """Concretes that are mixed just before use, and then poured on-site into forms."""
71
+
72
+ _EXT_VERSION = "1.0"
73
+
74
+
75
+ class ShotcreteV1(BaseOpenEpdHierarchicalSpec):
76
+ """Shotcrete performance specification."""
77
+
78
+ _EXT_VERSION = "1.0"
79
+
80
+
81
+ class ConcreteV1(BaseOpenEpdHierarchicalSpec):
82
+ """Concrete performance specification."""
83
+
84
+ _EXT_VERSION = "1.0"
85
+
86
+ # Own fields:
87
+ lightweight: bool | None = pyd.Field(default=None, description="Lightweight", example=True)
88
+
89
+ strength_28d: PressureMPaStr | None = pyd.Field(
90
+ default=None, description="Concrete strength after 28 days", example="1 MPa"
91
+ )
92
+ strength_other: PressureMPaStr | None = pyd.Field(
93
+ default=None,
94
+ description="A strength spec which is to be reached later other 28 days (e.g. 42d)",
95
+ example="30 MPa",
96
+ )
97
+ strength_other_d: Literal[3, 7, 14, 42, 56, 72, 96, 120] | None = pyd.Field(
98
+ default=None, description="Test Day for the Late Strength", example=42
99
+ )
100
+
101
+ slump: LengthInchStr | None = pyd.Field(default=None, description="", example="2 in")
102
+ min_slump: LengthInchStr | None = pyd.Field(default=None, description="Minimum test slump", example="2 in")
103
+ max_slump: LengthInchStr | None = pyd.Field(default=None, description="", example="2 in")
104
+
105
+ min_pipeline_size: LengthMmStr | None = pyd.Field(default=None, description="", example="200 mm")
106
+ w_c_ratio: RatioFloat | None = pyd.Field(
107
+ default=None, description="Ratio of water to cement", example=0.5, ge=0, le=1
108
+ )
109
+ air_entrain: bool | None = pyd.Field(default=None, description="Air Entrainment", example=True)
110
+ co2_entrain: bool | None = pyd.Field(default=None, description="CO2 Curing", example=True)
111
+ self_consolidating: bool | None = pyd.Field(default=None, description="Self Compacting", example=True)
112
+ white_cement: bool | None = pyd.Field(default=None, description="White Cement", example=True)
113
+ plc: bool | None = pyd.Field(default=None, description="Portland Limestone Cement", example=True)
114
+ finishable: bool | None = pyd.Field(default=None, description="Finishable", example=True)
115
+ fiber_reinforced: bool | None = pyd.Field(default=None, description="fiber_reinforced", example=True)
116
+
117
+ cementitious: Cementitious | None = pyd.Field(default=None, description="")
118
+
119
+ aggregate_size_max: LengthMmStr | None = pyd.Field(default=None, description="", example="0.0254 m")
120
+ cement_content: MassKgStr | None = pyd.Field(default=None, description="", example="1 kg")
121
+ aci_exposure_classes: list[AciExposureClass] | None = pyd.Field(default=None, description="", example=["aci.F0"])
122
+ csa_exposure_classes: list[CsaExposureClass] | None = pyd.Field(default=None, description="", example=["csa.C-2"])
123
+ en_exposure_classes: list[EnExposureClass] | None = pyd.Field(default=None, description="", example=["en206.X0"])
124
+ typical_application: ConcreteTypicalApplication | None = pyd.Field(default=None, description="Typical Application")
125
+
126
+ _concrete_compressive_strength_28d_is_quantity_validator = pyd.validator("strength_28d", allow_reuse=True)(
127
+ validate_unit_factory("MPa")
128
+ )
129
+ _concrete_compressive_strength_other_is_quantity_validator = pyd.validator("strength_other", allow_reuse=True)(
130
+ validate_unit_factory("MPa")
131
+ )
132
+ _concrete_slump_is_quantity_validator = pyd.validator("slump", allow_reuse=True)(validate_unit_factory("m"))
133
+ _concrete_min_slump_is_quantity_validator = pyd.validator("min_slump", allow_reuse=True)(validate_unit_factory("m"))
134
+ _concrete_max_slump_is_quantity_validator = pyd.validator("max_slump", allow_reuse=True)(validate_unit_factory("m"))
135
+ _concrete_min_pipeline_size_is_quantity_validator = pyd.validator("min_pipeline_size", allow_reuse=True)(
136
+ validate_unit_factory("m")
137
+ )
138
+ _concrete_aggregate_size_max_is_quantity_validator = pyd.validator("aggregate_size_max", allow_reuse=True)(
139
+ validate_unit_factory("m")
140
+ )
141
+ _concrete_cement_content_is_quantity_validator = pyd.validator("cement_content", allow_reuse=True)(
142
+ validate_unit_factory("kg")
143
+ )
144
+
145
+ # Nested specs:
146
+ CementGrout: CementGroutV1 | None = None
147
+ ConcretePaving: ConcretePavingV1 | None = None
148
+ FlowableFill: FlowableFillV1 | None = None
149
+ OilPatch: OilPatchV1 | None = None
150
+ ReadyMix: ReadyMixV1 | None = None
151
+ Shotcrete: ShotcreteV1 | None = None
@@ -0,0 +1,57 @@
1
+ #
2
+ # Copyright 2024 by C Change Labs Inc. www.c-change-labs.com
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+ # This software was developed with support from the Skanska USA,
17
+ # Charles Pankow Foundation, Microsoft Sustainability Fund, Interface, MKA Foundation, and others.
18
+ # Find out more at www.BuildingTransparency.org
19
+ #
20
+ from openepd.compat.pydantic import pyd
21
+ from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
22
+ from openepd.model.specs.generated.enums import ElevatorsBuildingRise, ElevatorsUsageIntensity
23
+ from openepd.model.validation.quantity import LengthMStr, MassKgStr, validate_unit_factory
24
+
25
+
26
+ class ElevatorsV1(BaseOpenEpdHierarchicalSpec):
27
+ """Elevators performance specification."""
28
+
29
+ _EXT_VERSION = "1.0"
30
+
31
+ # Own fields:
32
+ usage_intensity: list[ElevatorsUsageIntensity] | None = pyd.Field(
33
+ default=None, description="", example=["Very low"]
34
+ )
35
+ travel_length: LengthMStr | None = pyd.Field(default=None, description="", example="1 m")
36
+ rated_load: MassKgStr | None = pyd.Field(default=None, description="", example="1 kg")
37
+ rated_speed: str | None = pyd.Field(default=None, description="", example="1 m / s")
38
+ building_rise: ElevatorsBuildingRise | None = pyd.Field(default=None, description="", example="Low-rise")
39
+
40
+ _elevators_travel_length_is_quantity_validator = pyd.validator("travel_length", allow_reuse=True)(
41
+ validate_unit_factory("m")
42
+ )
43
+ _elevators_rated_load_is_quantity_validator = pyd.validator("rated_load", allow_reuse=True)(
44
+ validate_unit_factory("kg")
45
+ )
46
+ _elevators_rated_speed_is_quantity_validator = pyd.validator("rated_speed", allow_reuse=True)(
47
+ validate_unit_factory("m / s")
48
+ )
49
+
50
+
51
+ class ConveyingEquipmentV1(BaseOpenEpdHierarchicalSpec):
52
+ """Conveying equipment performance specification."""
53
+
54
+ _EXT_VERSION = "1.0"
55
+
56
+ # Nested specs:
57
+ Elevators: ElevatorsV1 | None = None