openepd 3.1.2__py3-none-any.whl → 3.1.3__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.
- openepd/__version__.py +1 -1
- openepd/compat/compat_functional_validators.py +29 -0
- openepd/compat/pydantic.py +6 -1
- openepd/model/specs/concrete.py +1 -157
- openepd/model/specs/generated/asphalt.py +1 -11
- openepd/model/specs/generated/cladding.py +4 -16
- openepd/model/specs/generated/cmu.py +1 -8
- openepd/model/specs/generated/concrete.py +0 -19
- openepd/model/specs/generated/conveying_equipment.py +2 -12
- openepd/model/specs/generated/electrical.py +9 -12
- openepd/model/specs/generated/finishes.py +2 -36
- openepd/model/specs/generated/fire_and_smoke_protection.py +1 -3
- openepd/model/specs/generated/furnishings.py +1 -3
- openepd/model/specs/generated/masonry.py +5 -4
- openepd/model/specs/generated/mechanical.py +25 -93
- openepd/model/specs/generated/mechanical_insulation.py +1 -5
- openepd/model/specs/generated/network_infrastructure.py +2 -12
- openepd/model/specs/generated/openings.py +5 -17
- openepd/model/specs/generated/plumbing.py +3 -19
- openepd/model/specs/generated/precast_concrete.py +1 -5
- openepd/model/specs/generated/steel.py +9 -12
- openepd/model/specs/generated/thermal_moisture_protection.py +1 -15
- openepd/model/specs/generated/utility_piping.py +2 -10
- openepd/model/specs/generated/wood.py +1 -5
- openepd/model/validation/quantity.py +158 -16
- {openepd-3.1.2.dist-info → openepd-3.1.3.dist-info}/METADATA +1 -1
- {openepd-3.1.2.dist-info → openepd-3.1.3.dist-info}/RECORD +29 -32
- openepd/model/specs/aluminium.py +0 -67
- openepd/model/specs/glass.py +0 -360
- openepd/model/specs/steel.py +0 -184
- openepd/model/specs/wood.py +0 -130
- {openepd-3.1.2.dist-info → openepd-3.1.3.dist-info}/LICENSE +0 -0
- {openepd-3.1.2.dist-info → openepd-3.1.3.dist-info}/WHEEL +0 -0
@@ -18,9 +18,8 @@
|
|
18
18
|
# Find out more at www.BuildingTransparency.org
|
19
19
|
#
|
20
20
|
from abc import ABC, abstractmethod
|
21
|
-
from typing import TYPE_CHECKING,
|
21
|
+
from typing import TYPE_CHECKING, Callable, ClassVar
|
22
22
|
|
23
|
-
from openepd.compat.pydantic import pyd
|
24
23
|
from openepd.model.common import OpenEPDUnit
|
25
24
|
|
26
25
|
if TYPE_CHECKING:
|
@@ -116,17 +115,160 @@ def validate_quantity_le_factory(max_value: str) -> "QuantityValidatorType":
|
|
116
115
|
return validator
|
117
116
|
|
118
117
|
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
118
|
+
def validate_quantity_for_new_validator(max_value: str) -> Callable:
|
119
|
+
"""Create validator to check that quantity is less than or equal to max_value."""
|
120
|
+
|
121
|
+
def validator(value: str) -> str:
|
122
|
+
cls = BaseOpenEpdHierarchicalSpec
|
123
|
+
if hasattr(cls, "_QUANTITY_VALIDATOR") and cls._QUANTITY_VALIDATOR is not None:
|
124
|
+
cls._QUANTITY_VALIDATOR.validate_quantity_less_or_equal(value, max_value)
|
125
|
+
return value
|
126
|
+
|
127
|
+
return validator
|
128
|
+
|
129
|
+
|
130
|
+
# for arbitrary non-standard quantity
|
131
|
+
# todo these types should be replaced by Annotated[str, AfterValidator...] as we move completely to pydantic 2
|
132
|
+
|
133
|
+
|
134
|
+
class QuantityStr(str):
|
135
|
+
"""
|
136
|
+
Quantity string type.
|
137
|
+
|
138
|
+
Should be used in models where the physical value (quantity) is expected.
|
139
|
+
|
140
|
+
Checks for dimensionality and for the fact that value is greater than zero.
|
141
|
+
"""
|
142
|
+
|
143
|
+
unit: ClassVar[str]
|
144
|
+
|
145
|
+
@classmethod
|
146
|
+
def __get_validators__(cls):
|
147
|
+
yield validate_unit_factory(cls.unit)
|
148
|
+
yield validate_quantity_ge_factory(f"0 {cls.unit}")
|
149
|
+
|
150
|
+
@classmethod
|
151
|
+
def __modify_schema__(cls, field_schema):
|
152
|
+
field_schema.update(
|
153
|
+
examples=[f"1 {cls.unit}"],
|
154
|
+
)
|
155
|
+
|
156
|
+
|
157
|
+
class PressureMPaStr(QuantityStr):
|
158
|
+
"""Pressure quantity type."""
|
159
|
+
|
160
|
+
unit = OpenEPDUnit.MPa
|
161
|
+
|
162
|
+
|
163
|
+
class MassKgStr(QuantityStr):
|
164
|
+
"""Mass quantity type."""
|
165
|
+
|
166
|
+
unit = OpenEPDUnit.kg
|
167
|
+
|
168
|
+
|
169
|
+
class AreaM2Str(QuantityStr):
|
170
|
+
"""Area quantity type."""
|
171
|
+
|
172
|
+
unit = OpenEPDUnit.m2
|
173
|
+
|
174
|
+
|
175
|
+
class LengthMStr(QuantityStr):
|
176
|
+
"""Length (m) quantity type."""
|
177
|
+
|
178
|
+
unit = OpenEPDUnit.m
|
179
|
+
|
180
|
+
|
181
|
+
class LengthMmStr(QuantityStr):
|
182
|
+
"""Length (mm) quantity type."""
|
183
|
+
|
184
|
+
unit = OpenEPDUnit.m
|
185
|
+
|
186
|
+
@classmethod
|
187
|
+
def __modify_schema__(cls, field_schema):
|
188
|
+
field_schema.update(
|
189
|
+
examples=["6 mm"],
|
190
|
+
)
|
191
|
+
|
192
|
+
|
193
|
+
class LengthInchStr(QuantityStr):
|
194
|
+
"""Length (inch) quantity type."""
|
195
|
+
|
196
|
+
unit = OpenEPDUnit.m
|
197
|
+
|
198
|
+
@classmethod
|
199
|
+
def __modify_schema__(cls, field_schema):
|
200
|
+
field_schema.update(
|
201
|
+
examples=["2.5 inch"],
|
202
|
+
)
|
203
|
+
|
204
|
+
|
205
|
+
class TemperatureCStr(QuantityStr):
|
206
|
+
"""Temperature celsius quantity type."""
|
207
|
+
|
208
|
+
unit = OpenEPDUnit.degree_c
|
209
|
+
|
210
|
+
|
211
|
+
class GwpKgCo2eStr(QuantityStr):
|
212
|
+
"""GWP intensity quantity type."""
|
213
|
+
|
214
|
+
unit = OpenEPDUnit.kg_co2
|
215
|
+
|
216
|
+
|
217
|
+
class RValueStr(QuantityStr):
|
218
|
+
"""R-Value quantity type."""
|
219
|
+
|
220
|
+
unit = "K * m2 / W"
|
221
|
+
|
222
|
+
|
223
|
+
class SpeedStr(QuantityStr):
|
224
|
+
"""Speed quantity type."""
|
225
|
+
|
226
|
+
unit = "m / s"
|
227
|
+
|
228
|
+
|
229
|
+
class ColorTemperatureStr(QuantityStr):
|
230
|
+
"""Color temp quantity type."""
|
231
|
+
|
232
|
+
unit = "K"
|
233
|
+
|
234
|
+
|
235
|
+
class LuminosityStr(QuantityStr):
|
236
|
+
"""Luminosity quantity type."""
|
237
|
+
|
238
|
+
unit = "lumen"
|
239
|
+
|
240
|
+
|
241
|
+
class PowerStr(QuantityStr):
|
242
|
+
"""Power quantity type."""
|
243
|
+
|
244
|
+
unit = "W"
|
245
|
+
|
246
|
+
|
247
|
+
class ElectricalCurrentStr(QuantityStr):
|
248
|
+
"""Current quantity type."""
|
249
|
+
|
250
|
+
unit = "A"
|
251
|
+
|
252
|
+
|
253
|
+
class VolumeStr(QuantityStr):
|
254
|
+
"""Volume quantity type."""
|
255
|
+
|
256
|
+
unit = "m3"
|
257
|
+
|
258
|
+
|
259
|
+
class AirflowStr(QuantityStr):
|
260
|
+
"""Air flow quantity type."""
|
261
|
+
|
262
|
+
unit = "m3 / s"
|
263
|
+
|
264
|
+
|
265
|
+
class FlowRateStr(QuantityStr):
|
266
|
+
"""Liquid flow rate quantity type."""
|
267
|
+
|
268
|
+
unit = "l / min"
|
269
|
+
|
270
|
+
|
271
|
+
class MassPerLengthStr(QuantityStr):
|
272
|
+
"""Mass per unit of length quantity type."""
|
273
|
+
|
274
|
+
unit = "kg / m"
|
@@ -1,5 +1,5 @@
|
|
1
1
|
openepd/__init__.py,sha256=rqQJWF5jpYAgRbbAycUfWMGsr5kGtfjmwzsTeqbElJw,837
|
2
|
-
openepd/__version__.py,sha256=
|
2
|
+
openepd/__version__.py,sha256=3Eh_qZicwJYii9dyyB-2KQWynO2s7Uw5q0hpfoWU8wQ,855
|
3
3
|
openepd/api/__init__.py,sha256=rqQJWF5jpYAgRbbAycUfWMGsr5kGtfjmwzsTeqbElJw,837
|
4
4
|
openepd/api/base_sync_client.py,sha256=JcNpWsGoIK_1Eg27CAQd7nIjbcfD56jQ1nS6B48Q0cI,21142
|
5
5
|
openepd/api/category/__init__.py,sha256=rqQJWF5jpYAgRbbAycUfWMGsr5kGtfjmwzsTeqbElJw,837
|
@@ -27,7 +27,8 @@ openepd/bundle/model.py,sha256=TdFkUTOnd_dklcP-Qahp2glvk1YgEM0HfiqQz5MikeA,2663
|
|
27
27
|
openepd/bundle/reader.py,sha256=z4v_UWyaosktN3DdmnRx8GpLq4DkejjoUsckFfCgUac,6904
|
28
28
|
openepd/bundle/writer.py,sha256=AfvzzdAr9ybIbtiZfuX2mAGfddamTxXxUTxtHHrs2Gc,8353
|
29
29
|
openepd/compat/__init__.py,sha256=rqQJWF5jpYAgRbbAycUfWMGsr5kGtfjmwzsTeqbElJw,837
|
30
|
-
openepd/compat/
|
30
|
+
openepd/compat/compat_functional_validators.py,sha256=GBifyebqJC0U-Pfz8GlAIvtufoKJZuEGZOT-KwE8JUA,1051
|
31
|
+
openepd/compat/pydantic.py,sha256=fk-6umbMBbKvNDCwsF1AA4Z63C7dYamt5U5A_bFLAXc,1363
|
31
32
|
openepd/model/__init__.py,sha256=rqQJWF5jpYAgRbbAycUfWMGsr5kGtfjmwzsTeqbElJw,837
|
32
33
|
openepd/model/base.py,sha256=Yerebn3KP8-CdeeKOuQ1h16qkZnNGn7yvZNiAWutpsI,9154
|
33
34
|
openepd/model/category.py,sha256=NhQzKYi02DcdDy83qI_WZuGfYAUcZgsEPEXRa0nGqxs,1856
|
@@ -39,57 +40,53 @@ openepd/model/org.py,sha256=XJcfKGPN90IIGcN-S1ZNy8Zh_yM28iT2wbJD3pk3T08,4013
|
|
39
40
|
openepd/model/pcr.py,sha256=MypmvAR56ldoSMqtq0JKVeqUGHD-heyfsOPXjGcZFQ4,4620
|
40
41
|
openepd/model/specs/README.md,sha256=W5LSMpZuW5x36cKS4HRfeFsClsRf8J9yHMMICghdc0s,862
|
41
42
|
openepd/model/specs/__init__.py,sha256=lN1u5WN1H9uwWSHb4sFEBxJ3_tvGYar9iCvsDD67JTQ,5176
|
42
|
-
openepd/model/specs/aluminium.py,sha256=wRtkixZqO_27mulz0m60oZfAR1I0r_4cikvT-9U4lnk,2271
|
43
43
|
openepd/model/specs/asphalt.py,sha256=1Vmw3jsdTyhPaM9ftIjMvpLj7GbGnZLytaJYDDJQ7bU,3549
|
44
44
|
openepd/model/specs/base.py,sha256=T0HsHTFf5ew1sLgUf-7dfifrMPMup7WRc-C5DHAXUc4,2697
|
45
|
-
openepd/model/specs/concrete.py,sha256=
|
45
|
+
openepd/model/specs/concrete.py,sha256=YvhUaq0GBazRuYUiMhdt1qppcBS9PcVlg98XuzMsJ-4,9810
|
46
46
|
openepd/model/specs/generated/accessories.py,sha256=Gt7H0Xz6kWce05MfF_J0v5sah8xrZnGcc7XhJBDkE30,1934
|
47
47
|
openepd/model/specs/generated/aggregates.py,sha256=TMw2f7K7kuKP23MWkeFyqKUIXJFIamwX3gSR-48k3AY,3161
|
48
48
|
openepd/model/specs/generated/aluminium.py,sha256=MXOo_Hnue2kbxg9nwF5d-C1rubqHACGjcJymGoRgUGU,2440
|
49
|
-
openepd/model/specs/generated/asphalt.py,sha256=
|
49
|
+
openepd/model/specs/generated/asphalt.py,sha256=uWIc2xkwyDC5ezSyR3Z2BOU_VF96Pat6zPD1N_IUed4,3365
|
50
50
|
openepd/model/specs/generated/bulk_materials.py,sha256=DJgOjpj1ZqwwieMV_4wNKEgLnX1hKbAM4jaLDSICxNM,1034
|
51
51
|
openepd/model/specs/generated/cast_decks_and_underlayment.py,sha256=2VwwCgVRb3SuDy-x4EsI-n7GRnq0E7xrNE78CHoEExg,1058
|
52
|
-
openepd/model/specs/generated/cladding.py,sha256=
|
53
|
-
openepd/model/specs/generated/cmu.py,sha256=
|
52
|
+
openepd/model/specs/generated/cladding.py,sha256=r84f9CVTDzvokV64ThmY8CFSatEhWZqMBiMUlFMaGiE,6475
|
53
|
+
openepd/model/specs/generated/cmu.py,sha256=LGBrmjciW5xTBoHna7l94LSsIVfrmljOsaSeaViO7sE,2000
|
54
54
|
openepd/model/specs/generated/common.py,sha256=n_wuE-VtNFytpE-uLZrSXeeIIoNl2lSutPodiGKH94E,1117
|
55
|
-
openepd/model/specs/generated/concrete.py,sha256=
|
56
|
-
openepd/model/specs/generated/conveying_equipment.py,sha256=
|
57
|
-
openepd/model/specs/generated/electrical.py,sha256=
|
55
|
+
openepd/model/specs/generated/concrete.py,sha256=EPyT87aid75q9WGxmOX8k4ik4I9SfoL_fbvhYHsfbEo,7204
|
56
|
+
openepd/model/specs/generated/conveying_equipment.py,sha256=Hm4jUvFzpOHH0Q1k8CfEq398DuS2DoAq5FSIGdST7Og,1986
|
57
|
+
openepd/model/specs/generated/electrical.py,sha256=vY2gZq9qpOStwnlO2n7PBMT3QMlA1-T3Msw663LhhFc,9996
|
58
58
|
openepd/model/specs/generated/electrical_transmission_and_distribution_equipment.py,sha256=CiI6wcfo_tf6QoGkpAjUskCUKNJQvz0_N0RD7tF1oiA,2117
|
59
59
|
openepd/model/specs/generated/electricity.py,sha256=8W_vkCn_MDoB5rqGbPp2g04VMEG0ULMexD4OImgAt9U,1029
|
60
60
|
openepd/model/specs/generated/enums.py,sha256=fCX13A-xCZoIBb_CR-_XSBBWemLSCg5QhqCoE2IxlW4,58482
|
61
|
-
openepd/model/specs/generated/finishes.py,sha256=
|
62
|
-
openepd/model/specs/generated/fire_and_smoke_protection.py,sha256=
|
63
|
-
openepd/model/specs/generated/furnishings.py,sha256=
|
61
|
+
openepd/model/specs/generated/finishes.py,sha256=Ymsr_mj_20EYUBMkzblBmy8Mb9GgMD40aizgoNVbNac,20292
|
62
|
+
openepd/model/specs/generated/fire_and_smoke_protection.py,sha256=X9VYPkvNodqldtWSTk1kS4I_oUR4xnTV42-skX7Zwhg,2665
|
63
|
+
openepd/model/specs/generated/furnishings.py,sha256=IoSQD7wK6JVcAeOY-82BRZEZ9wOP3_nAYtAX7i55_Yc,2940
|
64
64
|
openepd/model/specs/generated/grouting.py,sha256=JAdrgzQObw_6nBeM6KHoTShXXBhG_38qDi6vOHvxXWM,1023
|
65
65
|
openepd/model/specs/generated/manufacturing_inputs.py,sha256=zlGyBUyGIW7Ruyt5XkPgu_q9yGaTFJQ4sjkdGQ-LucA,4599
|
66
|
-
openepd/model/specs/generated/masonry.py,sha256=
|
66
|
+
openepd/model/specs/generated/masonry.py,sha256=vO0b3SkTGAAimzwexte1at2MzUAl1nRjQ-XmoCe3mFY,3216
|
67
67
|
openepd/model/specs/generated/material_handling.py,sha256=qiyo_nH4nXmvTZxebqhOMXytCtpcQolHf3OLs1LBOx8,1225
|
68
|
-
openepd/model/specs/generated/mechanical.py,sha256=
|
69
|
-
openepd/model/specs/generated/mechanical_insulation.py,sha256=
|
70
|
-
openepd/model/specs/generated/network_infrastructure.py,sha256=
|
71
|
-
openepd/model/specs/generated/openings.py,sha256=
|
68
|
+
openepd/model/specs/generated/mechanical.py,sha256=oXaVr9bhKdgggCNEXEcCHbh0349M9zfxKXTwd7xqCoI,8388
|
69
|
+
openepd/model/specs/generated/mechanical_insulation.py,sha256=O2ulg8Pj9PEAk0OqzWWH9REgcqvXLxHillslDoDF_yU,1714
|
70
|
+
openepd/model/specs/generated/network_infrastructure.py,sha256=Qj7_ODFbG0UavLrlwb2hoI09PPrBAD4xeLbHpW5Cn2w,7924
|
71
|
+
openepd/model/specs/generated/openings.py,sha256=QVPbHP3yMHBPFrAo_fk6CYcJ3OltlMIKXX4-JNWE95k,19035
|
72
72
|
openepd/model/specs/generated/other_electrical_equipment.py,sha256=06HI_DEoHlywStzhj8rQtkfnXyWc-4Q4O3iE2rv4h2I,1057
|
73
73
|
openepd/model/specs/generated/other_materials.py,sha256=DCVKE_C0aVdotwayPuMATTlEmDjfTUm3-cQ8gzdxGMw,3453
|
74
|
-
openepd/model/specs/generated/plumbing.py,sha256=
|
75
|
-
openepd/model/specs/generated/precast_concrete.py,sha256=
|
74
|
+
openepd/model/specs/generated/plumbing.py,sha256=Utad1UQaoCghFs4u-IsNMJ5jdBecVMPXP9Se00WFbAk,4652
|
75
|
+
openepd/model/specs/generated/precast_concrete.py,sha256=9OaBMV8g5DxwZ46a1OXIpipMlISc3W39B-O3g1AOx68,2490
|
76
76
|
openepd/model/specs/generated/sheathing.py,sha256=pV_j6R8mZ7Kyr8WYxP6UzsP3qSAqwxbVfe9V7jjSYb0,3516
|
77
|
-
openepd/model/specs/generated/steel.py,sha256=
|
78
|
-
openepd/model/specs/generated/thermal_moisture_protection.py,sha256=
|
79
|
-
openepd/model/specs/generated/utility_piping.py,sha256=
|
80
|
-
openepd/model/specs/generated/wood.py,sha256=
|
77
|
+
openepd/model/specs/generated/steel.py,sha256=QoECjBYKXOrfjjfdm5nVfpU3a-a0Xv68vay45NUJ9zo,10119
|
78
|
+
openepd/model/specs/generated/thermal_moisture_protection.py,sha256=xsxqRo6rdKSFiI7Ijh1LdF6C-6DZYkbyrRRp1MdTggQ,7368
|
79
|
+
openepd/model/specs/generated/utility_piping.py,sha256=B4LCUff5Ygh3U7DplAAlfYarRivLEeWWcHC1Yu3ewTk,2372
|
80
|
+
openepd/model/specs/generated/wood.py,sha256=etcTYm4EW6TAbODUDAnQlb9qP1SU8CsL3hUwWWGv7w4,6027
|
81
81
|
openepd/model/specs/generated/wood_joists.py,sha256=UFakZ93LJqr-gSUz8hTyjx7BwHBq0BzWjpSKZ1B5TgQ,1880
|
82
|
-
openepd/model/specs/glass.py,sha256=JNIYlG7ybWTBPWBHq6kRGT4ibkkWGkDbb61zLPhKOPk,13664
|
83
|
-
openepd/model/specs/steel.py,sha256=6yRH_HK36kqn5XfAuF0_Q6TQtmeAc163qGIeStFGCM0,6367
|
84
|
-
openepd/model/specs/wood.py,sha256=DtviU3TrcWW74of8si2PCmaHxrdKWO1M2rSCBo_n6v8,5144
|
85
82
|
openepd/model/standard.py,sha256=8F70DCagplBe7IvkGJOUmt7td-uh_8zzdpvuVpjk0GY,1535
|
86
83
|
openepd/model/validation/__init__.py,sha256=rqQJWF5jpYAgRbbAycUfWMGsr5kGtfjmwzsTeqbElJw,837
|
87
84
|
openepd/model/validation/common.py,sha256=TPxIUtTNqNLiDsvuSE_dVREtNBe6XsagVMH4u1MYfpA,2652
|
88
85
|
openepd/model/validation/numbers.py,sha256=4gkMS35zKnGyfdFyLTgHncNmKpg8-WOYX9qaUr5scE4,1105
|
89
|
-
openepd/model/validation/quantity.py,sha256=
|
86
|
+
openepd/model/validation/quantity.py,sha256=tBryaJcgvU4fvXAHILp2C0E7VkOQaW80Msq4_tnE3xc,7411
|
90
87
|
openepd/model/versioning.py,sha256=1gqeeAhc2lVonq9ErOD3Ws7XZ0CgZnmlFpKHKrc9IwI,4690
|
91
88
|
openepd/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
92
|
-
openepd-3.1.
|
93
|
-
openepd-3.1.
|
94
|
-
openepd-3.1.
|
95
|
-
openepd-3.1.
|
89
|
+
openepd-3.1.3.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
90
|
+
openepd-3.1.3.dist-info/METADATA,sha256=neWDjvnYnAOjA5REWADsX1_mFnx3corhKd-qoxkMh-8,7790
|
91
|
+
openepd-3.1.3.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
|
92
|
+
openepd-3.1.3.dist-info/RECORD,,
|
openepd/model/specs/aluminium.py
DELETED
@@ -1,67 +0,0 @@
|
|
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 enum import StrEnum
|
21
|
-
|
22
|
-
from openepd.compat.pydantic import pyd
|
23
|
-
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
24
|
-
from openepd.model.validation.numbers import RatioFloat
|
25
|
-
|
26
|
-
|
27
|
-
class AluminiumAlloy(StrEnum):
|
28
|
-
"""Aluminium alloy enum."""
|
29
|
-
|
30
|
-
ALLOY_1xxx = ("1xxx",)
|
31
|
-
ALLOY_2xxx = ("2xxx",)
|
32
|
-
ALLOY_3xxx = ("3xxx",)
|
33
|
-
ALLOY_4xxx = ("4xxx",)
|
34
|
-
ALLOY_5xxx = ("5xxx",)
|
35
|
-
ALLOY_6xxx = ("6xxx",)
|
36
|
-
ALLOY_7xxx = ("7xxx",)
|
37
|
-
ALLOY_8xxx = ("8xxx",)
|
38
|
-
ALLOY_1xx_x = ("1xx.x",)
|
39
|
-
ALLOY_2xx_x = ("2xx.x",)
|
40
|
-
ALLOY_3xx_x = ("3xx.x",)
|
41
|
-
ALLOY_4xx_x = ("4xx.x",)
|
42
|
-
ALLOY_5xx_x = ("5xx.x",)
|
43
|
-
ALLOY_7xx_x = ("7xx.x",)
|
44
|
-
ALLOY_8xx_x = ("8xx.x",)
|
45
|
-
ALLOY_9xx_x = ("9xx.x",)
|
46
|
-
|
47
|
-
|
48
|
-
class AluminiumExtrusionsV1(BaseOpenEpdHierarchicalSpec):
|
49
|
-
"""Aluminium extrusions V1 spec."""
|
50
|
-
|
51
|
-
_EXT_VERSION = "1.0"
|
52
|
-
|
53
|
-
"""Aluminium extrusions V1 spec."""
|
54
|
-
thermally_improved: bool | None = pyd.Field(default=None, description="Thermally improved")
|
55
|
-
|
56
|
-
|
57
|
-
class AluminiumV1(BaseOpenEpdHierarchicalSpec):
|
58
|
-
"""Aluminium V1 spec."""
|
59
|
-
|
60
|
-
_EXT_VERSION = "1.0"
|
61
|
-
recycled_content: RatioFloat | None = pyd.Field(default=None, description="Recycled content")
|
62
|
-
|
63
|
-
alloy: AluminiumAlloy | None = pyd.Field(default=None, description="AluminiumAlloy")
|
64
|
-
anodized: bool | None = None
|
65
|
-
painted: bool | None = None
|
66
|
-
|
67
|
-
AluminiumExtrusions: AluminiumExtrusionsV1 | None = pyd.Field(title="AluminiumExtrusionsV1", default=None)
|