openepd 3.1.1__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 +59 -33
- openepd/model/specs/generated/conveying_equipment.py +2 -12
- openepd/model/specs/generated/electrical.py +9 -12
- openepd/model/specs/generated/enums.py +26 -20
- 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 +209 -91
- openepd/model/specs/generated/plumbing.py +3 -19
- openepd/model/specs/generated/precast_concrete.py +1 -5
- openepd/model/specs/generated/steel.py +117 -53
- 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.1.dist-info → openepd-3.1.3.dist-info}/METADATA +2 -1
- {openepd-3.1.1.dist-info → openepd-3.1.3.dist-info}/RECORD +30 -33
- 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.1.dist-info → openepd-3.1.3.dist-info}/LICENSE +0 -0
- {openepd-3.1.1.dist-info → openepd-3.1.3.dist-info}/WHEEL +0 -0
openepd/model/specs/steel.py
DELETED
@@ -1,184 +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.base import BaseOpenEpdSchema
|
24
|
-
from openepd.model.common import OpenEPDUnit
|
25
|
-
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
26
|
-
from openepd.model.specs.generated.enums import SteelComposition
|
27
|
-
from openepd.model.standard import Standard
|
28
|
-
from openepd.model.validation.numbers import RatioFloat
|
29
|
-
from openepd.model.validation.quantity import LengthMmStr, validate_unit_factory
|
30
|
-
|
31
|
-
|
32
|
-
class SteelMakingRoute(BaseOpenEpdSchema):
|
33
|
-
"""Steel making route."""
|
34
|
-
|
35
|
-
bof: bool | None = pyd.Field(default=None, description="Basic oxygen furnace")
|
36
|
-
eaf: bool | None = pyd.Field(default=None, description="Electric arc furnace")
|
37
|
-
ohf: bool | None = pyd.Field(default=None, description="Open hearth furnace")
|
38
|
-
|
39
|
-
|
40
|
-
class FabricatedOptionsMixin(pyd.BaseModel):
|
41
|
-
"""Fabricated options mixin."""
|
42
|
-
|
43
|
-
_EXT_VERSION = "1.0"
|
44
|
-
|
45
|
-
fabricated: bool | None = pyd.Field(default=None, description="Fabricated")
|
46
|
-
|
47
|
-
|
48
|
-
class WireMeshSteelV1(BaseOpenEpdHierarchicalSpec):
|
49
|
-
"""Spec for wire mesh steel."""
|
50
|
-
|
51
|
-
_EXT_VERSION = "1.0"
|
52
|
-
|
53
|
-
class Options(BaseOpenEpdSchema, FabricatedOptionsMixin):
|
54
|
-
"""Wire Mesh Options."""
|
55
|
-
|
56
|
-
pass
|
57
|
-
|
58
|
-
options: Options = pyd.Field(description="Rebar Steel options", default_factory=Options)
|
59
|
-
|
60
|
-
|
61
|
-
class RebarGrade(StrEnum):
|
62
|
-
"""Rebar grade enum."""
|
63
|
-
|
64
|
-
USA_60_KSI = "60 ksi"
|
65
|
-
USA_75_KIS = "75 ksi"
|
66
|
-
USA_80_KSI = "80 ksi"
|
67
|
-
USA_90_KSI = "90 ksi"
|
68
|
-
USA_100_KSI = "100 ksi"
|
69
|
-
USA_120_KSI = "120 ksi"
|
70
|
-
USA_40_KSI = "40 ksi"
|
71
|
-
USA_50_KSI = "50 ksi"
|
72
|
-
|
73
|
-
METRIC_420_MPA = "420 Mpa"
|
74
|
-
METRIC_520_MPA = "520 Mpa"
|
75
|
-
METRIC_550_MPA = "550 Mpa"
|
76
|
-
METRIC_620_MPA = "620 Mpa"
|
77
|
-
METRIC_690_MPA = "690 MPa"
|
78
|
-
METRIC_830_MPA = "830 Mpa"
|
79
|
-
METRIC_280_MPA = "280 MPa"
|
80
|
-
METRIC_350_MPA = "350 Mpa"
|
81
|
-
|
82
|
-
|
83
|
-
class RebarSteelV1(BaseOpenEpdHierarchicalSpec):
|
84
|
-
"""Rebar steel spec."""
|
85
|
-
|
86
|
-
_EXT_VERSION = "1.0"
|
87
|
-
|
88
|
-
class Options(BaseOpenEpdSchema, FabricatedOptionsMixin):
|
89
|
-
"""Rebar Steel Options."""
|
90
|
-
|
91
|
-
epoxy: bool | None = pyd.Field(default=None, description="Epoxy Coated")
|
92
|
-
|
93
|
-
options: Options = pyd.Field(description="Rebar Steel options", default_factory=Options)
|
94
|
-
|
95
|
-
steel_rebar_grade: RebarGrade | None = pyd.Field(default=None, description="Rebar steel grade")
|
96
|
-
steel_rebar_diameter_min: LengthMmStr | None = pyd.Field(default=None, description="Minimum rebar diameter")
|
97
|
-
_steel_rebar_diameter_min = pyd.validator("steel_rebar_diameter_min", allow_reuse=True)(
|
98
|
-
validate_unit_factory(OpenEPDUnit.m)
|
99
|
-
)
|
100
|
-
|
101
|
-
steel_rebar_bending_pin_max: float | None = pyd.Field(
|
102
|
-
default=None, description="Maximum rebar bending pin in diameters of this rebar", example=6.2
|
103
|
-
)
|
104
|
-
steel_rebar_ts_ys_ratio_max: float | None = pyd.Field(
|
105
|
-
default=None, description="Max ratio of ultimate tensile to yield tensile strength"
|
106
|
-
)
|
107
|
-
|
108
|
-
|
109
|
-
class PlateSteelV1(BaseOpenEpdHierarchicalSpec):
|
110
|
-
"""Plate Steel Spec."""
|
111
|
-
|
112
|
-
_EXT_VERSION = "1.0"
|
113
|
-
|
114
|
-
class Options(BaseOpenEpdSchema, FabricatedOptionsMixin):
|
115
|
-
"""Plate Steel Options."""
|
116
|
-
|
117
|
-
pass
|
118
|
-
|
119
|
-
options: Options = pyd.Field(description="Plate Steel options", default_factory=Options)
|
120
|
-
|
121
|
-
|
122
|
-
class HollowV1(BaseOpenEpdHierarchicalSpec):
|
123
|
-
"""Hollow Sections Spec."""
|
124
|
-
|
125
|
-
_EXT_VERSION = "1.0"
|
126
|
-
|
127
|
-
class Options(FabricatedOptionsMixin, BaseOpenEpdSchema):
|
128
|
-
"""Hollow Sections Options."""
|
129
|
-
|
130
|
-
pass
|
131
|
-
|
132
|
-
options: Options = pyd.Field(description="Hollow Steel options", default_factory=Options)
|
133
|
-
|
134
|
-
|
135
|
-
class HotRolledV1(BaseOpenEpdHierarchicalSpec):
|
136
|
-
"""Hot Rolled spec."""
|
137
|
-
|
138
|
-
_EXT_VERSION = "1.0"
|
139
|
-
|
140
|
-
class Options(FabricatedOptionsMixin, BaseOpenEpdSchema):
|
141
|
-
"""Hot Rolled options."""
|
142
|
-
|
143
|
-
pass
|
144
|
-
|
145
|
-
options: Options = pyd.Field(description="Hollow Steel options", default_factory=Options)
|
146
|
-
|
147
|
-
|
148
|
-
class SteelV1(BaseOpenEpdHierarchicalSpec):
|
149
|
-
"""Steel spec."""
|
150
|
-
|
151
|
-
_EXT_VERSION = "1.0"
|
152
|
-
|
153
|
-
class Options(BaseOpenEpdSchema):
|
154
|
-
"""Steel spec options."""
|
155
|
-
|
156
|
-
galvanized: bool | None = pyd.Field(default=None, description="Galvanized")
|
157
|
-
cold_finished: bool | None = pyd.Field(default=None, description="Cold Finished")
|
158
|
-
|
159
|
-
form_factor: str | None = pyd.Field(description="Product's form factor", example="Steel >> RebarSteel")
|
160
|
-
steel_composition: SteelComposition | None = pyd.Field(default=None, description="Basic chemical composition")
|
161
|
-
recycled_content: RatioFloat | None = pyd.Field(
|
162
|
-
default=None,
|
163
|
-
example=0.3,
|
164
|
-
description="Scrap steel inputs from other processes. Includes "
|
165
|
-
"Post-Consumer content, if any. This percentage may be "
|
166
|
-
"used to evaluate the EPD w.r.t. targets or limits that are"
|
167
|
-
" different for primary and recycled content.",
|
168
|
-
)
|
169
|
-
ASTM: list[Standard] = pyd.Field(description="ASTM standard to which this product complies", default_factory=list)
|
170
|
-
SAE: list[Standard] = pyd.Field(
|
171
|
-
description="AISA/SAE standard to which this product complies", default_factory=list
|
172
|
-
)
|
173
|
-
EN: list[Standard] = pyd.Field(description="EN 10027 number(s)", default_factory=list)
|
174
|
-
|
175
|
-
options: Options | None = pyd.Field(description="Steel options", default_factory=Options)
|
176
|
-
making_route: SteelMakingRoute | None = pyd.Field(default=None, description="Steel making route")
|
177
|
-
|
178
|
-
# Nested specs
|
179
|
-
|
180
|
-
WireMeshSteel: WireMeshSteelV1 | None = None
|
181
|
-
RebarSteel: RebarSteelV1 | None = None
|
182
|
-
PlateSteel: PlateSteelV1 | None = None
|
183
|
-
Hollow: HollowV1 | None = None
|
184
|
-
HotRolled: HotRolledV1 | None = None
|
openepd/model/specs/wood.py
DELETED
@@ -1,130 +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.org import OrgRef
|
24
|
-
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
25
|
-
from openepd.model.validation.numbers import RatioFloat
|
26
|
-
|
27
|
-
|
28
|
-
class TimberSpecies(StrEnum):
|
29
|
-
"""Timber species enum."""
|
30
|
-
|
31
|
-
Alaska_Cedar = "Alaska Cedar"
|
32
|
-
Douglas_Fir_Larch = "Douglas Fir-Larch"
|
33
|
-
Eastern_Spruce = ("Eastern Spruce",)
|
34
|
-
Hem_Fir = "Hem-Fir"
|
35
|
-
Softwood_Species = "Softwood Species"
|
36
|
-
Southern_Pine = ("Southern Pine",)
|
37
|
-
Spruce_Pine_Fir = "Spruce-Pine-Fir"
|
38
|
-
Group_A_Hardwoods = ("Group A Hardwoods",)
|
39
|
-
Group_B_Hardwoods = "Group B Hardwoods"
|
40
|
-
Group_C_Hardwoods = ("Group C Hardwoods",)
|
41
|
-
Group_D_Hardwoods = "Group D Hardwoods"
|
42
|
-
Alaska_Hemlock = "Alaska Hemlock"
|
43
|
-
Alaska_Spruce = ("Alaska Spruce",)
|
44
|
-
Alaska_Yellow_Cedar = "Alaska Yellow Cedar"
|
45
|
-
Aspen = "Aspen"
|
46
|
-
Baldcypress = ("Baldcypress",)
|
47
|
-
Balsam_Fir = "Balsam Fir"
|
48
|
-
Beech_Birch_Hickory = ("Beech-Birch-Hickory",)
|
49
|
-
Coast_Sitka_Spruce = "Coast Sitka Spruce"
|
50
|
-
Coast_Species = "Coast Species"
|
51
|
-
Cottonwood = ("Cottonwood",)
|
52
|
-
Douglas_Fir_Larch_North = "Douglas Fir-Larch (North)"
|
53
|
-
Douglas_Fir_South = ("Douglas Fir-South",)
|
54
|
-
Eastern_Hemlock = "Eastern Hemlock"
|
55
|
-
Eastern_Hemlock_Balsam_Fir = ("Eastern Hemlock-Balsam Fir",)
|
56
|
-
Eastern_Hemlock_Tamarack = ("Eastern Hemlock-Tamarack",)
|
57
|
-
Eastern_Hemlock_Tamarack_North = "Eastern Hemlock-Tamarack (North)"
|
58
|
-
Eastern_Softwoods = ("Eastern Softwoods",)
|
59
|
-
Eastern_White_Pine = "Eastern White Pine"
|
60
|
-
Eastern_White_Pine_North = ("Eastern White Pine (North)",)
|
61
|
-
Hem_Fir_North = "Hem-Fir (North)"
|
62
|
-
Mixed_Maple = "Mixed Maple"
|
63
|
-
Mixed_Oak = ("Mixed Oak",)
|
64
|
-
Mixed_Southern_Pine = "Mixed Southern Pine"
|
65
|
-
Mountain_Hemlock = ("Mountain Hemlock",)
|
66
|
-
Northern_Pine = "Northern Pine"
|
67
|
-
Northern_Red_Oak = "Northern Red Oak"
|
68
|
-
Northern_Species = ("Northern Species",)
|
69
|
-
Northern_White_Cedar = "Northern White Cedar"
|
70
|
-
Ponderosa_Pine = "Ponderosa Pine"
|
71
|
-
Red_Maple = ("Red Maple",)
|
72
|
-
Red_Oak = "Red Oak"
|
73
|
-
Red_Pine = "Red Pine"
|
74
|
-
Redwood = "Redwood"
|
75
|
-
Sitka_Spruce = ("Sitka Spruce",)
|
76
|
-
Scots_Pine = "Scots Pine"
|
77
|
-
Spruce_Pine_Fir_South = ("Spruce-Pine-Fir (South)",)
|
78
|
-
Western_Cedars = "Western Cedars"
|
79
|
-
Western_Cedars_North = ("Western Cedars (North)",)
|
80
|
-
Western_Hemlock = "Western Hemlock"
|
81
|
-
Western_Hemlock_North = ("Western Hemlock (North)",)
|
82
|
-
Western_White_Pine = "Western White Pine"
|
83
|
-
Western_Woods = "Western Woods"
|
84
|
-
White_Oak = ("White Oak",)
|
85
|
-
Yellow_Cedar = "Yellow Cedar"
|
86
|
-
Yellow_Poplar = "Yellow Poplar"
|
87
|
-
|
88
|
-
|
89
|
-
class TimberFabrication(StrEnum):
|
90
|
-
"""Timber fabrication enum."""
|
91
|
-
|
92
|
-
Bonded_Strand = "Bonded Strand"
|
93
|
-
CLT = "CLT"
|
94
|
-
DLT = "DLT"
|
95
|
-
Fiberboard = "Fiberboard"
|
96
|
-
GLT = "GLT"
|
97
|
-
LVL = "LVL"
|
98
|
-
NLT = "NLT"
|
99
|
-
OSB = "OSB"
|
100
|
-
Plywood = "Plywood"
|
101
|
-
|
102
|
-
|
103
|
-
class TimberV1(BaseOpenEpdHierarchicalSpec):
|
104
|
-
"""Timber specific specs."""
|
105
|
-
|
106
|
-
_EXT_VERSION = "1.0"
|
107
|
-
|
108
|
-
# tood restore this if needed? No data in DB.
|
109
|
-
# timber_strength_grade: str | None = pyd.Field(default=None, description="Timber strength grade")
|
110
|
-
|
111
|
-
# Forest Stewardship Council certified proportion. Range is 0 to 1; express as a percentage.
|
112
|
-
fsc_certified: RatioFloat | None = pyd.Field(
|
113
|
-
default=None, description="Forest Stewardship Council certified proportion"
|
114
|
-
)
|
115
|
-
recycled_content: RatioFloat | None = pyd.Field(default=None, description="Recycled content")
|
116
|
-
|
117
|
-
weather_exposed: bool | None = pyd.Field(default=False, description="Weather exposed")
|
118
|
-
fire_retardant: bool | None = pyd.Field(default=None, description="Fire retardant")
|
119
|
-
decay_resistant: bool | None = pyd.Field(default=None, description="Decay resistant")
|
120
|
-
|
121
|
-
timber_species: TimberSpecies | None = pyd.Field(default=None, description="Timber species")
|
122
|
-
fabrication: TimberFabrication | None = pyd.Field(default=None, description="Timber fabrication")
|
123
|
-
|
124
|
-
forest_practices_certifiers: list[OrgRef] | None = pyd.Field(
|
125
|
-
default=None, description="List of organizations that certify forest practices."
|
126
|
-
)
|
127
|
-
# Todo forest practices certifiers
|
128
|
-
# rel_forest_practices_certifiers: neomodel.ZeroOrMore = ogm.RelationshipFrom(
|
129
|
-
# Org, RelType.FOREST_PRACTICES_CERTIFIED, model=ogm.CertifiesRel
|
130
|
-
# )
|
File without changes
|
File without changes
|