openepd 3.1.2__py3-none-any.whl → 3.1.4__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 (33) hide show
  1. openepd/__version__.py +1 -1
  2. openepd/compat/compat_functional_validators.py +29 -0
  3. openepd/compat/pydantic.py +6 -1
  4. openepd/model/specs/concrete.py +1 -157
  5. openepd/model/specs/generated/asphalt.py +1 -11
  6. openepd/model/specs/generated/cladding.py +4 -16
  7. openepd/model/specs/generated/cmu.py +1 -8
  8. openepd/model/specs/generated/concrete.py +0 -19
  9. openepd/model/specs/generated/conveying_equipment.py +2 -12
  10. openepd/model/specs/generated/electrical.py +9 -12
  11. openepd/model/specs/generated/finishes.py +2 -36
  12. openepd/model/specs/generated/fire_and_smoke_protection.py +1 -3
  13. openepd/model/specs/generated/furnishings.py +1 -3
  14. openepd/model/specs/generated/masonry.py +5 -4
  15. openepd/model/specs/generated/mechanical.py +25 -93
  16. openepd/model/specs/generated/mechanical_insulation.py +1 -5
  17. openepd/model/specs/generated/network_infrastructure.py +2 -12
  18. openepd/model/specs/generated/openings.py +5 -17
  19. openepd/model/specs/generated/plumbing.py +3 -19
  20. openepd/model/specs/generated/precast_concrete.py +1 -5
  21. openepd/model/specs/generated/steel.py +10 -13
  22. openepd/model/specs/generated/thermal_moisture_protection.py +1 -15
  23. openepd/model/specs/generated/utility_piping.py +2 -10
  24. openepd/model/specs/generated/wood.py +1 -5
  25. openepd/model/validation/quantity.py +158 -16
  26. {openepd-3.1.2.dist-info → openepd-3.1.4.dist-info}/METADATA +1 -1
  27. {openepd-3.1.2.dist-info → openepd-3.1.4.dist-info}/RECORD +29 -32
  28. openepd/model/specs/aluminium.py +0 -67
  29. openepd/model/specs/glass.py +0 -360
  30. openepd/model/specs/steel.py +0 -184
  31. openepd/model/specs/wood.py +0 -130
  32. {openepd-3.1.2.dist-info → openepd-3.1.4.dist-info}/LICENSE +0 -0
  33. {openepd-3.1.2.dist-info → openepd-3.1.4.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, Annotated, Callable, TypeAlias
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
- # todo with the migration to Pydantic 2 we will be able to use pydantic.funcational_validators.AfterDecorator
120
- # this will let us bind the validator not to the model or the field, but to the type itself.
121
-
122
- # for abitrary non-standard quantity
123
- QuantityStr: TypeAlias = Annotated[str, pyd.Field()]
124
- PressureMPaStr: TypeAlias = Annotated[str, pyd.Field(example="30 MPa")]
125
- MassKgStr: TypeAlias = Annotated[str, pyd.Field(example="30 kg")]
126
- AreaM2Str: TypeAlias = Annotated[str, pyd.Field(example="12 m2", gt=0)]
127
- LengthMStr: TypeAlias = Annotated[str, pyd.Field(example="30 m", gt=0)]
128
- LengthMmStr: TypeAlias = Annotated[str, pyd.Field(example="30 mm", gt=0)]
129
- LengthInchStr: TypeAlias = Annotated[str, pyd.Field(example="30 m", gt=0)]
130
- TemperatureCStr: TypeAlias = Annotated[str, pyd.Field(example="45 C")]
131
- HeatConductanceUCIStr: TypeAlias = Annotated[str, pyd.Field(example="0.3 U")]
132
- GwpKgCo2eStr: TypeAlias = Annotated[str, pyd.Field(example="300 kgCO2e")]
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
+ example=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
+ example="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
+ example="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,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: openepd
3
- Version: 3.1.2
3
+ Version: 3.1.4
4
4
  Summary: Python library to work with OpenEPD format
5
5
  Home-page: https://github.com/cchangelabs/openepd
6
6
  License: Apache-2.0
@@ -1,5 +1,5 @@
1
1
  openepd/__init__.py,sha256=rqQJWF5jpYAgRbbAycUfWMGsr5kGtfjmwzsTeqbElJw,837
2
- openepd/__version__.py,sha256=GaGWDv9_2nYUszRosW58lmsPGqgtPMKx9e0eVNN9v40,855
2
+ openepd/__version__.py,sha256=6JC6HhyvzhyBT3uZj8CcM2UaVbYiiXG3j4oGJ-Ht-6k,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/pydantic.py,sha256=wh7vExwILD9QUYAKbrALXtTqNvsc6E8tjVVYXF2WvTY,1174
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=TVfKbvZGJwC_LDJimHj07_5KsOrNBi-S6KQ3-DmrXsA,15961
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=D-V1J-VxjoAhfYA6ACnujLNGkAmqQ-RQRB4TEZeALpQ,3837
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=RHq6irHwXJNnKuBOsA3h2g1jedMDOJPmV4WNjkdesgs,6939
53
- openepd/model/specs/generated/cmu.py,sha256=mSRYG67m2c01C1dmYNyQjXQmYCcM4frpLQ3wKurTa50,2324
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=CrHhIA-FR8zgvbCL_9oNVnRSaXhGMwCmEs4ep4XUZ4Y,8324
56
- openepd/model/specs/generated/conveying_equipment.py,sha256=HcMSuyng9OlRKvUVYSstJx0XtaD8_cQ9ka8l4vG76AY,2422
57
- openepd/model/specs/generated/electrical.py,sha256=oEhWkm4Au9N0xtTLUNTUVMxQUuJuvoLgOKccnAI0oGQ,10457
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=xGjhNfpecOT7H4zElK34VSJuy8mfJ8gFF85PurKatao,22337
62
- openepd/model/specs/generated/fire_and_smoke_protection.py,sha256=sbyEIMHB8zkIREqvUW6SSYZO9Tlx_zEoJrHWhqIjboI,2801
63
- openepd/model/specs/generated/furnishings.py,sha256=NkS59ulTVqzSWFveM4Qd0Wv6bh0E-sx45fLrTH3Ixs4,3076
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=VUd5Noeqtv8NWQfTqnM_8O0GZroib_pMipll2-pYQr8,3177
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=fELaoqPbNhgOQ_6oB8NIRfgz7Nff_nB6rqb0um1MGKY,11561
69
- openepd/model/specs/generated/mechanical_insulation.py,sha256=CAtiQCPZUnRnfnKS8upqxQGuWoizCk4Hq8hgxg_0ZoA,1900
70
- openepd/model/specs/generated/network_infrastructure.py,sha256=rejSwn6i0Ns4K2tFbv212wroM-zT4B2vTeIr3g8MVeg,8644
71
- openepd/model/specs/generated/openings.py,sha256=llb7UvXe93qZ94MAhCNVWDFWdALSi_xhjJcQ5JFNIws,19729
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=MOtI9aRGHtW64hui2x9ayHgkhtXtem0Aa6GTHJMpHw8,5439
75
- openepd/model/specs/generated/precast_concrete.py,sha256=0aMCCXnCCgt7GGvjAppFAe-Hidjn-rokpvhOL1YgK0A,2690
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=yKRhe4scCbMPvps6pk7cuA-TSe_HuynyeuQu1VceJfE,10255
78
- openepd/model/specs/generated/thermal_moisture_protection.py,sha256=3rqYO7_ljDMF_SLy0SsMjuiciOyL2qgVCyYz3b9ouTM,7963
79
- openepd/model/specs/generated/utility_piping.py,sha256=qUJEFUWMav-TTB4UcJhRW2E_xftBwr0NwL_oTZmLuLQ,2768
80
- openepd/model/specs/generated/wood.py,sha256=w_z9b2bIBjNyLEsn8MvFxVo0sVSuK75Mmuh9fQbOqgo,6199
77
+ openepd/model/specs/generated/steel.py,sha256=rDrAxzqbb0LsvVPUS1-mXhoTu-SmgleXBRx0kh_J5Tw,10118
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=GIPPtzOVwMYgKpx1XbDmoLQERlcoQ-VSK6k_EyMNQoQ,5287
86
+ openepd/model/validation/quantity.py,sha256=1RR482ARLOMLiprXbKrw0VhVv_Eye9JGKud4j_pVatM,7402
90
87
  openepd/model/versioning.py,sha256=1gqeeAhc2lVonq9ErOD3Ws7XZ0CgZnmlFpKHKrc9IwI,4690
91
88
  openepd/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
92
- openepd-3.1.2.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
93
- openepd-3.1.2.dist-info/METADATA,sha256=ih0zcoUzRm83KjbY5uSwBPTdbjdb2vBlWPA1G4G3VQs,7790
94
- openepd-3.1.2.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
95
- openepd-3.1.2.dist-info/RECORD,,
89
+ openepd-3.1.4.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
90
+ openepd-3.1.4.dist-info/METADATA,sha256=fX8OTYr0EwDAeh_-KSqorLLev5JLpyuYMn8kBoXbvaI,7790
91
+ openepd-3.1.4.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
92
+ openepd-3.1.4.dist-info/RECORD,,
@@ -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)