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,95 @@
|
|
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 CountertopMaterial
|
23
|
+
from openepd.model.validation.quantity import LengthMmStr, validate_unit_factory
|
24
|
+
|
25
|
+
|
26
|
+
class DemountablePartitionTrackV1(BaseOpenEpdHierarchicalSpec):
|
27
|
+
"""Demountable partition track performance specification."""
|
28
|
+
|
29
|
+
_EXT_VERSION = "1.0"
|
30
|
+
|
31
|
+
|
32
|
+
class ChairsV1(BaseOpenEpdHierarchicalSpec):
|
33
|
+
"""Chairs performance specification."""
|
34
|
+
|
35
|
+
_EXT_VERSION = "1.0"
|
36
|
+
|
37
|
+
|
38
|
+
class CountertopsV1(BaseOpenEpdHierarchicalSpec):
|
39
|
+
"""Countertops performance specification."""
|
40
|
+
|
41
|
+
_EXT_VERSION = "1.0"
|
42
|
+
|
43
|
+
# Own fields:
|
44
|
+
thickness: LengthMmStr | None = pyd.Field(default=None, description="", example="30 mm")
|
45
|
+
countertop_material: CountertopMaterial | None = pyd.Field(default=None, description="", example="Stone")
|
46
|
+
|
47
|
+
_thickness_is_quantity_validator = pyd.validator("thickness", allow_reuse=True)(validate_unit_factory("m"))
|
48
|
+
|
49
|
+
|
50
|
+
class DemountablePartitionsV1(BaseOpenEpdHierarchicalSpec):
|
51
|
+
"""Demountable partitions performance specification."""
|
52
|
+
|
53
|
+
_EXT_VERSION = "1.0"
|
54
|
+
|
55
|
+
# Nested specs:
|
56
|
+
DemountablePartitionTrack: DemountablePartitionTrackV1 | None = None
|
57
|
+
|
58
|
+
|
59
|
+
class OtherFurnishingsV1(BaseOpenEpdHierarchicalSpec):
|
60
|
+
"""Other furnishings performance specification."""
|
61
|
+
|
62
|
+
_EXT_VERSION = "1.0"
|
63
|
+
|
64
|
+
|
65
|
+
class StorageFurnitureV1(BaseOpenEpdHierarchicalSpec):
|
66
|
+
"""Storage furniture performance specification."""
|
67
|
+
|
68
|
+
_EXT_VERSION = "1.0"
|
69
|
+
|
70
|
+
|
71
|
+
class TablesV1(BaseOpenEpdHierarchicalSpec):
|
72
|
+
"""Tables performance specification."""
|
73
|
+
|
74
|
+
_EXT_VERSION = "1.0"
|
75
|
+
|
76
|
+
|
77
|
+
class WorkSurfacesV1(BaseOpenEpdHierarchicalSpec):
|
78
|
+
"""Work surfaces performance specification."""
|
79
|
+
|
80
|
+
_EXT_VERSION = "1.0"
|
81
|
+
|
82
|
+
|
83
|
+
class FurnishingsV1(BaseOpenEpdHierarchicalSpec):
|
84
|
+
"""Furnishings performance specification."""
|
85
|
+
|
86
|
+
_EXT_VERSION = "1.0"
|
87
|
+
|
88
|
+
# Nested specs:
|
89
|
+
Chairs: ChairsV1 | None = None
|
90
|
+
Countertops: CountertopsV1 | None = None
|
91
|
+
DemountablePartitions: DemountablePartitionsV1 | None = None
|
92
|
+
OtherFurnishings: OtherFurnishingsV1 | None = None
|
93
|
+
StorageFurniture: StorageFurnitureV1 | None = None
|
94
|
+
Tables: TablesV1 | None = None
|
95
|
+
WorkSurfaces: WorkSurfacesV1 | None = None
|
@@ -0,0 +1,26 @@
|
|
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 GroutingV1(BaseOpenEpdHierarchicalSpec):
|
24
|
+
"""Grouting performance specification."""
|
25
|
+
|
26
|
+
_EXT_VERSION = "1.0"
|
@@ -0,0 +1,131 @@
|
|
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.concrete import Cementitious
|
23
|
+
from openepd.model.specs.generated.enums import (
|
24
|
+
AdmixtureEffects,
|
25
|
+
CarpetYarnType,
|
26
|
+
CementAstmType,
|
27
|
+
CementC1157,
|
28
|
+
CementCsaA3001,
|
29
|
+
CementEn197_1,
|
30
|
+
CementScm,
|
31
|
+
MasonryCementAstmC91Type,
|
32
|
+
TextilesFabricType,
|
33
|
+
)
|
34
|
+
|
35
|
+
|
36
|
+
class CementV1(BaseOpenEpdHierarchicalSpec):
|
37
|
+
"""Cement performance specification."""
|
38
|
+
|
39
|
+
_EXT_VERSION = "1.0"
|
40
|
+
|
41
|
+
# Own fields:
|
42
|
+
cementitious: Cementitious | None = pyd.Field(default=None, description="")
|
43
|
+
white_cement: bool | None = pyd.Field(default=None, description="", example=True)
|
44
|
+
astm_type: CementAstmType | None = pyd.Field(default=None, description="", example="C150 Type I")
|
45
|
+
c1157: list[CementC1157] | None = pyd.Field(default=None, description="", example=["GU"])
|
46
|
+
csa_a3001: list[CementCsaA3001] | None = pyd.Field(default=None, description="", example=["A3001 GU"])
|
47
|
+
en197_1: CementEn197_1 | None = pyd.Field(default=None, description="", example="CEM I")
|
48
|
+
oil_well_cement: bool | None = pyd.Field(default=None, description="", example=True)
|
49
|
+
|
50
|
+
|
51
|
+
class MasonryCementV1(BaseOpenEpdHierarchicalSpec):
|
52
|
+
"""Masonry cement performance specification."""
|
53
|
+
|
54
|
+
_EXT_VERSION = "1.0"
|
55
|
+
|
56
|
+
# Own fields:
|
57
|
+
astm_c91_type: MasonryCementAstmC91Type | None = pyd.Field(default=None, description="", example="Type N")
|
58
|
+
|
59
|
+
|
60
|
+
class SupplementaryCementitiousMaterialsV1(BaseOpenEpdHierarchicalSpec):
|
61
|
+
"""Supplementary cementitious materials performance specification."""
|
62
|
+
|
63
|
+
_EXT_VERSION = "1.0"
|
64
|
+
|
65
|
+
# Own fields:
|
66
|
+
cement_scm: list[CementScm] | None = pyd.Field(default=None, description="", example=["ggbs"])
|
67
|
+
|
68
|
+
|
69
|
+
class AccessFlooringPedestalsV1(BaseOpenEpdHierarchicalSpec):
|
70
|
+
"""Access flooring pedestals performance specification."""
|
71
|
+
|
72
|
+
_EXT_VERSION = "1.0"
|
73
|
+
|
74
|
+
|
75
|
+
class CarpetBackingV1(BaseOpenEpdHierarchicalSpec):
|
76
|
+
"""Fabric backing holding a carpet together."""
|
77
|
+
|
78
|
+
_EXT_VERSION = "1.0"
|
79
|
+
|
80
|
+
|
81
|
+
class CarpetFiberV1(BaseOpenEpdHierarchicalSpec):
|
82
|
+
"""Fiber yarn used in the manufacture of carpet, typically nylon or wool."""
|
83
|
+
|
84
|
+
_EXT_VERSION = "1.0"
|
85
|
+
|
86
|
+
# Own fields:
|
87
|
+
yarn_material: CarpetYarnType | None = pyd.Field(default=None, description="", example="Nylon 6,6")
|
88
|
+
yarn_recycled_content: float | None = pyd.Field(default=None, description="", example=2.3)
|
89
|
+
|
90
|
+
|
91
|
+
class CementitiousMaterialsV1(BaseOpenEpdHierarchicalSpec):
|
92
|
+
"""Cementitious materials performance specification."""
|
93
|
+
|
94
|
+
_EXT_VERSION = "1.0"
|
95
|
+
|
96
|
+
# Nested specs:
|
97
|
+
Cement: CementV1 | None = None
|
98
|
+
MasonryCement: MasonryCementV1 | None = None
|
99
|
+
SupplementaryCementitiousMaterials: SupplementaryCementitiousMaterialsV1 | None = None
|
100
|
+
|
101
|
+
|
102
|
+
class ConcreteAdmixturesV1(BaseOpenEpdHierarchicalSpec):
|
103
|
+
"""Concrete admixtures performance specification."""
|
104
|
+
|
105
|
+
_EXT_VERSION = "1.0"
|
106
|
+
|
107
|
+
# Own fields:
|
108
|
+
effects: list[AdmixtureEffects] | None = pyd.Field(default=None, description="", example=["Air Entrainer"])
|
109
|
+
|
110
|
+
|
111
|
+
class TextilesV1(BaseOpenEpdHierarchicalSpec):
|
112
|
+
"""Textiles performance specification."""
|
113
|
+
|
114
|
+
_EXT_VERSION = "1.0"
|
115
|
+
|
116
|
+
# Own fields:
|
117
|
+
fabric_type: list[TextilesFabricType] | None = pyd.Field(default=None, description="", example=["Leather"])
|
118
|
+
|
119
|
+
|
120
|
+
class ManufacturingInputsV1(BaseOpenEpdHierarchicalSpec):
|
121
|
+
"""Manufacturing inputs performance specification."""
|
122
|
+
|
123
|
+
_EXT_VERSION = "1.0"
|
124
|
+
|
125
|
+
# Nested specs:
|
126
|
+
AccessFlooringPedestals: AccessFlooringPedestalsV1 | None = None
|
127
|
+
CarpetBacking: CarpetBackingV1 | None = None
|
128
|
+
CarpetFiber: CarpetFiberV1 | None = None
|
129
|
+
CementitiousMaterials: CementitiousMaterialsV1 | None = None
|
130
|
+
ConcreteAdmixtures: ConcreteAdmixturesV1 | None = None
|
131
|
+
Textiles: TextilesV1 | None = None
|
@@ -0,0 +1,77 @@
|
|
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.quantity import PressureMPaStr, validate_unit_factory
|
23
|
+
|
24
|
+
|
25
|
+
class GMUV1(BaseOpenEpdHierarchicalSpec):
|
26
|
+
"""Glass Masonry Unit performance specification."""
|
27
|
+
|
28
|
+
_EXT_VERSION = "1.0"
|
29
|
+
|
30
|
+
|
31
|
+
class AutoclavedAeratedConcreteV1(BaseOpenEpdHierarchicalSpec):
|
32
|
+
"""Autoclaved aerated concrete performance specification."""
|
33
|
+
|
34
|
+
_EXT_VERSION = "1.0"
|
35
|
+
|
36
|
+
# Own fields:
|
37
|
+
strength_28d: PressureMPaStr | None = pyd.Field(default=None, description="", example="1 MPa")
|
38
|
+
thermal_conductivity: str | None = pyd.Field(default=None, description="", example="1 W / (m * K)")
|
39
|
+
white: bool | None = pyd.Field(default=None, description="", example=True)
|
40
|
+
|
41
|
+
_concrete_compressive_strength_28d_is_quantity_validator = pyd.validator("strength_28d", allow_reuse=True)(
|
42
|
+
validate_unit_factory("MPa")
|
43
|
+
)
|
44
|
+
_aac_thermal_conductivity_is_quantity_validator = pyd.validator("thermal_conductivity", allow_reuse=True)(
|
45
|
+
validate_unit_factory("W / (m * K)")
|
46
|
+
)
|
47
|
+
|
48
|
+
|
49
|
+
class BrickV1(BaseOpenEpdHierarchicalSpec):
|
50
|
+
"""Brick performance specification."""
|
51
|
+
|
52
|
+
_EXT_VERSION = "1.0"
|
53
|
+
|
54
|
+
# Own fields:
|
55
|
+
building: bool | None = pyd.Field(default=None, description="", example=True)
|
56
|
+
facing: bool | None = pyd.Field(default=None, description="", example=True)
|
57
|
+
floor: bool | None = pyd.Field(default=None, description="", example=True)
|
58
|
+
pedestrian: bool | None = pyd.Field(default=None, description="", example=True)
|
59
|
+
paving: bool | None = pyd.Field(default=None, description="", example=True)
|
60
|
+
other: bool | None = pyd.Field(default=None, description="", example=True)
|
61
|
+
chemical_resistant: bool | None = pyd.Field(default=None, description="", example=True)
|
62
|
+
glazed: bool | None = pyd.Field(default=None, description="", example=True)
|
63
|
+
tiles: bool | None = pyd.Field(default=None, description="", example=True)
|
64
|
+
|
65
|
+
|
66
|
+
class MasonryV1(BaseOpenEpdHierarchicalSpec):
|
67
|
+
"""Masonry performance specification."""
|
68
|
+
|
69
|
+
_EXT_VERSION = "1.0"
|
70
|
+
|
71
|
+
# Own fields:
|
72
|
+
white_cement: bool | None = pyd.Field(default=None, description="", example=True)
|
73
|
+
|
74
|
+
# Nested specs:
|
75
|
+
GMU: GMUV1 | None = None
|
76
|
+
AutoclavedAeratedConcrete: AutoclavedAeratedConcreteV1 | None = None
|
77
|
+
Brick: BrickV1 | None = None
|
@@ -0,0 +1,35 @@
|
|
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 ConveyorsV1(BaseOpenEpdHierarchicalSpec):
|
24
|
+
"""Conveyors performance specification."""
|
25
|
+
|
26
|
+
_EXT_VERSION = "1.0"
|
27
|
+
|
28
|
+
|
29
|
+
class MaterialHandlingV1(BaseOpenEpdHierarchicalSpec):
|
30
|
+
"""Material handling performance specification."""
|
31
|
+
|
32
|
+
_EXT_VERSION = "1.0"
|
33
|
+
|
34
|
+
# Nested specs:
|
35
|
+
Conveyors: ConveyorsV1 | None = None
|
@@ -0,0 +1,271 @@
|
|
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 (
|
23
|
+
AhuAirflowControl,
|
24
|
+
AhuZoneControl,
|
25
|
+
AirFiltersMediaType,
|
26
|
+
AirFiltersMervRating,
|
27
|
+
BoilerConfiguration,
|
28
|
+
BoilerEquipmentFuelType,
|
29
|
+
HeatPumpType,
|
30
|
+
HvacHeatExchangersType,
|
31
|
+
MechanicalInstallation,
|
32
|
+
MechanicalRefrigerants,
|
33
|
+
)
|
34
|
+
from openepd.model.validation.quantity import PressureMPaStr, validate_unit_factory
|
35
|
+
|
36
|
+
|
37
|
+
class HvacVrfControlV1(BaseOpenEpdHierarchicalSpec):
|
38
|
+
"""Hvac vrf control performance specification."""
|
39
|
+
|
40
|
+
_EXT_VERSION = "1.0"
|
41
|
+
|
42
|
+
|
43
|
+
class HvacVrfIndoorV1(BaseOpenEpdHierarchicalSpec):
|
44
|
+
"""Hvac vrf indoor performance specification."""
|
45
|
+
|
46
|
+
_EXT_VERSION = "1.0"
|
47
|
+
|
48
|
+
# Own fields:
|
49
|
+
refrigerants: list[MechanicalRefrigerants] | None = pyd.Field(default=None, description="", example=["R11"])
|
50
|
+
heating_capacity: str | None = pyd.Field(default=None, description="", example="1000.0 W")
|
51
|
+
cooling_capacity: str | None = pyd.Field(default=None, description="", example="1000.0 W")
|
52
|
+
airflow_rate: str | None = pyd.Field(default=None, description="", example="1 m3 / s")
|
53
|
+
air_volume: str | None = pyd.Field(default=None, description="", example="1 m3")
|
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"))
|
65
|
+
|
66
|
+
|
67
|
+
class HvacVrfOutdoorV1(BaseOpenEpdHierarchicalSpec):
|
68
|
+
"""Hvac vrf outdoor performance specification."""
|
69
|
+
|
70
|
+
_EXT_VERSION = "1.0"
|
71
|
+
|
72
|
+
# Own fields:
|
73
|
+
refrigerants: list[MechanicalRefrigerants] | None = pyd.Field(default=None, description="", example=["R11"])
|
74
|
+
heating_capacity: str | None = pyd.Field(default=None, description="", example="1000.0 W")
|
75
|
+
cooling_capacity: str | None = pyd.Field(default=None, description="", example="1000.0 W")
|
76
|
+
airflow_rate: str | None = pyd.Field(default=None, description="", example="1 m3 / s")
|
77
|
+
air_volume: str | None = pyd.Field(default=None, description="", example="1 m3")
|
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"))
|
89
|
+
|
90
|
+
|
91
|
+
class HvacAirDiffusersV1(BaseOpenEpdHierarchicalSpec):
|
92
|
+
"""Hvac air diffusers performance specification."""
|
93
|
+
|
94
|
+
_EXT_VERSION = "1.0"
|
95
|
+
|
96
|
+
|
97
|
+
class HvacAirFiltersV1(BaseOpenEpdHierarchicalSpec):
|
98
|
+
"""Hvac air filters performance specification."""
|
99
|
+
|
100
|
+
_EXT_VERSION = "1.0"
|
101
|
+
|
102
|
+
# Own fields:
|
103
|
+
merv_rating: AirFiltersMervRating | None = pyd.Field(default=None, description="", example="MERV 1")
|
104
|
+
media_type: AirFiltersMediaType | None = pyd.Field(default=None, description="", example="Acrylic")
|
105
|
+
|
106
|
+
|
107
|
+
class HvacAHUsV1(BaseOpenEpdHierarchicalSpec):
|
108
|
+
"""Hvac a h us performance specification."""
|
109
|
+
|
110
|
+
_EXT_VERSION = "1.0"
|
111
|
+
|
112
|
+
# Own fields:
|
113
|
+
refrigerants: list[MechanicalRefrigerants] | None = pyd.Field(default=None, description="", example=["R11"])
|
114
|
+
installation: MechanicalInstallation | None = pyd.Field(default=None, description="", example="Indoor")
|
115
|
+
airflow_rate: str | None = pyd.Field(default=None, description="", example="1 m3 / s")
|
116
|
+
air_volume: str | None = pyd.Field(default=None, description="", example="1 m3")
|
117
|
+
cooling_capacity: str | None = pyd.Field(default=None, description="", example="1000.0 W")
|
118
|
+
heating_capacity: str | None = pyd.Field(default=None, description="", example="1000.0 W")
|
119
|
+
airflow_control: AhuAirflowControl | None = pyd.Field(default=None, description="", example="CAV")
|
120
|
+
zone_control: AhuZoneControl | None = pyd.Field(default=None, description="", example="Single Zone")
|
121
|
+
|
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
|
+
|
134
|
+
class HvacBoilersV1(BaseOpenEpdHierarchicalSpec):
|
135
|
+
"""Hvac boilers performance specification."""
|
136
|
+
|
137
|
+
_EXT_VERSION = "1.0"
|
138
|
+
|
139
|
+
# Own fields:
|
140
|
+
flow_rate: str | None = pyd.Field(default=None, description="", example="1 l / min")
|
141
|
+
heating_capacity: str | None = pyd.Field(default=None, description="", example="1000.0 W")
|
142
|
+
configuration: BoilerConfiguration | None = pyd.Field(default=None, description="", example="Hot water")
|
143
|
+
fuel_type: BoilerEquipmentFuelType | None = pyd.Field(default=None, description="", example="Coal")
|
144
|
+
|
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
|
+
|
151
|
+
class HvacChillersV1(BaseOpenEpdHierarchicalSpec):
|
152
|
+
"""Hvac chillers performance specification."""
|
153
|
+
|
154
|
+
_EXT_VERSION = "1.0"
|
155
|
+
|
156
|
+
# Own fields:
|
157
|
+
refrigerants: list[MechanicalRefrigerants] | None = pyd.Field(default=None, description="", example=["R11"])
|
158
|
+
installation: MechanicalInstallation | None = pyd.Field(default=None, description="", example="Indoor")
|
159
|
+
heating_capacity: str | None = pyd.Field(default=None, description="", example="1000.0 W")
|
160
|
+
cooling_capacity: str | None = pyd.Field(default=None, description="", example="1000.0 W")
|
161
|
+
air_volume: str | None = pyd.Field(default=None, description="", example="1 m3")
|
162
|
+
airflow_rate: str | None = pyd.Field(default=None, description="", example="1 m3 / s")
|
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
|
+
)
|
174
|
+
|
175
|
+
|
176
|
+
class HvacFansV1(BaseOpenEpdHierarchicalSpec):
|
177
|
+
"""Hvac fans performance specification."""
|
178
|
+
|
179
|
+
_EXT_VERSION = "1.0"
|
180
|
+
|
181
|
+
|
182
|
+
class HvacHeatPumpsV1(BaseOpenEpdHierarchicalSpec):
|
183
|
+
"""Hvac heat pumps performance specification."""
|
184
|
+
|
185
|
+
_EXT_VERSION = "1.0"
|
186
|
+
|
187
|
+
# Own fields:
|
188
|
+
refrigerants: list[MechanicalRefrigerants] | None = pyd.Field(default=None, description="", example=["R11"])
|
189
|
+
cooling_capacity: str | None = pyd.Field(default=None, description="", example="1000.0 W")
|
190
|
+
heating_capacity: str | None = pyd.Field(default=None, description="", example="1000.0 W")
|
191
|
+
air_volume: str | None = pyd.Field(default=None, description="", example="1 m3")
|
192
|
+
airflow_rate: str | None = pyd.Field(default=None, description="", example="1 m3 / s")
|
193
|
+
heat_pumps_type: HeatPumpType | None = pyd.Field(default=None, description="", example="Air-to-Water")
|
194
|
+
|
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
|
+
|
207
|
+
class HvacHeatExV1(BaseOpenEpdHierarchicalSpec):
|
208
|
+
"""Hvac heat exchangers performance specification."""
|
209
|
+
|
210
|
+
_EXT_VERSION = "1.0"
|
211
|
+
|
212
|
+
# Own fields:
|
213
|
+
refrigerants: list[MechanicalRefrigerants] | None = pyd.Field(default=None, description="", example=["R11"])
|
214
|
+
heat_exchangers_type: HvacHeatExchangersType | None = pyd.Field(
|
215
|
+
default=None, description="", example="Shell and Tube"
|
216
|
+
)
|
217
|
+
|
218
|
+
|
219
|
+
class HvacPumpsV1(BaseOpenEpdHierarchicalSpec):
|
220
|
+
"""Hvac pumps performance specification."""
|
221
|
+
|
222
|
+
_EXT_VERSION = "1.0"
|
223
|
+
|
224
|
+
# Own fields:
|
225
|
+
flow_rate: str | None = pyd.Field(default=None, description="", example="1 l / min")
|
226
|
+
pump_discharge_pressure: PressureMPaStr | None = pyd.Field(default=None, description="", example="1 MPa")
|
227
|
+
pump_horsepower: str | None = pyd.Field(default=None, description="", example="1000.0 W")
|
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
|
+
)
|
236
|
+
|
237
|
+
|
238
|
+
class HvacRTUsV1(BaseOpenEpdHierarchicalSpec):
|
239
|
+
"""Hvac r t us performance specification."""
|
240
|
+
|
241
|
+
_EXT_VERSION = "1.0"
|
242
|
+
|
243
|
+
|
244
|
+
class HvacVrfSystemsV1(BaseOpenEpdHierarchicalSpec):
|
245
|
+
"""Hvac vrf systems performance specification."""
|
246
|
+
|
247
|
+
_EXT_VERSION = "1.0"
|
248
|
+
|
249
|
+
# Nested specs:
|
250
|
+
HvacVrfControl: HvacVrfControlV1 | None = None
|
251
|
+
HvacVrfIndoor: HvacVrfIndoorV1 | None = None
|
252
|
+
HvacVrfOutdoor: HvacVrfOutdoorV1 | None = None
|
253
|
+
|
254
|
+
|
255
|
+
class MechanicalV1(BaseOpenEpdHierarchicalSpec):
|
256
|
+
"""Mechanical performance specification."""
|
257
|
+
|
258
|
+
_EXT_VERSION = "1.0"
|
259
|
+
|
260
|
+
# Nested specs:
|
261
|
+
HvacAirDiffusers: HvacAirDiffusersV1 | None = None
|
262
|
+
HvacAirFilters: HvacAirFiltersV1 | None = None
|
263
|
+
HvacAHUs: HvacAHUsV1 | None = None
|
264
|
+
HvacBoilers: HvacBoilersV1 | None = None
|
265
|
+
HvacChillers: HvacChillersV1 | None = None
|
266
|
+
HvacFans: HvacFansV1 | None = None
|
267
|
+
HvacHeatPumps: HvacHeatPumpsV1 | None = None
|
268
|
+
HvacHeatEx: HvacHeatExV1 | None = None
|
269
|
+
HvacPumps: HvacPumpsV1 | None = None
|
270
|
+
HvacRTUs: HvacRTUsV1 | None = None
|
271
|
+
HvacVrfSystems: HvacVrfSystemsV1 | None = None
|
@@ -0,0 +1,41 @@
|
|
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 InsulatingMaterial, InsulationIntendedApplication
|
23
|
+
from openepd.model.validation.quantity import LengthMmStr, validate_unit_factory
|
24
|
+
|
25
|
+
|
26
|
+
class MechanicalInsulationV1(BaseOpenEpdHierarchicalSpec):
|
27
|
+
"""Mechanical insulation performance specification."""
|
28
|
+
|
29
|
+
_EXT_VERSION = "1.0"
|
30
|
+
|
31
|
+
# Own fields:
|
32
|
+
r_value: float | None = pyd.Field(default=None, description="", example=2.3)
|
33
|
+
material: InsulatingMaterial | None = pyd.Field(default=None, description="", example="Mineral Wool")
|
34
|
+
intended_application: list[InsulationIntendedApplication] | None = pyd.Field(
|
35
|
+
default=None, description="", example=["Wall & General"]
|
36
|
+
)
|
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
|
+
)
|