openepd 2.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.
- openepd/__init__.py +1 -1
- openepd/__version__.py +2 -2
- openepd/api/__init__.py +19 -0
- openepd/api/base_sync_client.py +550 -0
- openepd/api/category/__init__.py +19 -0
- openepd/api/category/dto.py +25 -0
- openepd/api/category/sync_api.py +44 -0
- openepd/api/common.py +239 -0
- openepd/api/dto/__init__.py +19 -0
- openepd/api/dto/base.py +41 -0
- openepd/api/dto/common.py +115 -0
- openepd/api/dto/meta.py +69 -0
- openepd/api/dto/mf.py +59 -0
- openepd/api/dto/params.py +19 -0
- openepd/api/epd/__init__.py +19 -0
- openepd/api/epd/dto.py +121 -0
- openepd/api/epd/sync_api.py +105 -0
- openepd/api/errors.py +86 -0
- openepd/api/pcr/__init__.py +19 -0
- openepd/api/pcr/dto.py +41 -0
- openepd/api/pcr/sync_api.py +49 -0
- openepd/api/sync_client.py +67 -0
- openepd/api/test/__init__.py +19 -0
- openepd/bundle/__init__.py +1 -1
- openepd/bundle/base.py +1 -1
- openepd/bundle/model.py +5 -6
- openepd/bundle/reader.py +5 -5
- openepd/bundle/writer.py +5 -4
- openepd/compat/__init__.py +19 -0
- openepd/compat/pydantic.py +29 -0
- openepd/model/__init__.py +1 -1
- openepd/model/base.py +114 -15
- openepd/model/category.py +39 -0
- openepd/model/common.py +33 -25
- openepd/model/epd.py +97 -78
- openepd/model/factory.py +48 -0
- openepd/model/lcia.py +24 -13
- openepd/model/org.py +28 -18
- openepd/model/pcr.py +42 -14
- openepd/model/specs/README.md +19 -0
- openepd/model/specs/__init__.py +72 -4
- openepd/model/specs/aluminium.py +67 -0
- openepd/model/specs/asphalt.py +87 -0
- openepd/model/specs/base.py +60 -0
- openepd/model/specs/concrete.py +288 -24
- openepd/model/specs/generated/accessories.py +63 -0
- openepd/model/specs/generated/aggregates.py +71 -0
- openepd/model/specs/generated/aluminium.py +66 -0
- openepd/model/specs/generated/asphalt.py +86 -0
- openepd/model/specs/generated/bulk_materials.py +26 -0
- openepd/model/specs/generated/cast_decks_and_underlayment.py +26 -0
- openepd/model/specs/generated/cladding.py +214 -0
- openepd/model/specs/generated/cmu.py +46 -0
- openepd/model/specs/generated/common.py +27 -0
- openepd/model/specs/generated/concrete.py +151 -0
- openepd/model/specs/generated/conveying_equipment.py +57 -0
- openepd/model/specs/generated/electrical.py +297 -0
- openepd/model/specs/generated/electrical_transmission_and_distribution_equipment.py +63 -0
- openepd/model/specs/generated/electricity.py +26 -0
- openepd/model/specs/generated/enums.py +2420 -0
- openepd/model/specs/generated/finishes.py +519 -0
- openepd/model/specs/generated/fire_and_smoke_protection.py +79 -0
- openepd/model/specs/generated/furnishings.py +95 -0
- openepd/model/specs/generated/grouting.py +26 -0
- openepd/model/specs/generated/manufacturing_inputs.py +131 -0
- openepd/model/specs/generated/masonry.py +77 -0
- openepd/model/specs/generated/material_handling.py +35 -0
- openepd/model/specs/generated/mechanical.py +271 -0
- openepd/model/specs/generated/mechanical_insulation.py +41 -0
- openepd/model/specs/generated/network_infrastructure.py +181 -0
- openepd/model/specs/generated/openings.py +423 -0
- openepd/model/specs/generated/other_electrical_equipment.py +26 -0
- openepd/model/specs/generated/other_materials.py +123 -0
- openepd/model/specs/generated/plumbing.py +153 -0
- openepd/model/specs/generated/precast_concrete.py +68 -0
- openepd/model/specs/generated/sheathing.py +74 -0
- openepd/model/specs/generated/steel.py +224 -0
- openepd/model/specs/generated/thermal_moisture_protection.py +233 -0
- openepd/model/specs/generated/utility_piping.py +65 -0
- openepd/model/specs/generated/wood.py +167 -0
- openepd/model/specs/generated/wood_joists.py +38 -0
- openepd/model/specs/glass.py +360 -0
- openepd/model/specs/steel.py +184 -0
- openepd/model/specs/wood.py +130 -0
- openepd/model/standard.py +2 -3
- openepd/model/validation/__init__.py +19 -0
- openepd/model/validation/common.py +59 -0
- openepd/model/validation/numbers.py +26 -0
- openepd/model/validation/quantity.py +132 -0
- openepd/model/versioning.py +129 -0
- {openepd-2.0.0.dist-info → openepd-3.1.0.dist-info}/METADATA +36 -5
- openepd-3.1.0.dist-info/RECORD +95 -0
- openepd-2.0.0.dist-info/RECORD +0 -22
- {openepd-2.0.0.dist-info → openepd-3.1.0.dist-info}/LICENSE +0 -0
- {openepd-2.0.0.dist-info → openepd-3.1.0.dist-info}/WHEEL +0 -0
@@ -0,0 +1,123 @@
|
|
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.specs.base import BaseOpenEpdHierarchicalSpec
|
21
|
+
|
22
|
+
|
23
|
+
class AuxiliariesV1(BaseOpenEpdHierarchicalSpec):
|
24
|
+
"""Auxiliaries performance specification."""
|
25
|
+
|
26
|
+
_EXT_VERSION = "1.0"
|
27
|
+
|
28
|
+
|
29
|
+
class CleaningProductsV1(BaseOpenEpdHierarchicalSpec):
|
30
|
+
"""Cleaning products performance specification."""
|
31
|
+
|
32
|
+
_EXT_VERSION = "1.0"
|
33
|
+
|
34
|
+
|
35
|
+
class ClothingV1(BaseOpenEpdHierarchicalSpec):
|
36
|
+
"""Clothing performance specification."""
|
37
|
+
|
38
|
+
_EXT_VERSION = "1.0"
|
39
|
+
|
40
|
+
|
41
|
+
class FoodBeverageV1(BaseOpenEpdHierarchicalSpec):
|
42
|
+
"""Food beverage performance specification."""
|
43
|
+
|
44
|
+
_EXT_VERSION = "1.0"
|
45
|
+
|
46
|
+
|
47
|
+
class TransportationInfrastructureV1(BaseOpenEpdHierarchicalSpec):
|
48
|
+
"""Transportation infrastructure performance specification."""
|
49
|
+
|
50
|
+
_EXT_VERSION = "1.0"
|
51
|
+
|
52
|
+
# Nested specs:
|
53
|
+
Auxiliaries: AuxiliariesV1 | None = None
|
54
|
+
|
55
|
+
|
56
|
+
class UnsupportedV1(BaseOpenEpdHierarchicalSpec):
|
57
|
+
"""Unsupported performance specification."""
|
58
|
+
|
59
|
+
_EXT_VERSION = "1.0"
|
60
|
+
|
61
|
+
# Nested specs:
|
62
|
+
CleaningProducts: CleaningProductsV1 | None = None
|
63
|
+
Clothing: ClothingV1 | None = None
|
64
|
+
FoodBeverage: FoodBeverageV1 | None = None
|
65
|
+
|
66
|
+
|
67
|
+
class CopperV1(BaseOpenEpdHierarchicalSpec):
|
68
|
+
"""Copper performance specification."""
|
69
|
+
|
70
|
+
_EXT_VERSION = "1.0"
|
71
|
+
|
72
|
+
|
73
|
+
class EarthworkV1(BaseOpenEpdHierarchicalSpec):
|
74
|
+
"""Earthwork performance specification."""
|
75
|
+
|
76
|
+
_EXT_VERSION = "1.0"
|
77
|
+
|
78
|
+
|
79
|
+
class ExteriorSunControlDevicesV1(BaseOpenEpdHierarchicalSpec):
|
80
|
+
"""Exterior sun control devices performance specification."""
|
81
|
+
|
82
|
+
_EXT_VERSION = "1.0"
|
83
|
+
|
84
|
+
|
85
|
+
class GypsumFinishingCompoundsV1(BaseOpenEpdHierarchicalSpec):
|
86
|
+
"""Plasters and the like for finishing Gypsum Sheet and Board."""
|
87
|
+
|
88
|
+
_EXT_VERSION = "1.0"
|
89
|
+
|
90
|
+
|
91
|
+
class ProfilesV1(BaseOpenEpdHierarchicalSpec):
|
92
|
+
"""Profiles performance specification."""
|
93
|
+
|
94
|
+
_EXT_VERSION = "1.0"
|
95
|
+
|
96
|
+
|
97
|
+
class UnknownV1(BaseOpenEpdHierarchicalSpec):
|
98
|
+
"""Unknown performance specification."""
|
99
|
+
|
100
|
+
_EXT_VERSION = "1.0"
|
101
|
+
|
102
|
+
|
103
|
+
class ZincV1(BaseOpenEpdHierarchicalSpec):
|
104
|
+
"""Zinc performance specification."""
|
105
|
+
|
106
|
+
_EXT_VERSION = "1.0"
|
107
|
+
|
108
|
+
|
109
|
+
class OtherMaterialsV1(BaseOpenEpdHierarchicalSpec):
|
110
|
+
"""Other materials performance specification."""
|
111
|
+
|
112
|
+
_EXT_VERSION = "1.0"
|
113
|
+
|
114
|
+
# Nested specs:
|
115
|
+
TransportationInfrastructure: TransportationInfrastructureV1 | None = None
|
116
|
+
Unsupported: UnsupportedV1 | None = None
|
117
|
+
Copper: CopperV1 | None = None
|
118
|
+
Earthwork: EarthworkV1 | None = None
|
119
|
+
ExteriorSunControlDevices: ExteriorSunControlDevicesV1 | None = None
|
120
|
+
GypsumFinishingCompounds: GypsumFinishingCompoundsV1 | None = None
|
121
|
+
Profiles: ProfilesV1 | None = None
|
122
|
+
Unknown: UnknownV1 | None = None
|
123
|
+
Zinc: ZincV1 | None = None
|
@@ -0,0 +1,153 @@
|
|
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 FireProtectionPipingMaterial, PipingAnsiSchedule, PlumbingPipingMaterial
|
23
|
+
from openepd.model.validation.quantity import LengthMmStr, validate_unit_factory
|
24
|
+
|
25
|
+
|
26
|
+
class BathtubsV1(BaseOpenEpdHierarchicalSpec):
|
27
|
+
"""Bathtubs performance specification."""
|
28
|
+
|
29
|
+
_EXT_VERSION = "1.0"
|
30
|
+
|
31
|
+
|
32
|
+
class FaucetsV1(BaseOpenEpdHierarchicalSpec):
|
33
|
+
"""Faucets performance specification."""
|
34
|
+
|
35
|
+
_EXT_VERSION = "1.0"
|
36
|
+
|
37
|
+
|
38
|
+
class OtherPlumbingFixturesV1(BaseOpenEpdHierarchicalSpec):
|
39
|
+
"""Other plumbing fixtures performance specification."""
|
40
|
+
|
41
|
+
_EXT_VERSION = "1.0"
|
42
|
+
|
43
|
+
|
44
|
+
class WaterClosetsV1(BaseOpenEpdHierarchicalSpec):
|
45
|
+
"""Water closets performance specification."""
|
46
|
+
|
47
|
+
_EXT_VERSION = "1.0"
|
48
|
+
|
49
|
+
|
50
|
+
class FireProtectionPipingV1(BaseOpenEpdHierarchicalSpec):
|
51
|
+
"""Fire protection piping performance specification."""
|
52
|
+
|
53
|
+
_EXT_VERSION = "1.0"
|
54
|
+
|
55
|
+
# Own fields:
|
56
|
+
thickness: LengthMmStr | None = pyd.Field(default=None, description="", example="6 mm")
|
57
|
+
piping_diameter: LengthMmStr | None = pyd.Field(default=None, description="", example="120 mm")
|
58
|
+
mass_per_unit_length: str | None = pyd.Field(default=None, description="", example="1 kg / m")
|
59
|
+
piping_ansi_schedule: PipingAnsiSchedule | None = pyd.Field(default=None, description="", example="5")
|
60
|
+
fire_protection_piping_material: FireProtectionPipingMaterial | None = pyd.Field(
|
61
|
+
default=None, description="", example="PVC"
|
62
|
+
)
|
63
|
+
|
64
|
+
_thickness_is_quantity_validator = pyd.validator("thickness", allow_reuse=True)(validate_unit_factory("m"))
|
65
|
+
_piping_diameter_is_quantity_validator = pyd.validator("piping_diameter", allow_reuse=True)(
|
66
|
+
validate_unit_factory("m")
|
67
|
+
)
|
68
|
+
_mass_per_unit_length_is_quantity_validator = pyd.validator("mass_per_unit_length", allow_reuse=True)(
|
69
|
+
validate_unit_factory("kg / m")
|
70
|
+
)
|
71
|
+
|
72
|
+
|
73
|
+
class FireSprinklersV1(BaseOpenEpdHierarchicalSpec):
|
74
|
+
"""Fire sprinklers performance specification."""
|
75
|
+
|
76
|
+
_EXT_VERSION = "1.0"
|
77
|
+
|
78
|
+
|
79
|
+
class StorageTanksV1(BaseOpenEpdHierarchicalSpec):
|
80
|
+
"""Storage tanks performance specification."""
|
81
|
+
|
82
|
+
_EXT_VERSION = "1.0"
|
83
|
+
|
84
|
+
|
85
|
+
class WaterHeatersV1(BaseOpenEpdHierarchicalSpec):
|
86
|
+
"""Water heaters performance specification."""
|
87
|
+
|
88
|
+
_EXT_VERSION = "1.0"
|
89
|
+
|
90
|
+
|
91
|
+
class PlumbingFixturesV1(BaseOpenEpdHierarchicalSpec):
|
92
|
+
"""Plumbing fixtures performance specification."""
|
93
|
+
|
94
|
+
_EXT_VERSION = "1.0"
|
95
|
+
|
96
|
+
# Nested specs:
|
97
|
+
Bathtubs: BathtubsV1 | None = None
|
98
|
+
Faucets: FaucetsV1 | None = None
|
99
|
+
OtherPlumbingFixtures: OtherPlumbingFixturesV1 | None = None
|
100
|
+
WaterClosets: WaterClosetsV1 | None = None
|
101
|
+
|
102
|
+
|
103
|
+
class FireSuppressionV1(BaseOpenEpdHierarchicalSpec):
|
104
|
+
"""Fire suppression performance specification."""
|
105
|
+
|
106
|
+
_EXT_VERSION = "1.0"
|
107
|
+
|
108
|
+
# Nested specs:
|
109
|
+
FireProtectionPiping: FireProtectionPipingV1 | None = None
|
110
|
+
FireSprinklers: FireSprinklersV1 | None = None
|
111
|
+
|
112
|
+
|
113
|
+
class PipingV1(BaseOpenEpdHierarchicalSpec):
|
114
|
+
"""Piping performance specification."""
|
115
|
+
|
116
|
+
_EXT_VERSION = "1.0"
|
117
|
+
|
118
|
+
# Own fields:
|
119
|
+
thickness: LengthMmStr | None = pyd.Field(default=None, description="", example="6 mm")
|
120
|
+
piping_diameter: LengthMmStr | None = pyd.Field(default=None, description="", example="120 mm")
|
121
|
+
mass_per_unit_length: str | None = pyd.Field(default=None, description="", example="1 kg / m")
|
122
|
+
piping_ansi_schedule: PipingAnsiSchedule | None = pyd.Field(default=None, description="", example="5")
|
123
|
+
plumbing_piping_material: PlumbingPipingMaterial | None = pyd.Field(default=None, description="", example="PVC")
|
124
|
+
|
125
|
+
_thickness_is_quantity_validator = pyd.validator("thickness", allow_reuse=True)(validate_unit_factory("m"))
|
126
|
+
_piping_diameter_is_quantity_validator = pyd.validator("piping_diameter", allow_reuse=True)(
|
127
|
+
validate_unit_factory("m")
|
128
|
+
)
|
129
|
+
_mass_per_unit_length_is_quantity_validator = pyd.validator("mass_per_unit_length", allow_reuse=True)(
|
130
|
+
validate_unit_factory("kg / m")
|
131
|
+
)
|
132
|
+
|
133
|
+
|
134
|
+
class PlumbingEquipmentV1(BaseOpenEpdHierarchicalSpec):
|
135
|
+
"""Plumbing equipment performance specification."""
|
136
|
+
|
137
|
+
_EXT_VERSION = "1.0"
|
138
|
+
|
139
|
+
# Nested specs:
|
140
|
+
StorageTanks: StorageTanksV1 | None = None
|
141
|
+
WaterHeaters: WaterHeatersV1 | None = None
|
142
|
+
|
143
|
+
|
144
|
+
class PlumbingV1(BaseOpenEpdHierarchicalSpec):
|
145
|
+
"""Plumbing performance specification."""
|
146
|
+
|
147
|
+
_EXT_VERSION = "1.0"
|
148
|
+
|
149
|
+
# Nested specs:
|
150
|
+
PlumbingFixtures: PlumbingFixturesV1 | None = None
|
151
|
+
FireSuppression: FireSuppressionV1 | None = None
|
152
|
+
Piping: PipingV1 | None = None
|
153
|
+
PlumbingEquipment: PlumbingEquipmentV1 | None = None
|
@@ -0,0 +1,68 @@
|
|
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.validation.numbers import RatioFloat
|
23
|
+
from openepd.model.validation.quantity import PressureMPaStr, validate_unit_factory
|
24
|
+
|
25
|
+
|
26
|
+
class ArchitecturalPrecastV1(BaseOpenEpdHierarchicalSpec):
|
27
|
+
"""Architectural precast performance specification."""
|
28
|
+
|
29
|
+
_EXT_VERSION = "1.0"
|
30
|
+
|
31
|
+
|
32
|
+
class StructuralPrecastV1(BaseOpenEpdHierarchicalSpec):
|
33
|
+
"""Structural precast performance specification."""
|
34
|
+
|
35
|
+
_EXT_VERSION = "1.0"
|
36
|
+
|
37
|
+
|
38
|
+
class UtilityUndergroundPrecastV1(BaseOpenEpdHierarchicalSpec):
|
39
|
+
"""Utility underground precast performance specification."""
|
40
|
+
|
41
|
+
_EXT_VERSION = "1.0"
|
42
|
+
|
43
|
+
|
44
|
+
class PrecastConcreteV1(BaseOpenEpdHierarchicalSpec):
|
45
|
+
"""Precast concrete performance specification."""
|
46
|
+
|
47
|
+
_EXT_VERSION = "1.0"
|
48
|
+
|
49
|
+
# Own fields:
|
50
|
+
lightweight: bool | None = pyd.Field(default=None, description="", example=True)
|
51
|
+
concrete_compressive_strength_28d: PressureMPaStr | None = pyd.Field(default=None, description="", example="1 MPa")
|
52
|
+
insulated: bool | None = pyd.Field(default=None, description="", example=True)
|
53
|
+
gfrc: bool | None = pyd.Field(
|
54
|
+
default=None,
|
55
|
+
description="Glass Fiber Reinforced Concrete is fiber-reinforced concrete sometimes used in "
|
56
|
+
"architectural panels",
|
57
|
+
example=True,
|
58
|
+
)
|
59
|
+
steel_mass_percentage: RatioFloat | None = pyd.Field(default=None, description="", example=0.5, ge=0, le=1)
|
60
|
+
|
61
|
+
_concrete_compressive_strength_28d_is_quantity_validator = pyd.validator(
|
62
|
+
"concrete_compressive_strength_28d", allow_reuse=True
|
63
|
+
)(validate_unit_factory("MPa"))
|
64
|
+
|
65
|
+
# Nested specs:
|
66
|
+
ArchitecturalPrecast: ArchitecturalPrecastV1 | None = None
|
67
|
+
StructuralPrecast: StructuralPrecastV1 | None = None
|
68
|
+
UtilityUndergroundPrecast: UtilityUndergroundPrecastV1 | None = None
|
@@ -0,0 +1,74 @@
|
|
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 GypsumFacing, GypsumFireRating, GypsumThickness
|
23
|
+
from openepd.model.validation.quantity import LengthMmStr, validate_unit_factory
|
24
|
+
|
25
|
+
|
26
|
+
class CementitiousSheathingBoardV1(BaseOpenEpdHierarchicalSpec):
|
27
|
+
"""Cementitious sheathing board performance specification."""
|
28
|
+
|
29
|
+
_EXT_VERSION = "1.0"
|
30
|
+
|
31
|
+
# Own fields:
|
32
|
+
cement_board_thickness: LengthMmStr | None = pyd.Field(default=None, description="", example="10 mm")
|
33
|
+
|
34
|
+
_cement_board_thickness_is_quantity_validator = pyd.validator("cement_board_thickness", allow_reuse=True)(
|
35
|
+
validate_unit_factory("m")
|
36
|
+
)
|
37
|
+
|
38
|
+
|
39
|
+
class GypsumSheathingBoardV1(BaseOpenEpdHierarchicalSpec):
|
40
|
+
"""Gypsum sheathing board performance specification."""
|
41
|
+
|
42
|
+
_EXT_VERSION = "1.0"
|
43
|
+
|
44
|
+
# Own fields:
|
45
|
+
fire_rating: GypsumFireRating | None = pyd.Field(default=None, description="", example="-")
|
46
|
+
thickness: GypsumThickness | None = pyd.Field(default=None, description="", example="9 mm")
|
47
|
+
facing: GypsumFacing | None = pyd.Field(default=None, description="", example="Paper")
|
48
|
+
|
49
|
+
r_factor: str | None = pyd.Field(default=None, description="", example="1 RSI")
|
50
|
+
|
51
|
+
flame_spread_astm_e84: int | None = pyd.Field(default=None, description="", example=3)
|
52
|
+
smoke_production_astm_e84: int | None = pyd.Field(default=None, description="", example=3)
|
53
|
+
surface_abrasion_d4977: int | None = pyd.Field(default=None, description="", example=3)
|
54
|
+
indentation_d5420: int | None = pyd.Field(default=None, description="", example=3)
|
55
|
+
soft_body_impact_e695: int | None = pyd.Field(default=None, description="", example=3)
|
56
|
+
hard_body_impact_c1929: int | None = pyd.Field(default=None, description="", example=3)
|
57
|
+
|
58
|
+
mold_resistant: bool | None = pyd.Field(default=None, description="", example=True)
|
59
|
+
foil_backing: bool | None = pyd.Field(default=None, description="", example=True)
|
60
|
+
moisture_resistant: bool | None = pyd.Field(default=None, description="", example=True)
|
61
|
+
abuse_resistant: bool | None = pyd.Field(default=None, description="", example=True)
|
62
|
+
|
63
|
+
_gypsum_thickness_is_quantity_validator = pyd.validator("thickness", allow_reuse=True)(validate_unit_factory("m"))
|
64
|
+
_gypsum_r_factor_is_quantity_validator = pyd.validator("r_factor", allow_reuse=True)(validate_unit_factory("RSI"))
|
65
|
+
|
66
|
+
|
67
|
+
class SheathingV1(BaseOpenEpdHierarchicalSpec):
|
68
|
+
"""Sheathing performance specification."""
|
69
|
+
|
70
|
+
_EXT_VERSION = "1.0"
|
71
|
+
|
72
|
+
# Nested specs:
|
73
|
+
CementitiousSheathingBoard: CementitiousSheathingBoardV1 | None = None
|
74
|
+
GypsumSheathingBoard: GypsumSheathingBoardV1 | None = None
|
@@ -0,0 +1,224 @@
|
|
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, BaseOpenEpdSpec
|
22
|
+
from openepd.model.specs.generated.enums import SteelComposition, SteelRebarGrade
|
23
|
+
from openepd.model.specs.steel import SteelMakingRoute
|
24
|
+
from openepd.model.standard import Standard
|
25
|
+
from openepd.model.validation.numbers import RatioFloat
|
26
|
+
from openepd.model.validation.quantity import LengthMmStr, PressureMPaStr, validate_unit_factory
|
27
|
+
|
28
|
+
|
29
|
+
class SteelFabricatedMixin(BaseOpenEpdSpec):
|
30
|
+
"""Class with fabricated property used in different parts of steel hierarchy."""
|
31
|
+
|
32
|
+
fabricated: bool | None = pyd.Field(default=None, description="", example=True)
|
33
|
+
|
34
|
+
|
35
|
+
class ColdFormedFramingV1(BaseOpenEpdHierarchicalSpec):
|
36
|
+
"""Cold formed framing performance specification."""
|
37
|
+
|
38
|
+
_EXT_VERSION = "1.0"
|
39
|
+
|
40
|
+
|
41
|
+
class DeckingSteelV1(BaseOpenEpdHierarchicalSpec):
|
42
|
+
"""Cold Formed Steel Decking."""
|
43
|
+
|
44
|
+
_EXT_VERSION = "1.0"
|
45
|
+
|
46
|
+
|
47
|
+
class SteelSuspensionAssemblyV1(BaseOpenEpdHierarchicalSpec):
|
48
|
+
"""Steel suspension assembly performance specification."""
|
49
|
+
|
50
|
+
_EXT_VERSION = "1.0"
|
51
|
+
|
52
|
+
|
53
|
+
class HollowSectionsV1(BaseOpenEpdHierarchicalSpec, SteelFabricatedMixin):
|
54
|
+
"""Hollow sections performance specification."""
|
55
|
+
|
56
|
+
_EXT_VERSION = "1.0"
|
57
|
+
|
58
|
+
# Own fields:
|
59
|
+
|
60
|
+
|
61
|
+
class HotRolledSectionsV1(BaseOpenEpdHierarchicalSpec, SteelFabricatedMixin):
|
62
|
+
"""Hot rolled sections performance specification."""
|
63
|
+
|
64
|
+
_EXT_VERSION = "1.0"
|
65
|
+
|
66
|
+
# Own fields:
|
67
|
+
|
68
|
+
|
69
|
+
class PlateSteelV1(BaseOpenEpdHierarchicalSpec, SteelFabricatedMixin):
|
70
|
+
"""Plate Steels."""
|
71
|
+
|
72
|
+
_EXT_VERSION = "1.0"
|
73
|
+
|
74
|
+
# Own fields:
|
75
|
+
|
76
|
+
|
77
|
+
class MetalRailingsV1(BaseOpenEpdHierarchicalSpec):
|
78
|
+
"""Metal railings performance specification."""
|
79
|
+
|
80
|
+
_EXT_VERSION = "1.0"
|
81
|
+
|
82
|
+
|
83
|
+
class MetalStairsV1(BaseOpenEpdHierarchicalSpec):
|
84
|
+
"""Metal stairs performance specification."""
|
85
|
+
|
86
|
+
_EXT_VERSION = "1.0"
|
87
|
+
|
88
|
+
|
89
|
+
class MiscMetalFabricationV1(BaseOpenEpdHierarchicalSpec):
|
90
|
+
"""Misc metal fabrication performance specification."""
|
91
|
+
|
92
|
+
_EXT_VERSION = "1.0"
|
93
|
+
|
94
|
+
|
95
|
+
class OpenWebMembranesV1(BaseOpenEpdHierarchicalSpec):
|
96
|
+
"""Open web membranes performance specification."""
|
97
|
+
|
98
|
+
_EXT_VERSION = "1.0"
|
99
|
+
|
100
|
+
|
101
|
+
class MBQSteelV1(BaseOpenEpdHierarchicalSpec):
|
102
|
+
"""M b q steel performance specification."""
|
103
|
+
|
104
|
+
_EXT_VERSION = "1.0"
|
105
|
+
|
106
|
+
|
107
|
+
class CoilSteelV1(BaseOpenEpdHierarchicalSpec):
|
108
|
+
"""Coil steel performance specification."""
|
109
|
+
|
110
|
+
_EXT_VERSION = "1.0"
|
111
|
+
|
112
|
+
|
113
|
+
class ColdFormedSteelV1(BaseOpenEpdHierarchicalSpec):
|
114
|
+
"""Cold Formed Structural Steel."""
|
115
|
+
|
116
|
+
_EXT_VERSION = "1.0"
|
117
|
+
|
118
|
+
# Nested specs:
|
119
|
+
ColdFormedFraming: ColdFormedFramingV1 | None = None
|
120
|
+
DeckingSteel: DeckingSteelV1 | None = None
|
121
|
+
SteelSuspensionAssembly: SteelSuspensionAssemblyV1 | None = None
|
122
|
+
|
123
|
+
|
124
|
+
class StructuralSteelV1(BaseOpenEpdHierarchicalSpec):
|
125
|
+
"""Structural Steel."""
|
126
|
+
|
127
|
+
_EXT_VERSION = "1.0"
|
128
|
+
|
129
|
+
# Own fields:
|
130
|
+
modulus_of_elasticity: PressureMPaStr | None = pyd.Field(default=None, description="", example="1.0 MPa")
|
131
|
+
thermal_expansion: str | None = pyd.Field(default=None, description="", example="1 / K")
|
132
|
+
thermal_conductivity: str | None = pyd.Field(default=None, description="", example="1 W / (m * K)")
|
133
|
+
|
134
|
+
_steel_modulus_of_elasticity_is_quantity_validator = pyd.validator("modulus_of_elasticity", allow_reuse=True)(
|
135
|
+
validate_unit_factory("MPa")
|
136
|
+
)
|
137
|
+
_steel_thermal_expansion_is_quantity_validator = pyd.validator("thermal_expansion", allow_reuse=True)(
|
138
|
+
validate_unit_factory("1 / K")
|
139
|
+
)
|
140
|
+
_steel_thermal_conductivity_is_quantity_validator = pyd.validator("thermal_conductivity", allow_reuse=True)(
|
141
|
+
validate_unit_factory("W / (m * K)")
|
142
|
+
)
|
143
|
+
|
144
|
+
# Nested specs:
|
145
|
+
HollowSections: HollowSectionsV1 | None = None
|
146
|
+
HotRolledSections: HotRolledSectionsV1 | None = None
|
147
|
+
PlateSteel: PlateSteelV1 | None = None
|
148
|
+
|
149
|
+
|
150
|
+
class PrefabricatedSteelAssembliesV1(BaseOpenEpdHierarchicalSpec):
|
151
|
+
"""Prefabricated steel assemblies performance specification."""
|
152
|
+
|
153
|
+
_EXT_VERSION = "1.0"
|
154
|
+
|
155
|
+
# Nested specs:
|
156
|
+
MetalRailings: MetalRailingsV1 | None = None
|
157
|
+
MetalStairs: MetalStairsV1 | None = None
|
158
|
+
MiscMetalFabrication: MiscMetalFabricationV1 | None = None
|
159
|
+
OpenWebMembranes: OpenWebMembranesV1 | None = None
|
160
|
+
|
161
|
+
|
162
|
+
class PostTensioningSteelV1(BaseOpenEpdHierarchicalSpec):
|
163
|
+
"""Post-Tensioning Steels, per https://www.concretenetwork.com/post-tension/industry.html."""
|
164
|
+
|
165
|
+
_EXT_VERSION = "1.0"
|
166
|
+
|
167
|
+
|
168
|
+
class RebarSteelV1(BaseOpenEpdHierarchicalSpec, SteelFabricatedMixin):
|
169
|
+
"""Bar steels, such as rebar for concrete reinforcement."""
|
170
|
+
|
171
|
+
_EXT_VERSION = "1.0"
|
172
|
+
|
173
|
+
# Own fields:
|
174
|
+
grade: SteelRebarGrade | None = pyd.Field(default=None, description="", example="60 ksi")
|
175
|
+
diameter_min: LengthMmStr | None = pyd.Field(default=None, description="", example="8 mm")
|
176
|
+
bending_pin_max: float | None = pyd.Field(default=None, description="", example=2.3)
|
177
|
+
ts_ys_ratio_max: float | None = pyd.Field(default=None, description="", example=2.3)
|
178
|
+
epoxy_coated: bool | None = pyd.Field(default=None, description="", example=True)
|
179
|
+
|
180
|
+
_steel_rebar_diameter_min_is_quantity_validator = pyd.validator("diameter_min", allow_reuse=True)(
|
181
|
+
validate_unit_factory("m")
|
182
|
+
)
|
183
|
+
|
184
|
+
|
185
|
+
class WireMeshSteelV1(BaseOpenEpdHierarchicalSpec, SteelFabricatedMixin):
|
186
|
+
"""Mild steel wire for reinforcement, connections, and meshes."""
|
187
|
+
|
188
|
+
_EXT_VERSION = "1.0"
|
189
|
+
|
190
|
+
|
191
|
+
class SteelV1(BaseOpenEpdHierarchicalSpec):
|
192
|
+
"""Steel performance specification."""
|
193
|
+
|
194
|
+
_EXT_VERSION = "1.0"
|
195
|
+
|
196
|
+
# Own fields:
|
197
|
+
yield_tensile_str: PressureMPaStr | None = pyd.Field(default=None, description="", example="1 MPa")
|
198
|
+
bar_elongation: float | None = pyd.Field(default=None, description="", example=2.3)
|
199
|
+
recycled_content: RatioFloat | None = pyd.Field(default=None, description="", example=0.5, ge=0, le=1)
|
200
|
+
post_consumer_recycled_content: RatioFloat | None = pyd.Field(default=None, description="", example=0.5, ge=0, le=1)
|
201
|
+
astm_marking: str | None = pyd.Field(default=None, description="")
|
202
|
+
euro_marking: str | None = pyd.Field(default=None, description="")
|
203
|
+
composition: SteelComposition | None = pyd.Field(default=None, description="", example="Carbon")
|
204
|
+
cold_finished: bool | None = pyd.Field(default=None, description="", example=True)
|
205
|
+
galvanized: bool | None = pyd.Field(default=None, description="", example=True)
|
206
|
+
stainless: bool | None = pyd.Field(default=None, description="", example=True)
|
207
|
+
making_route: SteelMakingRoute | None = pyd.Field(default=None)
|
208
|
+
astm_standards: list[Standard] | None = pyd.Field(default=None, description="")
|
209
|
+
sae_standards: list[Standard] | None = pyd.Field(default=None, description="")
|
210
|
+
en_standards: list[Standard] | None = pyd.Field(default=None, description="")
|
211
|
+
|
212
|
+
_steel_yield_tensile_str_is_quantity_validator = pyd.validator("yield_tensile_str", allow_reuse=True)(
|
213
|
+
validate_unit_factory("MPa")
|
214
|
+
)
|
215
|
+
|
216
|
+
# Nested specs:
|
217
|
+
MBQSteel: MBQSteelV1 | None = None
|
218
|
+
CoilSteel: CoilSteelV1 | None = None
|
219
|
+
ColdFormedSteel: ColdFormedSteelV1 | None = None
|
220
|
+
StructuralSteel: StructuralSteelV1 | None = None
|
221
|
+
PrefabricatedSteelAssemblies: PrefabricatedSteelAssembliesV1 | None = None
|
222
|
+
PostTensioningSteel: PostTensioningSteelV1 | None = None
|
223
|
+
RebarSteel: RebarSteelV1 | None = None
|
224
|
+
WireMeshSteel: WireMeshSteelV1 | None = None
|