openepd 6.13.2__py3-none-any.whl → 7.0.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.
- openepd/__init__.py +4 -4
- openepd/__version__.py +1 -1
- openepd/api/average_dataset/generic_estimate_sync_api.py +11 -10
- openepd/api/average_dataset/industry_epd_sync_api.py +9 -8
- openepd/api/base_sync_client.py +53 -9
- openepd/api/category/sync_api.py +1 -1
- openepd/api/dto/base.py +4 -4
- openepd/api/dto/common.py +24 -16
- openepd/api/dto/meta.py +15 -11
- openepd/api/dto/mf.py +9 -8
- openepd/api/epd/dto.py +43 -33
- openepd/api/epd/sync_api.py +9 -9
- openepd/api/pcr/sync_api.py +2 -2
- openepd/bundle/model.py +11 -10
- openepd/bundle/reader.py +12 -5
- openepd/bundle/writer.py +17 -6
- openepd/model/base.py +60 -43
- openepd/model/category.py +13 -10
- openepd/model/common.py +100 -55
- openepd/model/declaration.py +93 -64
- openepd/model/epd.py +51 -43
- openepd/model/generic_estimate.py +28 -13
- openepd/model/industry_epd.py +15 -9
- openepd/model/lcia.py +132 -113
- openepd/model/org.py +54 -33
- openepd/model/pcr.py +38 -32
- openepd/model/specs/asphalt.py +31 -22
- openepd/model/specs/base.py +11 -9
- openepd/model/specs/concrete.py +60 -39
- openepd/model/specs/range/aggregates.py +9 -9
- openepd/model/specs/range/aluminium.py +7 -7
- openepd/model/specs/range/asphalt.py +22 -19
- openepd/model/specs/range/cladding.py +16 -16
- openepd/model/specs/range/cmu.py +10 -9
- openepd/model/specs/range/concrete.py +36 -27
- openepd/model/specs/range/conveying_equipment.py +16 -15
- openepd/model/specs/range/electrical.py +24 -22
- openepd/model/specs/range/finishes.py +109 -104
- openepd/model/specs/range/fire_and_smoke_protection.py +7 -7
- openepd/model/specs/range/furnishings.py +16 -12
- openepd/model/specs/range/manufacturing_inputs.py +16 -16
- openepd/model/specs/range/masonry.py +16 -16
- openepd/model/specs/range/mechanical.py +47 -47
- openepd/model/specs/range/mechanical_insulation.py +7 -7
- openepd/model/specs/range/network_infrastructure.py +54 -46
- openepd/model/specs/range/openings.py +36 -31
- openepd/model/specs/range/plumbing.py +15 -13
- openepd/model/specs/range/precast_concrete.py +20 -16
- openepd/model/specs/range/sheathing.py +18 -18
- openepd/model/specs/range/steel.py +25 -25
- openepd/model/specs/range/thermal_moisture_protection.py +20 -20
- openepd/model/specs/range/utility_piping.py +9 -9
- openepd/model/specs/range/wood.py +19 -19
- openepd/model/specs/range/wood_joists.py +8 -8
- openepd/model/specs/singular/__init__.py +9 -5
- openepd/model/specs/singular/aggregates.py +22 -15
- openepd/model/specs/singular/aluminium.py +20 -5
- openepd/model/specs/singular/asphalt.py +44 -20
- openepd/model/specs/singular/cladding.py +38 -23
- openepd/model/specs/singular/cmu.py +26 -11
- openepd/model/specs/singular/common.py +3 -2
- openepd/model/specs/singular/concrete.py +85 -48
- openepd/model/specs/singular/conveying_equipment.py +30 -17
- openepd/model/specs/singular/deprecated/__init__.py +3 -2
- openepd/model/specs/singular/deprecated/concrete.py +68 -33
- openepd/model/specs/singular/deprecated/steel.py +28 -15
- openepd/model/specs/singular/electrical.py +69 -41
- openepd/model/specs/singular/finishes.py +250 -140
- openepd/model/specs/singular/fire_and_smoke_protection.py +9 -6
- openepd/model/specs/singular/furnishings.py +16 -14
- openepd/model/specs/singular/manufacturing_inputs.py +23 -14
- openepd/model/specs/singular/masonry.py +66 -21
- openepd/model/specs/singular/mechanical.py +48 -47
- openepd/model/specs/singular/mechanical_insulation.py +7 -6
- openepd/model/specs/singular/mixins/conduit_mixin.py +13 -10
- openepd/model/specs/singular/network_infrastructure.py +111 -52
- openepd/model/specs/singular/openings.py +127 -95
- openepd/model/specs/singular/plumbing.py +15 -12
- openepd/model/specs/singular/precast_concrete.py +68 -54
- openepd/model/specs/singular/sheathing.py +47 -27
- openepd/model/specs/singular/steel.py +69 -45
- openepd/model/specs/singular/thermal_moisture_protection.py +36 -20
- openepd/model/specs/singular/utility_piping.py +11 -8
- openepd/model/specs/singular/wood.py +48 -24
- openepd/model/specs/singular/wood_joists.py +19 -6
- openepd/model/standard.py +15 -8
- openepd/model/validation/common.py +9 -3
- openepd/model/validation/numbers.py +0 -13
- openepd/model/validation/quantity.py +53 -25
- openepd/model/versioning.py +9 -6
- openepd/patch_pydantic.py +0 -93
- {openepd-6.13.2.dist-info → openepd-7.0.0.dist-info}/METADATA +1 -1
- openepd-7.0.0.dist-info/RECORD +142 -0
- openepd/compat/__init__.py +0 -15
- openepd/compat/compat_functional_validators.py +0 -25
- openepd/compat/pydantic.py +0 -30
- openepd-6.13.2.dist-info/RECORD +0 -145
- {openepd-6.13.2.dist-info → openepd-7.0.0.dist-info}/LICENSE +0 -0
- {openepd-6.13.2.dist-info → openepd-7.0.0.dist-info}/WHEEL +0 -0
@@ -21,10 +21,8 @@ __all__ = (
|
|
21
21
|
"PrecastConcreteRangeV1",
|
22
22
|
)
|
23
23
|
|
24
|
-
|
25
|
-
|
24
|
+
import pydantic
|
26
25
|
|
27
|
-
from openepd.compat.pydantic import pyd
|
28
26
|
from openepd.model.common import RangeRatioFloat
|
29
27
|
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
30
28
|
from openepd.model.specs.singular.precast_concrete import (
|
@@ -35,6 +33,8 @@ from openepd.model.specs.singular.precast_concrete import (
|
|
35
33
|
)
|
36
34
|
from openepd.model.validation.quantity import AmountRangePressureMpa
|
37
35
|
|
36
|
+
# NB! This is a generated code. Do not edit it manually. Please see src/openepd/model/specs/README.md
|
37
|
+
|
38
38
|
|
39
39
|
class ArchitecturalPrecastRangeV1(BaseOpenEpdHierarchicalSpec):
|
40
40
|
"""
|
@@ -45,8 +45,9 @@ class ArchitecturalPrecastRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
45
45
|
|
46
46
|
_EXT_VERSION = "1.1"
|
47
47
|
|
48
|
-
element_type: ArchitecturalPrecastElementType | None =
|
49
|
-
default=None,
|
48
|
+
element_type: ArchitecturalPrecastElementType | None = pydantic.Field(
|
49
|
+
default=None,
|
50
|
+
description="Precast element type used for architectural applications.",
|
50
51
|
)
|
51
52
|
|
52
53
|
|
@@ -59,8 +60,9 @@ class StructuralPrecastRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
59
60
|
|
60
61
|
_EXT_VERSION = "1.1"
|
61
62
|
|
62
|
-
element_type: StructuralPrecastElementType | None =
|
63
|
-
default=None,
|
63
|
+
element_type: StructuralPrecastElementType | None = pydantic.Field(
|
64
|
+
default=None,
|
65
|
+
description="Precast element type used for structural applications.",
|
64
66
|
)
|
65
67
|
|
66
68
|
|
@@ -73,8 +75,9 @@ class UtilityUndergroundPrecastRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
73
75
|
|
74
76
|
_EXT_VERSION = "1.1"
|
75
77
|
|
76
|
-
element_type: UtilityPrecastElementType | None =
|
77
|
-
default=None,
|
78
|
+
element_type: UtilityPrecastElementType | None = pydantic.Field(
|
79
|
+
default=None,
|
80
|
+
description="Precast element type used for utility underground applications.",
|
78
81
|
)
|
79
82
|
|
80
83
|
|
@@ -87,8 +90,9 @@ class CivilPrecastRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
87
90
|
|
88
91
|
_EXT_VERSION = "1.0"
|
89
92
|
|
90
|
-
element_type: CivilPrecastElementType | None =
|
91
|
-
default=None,
|
93
|
+
element_type: CivilPrecastElementType | None = pydantic.Field(
|
94
|
+
default=None,
|
95
|
+
description="Precast element type used as civil engineering components.",
|
92
96
|
)
|
93
97
|
|
94
98
|
|
@@ -101,14 +105,14 @@ class PrecastConcreteRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
101
105
|
|
102
106
|
_EXT_VERSION = "1.1"
|
103
107
|
|
104
|
-
lightweight: bool | None =
|
105
|
-
concrete_compressive_strength_28d: AmountRangePressureMpa | None =
|
106
|
-
insulated: bool | None =
|
107
|
-
gfrc: bool | None =
|
108
|
+
lightweight: bool | None = pydantic.Field(default=None, description="")
|
109
|
+
concrete_compressive_strength_28d: AmountRangePressureMpa | None = pydantic.Field(default=None, description="")
|
110
|
+
insulated: bool | None = pydantic.Field(default=None, description="")
|
111
|
+
gfrc: bool | None = pydantic.Field(
|
108
112
|
default=None,
|
109
113
|
description="Glass Fiber Reinforced Concrete is fiber-reinforced concrete sometimes used in architectural panels",
|
110
114
|
)
|
111
|
-
steel_mass_percentage: RangeRatioFloat | None =
|
115
|
+
steel_mass_percentage: RangeRatioFloat | None = pydantic.Field(default=None, description="")
|
112
116
|
ArchitecturalPrecast: ArchitecturalPrecastRangeV1 | None = None
|
113
117
|
StructuralPrecast: StructuralPrecastRangeV1 | None = None
|
114
118
|
UtilityUndergroundPrecast: UtilityUndergroundPrecastRangeV1 | None = None
|
@@ -19,15 +19,15 @@ __all__ = (
|
|
19
19
|
"SheathingRangeV1",
|
20
20
|
)
|
21
21
|
|
22
|
-
|
23
|
-
|
22
|
+
import pydantic
|
24
23
|
|
25
|
-
from openepd.compat.pydantic import pyd
|
26
24
|
from openepd.model.common import RangeInt
|
27
25
|
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
28
26
|
from openepd.model.specs.enums import GypsumFacing, GypsumFireRating, GypsumThickness
|
29
27
|
from openepd.model.validation.quantity import AmountRangeLengthMm, AmountRangeRFactor
|
30
28
|
|
29
|
+
# NB! This is a generated code. Do not edit it manually. Please see src/openepd/model/specs/README.md
|
30
|
+
|
31
31
|
|
32
32
|
class CementitiousSheathingBoardRangeV1(BaseOpenEpdHierarchicalSpec):
|
33
33
|
"""
|
@@ -41,7 +41,7 @@ class CementitiousSheathingBoardRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
41
41
|
|
42
42
|
_EXT_VERSION = "1.0"
|
43
43
|
|
44
|
-
cement_board_thickness: AmountRangeLengthMm | None =
|
44
|
+
cement_board_thickness: AmountRangeLengthMm | None = pydantic.Field(default=None, description="")
|
45
45
|
|
46
46
|
|
47
47
|
class GypsumSheathingBoardRangeV1(BaseOpenEpdHierarchicalSpec):
|
@@ -55,20 +55,20 @@ class GypsumSheathingBoardRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
55
55
|
|
56
56
|
_EXT_VERSION = "1.1"
|
57
57
|
|
58
|
-
fire_rating: list[GypsumFireRating] | None =
|
59
|
-
thickness: list[GypsumThickness] | None =
|
60
|
-
facing: list[GypsumFacing] | None =
|
61
|
-
r_factor: AmountRangeRFactor | None =
|
62
|
-
flame_spread_astm_e84: RangeInt | None =
|
63
|
-
smoke_production_astm_e84: RangeInt | None =
|
64
|
-
surface_abrasion_d4977: RangeInt | None =
|
65
|
-
indentation_d5420: RangeInt | None =
|
66
|
-
soft_body_impact_e695: RangeInt | None =
|
67
|
-
hard_body_impact_c1929: RangeInt | None =
|
68
|
-
mold_resistant: bool | None =
|
69
|
-
foil_backing: bool | None =
|
70
|
-
moisture_resistant: bool | None =
|
71
|
-
abuse_resistant: bool | None =
|
58
|
+
fire_rating: list[GypsumFireRating] | None = pydantic.Field(default=None, description="")
|
59
|
+
thickness: list[GypsumThickness] | None = pydantic.Field(default=None, description="")
|
60
|
+
facing: list[GypsumFacing] | None = pydantic.Field(default=None, description="")
|
61
|
+
r_factor: AmountRangeRFactor | None = pydantic.Field(default=None, description="")
|
62
|
+
flame_spread_astm_e84: RangeInt | None = pydantic.Field(default=None, description="")
|
63
|
+
smoke_production_astm_e84: RangeInt | None = pydantic.Field(default=None, description="")
|
64
|
+
surface_abrasion_d4977: RangeInt | None = pydantic.Field(default=None, description="")
|
65
|
+
indentation_d5420: RangeInt | None = pydantic.Field(default=None, description="")
|
66
|
+
soft_body_impact_e695: RangeInt | None = pydantic.Field(default=None, description="")
|
67
|
+
hard_body_impact_c1929: RangeInt | None = pydantic.Field(default=None, description="")
|
68
|
+
mold_resistant: bool | None = pydantic.Field(default=None, description="")
|
69
|
+
foil_backing: bool | None = pydantic.Field(default=None, description="")
|
70
|
+
moisture_resistant: bool | None = pydantic.Field(default=None, description="")
|
71
|
+
abuse_resistant: bool | None = pydantic.Field(default=None, description="")
|
72
72
|
|
73
73
|
|
74
74
|
class SheathingRangeV1(BaseOpenEpdHierarchicalSpec):
|
@@ -35,10 +35,8 @@ __all__ = (
|
|
35
35
|
"SteelRangeV1",
|
36
36
|
)
|
37
37
|
|
38
|
-
|
39
|
-
|
38
|
+
import pydantic
|
40
39
|
|
41
|
-
from openepd.compat.pydantic import pyd
|
42
40
|
from openepd.model.common import RangeFloat, RangeRatioFloat
|
43
41
|
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
44
42
|
from openepd.model.specs.enums import SteelComposition, SteelRebarGrade
|
@@ -51,6 +49,8 @@ from openepd.model.validation.quantity import (
|
|
51
49
|
AmountRangeThermalExpansion,
|
52
50
|
)
|
53
51
|
|
52
|
+
# NB! This is a generated code. Do not edit it manually. Please see src/openepd/model/specs/README.md
|
53
|
+
|
54
54
|
|
55
55
|
class ColdFormedFramingRangeV1(BaseOpenEpdHierarchicalSpec):
|
56
56
|
"""
|
@@ -226,15 +226,15 @@ class StructuralSteelRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
226
226
|
|
227
227
|
_EXT_VERSION = "1.0"
|
228
228
|
|
229
|
-
modulus_of_elasticity: AmountRangePressureMpa | None =
|
229
|
+
modulus_of_elasticity: AmountRangePressureMpa | None = pydantic.Field(
|
230
230
|
default=None,
|
231
231
|
description="Modulus of Elasticity, https://en.wikipedia.org/wiki/Elastic_modulus ",
|
232
232
|
)
|
233
|
-
thermal_expansion: AmountRangeThermalExpansion | None =
|
233
|
+
thermal_expansion: AmountRangeThermalExpansion | None = pydantic.Field(
|
234
234
|
default=None,
|
235
235
|
description="Thermal Expansion, https://en.wikipedia.org/wiki/Thermal_expansion",
|
236
236
|
)
|
237
|
-
thermal_conductivity: AmountRangeThermalConductivity | None =
|
237
|
+
thermal_conductivity: AmountRangeThermalConductivity | None = pydantic.Field(
|
238
238
|
default=None,
|
239
239
|
description="Thermal Conductivity, https://en.wikipedia.org/wiki/Thermal_conductivity_and_resistivity",
|
240
240
|
)
|
@@ -278,14 +278,14 @@ class RebarSteelRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
278
278
|
_EXT_VERSION = "1.0"
|
279
279
|
|
280
280
|
fabricated: bool | None = None
|
281
|
-
grade: list[SteelRebarGrade] | None =
|
282
|
-
diameter_min: AmountRangeLengthMm | None =
|
283
|
-
bending_pin_max: RangeFloat | None =
|
284
|
-
ts_ys_ratio_max: RangeFloat | None =
|
281
|
+
grade: list[SteelRebarGrade] | None = pydantic.Field(default=None)
|
282
|
+
diameter_min: AmountRangeLengthMm | None = pydantic.Field(default=None, description="Minimal diameter")
|
283
|
+
bending_pin_max: RangeFloat | None = pydantic.Field(default=None)
|
284
|
+
ts_ys_ratio_max: RangeFloat | None = pydantic.Field(
|
285
285
|
default=None,
|
286
286
|
description="Max ratio of ultimate tensile to yield tensile strength",
|
287
287
|
)
|
288
|
-
epoxy_coated: bool | None =
|
288
|
+
epoxy_coated: bool | None = pydantic.Field(default=None)
|
289
289
|
|
290
290
|
|
291
291
|
class WireMeshSteelRangeV1(BaseOpenEpdHierarchicalSpec):
|
@@ -315,29 +315,29 @@ class SteelRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
315
315
|
|
316
316
|
_EXT_VERSION = "1.1"
|
317
317
|
|
318
|
-
yield_tensile_str: AmountRangePressureMpa | None =
|
318
|
+
yield_tensile_str: AmountRangePressureMpa | None = pydantic.Field(
|
319
319
|
default=None,
|
320
320
|
description="Yield Tensile strength (Mpa) per unit area. Yield strength is the point at which a material begins to permanently deform or change shape due to applied stress.",
|
321
321
|
)
|
322
|
-
bar_elongation: RangeFloat | None =
|
322
|
+
bar_elongation: RangeFloat | None = pydantic.Field(
|
323
323
|
default=None,
|
324
324
|
description="Increase in length at break, in percent. Typically 10%-20%",
|
325
325
|
)
|
326
|
-
recycled_content: RangeRatioFloat | None =
|
327
|
-
post_consumer_recycled_content: RangeRatioFloat | None =
|
326
|
+
recycled_content: RangeRatioFloat | None = pydantic.Field(default=None, description="")
|
327
|
+
post_consumer_recycled_content: RangeRatioFloat | None = pydantic.Field(
|
328
328
|
default=None,
|
329
329
|
description="Should be a number between zero and the Recycled Content (steel_recycled_content)",
|
330
330
|
)
|
331
|
-
astm_marking: str | None =
|
332
|
-
euro_marking: str | None =
|
333
|
-
composition: list[SteelComposition] | None =
|
334
|
-
cold_finished: bool | None =
|
335
|
-
galvanized: bool | None =
|
336
|
-
stainless: bool | None =
|
337
|
-
making_route: SteelMakingRoute | None =
|
338
|
-
astm_standards: list[Standard] | None =
|
339
|
-
sae_standards: list[Standard] | None =
|
340
|
-
en_standards: list[Standard] | None =
|
331
|
+
astm_marking: str | None = pydantic.Field(default=None, description="The marking to be expected on the product.")
|
332
|
+
euro_marking: str | None = pydantic.Field(default=None, description="The marking to be expected on the product.")
|
333
|
+
composition: list[SteelComposition] | None = pydantic.Field(default=None, description="Basic chemical composition")
|
334
|
+
cold_finished: bool | None = pydantic.Field(default=None)
|
335
|
+
galvanized: bool | None = pydantic.Field(default=None)
|
336
|
+
stainless: bool | None = pydantic.Field(default=None)
|
337
|
+
making_route: SteelMakingRoute | None = pydantic.Field(default=None)
|
338
|
+
astm_standards: list[Standard] | None = pydantic.Field(default=None, description="List of ASTM standards")
|
339
|
+
sae_standards: list[Standard] | None = pydantic.Field(default=None, description="List of SAE standards")
|
340
|
+
en_standards: list[Standard] | None = pydantic.Field(default=None, description="List of EN standards")
|
341
341
|
MBQSteel: MBQSteelRangeV1 | None = None
|
342
342
|
CoilSteel: CoilSteelRangeV1 | None = None
|
343
343
|
ColdFormedSteel: ColdFormedSteelRangeV1 | None = None
|
@@ -38,10 +38,8 @@ __all__ = (
|
|
38
38
|
"ThermalMoistureProtectionRangeV1",
|
39
39
|
)
|
40
40
|
|
41
|
-
|
42
|
-
|
41
|
+
import pydantic
|
43
42
|
|
44
|
-
from openepd.compat.pydantic import pyd
|
45
43
|
from openepd.model.common import RangeFloat, RangeRatioFloat
|
46
44
|
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
47
45
|
from openepd.model.specs.enums import (
|
@@ -54,6 +52,8 @@ from openepd.model.specs.enums import (
|
|
54
52
|
)
|
55
53
|
from openepd.model.validation.quantity import AmountRangeLengthMm, AmountRangePressureMpa
|
56
54
|
|
55
|
+
# NB! This is a generated code. Do not edit it manually. Please see src/openepd/model/specs/README.md
|
56
|
+
|
57
57
|
|
58
58
|
class BituminousRoofingRangeV1(BaseOpenEpdHierarchicalSpec):
|
59
59
|
"""
|
@@ -158,7 +158,7 @@ class BoardInsulationRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
158
158
|
|
159
159
|
_EXT_VERSION = "1.0"
|
160
160
|
|
161
|
-
compressive_strength: AmountRangePressureMpa | None =
|
161
|
+
compressive_strength: AmountRangePressureMpa | None = pydantic.Field(default=None, description="")
|
162
162
|
|
163
163
|
|
164
164
|
class FoamedInPlaceRangeV1(BaseOpenEpdHierarchicalSpec):
|
@@ -170,7 +170,7 @@ class FoamedInPlaceRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
170
170
|
|
171
171
|
_EXT_VERSION = "1.0"
|
172
172
|
|
173
|
-
foam_type: list[FoamType] | None =
|
173
|
+
foam_type: list[FoamType] | None = pydantic.Field(default=None, description="")
|
174
174
|
|
175
175
|
|
176
176
|
class SprayedInsulationRangeV1(BaseOpenEpdHierarchicalSpec):
|
@@ -207,14 +207,14 @@ class MembraneRoofingRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
207
207
|
|
208
208
|
_EXT_VERSION = "1.0"
|
209
209
|
|
210
|
-
thickness: AmountRangeLengthMm | None =
|
211
|
-
sri: RangeFloat | None =
|
212
|
-
total_recycled_content: RangeRatioFloat | None =
|
213
|
-
post_consumer_recycled_content: RangeRatioFloat | None =
|
214
|
-
reinforcement: list[MembraneRoofingReinforcement] | None =
|
215
|
-
felt_backing: bool | None =
|
216
|
-
nsf347: bool | None =
|
217
|
-
vantage_vinyl: bool | None =
|
210
|
+
thickness: AmountRangeLengthMm | None = pydantic.Field(default=None, description="")
|
211
|
+
sri: RangeFloat | None = pydantic.Field(default=None, description="")
|
212
|
+
total_recycled_content: RangeRatioFloat | None = pydantic.Field(default=None, description="")
|
213
|
+
post_consumer_recycled_content: RangeRatioFloat | None = pydantic.Field(default=None, description="")
|
214
|
+
reinforcement: list[MembraneRoofingReinforcement] | None = pydantic.Field(default=None, description="")
|
215
|
+
felt_backing: bool | None = pydantic.Field(default=None, description="")
|
216
|
+
nsf347: bool | None = pydantic.Field(default=None, description="")
|
217
|
+
vantage_vinyl: bool | None = pydantic.Field(default=None, description="")
|
218
218
|
BituminousRoofing: BituminousRoofingRangeV1 | None = None
|
219
219
|
SinglePlyEPDM: SinglePlyEPDMRangeV1 | None = None
|
220
220
|
SinglePlyKEE: SinglePlyKEERangeV1 | None = None
|
@@ -233,10 +233,10 @@ class InsulationRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
233
233
|
|
234
234
|
_EXT_VERSION = "1.0"
|
235
235
|
|
236
|
-
r_value: RangeFloat | None =
|
237
|
-
material: list[InsulatingMaterial] | None =
|
238
|
-
intended_application: list[InsulationIntendedApplication] | None =
|
239
|
-
thickness_per_declared_unit: AmountRangeLengthMm | None =
|
236
|
+
r_value: RangeFloat | None = pydantic.Field(default=None, description="")
|
237
|
+
material: list[InsulatingMaterial] | None = pydantic.Field(default=None, description="")
|
238
|
+
intended_application: list[InsulationIntendedApplication] | None = pydantic.Field(default=None, description="")
|
239
|
+
thickness_per_declared_unit: AmountRangeLengthMm | None = pydantic.Field(default=None, description="")
|
240
240
|
BlanketInsulation: BlanketInsulationRangeV1 | None = None
|
241
241
|
BlownInsulation: BlownInsulationRangeV1 | None = None
|
242
242
|
BoardInsulation: BoardInsulationRangeV1 | None = None
|
@@ -288,9 +288,9 @@ class RoofCoverBoardsRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
288
288
|
|
289
289
|
_EXT_VERSION = "1.0"
|
290
290
|
|
291
|
-
material: list[RoofCoverBoardsMaterial] | None =
|
292
|
-
facing: list[RoofCoverBoardsFacing] | None =
|
293
|
-
thickness: AmountRangeLengthMm | None =
|
291
|
+
material: list[RoofCoverBoardsMaterial] | None = pydantic.Field(default=None, description="")
|
292
|
+
facing: list[RoofCoverBoardsFacing] | None = pydantic.Field(default=None, description="")
|
293
|
+
thickness: AmountRangeLengthMm | None = pydantic.Field(default=None, description="")
|
294
294
|
|
295
295
|
|
296
296
|
class SteepSlopeRoofingRangeV1(BaseOpenEpdHierarchicalSpec):
|
@@ -19,15 +19,15 @@ __all__ = (
|
|
19
19
|
"UtilityPipingRangeV1",
|
20
20
|
)
|
21
21
|
|
22
|
-
|
23
|
-
|
22
|
+
import pydantic
|
24
23
|
|
25
|
-
from openepd.compat.pydantic import pyd
|
26
24
|
from openepd.model.common import RangeAmount
|
27
25
|
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
28
26
|
from openepd.model.specs.enums import BuriedPipingType, PipingAnsiSchedule, UtilityPipingMaterial
|
29
27
|
from openepd.model.validation.quantity import AmountRangeLengthMm
|
30
28
|
|
29
|
+
# NB! This is a generated code. Do not edit it manually. Please see src/openepd/model/specs/README.md
|
30
|
+
|
31
31
|
|
32
32
|
class BuildingHeatingPipingRangeV1(BaseOpenEpdHierarchicalSpec):
|
33
33
|
"""
|
@@ -51,7 +51,7 @@ class BuriedPipingRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
51
51
|
|
52
52
|
_EXT_VERSION = "1.0"
|
53
53
|
|
54
|
-
buried_piping_type: list[BuriedPipingType] | None =
|
54
|
+
buried_piping_type: list[BuriedPipingType] | None = pydantic.Field(default=None, description="")
|
55
55
|
|
56
56
|
|
57
57
|
class UtilityPipingRangeV1(BaseOpenEpdHierarchicalSpec):
|
@@ -66,10 +66,10 @@ class UtilityPipingRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
66
66
|
|
67
67
|
_EXT_VERSION = "1.0"
|
68
68
|
|
69
|
-
thickness: AmountRangeLengthMm | None =
|
70
|
-
piping_diameter: AmountRangeLengthMm | None =
|
71
|
-
mass_per_unit_length: RangeAmount | None =
|
72
|
-
piping_ansi_schedule: list[PipingAnsiSchedule] | None =
|
73
|
-
utility_piping_material: list[UtilityPipingMaterial] | None =
|
69
|
+
thickness: AmountRangeLengthMm | None = pydantic.Field(default=None, description="")
|
70
|
+
piping_diameter: AmountRangeLengthMm | None = pydantic.Field(default=None, description="")
|
71
|
+
mass_per_unit_length: RangeAmount | None = pydantic.Field(default=None, description="")
|
72
|
+
piping_ansi_schedule: list[PipingAnsiSchedule] | None = pydantic.Field(default=None, description="")
|
73
|
+
utility_piping_material: list[UtilityPipingMaterial] | None = pydantic.Field(default=None, description="")
|
74
74
|
BuildingHeatingPiping: BuildingHeatingPipingRangeV1 | None = None
|
75
75
|
BuriedPiping: BuriedPipingRangeV1 | None = None
|
@@ -34,7 +34,8 @@ __all__ = (
|
|
34
34
|
|
35
35
|
from builtins import float
|
36
36
|
|
37
|
-
|
37
|
+
import pydantic
|
38
|
+
|
38
39
|
from openepd.model.org import OrgRef
|
39
40
|
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
40
41
|
from openepd.model.specs.enums import (
|
@@ -46,7 +47,6 @@ from openepd.model.specs.enums import (
|
|
46
47
|
SawnTimberSpecies,
|
47
48
|
SheathingPanelsFabrication,
|
48
49
|
)
|
49
|
-
from openepd.model.validation.numbers import RatioFloat
|
50
50
|
from openepd.model.validation.quantity import AmountRangeLengthMm
|
51
51
|
|
52
52
|
|
@@ -105,8 +105,8 @@ class CompositeLumberRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
105
105
|
|
106
106
|
_EXT_VERSION = "1.0"
|
107
107
|
|
108
|
-
fabrication: list[CompositeLumberFabrication] | None =
|
109
|
-
timber_species: list[EngineeredTimberSpecies] | None =
|
108
|
+
fabrication: list[CompositeLumberFabrication] | None = pydantic.Field(default=None, description="")
|
109
|
+
timber_species: list[EngineeredTimberSpecies] | None = pydantic.Field(default=None, description="")
|
110
110
|
|
111
111
|
|
112
112
|
class DimensionLumberRangeV1(BaseOpenEpdHierarchicalSpec):
|
@@ -118,7 +118,7 @@ class DimensionLumberRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
118
118
|
|
119
119
|
_EXT_VERSION = "1.0"
|
120
120
|
|
121
|
-
timber_species: list[SawnTimberSpecies] | None =
|
121
|
+
timber_species: list[SawnTimberSpecies] | None = pydantic.Field(default=None, description="")
|
122
122
|
WoodDecking: WoodDeckingRangeV1 | None = None
|
123
123
|
WoodFraming: WoodFramingRangeV1 | None = None
|
124
124
|
|
@@ -145,8 +145,8 @@ class MassTimberRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
145
145
|
|
146
146
|
_EXT_VERSION = "1.0"
|
147
147
|
|
148
|
-
fabrication: list[MassTimberFabrication] | None =
|
149
|
-
timber_species: list[EngineeredTimberSpecies] | None =
|
148
|
+
fabrication: list[MassTimberFabrication] | None = pydantic.Field(default=None, description="")
|
149
|
+
timber_species: list[EngineeredTimberSpecies] | None = pydantic.Field(default=None, description="")
|
150
150
|
|
151
151
|
|
152
152
|
class NonStructuralWoodRangeV1(BaseOpenEpdHierarchicalSpec):
|
@@ -184,9 +184,9 @@ class SheathingPanelsRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
184
184
|
|
185
185
|
_EXT_VERSION = "1.0"
|
186
186
|
|
187
|
-
fabrication: list[SheathingPanelsFabrication] | None =
|
188
|
-
wood_board_thickness: AmountRangeLengthMm | None =
|
189
|
-
timber_species: list[EngineeredTimberSpecies] | None =
|
187
|
+
fabrication: list[SheathingPanelsFabrication] | None = pydantic.Field(default=None, description="")
|
188
|
+
wood_board_thickness: AmountRangeLengthMm | None = pydantic.Field(default=None, description="")
|
189
|
+
timber_species: list[EngineeredTimberSpecies] | None = pydantic.Field(default=None, description="")
|
190
190
|
|
191
191
|
|
192
192
|
class UnfinishedWoodRangeV1(BaseOpenEpdHierarchicalSpec):
|
@@ -209,17 +209,17 @@ class WoodRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
209
209
|
_EXT_VERSION = "1.0"
|
210
210
|
|
211
211
|
forest_practices_certifiers: list[OrgRef] | None = None
|
212
|
-
timber_species: list[AllTimberSpecies] | None =
|
213
|
-
fabrication: list[AllFabrication] | None =
|
214
|
-
weather_exposed: bool | None =
|
215
|
-
fire_retardant: bool | None =
|
216
|
-
decay_resistant: bool | None =
|
217
|
-
fsc_certified:
|
212
|
+
timber_species: list[AllTimberSpecies] | None = pydantic.Field(default=None, description="Timber species")
|
213
|
+
fabrication: list[AllFabrication] | None = pydantic.Field(default=None, description="Timber fabrication")
|
214
|
+
weather_exposed: bool | None = pydantic.Field(default=None, description="Weather exposed")
|
215
|
+
fire_retardant: bool | None = pydantic.Field(default=None, description="Fire retardant")
|
216
|
+
decay_resistant: bool | None = pydantic.Field(default=None, description="Decay resistant")
|
217
|
+
fsc_certified: float | None = pydantic.Field(
|
218
218
|
default=None, description="Forest Stewardship Council certified proportion"
|
219
219
|
)
|
220
|
-
fsc_certified_z: float | None =
|
221
|
-
recycled_content:
|
222
|
-
recycled_content_z: float | None =
|
220
|
+
fsc_certified_z: float | None = pydantic.Field(default=None, description="")
|
221
|
+
recycled_content: float | None = pydantic.Field(default=None, description="Recycled content")
|
222
|
+
recycled_content_z: float | None = pydantic.Field(default=None, description="")
|
223
223
|
CompositeLumber: CompositeLumberRangeV1 | None = None
|
224
224
|
DimensionLumber: DimensionLumberRangeV1 | None = None
|
225
225
|
HeavyTimber: HeavyTimberRangeV1 | None = None
|
@@ -15,14 +15,14 @@
|
|
15
15
|
#
|
16
16
|
__all__ = ("WoodJoistsRangeV1",)
|
17
17
|
|
18
|
-
|
19
|
-
|
18
|
+
import pydantic
|
20
19
|
|
21
|
-
from openepd.compat.pydantic import pyd
|
22
20
|
from openepd.model.org import OrgRef
|
23
21
|
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
24
22
|
from openepd.model.specs.enums import AllFabrication, AllTimberSpecies
|
25
23
|
|
24
|
+
# NB! This is a generated code. Do not edit it manually. Please see src/openepd/model/specs/README.md
|
25
|
+
|
26
26
|
|
27
27
|
class WoodJoistsRangeV1(BaseOpenEpdHierarchicalSpec):
|
28
28
|
"""
|
@@ -37,8 +37,8 @@ class WoodJoistsRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
37
37
|
_EXT_VERSION = "1.0"
|
38
38
|
|
39
39
|
forest_practices_certifiers: list[OrgRef] | None = None
|
40
|
-
timber_species: list[AllTimberSpecies] | None =
|
41
|
-
fabrication: list[AllFabrication] | None =
|
42
|
-
weather_exposed: bool | None =
|
43
|
-
fire_retardant: bool | None =
|
44
|
-
decay_resistant: bool | None =
|
40
|
+
timber_species: list[AllTimberSpecies] | None = pydantic.Field(default=None, description="")
|
41
|
+
fabrication: list[AllFabrication] | None = pydantic.Field(default=None, description="")
|
42
|
+
weather_exposed: bool | None = pydantic.Field(default=None, description="")
|
43
|
+
fire_retardant: bool | None = pydantic.Field(default=None, description="")
|
44
|
+
decay_resistant: bool | None = pydantic.Field(default=None, description="")
|
@@ -15,7 +15,8 @@
|
|
15
15
|
#
|
16
16
|
from typing import Any, ClassVar
|
17
17
|
|
18
|
-
|
18
|
+
import pydantic
|
19
|
+
|
19
20
|
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
20
21
|
from openepd.model.specs.singular.accessories import AccessoriesV1
|
21
22
|
from openepd.model.specs.singular.aggregates import AggregatesV1
|
@@ -57,13 +58,16 @@ from openepd.model.specs.singular.utility_piping import UtilityPipingV1
|
|
57
58
|
from openepd.model.specs.singular.wood import WoodV1
|
58
59
|
from openepd.model.specs.singular.wood_joists import WoodJoistsV1
|
59
60
|
|
60
|
-
__all__ = ("Specs",)
|
61
|
+
__all__ = ("Specs", "BaseCompatibilitySpec")
|
61
62
|
|
62
63
|
|
63
64
|
class Specs(BaseOpenEpdHierarchicalSpec):
|
64
65
|
"""Material specific specs."""
|
65
66
|
|
66
|
-
COMPATIBILITY_SPECS: ClassVar[list[type[BaseCompatibilitySpec]]] = [
|
67
|
+
COMPATIBILITY_SPECS: ClassVar[list[type[BaseCompatibilitySpec]]] = [
|
68
|
+
ConcreteOldSpec,
|
69
|
+
SteelOldSpec,
|
70
|
+
]
|
67
71
|
|
68
72
|
_EXT_VERSION = "1.0"
|
69
73
|
|
@@ -107,8 +111,8 @@ class Specs(BaseOpenEpdHierarchicalSpec):
|
|
107
111
|
concrete: ConcreteOldSpec | None = None
|
108
112
|
steel: SteelOldSpec | None = None
|
109
113
|
|
110
|
-
@
|
111
|
-
def
|
114
|
+
@pydantic.model_validator(mode="before")
|
115
|
+
def _ensure_backward_compatibility(cls, values: dict[str, Any]) -> dict[str, Any]:
|
112
116
|
"""
|
113
117
|
Restore the functionality for backward-compatible specs.
|
114
118
|
|
@@ -13,22 +13,25 @@
|
|
13
13
|
# See the License for the specific language governing permissions and
|
14
14
|
# limitations under the License.
|
15
15
|
#
|
16
|
-
|
16
|
+
import pydantic
|
17
|
+
|
17
18
|
from openepd.model.base import BaseOpenEpdSchema
|
18
19
|
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
19
20
|
from openepd.model.specs.enums import AggregateGradation, AggregateWeightClassification
|
20
|
-
from openepd.model.validation.numbers import RatioFloat
|
21
21
|
from openepd.model.validation.quantity import LengthMmStr
|
22
22
|
|
23
23
|
|
24
24
|
class AggregateApplication(BaseOpenEpdSchema):
|
25
25
|
"""Application for aggregates."""
|
26
26
|
|
27
|
-
concrete: bool | None =
|
28
|
-
|
29
|
-
|
27
|
+
concrete: bool | None = pydantic.Field(
|
28
|
+
default=None, description="Aggregates used in concrete and masonry applications"
|
29
|
+
)
|
30
|
+
asphalt: bool | None = pydantic.Field(
|
31
|
+
default=None,
|
32
|
+
description="Aggregates used in bituminous paving and surface applications",
|
30
33
|
)
|
31
|
-
unbound: bool | None =
|
34
|
+
unbound: bool | None = pydantic.Field(default=None)
|
32
35
|
|
33
36
|
|
34
37
|
class AggregatesV1(BaseOpenEpdHierarchicalSpec):
|
@@ -41,26 +44,30 @@ class AggregatesV1(BaseOpenEpdHierarchicalSpec):
|
|
41
44
|
_EXT_VERSION = "1.0"
|
42
45
|
|
43
46
|
# Own fields:
|
44
|
-
recycled_content:
|
45
|
-
|
47
|
+
recycled_content: float | None = pydantic.Field(
|
48
|
+
examples=[0.3],
|
49
|
+
default=None,
|
50
|
+
description="Percent of total mass that is recycled aggregate",
|
51
|
+
ge=0,
|
52
|
+
le=1,
|
46
53
|
)
|
47
|
-
nominal_max_size: LengthMmStr | None =
|
54
|
+
nominal_max_size: LengthMmStr | None = pydantic.Field(
|
48
55
|
default=None,
|
49
|
-
|
56
|
+
examples=["10 mm"],
|
50
57
|
description="Nominal maximum aggregate size is defined as one sieve size smaller than the maximum "
|
51
58
|
"aggregate size. "
|
52
59
|
"The maximum aggregate size is defined as the smallest sieve size that requires 100% passing.",
|
53
60
|
)
|
54
|
-
weight_classification: AggregateWeightClassification | None =
|
55
|
-
|
61
|
+
weight_classification: AggregateWeightClassification | None = pydantic.Field(
|
62
|
+
examples=[str(AggregateWeightClassification.HEAVY_WEIGHT)], default=None
|
56
63
|
)
|
57
|
-
gradation: AggregateGradation | None =
|
58
|
-
manufactured: bool | None =
|
64
|
+
gradation: AggregateGradation | None = pydantic.Field(examples=[str(AggregateGradation.GAP)], default=None)
|
65
|
+
manufactured: bool | None = pydantic.Field(
|
59
66
|
default=None,
|
60
67
|
description="Aggregate produced via expansion or sintering at high temperatures of the following materials: "
|
61
68
|
"clay, shale, slate, perlite, vermiculite, or slag. Typically used to produce lightweight aggregate",
|
62
69
|
)
|
63
|
-
slag: bool | None =
|
70
|
+
slag: bool | None = pydantic.Field(
|
64
71
|
default=None,
|
65
72
|
description="Pelletized, foamed, and granulated blast furnace slag can be used as construction aggregate.",
|
66
73
|
)
|