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.
- openepd/__version__.py +1 -1
- openepd/compat/compat_functional_validators.py +29 -0
- openepd/compat/pydantic.py +6 -1
- openepd/model/specs/concrete.py +1 -157
- openepd/model/specs/generated/asphalt.py +1 -11
- openepd/model/specs/generated/cladding.py +4 -16
- openepd/model/specs/generated/cmu.py +1 -8
- openepd/model/specs/generated/concrete.py +0 -19
- openepd/model/specs/generated/conveying_equipment.py +2 -12
- openepd/model/specs/generated/electrical.py +9 -12
- openepd/model/specs/generated/finishes.py +2 -36
- openepd/model/specs/generated/fire_and_smoke_protection.py +1 -3
- openepd/model/specs/generated/furnishings.py +1 -3
- openepd/model/specs/generated/masonry.py +5 -4
- openepd/model/specs/generated/mechanical.py +25 -93
- openepd/model/specs/generated/mechanical_insulation.py +1 -5
- openepd/model/specs/generated/network_infrastructure.py +2 -12
- openepd/model/specs/generated/openings.py +5 -17
- openepd/model/specs/generated/plumbing.py +3 -19
- openepd/model/specs/generated/precast_concrete.py +1 -5
- openepd/model/specs/generated/steel.py +10 -13
- openepd/model/specs/generated/thermal_moisture_protection.py +1 -15
- openepd/model/specs/generated/utility_piping.py +2 -10
- openepd/model/specs/generated/wood.py +1 -5
- openepd/model/validation/quantity.py +158 -16
- {openepd-3.1.2.dist-info → openepd-3.1.4.dist-info}/METADATA +1 -1
- {openepd-3.1.2.dist-info → openepd-3.1.4.dist-info}/RECORD +29 -32
- openepd/model/specs/aluminium.py +0 -67
- openepd/model/specs/glass.py +0 -360
- openepd/model/specs/steel.py +0 -184
- openepd/model/specs/wood.py +0 -130
- {openepd-3.1.2.dist-info → openepd-3.1.4.dist-info}/LICENSE +0 -0
- {openepd-3.1.2.dist-info → openepd-3.1.4.dist-info}/WHEEL +0 -0
@@ -31,7 +31,7 @@ from openepd.model.specs.generated.enums import (
|
|
31
31
|
MechanicalInstallation,
|
32
32
|
MechanicalRefrigerants,
|
33
33
|
)
|
34
|
-
from openepd.model.validation.quantity import PressureMPaStr,
|
34
|
+
from openepd.model.validation.quantity import AirflowStr, FlowRateStr, PowerStr, PressureMPaStr, VolumeStr
|
35
35
|
|
36
36
|
|
37
37
|
class HvacVrfControlV1(BaseOpenEpdHierarchicalSpec):
|
@@ -47,21 +47,10 @@ class HvacVrfIndoorV1(BaseOpenEpdHierarchicalSpec):
|
|
47
47
|
|
48
48
|
# Own fields:
|
49
49
|
refrigerants: list[MechanicalRefrigerants] | None = pyd.Field(default=None, description="", example=["R11"])
|
50
|
-
heating_capacity:
|
51
|
-
cooling_capacity:
|
52
|
-
airflow_rate:
|
53
|
-
air_volume:
|
54
|
-
|
55
|
-
_heating_capacity_is_quantity_validator = pyd.validator("heating_capacity", allow_reuse=True)(
|
56
|
-
validate_unit_factory("W")
|
57
|
-
)
|
58
|
-
_cooling_capacity_is_quantity_validator = pyd.validator("cooling_capacity", allow_reuse=True)(
|
59
|
-
validate_unit_factory("W")
|
60
|
-
)
|
61
|
-
_airflow_rate_is_quantity_validator = pyd.validator("airflow_rate", allow_reuse=True)(
|
62
|
-
validate_unit_factory("m3 / s")
|
63
|
-
)
|
64
|
-
_air_volume_is_quantity_validator = pyd.validator("air_volume", allow_reuse=True)(validate_unit_factory("m3"))
|
50
|
+
heating_capacity: PowerStr | None = pyd.Field(default=None, description="", example="1000.0 W")
|
51
|
+
cooling_capacity: PowerStr | None = pyd.Field(default=None, description="", example="1000.0 W")
|
52
|
+
airflow_rate: AirflowStr | None = pyd.Field(default=None, description="", example="1 m3 / s")
|
53
|
+
air_volume: VolumeStr | None = pyd.Field(default=None, description="", example="1 m3")
|
65
54
|
|
66
55
|
|
67
56
|
class HvacVrfOutdoorV1(BaseOpenEpdHierarchicalSpec):
|
@@ -71,21 +60,10 @@ class HvacVrfOutdoorV1(BaseOpenEpdHierarchicalSpec):
|
|
71
60
|
|
72
61
|
# Own fields:
|
73
62
|
refrigerants: list[MechanicalRefrigerants] | None = pyd.Field(default=None, description="", example=["R11"])
|
74
|
-
heating_capacity:
|
75
|
-
cooling_capacity:
|
76
|
-
airflow_rate:
|
77
|
-
air_volume:
|
78
|
-
|
79
|
-
_heating_capacity_is_quantity_validator = pyd.validator("heating_capacity", allow_reuse=True)(
|
80
|
-
validate_unit_factory("W")
|
81
|
-
)
|
82
|
-
_cooling_capacity_is_quantity_validator = pyd.validator("cooling_capacity", allow_reuse=True)(
|
83
|
-
validate_unit_factory("W")
|
84
|
-
)
|
85
|
-
_airflow_rate_is_quantity_validator = pyd.validator("airflow_rate", allow_reuse=True)(
|
86
|
-
validate_unit_factory("m3 / s")
|
87
|
-
)
|
88
|
-
_air_volume_is_quantity_validator = pyd.validator("air_volume", allow_reuse=True)(validate_unit_factory("m3"))
|
63
|
+
heating_capacity: PowerStr | None = pyd.Field(default=None, description="", example="1000.0 W")
|
64
|
+
cooling_capacity: PowerStr | None = pyd.Field(default=None, description="", example="1000.0 W")
|
65
|
+
airflow_rate: AirflowStr | None = pyd.Field(default=None, description="", example="1 m3 / s")
|
66
|
+
air_volume: VolumeStr | None = pyd.Field(default=None, description="", example="1 m3")
|
89
67
|
|
90
68
|
|
91
69
|
class HvacAirDiffusersV1(BaseOpenEpdHierarchicalSpec):
|
@@ -112,24 +90,13 @@ class HvacAHUsV1(BaseOpenEpdHierarchicalSpec):
|
|
112
90
|
# Own fields:
|
113
91
|
refrigerants: list[MechanicalRefrigerants] | None = pyd.Field(default=None, description="", example=["R11"])
|
114
92
|
installation: MechanicalInstallation | None = pyd.Field(default=None, description="", example="Indoor")
|
115
|
-
airflow_rate:
|
116
|
-
air_volume:
|
117
|
-
cooling_capacity:
|
118
|
-
heating_capacity:
|
93
|
+
airflow_rate: AirflowStr | None = pyd.Field(default=None, description="", example="1 m3 / s")
|
94
|
+
air_volume: VolumeStr | None = pyd.Field(default=None, description="", example="1 m3")
|
95
|
+
cooling_capacity: PowerStr | None = pyd.Field(default=None, description="", example="1000.0 W")
|
96
|
+
heating_capacity: PowerStr | None = pyd.Field(default=None, description="", example="1000.0 W")
|
119
97
|
airflow_control: AhuAirflowControl | None = pyd.Field(default=None, description="", example="CAV")
|
120
98
|
zone_control: AhuZoneControl | None = pyd.Field(default=None, description="", example="Single Zone")
|
121
99
|
|
122
|
-
_airflow_rate_is_quantity_validator = pyd.validator("airflow_rate", allow_reuse=True)(
|
123
|
-
validate_unit_factory("m3 / s")
|
124
|
-
)
|
125
|
-
_air_volume_is_quantity_validator = pyd.validator("air_volume", allow_reuse=True)(validate_unit_factory("m3"))
|
126
|
-
_cooling_capacity_is_quantity_validator = pyd.validator("cooling_capacity", allow_reuse=True)(
|
127
|
-
validate_unit_factory("W")
|
128
|
-
)
|
129
|
-
_heating_capacity_is_quantity_validator = pyd.validator("heating_capacity", allow_reuse=True)(
|
130
|
-
validate_unit_factory("W")
|
131
|
-
)
|
132
|
-
|
133
100
|
|
134
101
|
class HvacBoilersV1(BaseOpenEpdHierarchicalSpec):
|
135
102
|
"""Hvac boilers performance specification."""
|
@@ -137,16 +104,11 @@ class HvacBoilersV1(BaseOpenEpdHierarchicalSpec):
|
|
137
104
|
_EXT_VERSION = "1.0"
|
138
105
|
|
139
106
|
# Own fields:
|
140
|
-
flow_rate:
|
141
|
-
heating_capacity:
|
107
|
+
flow_rate: FlowRateStr | None = pyd.Field(default=None, description="", example="1 l / min")
|
108
|
+
heating_capacity: PowerStr | None = pyd.Field(default=None, description="", example="1000.0 W")
|
142
109
|
configuration: BoilerConfiguration | None = pyd.Field(default=None, description="", example="Hot water")
|
143
110
|
fuel_type: BoilerEquipmentFuelType | None = pyd.Field(default=None, description="", example="Coal")
|
144
111
|
|
145
|
-
_flow_rate_is_quantity_validator = pyd.validator("flow_rate", allow_reuse=True)(validate_unit_factory("l / min"))
|
146
|
-
_heating_capacity_is_quantity_validator = pyd.validator("heating_capacity", allow_reuse=True)(
|
147
|
-
validate_unit_factory("W")
|
148
|
-
)
|
149
|
-
|
150
112
|
|
151
113
|
class HvacChillersV1(BaseOpenEpdHierarchicalSpec):
|
152
114
|
"""Hvac chillers performance specification."""
|
@@ -156,21 +118,10 @@ class HvacChillersV1(BaseOpenEpdHierarchicalSpec):
|
|
156
118
|
# Own fields:
|
157
119
|
refrigerants: list[MechanicalRefrigerants] | None = pyd.Field(default=None, description="", example=["R11"])
|
158
120
|
installation: MechanicalInstallation | None = pyd.Field(default=None, description="", example="Indoor")
|
159
|
-
heating_capacity:
|
160
|
-
cooling_capacity:
|
161
|
-
air_volume:
|
162
|
-
airflow_rate:
|
163
|
-
|
164
|
-
_heating_capacity_is_quantity_validator = pyd.validator("heating_capacity", allow_reuse=True)(
|
165
|
-
validate_unit_factory("W")
|
166
|
-
)
|
167
|
-
_cooling_capacity_is_quantity_validator = pyd.validator("cooling_capacity", allow_reuse=True)(
|
168
|
-
validate_unit_factory("W")
|
169
|
-
)
|
170
|
-
_air_volume_is_quantity_validator = pyd.validator("air_volume", allow_reuse=True)(validate_unit_factory("m3"))
|
171
|
-
_airflow_rate_is_quantity_validator = pyd.validator("airflow_rate", allow_reuse=True)(
|
172
|
-
validate_unit_factory("m3 / s")
|
173
|
-
)
|
121
|
+
heating_capacity: PowerStr | None = pyd.Field(default=None, description="", example="1000.0 W")
|
122
|
+
cooling_capacity: PowerStr | None = pyd.Field(default=None, description="", example="1000.0 W")
|
123
|
+
air_volume: VolumeStr | None = pyd.Field(default=None, description="", example="1 m3")
|
124
|
+
airflow_rate: AirflowStr | None = pyd.Field(default=None, description="", example="1 m3 / s")
|
174
125
|
|
175
126
|
|
176
127
|
class HvacFansV1(BaseOpenEpdHierarchicalSpec):
|
@@ -186,23 +137,12 @@ class HvacHeatPumpsV1(BaseOpenEpdHierarchicalSpec):
|
|
186
137
|
|
187
138
|
# Own fields:
|
188
139
|
refrigerants: list[MechanicalRefrigerants] | None = pyd.Field(default=None, description="", example=["R11"])
|
189
|
-
cooling_capacity:
|
190
|
-
heating_capacity:
|
191
|
-
air_volume:
|
192
|
-
airflow_rate:
|
140
|
+
cooling_capacity: PowerStr | None = pyd.Field(default=None, description="", example="1000.0 W")
|
141
|
+
heating_capacity: PowerStr | None = pyd.Field(default=None, description="", example="1000.0 W")
|
142
|
+
air_volume: VolumeStr | None = pyd.Field(default=None, description="", example="1 m3")
|
143
|
+
airflow_rate: AirflowStr | None = pyd.Field(default=None, description="", example="1 m3 / s")
|
193
144
|
heat_pumps_type: HeatPumpType | None = pyd.Field(default=None, description="", example="Air-to-Water")
|
194
145
|
|
195
|
-
_cooling_capacity_is_quantity_validator = pyd.validator("cooling_capacity", allow_reuse=True)(
|
196
|
-
validate_unit_factory("W")
|
197
|
-
)
|
198
|
-
_heating_capacity_is_quantity_validator = pyd.validator("heating_capacity", allow_reuse=True)(
|
199
|
-
validate_unit_factory("W")
|
200
|
-
)
|
201
|
-
_air_volume_is_quantity_validator = pyd.validator("air_volume", allow_reuse=True)(validate_unit_factory("m3"))
|
202
|
-
_airflow_rate_is_quantity_validator = pyd.validator("airflow_rate", allow_reuse=True)(
|
203
|
-
validate_unit_factory("m3 / s")
|
204
|
-
)
|
205
|
-
|
206
146
|
|
207
147
|
class HvacHeatExV1(BaseOpenEpdHierarchicalSpec):
|
208
148
|
"""Hvac heat exchangers performance specification."""
|
@@ -222,17 +162,9 @@ class HvacPumpsV1(BaseOpenEpdHierarchicalSpec):
|
|
222
162
|
_EXT_VERSION = "1.0"
|
223
163
|
|
224
164
|
# Own fields:
|
225
|
-
flow_rate:
|
165
|
+
flow_rate: FlowRateStr | None = pyd.Field(default=None, description="", example="1 l / min")
|
226
166
|
pump_discharge_pressure: PressureMPaStr | None = pyd.Field(default=None, description="", example="1 MPa")
|
227
|
-
pump_horsepower:
|
228
|
-
|
229
|
-
_flow_rate_is_quantity_validator = pyd.validator("flow_rate", allow_reuse=True)(validate_unit_factory("l / min"))
|
230
|
-
_pump_discharge_pressure_is_quantity_validator = pyd.validator("pump_discharge_pressure", allow_reuse=True)(
|
231
|
-
validate_unit_factory("MPa")
|
232
|
-
)
|
233
|
-
_pump_horsepower_is_quantity_validator = pyd.validator("pump_horsepower", allow_reuse=True)(
|
234
|
-
validate_unit_factory("W")
|
235
|
-
)
|
167
|
+
pump_horsepower: PowerStr | None = pyd.Field(default=None, description="", example="1000.0 W")
|
236
168
|
|
237
169
|
|
238
170
|
class HvacRTUsV1(BaseOpenEpdHierarchicalSpec):
|
@@ -20,7 +20,7 @@
|
|
20
20
|
from openepd.compat.pydantic import pyd
|
21
21
|
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
22
22
|
from openepd.model.specs.generated.enums import InsulatingMaterial, InsulationIntendedApplication
|
23
|
-
from openepd.model.validation.quantity import LengthMmStr
|
23
|
+
from openepd.model.validation.quantity import LengthMmStr
|
24
24
|
|
25
25
|
|
26
26
|
class MechanicalInsulationV1(BaseOpenEpdHierarchicalSpec):
|
@@ -35,7 +35,3 @@ class MechanicalInsulationV1(BaseOpenEpdHierarchicalSpec):
|
|
35
35
|
default=None, description="", example=["Wall & General"]
|
36
36
|
)
|
37
37
|
thickness_per_declared_unit: LengthMmStr | None = pyd.Field(default=None, description="", example="20 mm")
|
38
|
-
|
39
|
-
_thickness_per_declared_unit_is_quantity_validator = pyd.validator("thickness_per_declared_unit", allow_reuse=True)(
|
40
|
-
validate_unit_factory("m")
|
41
|
-
)
|
@@ -31,7 +31,7 @@ from openepd.model.specs.generated.enums import (
|
|
31
31
|
RacewaysMaterial,
|
32
32
|
RackType,
|
33
33
|
)
|
34
|
-
from openepd.model.validation.quantity import LengthMmStr, MassKgStr, validate_unit_factory
|
34
|
+
from openepd.model.validation.quantity import ElectricalCurrentStr, LengthMmStr, MassKgStr, validate_unit_factory
|
35
35
|
|
36
36
|
|
37
37
|
class PDUV1(BaseOpenEpdHierarchicalSpec):
|
@@ -40,7 +40,7 @@ class PDUV1(BaseOpenEpdHierarchicalSpec):
|
|
40
40
|
_EXT_VERSION = "1.0"
|
41
41
|
|
42
42
|
# Own fields:
|
43
|
-
amperage:
|
43
|
+
amperage: ElectricalCurrentStr | None = pyd.Field(default=None, description="", example="1 A")
|
44
44
|
outlet_level_metering: bool | None = pyd.Field(default=None, description="", example=True)
|
45
45
|
outlet_level_switching: bool | None = pyd.Field(default=None, description="", example=True)
|
46
46
|
pdu_technology: PduTechnology | None = pyd.Field(default=None, description="", example="Basic")
|
@@ -59,8 +59,6 @@ class CabinetsRacksAndEnclosuresV1(BaseOpenEpdHierarchicalSpec):
|
|
59
59
|
total_racking_units: int | None = pyd.Field(default=None, description="", example=3)
|
60
60
|
rack_type: RackType | None = pyd.Field(default=None, description="", example="Cabinet")
|
61
61
|
|
62
|
-
_static_load_is_quantity_validator = pyd.validator("static_load", allow_reuse=True)(validate_unit_factory("kg"))
|
63
|
-
|
64
62
|
|
65
63
|
class DataCablingV1(BaseOpenEpdHierarchicalSpec):
|
66
64
|
"""Data cabling performance specification."""
|
@@ -141,11 +139,6 @@ class NetworkingCableTraysV1(BaseOpenEpdHierarchicalSpec):
|
|
141
139
|
)
|
142
140
|
material: CableTraysMaterial | None = pyd.Field(default=None, description="", example="Stainless Steel")
|
143
141
|
|
144
|
-
_height_is_quantity_validator = pyd.validator("height", allow_reuse=True)(validate_unit_factory("m"))
|
145
|
-
_width_is_quantity_validator = pyd.validator("width", allow_reuse=True)(validate_unit_factory("m"))
|
146
|
-
_depth_is_quantity_validator = pyd.validator("depth", allow_reuse=True)(validate_unit_factory("m"))
|
147
|
-
_static_load_is_quantity_validator = pyd.validator("static_load", allow_reuse=True)(validate_unit_factory("kg"))
|
148
|
-
|
149
142
|
|
150
143
|
class NetworkingRacewaysV1(BaseOpenEpdHierarchicalSpec):
|
151
144
|
"""Networking raceways performance specification."""
|
@@ -163,9 +156,6 @@ class NetworkingRacewaysV1(BaseOpenEpdHierarchicalSpec):
|
|
163
156
|
)
|
164
157
|
raceways_material: RacewaysMaterial | None = pyd.Field(default=None, description="", example="Aluminum")
|
165
158
|
|
166
|
-
_width_is_quantity_validator = pyd.validator("width", allow_reuse=True)(validate_unit_factory("m"))
|
167
|
-
_depth_is_quantity_validator = pyd.validator("depth", allow_reuse=True)(validate_unit_factory("m"))
|
168
|
-
|
169
159
|
|
170
160
|
class NetworkInfrastructureV1(BaseOpenEpdHierarchicalSpec):
|
171
161
|
"""Network infrastructure performance specification."""
|
@@ -30,7 +30,7 @@ from openepd.model.specs.generated.enums import (
|
|
30
30
|
ThermalSeparation,
|
31
31
|
)
|
32
32
|
from openepd.model.validation.numbers import RatioFloat
|
33
|
-
from openepd.model.validation.quantity import LengthMmStr, PressureMPaStr, validate_unit_factory
|
33
|
+
from openepd.model.validation.quantity import LengthMmStr, PressureMPaStr, SpeedStr, validate_unit_factory
|
34
34
|
|
35
35
|
|
36
36
|
class GlazingIntendedApplication(BaseOpenEpdSchema):
|
@@ -355,10 +355,10 @@ class NAFSFenestrationV1(BaseOpenEpdHierarchicalSpec, GlazingOptionsMixin):
|
|
355
355
|
description="Weighted average conductance of heat across assembly (including frame).",
|
356
356
|
example="1 USI",
|
357
357
|
)
|
358
|
-
air_infiltration:
|
358
|
+
air_infiltration: SpeedStr | None = pyd.Field(
|
359
359
|
default=None,
|
360
360
|
description="Air infiltration, measured at a certain level of Differential Pressure.",
|
361
|
-
example="1
|
361
|
+
example="1 m3 / m2 / s",
|
362
362
|
)
|
363
363
|
|
364
364
|
thermal_separation: ThermalSeparation | None = pyd.Field(default=None, example="Aluminium")
|
@@ -386,10 +386,6 @@ class NAFSFenestrationV1(BaseOpenEpdHierarchicalSpec, GlazingOptionsMixin):
|
|
386
386
|
_assembly_u_factor_is_quantity_validator = pyd.validator("assembly_u_factor", allow_reuse=True)(
|
387
387
|
validate_unit_factory("USI")
|
388
388
|
)
|
389
|
-
_air_infiltration_is_quantity_validator = pyd.validator("air_infiltration", allow_reuse=True)(
|
390
|
-
validate_unit_factory("m / s")
|
391
|
-
)
|
392
|
-
_dp_rating_is_quantity_validator = pyd.validator("dp_rating", allow_reuse=True)(validate_unit_factory("MPa"))
|
393
389
|
_nafs_performance_grade_is_quantity_validator = pyd.validator("performance_grade", allow_reuse=True)(
|
394
390
|
validate_unit_factory("psf")
|
395
391
|
)
|
@@ -415,10 +411,10 @@ class InsulatingGlazingUnitsV1(BaseOpenEpdHierarchicalSpec, GlazingOptionsMixin)
|
|
415
411
|
dp_rating: PressureMPaStr | None = pyd.Field(
|
416
412
|
default=None, description="Maximum Differential Pressure, a measure of wind tolerance.", example="1 MPa"
|
417
413
|
)
|
418
|
-
air_infiltration:
|
414
|
+
air_infiltration: SpeedStr | None = pyd.Field(
|
419
415
|
default=None,
|
420
416
|
description="Air infiltration, measured at a certain level of Differential Pressure.",
|
421
|
-
example="1
|
417
|
+
example="1 m3 / m2 / s",
|
422
418
|
)
|
423
419
|
glass_panes: int | None = pyd.Field(
|
424
420
|
default=None,
|
@@ -432,9 +428,6 @@ class InsulatingGlazingUnitsV1(BaseOpenEpdHierarchicalSpec, GlazingOptionsMixin)
|
|
432
428
|
default=None, description="Spacer material for Integrated Glass Unit.", example="Aluminium"
|
433
429
|
)
|
434
430
|
|
435
|
-
_air_infiltration_is_quantity_validator = pyd.validator("air_infiltration", allow_reuse=True)(
|
436
|
-
validate_unit_factory("m / s")
|
437
|
-
)
|
438
431
|
_dp_rating_is_quantity_validator = pyd.validator("dp_rating", allow_reuse=True)(validate_unit_factory("MPa"))
|
439
432
|
_cog_u_factor_is_quantity_validator = pyd.validator("cog_u_factor", allow_reuse=True)(validate_unit_factory("USI"))
|
440
433
|
|
@@ -462,9 +455,6 @@ class DoorsAndFramesV1(BaseOpenEpdHierarchicalSpec):
|
|
462
455
|
height: LengthMmStr | None = pyd.Field(default=None, example="1200 mm")
|
463
456
|
width: LengthMmStr | None = pyd.Field(default=None, example="600 mm")
|
464
457
|
|
465
|
-
_height_is_quantity_validator = pyd.validator("height", allow_reuse=True)(validate_unit_factory("m"))
|
466
|
-
_width_is_quantity_validator = pyd.validator("width", allow_reuse=True)(validate_unit_factory("m"))
|
467
|
-
|
468
458
|
# Nested specs:
|
469
459
|
IntegratedDoorsOpeningAssemblies: IntegratedDoorsOpeningAssembliesV1 | None = None
|
470
460
|
MetalDoorAndFrames: MetalDoorAndFramesV1 | None = None
|
@@ -541,8 +531,6 @@ class OpeningsV1(BaseOpenEpdHierarchicalSpec):
|
|
541
531
|
# Own fields:
|
542
532
|
thickness: LengthMmStr | None = pyd.Field(default=None, example="80 mm")
|
543
533
|
|
544
|
-
_thickness_is_quantity_validator = pyd.validator("thickness", allow_reuse=True)(validate_unit_factory("m"))
|
545
|
-
|
546
534
|
# Nested specs:
|
547
535
|
CurtainWalls: CurtainWallsV1 | None = None
|
548
536
|
DoorsAndFrames: DoorsAndFramesV1 | None = None
|
@@ -20,7 +20,7 @@
|
|
20
20
|
from openepd.compat.pydantic import pyd
|
21
21
|
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
22
22
|
from openepd.model.specs.generated.enums import FireProtectionPipingMaterial, PipingAnsiSchedule, PlumbingPipingMaterial
|
23
|
-
from openepd.model.validation.quantity import LengthMmStr,
|
23
|
+
from openepd.model.validation.quantity import LengthMmStr, MassPerLengthStr
|
24
24
|
|
25
25
|
|
26
26
|
class BathtubsV1(BaseOpenEpdHierarchicalSpec):
|
@@ -55,20 +55,12 @@ class FireProtectionPipingV1(BaseOpenEpdHierarchicalSpec):
|
|
55
55
|
# Own fields:
|
56
56
|
thickness: LengthMmStr | None = pyd.Field(default=None, description="", example="6 mm")
|
57
57
|
piping_diameter: LengthMmStr | None = pyd.Field(default=None, description="", example="120 mm")
|
58
|
-
mass_per_unit_length:
|
58
|
+
mass_per_unit_length: MassPerLengthStr | None = pyd.Field(default=None, description="", example="1 kg / m")
|
59
59
|
piping_ansi_schedule: PipingAnsiSchedule | None = pyd.Field(default=None, description="", example="5")
|
60
60
|
fire_protection_piping_material: FireProtectionPipingMaterial | None = pyd.Field(
|
61
61
|
default=None, description="", example="PVC"
|
62
62
|
)
|
63
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
64
|
|
73
65
|
class FireSprinklersV1(BaseOpenEpdHierarchicalSpec):
|
74
66
|
"""Fire sprinklers performance specification."""
|
@@ -118,18 +110,10 @@ class PipingV1(BaseOpenEpdHierarchicalSpec):
|
|
118
110
|
# Own fields:
|
119
111
|
thickness: LengthMmStr | None = pyd.Field(default=None, description="", example="6 mm")
|
120
112
|
piping_diameter: LengthMmStr | None = pyd.Field(default=None, description="", example="120 mm")
|
121
|
-
mass_per_unit_length:
|
113
|
+
mass_per_unit_length: MassPerLengthStr | None = pyd.Field(default=None, description="", example="1 kg / m")
|
122
114
|
piping_ansi_schedule: PipingAnsiSchedule | None = pyd.Field(default=None, description="", example="5")
|
123
115
|
plumbing_piping_material: PlumbingPipingMaterial | None = pyd.Field(default=None, description="", example="PVC")
|
124
116
|
|
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
117
|
|
134
118
|
class PlumbingEquipmentV1(BaseOpenEpdHierarchicalSpec):
|
135
119
|
"""Plumbing equipment performance specification."""
|
@@ -20,7 +20,7 @@
|
|
20
20
|
from openepd.compat.pydantic import pyd
|
21
21
|
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
22
22
|
from openepd.model.validation.numbers import RatioFloat
|
23
|
-
from openepd.model.validation.quantity import PressureMPaStr
|
23
|
+
from openepd.model.validation.quantity import PressureMPaStr
|
24
24
|
|
25
25
|
|
26
26
|
class ArchitecturalPrecastV1(BaseOpenEpdHierarchicalSpec):
|
@@ -58,10 +58,6 @@ class PrecastConcreteV1(BaseOpenEpdHierarchicalSpec):
|
|
58
58
|
)
|
59
59
|
steel_mass_percentage: RatioFloat | None = pyd.Field(default=None, description="", example=0.5, ge=0, le=1)
|
60
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
61
|
# Nested specs:
|
66
62
|
ArchitecturalPrecast: ArchitecturalPrecastV1 | None = None
|
67
63
|
StructuralPrecast: StructuralPrecastV1 | None = None
|
@@ -18,14 +18,22 @@
|
|
18
18
|
# Find out more at www.BuildingTransparency.org
|
19
19
|
#
|
20
20
|
from openepd.compat.pydantic import pyd
|
21
|
+
from openepd.model.base import BaseOpenEpdSchema
|
21
22
|
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec, BaseOpenEpdSpec
|
22
23
|
from openepd.model.specs.generated.enums import SteelComposition, SteelRebarGrade
|
23
|
-
from openepd.model.specs.steel import SteelMakingRoute
|
24
24
|
from openepd.model.standard import Standard
|
25
25
|
from openepd.model.validation.numbers import RatioFloat
|
26
26
|
from openepd.model.validation.quantity import LengthMmStr, PressureMPaStr, validate_unit_factory
|
27
27
|
|
28
28
|
|
29
|
+
class SteelMakingRoute(BaseOpenEpdSchema):
|
30
|
+
"""Steel making route."""
|
31
|
+
|
32
|
+
bof: bool | None = pyd.Field(default=None, description="Basic oxygen furnace")
|
33
|
+
eaf: bool | None = pyd.Field(default=None, description="Electric arc furnace")
|
34
|
+
ohf: bool | None = pyd.Field(default=None, description="Open hearth furnace")
|
35
|
+
|
36
|
+
|
29
37
|
class SteelFabricatedMixin(BaseOpenEpdSpec):
|
30
38
|
"""Class with fabricated property used in different parts of steel hierarchy."""
|
31
39
|
|
@@ -180,9 +188,6 @@ class StructuralSteelV1(BaseOpenEpdHierarchicalSpec):
|
|
180
188
|
example="1.45E-5 W / (m * K)",
|
181
189
|
)
|
182
190
|
|
183
|
-
_steel_modulus_of_elasticity_is_quantity_validator = pyd.validator("modulus_of_elasticity", allow_reuse=True)(
|
184
|
-
validate_unit_factory("MPa")
|
185
|
-
)
|
186
191
|
_steel_thermal_expansion_is_quantity_validator = pyd.validator("thermal_expansion", allow_reuse=True)(
|
187
192
|
validate_unit_factory("1 / K")
|
188
193
|
)
|
@@ -228,10 +233,6 @@ class RebarSteelV1(BaseOpenEpdHierarchicalSpec, SteelFabricatedMixin):
|
|
228
233
|
)
|
229
234
|
epoxy_coated: bool | None = pyd.Field(default=None, example=True)
|
230
235
|
|
231
|
-
_steel_rebar_diameter_min_is_quantity_validator = pyd.validator("diameter_min", allow_reuse=True)(
|
232
|
-
validate_unit_factory("m")
|
233
|
-
)
|
234
|
-
|
235
236
|
|
236
237
|
class WireMeshSteelV1(BaseOpenEpdHierarchicalSpec, SteelFabricatedMixin):
|
237
238
|
"""Mild steel wire for reinforcement, connections, and meshes."""
|
@@ -263,7 +264,7 @@ class SteelV1(BaseOpenEpdHierarchicalSpec):
|
|
263
264
|
default=None, description="The marking to be expected on the product.", example="S4S60"
|
264
265
|
)
|
265
266
|
euro_marking: str | None = pyd.Field(
|
266
|
-
default=None, description="The marking to be expected on the product.",
|
267
|
+
default=None, description="The marking to be expected on the product.", example="S4S60"
|
267
268
|
)
|
268
269
|
composition: SteelComposition | None = pyd.Field(
|
269
270
|
default=None, description="Basic chemical composition", example="Carbon"
|
@@ -276,10 +277,6 @@ class SteelV1(BaseOpenEpdHierarchicalSpec):
|
|
276
277
|
sae_standards: list[Standard] | None = pyd.Field(default=None, description="List of SAE standards")
|
277
278
|
en_standards: list[Standard] | None = pyd.Field(default=None, description="List of EN standards")
|
278
279
|
|
279
|
-
_steel_yield_tensile_str_is_quantity_validator = pyd.validator("yield_tensile_str", allow_reuse=True)(
|
280
|
-
validate_unit_factory("MPa")
|
281
|
-
)
|
282
|
-
|
283
280
|
# Nested specs:
|
284
281
|
MBQSteel: MBQSteelV1 | None = None
|
285
282
|
CoilSteel: CoilSteelV1 | None = None
|
@@ -28,7 +28,7 @@ from openepd.model.specs.generated.enums import (
|
|
28
28
|
RoofCoverBoardsMaterial,
|
29
29
|
)
|
30
30
|
from openepd.model.validation.numbers import RatioFloat
|
31
|
-
from openepd.model.validation.quantity import LengthMmStr, PressureMPaStr
|
31
|
+
from openepd.model.validation.quantity import LengthMmStr, PressureMPaStr
|
32
32
|
|
33
33
|
|
34
34
|
class BituminousRoofingV1(BaseOpenEpdHierarchicalSpec):
|
@@ -93,10 +93,6 @@ class BoardInsulationV1(BaseOpenEpdHierarchicalSpec):
|
|
93
93
|
# Own fields:
|
94
94
|
compressive_strength: PressureMPaStr | None = pyd.Field(default=None, description="", example="1 MPa")
|
95
95
|
|
96
|
-
_compressive_strength_is_quantity_validator = pyd.validator("compressive_strength", allow_reuse=True)(
|
97
|
-
validate_unit_factory("MPa")
|
98
|
-
)
|
99
|
-
|
100
96
|
|
101
97
|
class FoamedInPlaceV1(BaseOpenEpdHierarchicalSpec):
|
102
98
|
"""Foamed in place performance specification."""
|
@@ -134,8 +130,6 @@ class MembraneRoofingV1(BaseOpenEpdHierarchicalSpec):
|
|
134
130
|
nsf347: bool | None = pyd.Field(default=None, description="", example=True)
|
135
131
|
vantage_vinyl: bool | None = pyd.Field(default=None, description="", example=True)
|
136
132
|
|
137
|
-
_thickness_is_quantity_validator = pyd.validator("thickness", allow_reuse=True)(validate_unit_factory("m"))
|
138
|
-
|
139
133
|
# Nested specs:
|
140
134
|
BituminousRoofing: BituminousRoofingV1 | None = None
|
141
135
|
SinglePlyEPDM: SinglePlyEPDMV1 | None = None
|
@@ -159,10 +153,6 @@ class InsulationV1(BaseOpenEpdHierarchicalSpec):
|
|
159
153
|
)
|
160
154
|
thickness_per_declared_unit: LengthMmStr | None = pyd.Field(default=None, description="", example="10 mm")
|
161
155
|
|
162
|
-
_thickness_per_declared_unit_is_quantity_validator = pyd.validator("thickness_per_declared_unit", allow_reuse=True)(
|
163
|
-
validate_unit_factory("m")
|
164
|
-
)
|
165
|
-
|
166
156
|
# Nested specs:
|
167
157
|
BlanketInsulation: BlanketInsulationV1 | None = None
|
168
158
|
BlownInsulation: BlownInsulationV1 | None = None
|
@@ -199,10 +189,6 @@ class RoofCoverBoardsV1(BaseOpenEpdHierarchicalSpec):
|
|
199
189
|
facing: list[RoofCoverBoardsFacing] | None = pyd.Field(default=None, description="", example=["Paper"])
|
200
190
|
thickness: LengthMmStr | None = pyd.Field(default=None, description="", example="1 m")
|
201
191
|
|
202
|
-
_roof_cover_boards_thickness_is_quantity_validator = pyd.validator("thickness", allow_reuse=True)(
|
203
|
-
validate_unit_factory("m")
|
204
|
-
)
|
205
|
-
|
206
192
|
|
207
193
|
class SteepSlopeRoofingV1(BaseOpenEpdHierarchicalSpec):
|
208
194
|
"""Steep slope roofing performance specification."""
|
@@ -20,7 +20,7 @@
|
|
20
20
|
from openepd.compat.pydantic import pyd
|
21
21
|
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
22
22
|
from openepd.model.specs.generated.enums import BuriedPipingType, PipingAnsiSchedule, UtilityPipingMaterial
|
23
|
-
from openepd.model.validation.quantity import LengthMmStr,
|
23
|
+
from openepd.model.validation.quantity import LengthMmStr, MassPerLengthStr
|
24
24
|
|
25
25
|
|
26
26
|
class BuildingHeatingPipingV1(BaseOpenEpdHierarchicalSpec):
|
@@ -48,18 +48,10 @@ class UtilityPipingV1(BaseOpenEpdHierarchicalSpec):
|
|
48
48
|
# Own fields:
|
49
49
|
thickness: LengthMmStr | None = pyd.Field(default=None, description="", example="6 m")
|
50
50
|
piping_diameter: LengthMmStr | None = pyd.Field(default=None, description="", example="200 mm")
|
51
|
-
mass_per_unit_length:
|
51
|
+
mass_per_unit_length: MassPerLengthStr | None = pyd.Field(default=None, description="", example="1 kg / m")
|
52
52
|
piping_ansi_schedule: PipingAnsiSchedule | None = pyd.Field(default=None, description="", example="5")
|
53
53
|
utility_piping_material: UtilityPipingMaterial | None = pyd.Field(default=None, description="", example="PVC")
|
54
54
|
|
55
|
-
_thickness_is_quantity_validator = pyd.validator("thickness", allow_reuse=True)(validate_unit_factory("m"))
|
56
|
-
_piping_diameter_is_quantity_validator = pyd.validator("piping_diameter", allow_reuse=True)(
|
57
|
-
validate_unit_factory("m")
|
58
|
-
)
|
59
|
-
_mass_per_unit_length_is_quantity_validator = pyd.validator("mass_per_unit_length", allow_reuse=True)(
|
60
|
-
validate_unit_factory("kg / m")
|
61
|
-
)
|
62
|
-
|
63
55
|
# Nested specs:
|
64
56
|
BuildingHeatingPiping: BuildingHeatingPipingV1 | None = None
|
65
57
|
BuriedPiping: BuriedPipingV1 | None = None
|
@@ -31,7 +31,7 @@ from openepd.model.specs.generated.enums import (
|
|
31
31
|
SheathingPanelsFabrication,
|
32
32
|
)
|
33
33
|
from openepd.model.validation.numbers import RatioFloat
|
34
|
-
from openepd.model.validation.quantity import LengthMmStr
|
34
|
+
from openepd.model.validation.quantity import LengthMmStr
|
35
35
|
|
36
36
|
|
37
37
|
class WoodDeckingV1(BaseOpenEpdHierarchicalSpec):
|
@@ -119,10 +119,6 @@ class SheathingPanelsV1(BaseOpenEpdHierarchicalSpec):
|
|
119
119
|
wood_board_thickness: LengthMmStr | None = pyd.Field(default=None, description="", example="10 mm")
|
120
120
|
timber_species: EngineeredTimberSpecies | None = pyd.Field(default=None, description="", example="Alaska Cedar")
|
121
121
|
|
122
|
-
_wood_board_thickness_is_quantity_validator = pyd.validator("wood_board_thickness", allow_reuse=True)(
|
123
|
-
validate_unit_factory("m")
|
124
|
-
)
|
125
|
-
|
126
122
|
|
127
123
|
class UnfinishedWoodV1(BaseOpenEpdHierarchicalSpec):
|
128
124
|
"""Unfinished or 'green' timber."""
|