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.
Files changed (95) hide show
  1. openepd/__init__.py +1 -1
  2. openepd/__version__.py +2 -2
  3. openepd/api/__init__.py +19 -0
  4. openepd/api/base_sync_client.py +550 -0
  5. openepd/api/category/__init__.py +19 -0
  6. openepd/api/category/dto.py +25 -0
  7. openepd/api/category/sync_api.py +44 -0
  8. openepd/api/common.py +239 -0
  9. openepd/api/dto/__init__.py +19 -0
  10. openepd/api/dto/base.py +41 -0
  11. openepd/api/dto/common.py +115 -0
  12. openepd/api/dto/meta.py +69 -0
  13. openepd/api/dto/mf.py +59 -0
  14. openepd/api/dto/params.py +19 -0
  15. openepd/api/epd/__init__.py +19 -0
  16. openepd/api/epd/dto.py +121 -0
  17. openepd/api/epd/sync_api.py +105 -0
  18. openepd/api/errors.py +86 -0
  19. openepd/api/pcr/__init__.py +19 -0
  20. openepd/api/pcr/dto.py +41 -0
  21. openepd/api/pcr/sync_api.py +49 -0
  22. openepd/api/sync_client.py +67 -0
  23. openepd/api/test/__init__.py +19 -0
  24. openepd/bundle/__init__.py +1 -1
  25. openepd/bundle/base.py +1 -1
  26. openepd/bundle/model.py +5 -6
  27. openepd/bundle/reader.py +5 -5
  28. openepd/bundle/writer.py +5 -4
  29. openepd/compat/__init__.py +19 -0
  30. openepd/compat/pydantic.py +29 -0
  31. openepd/model/__init__.py +1 -1
  32. openepd/model/base.py +114 -15
  33. openepd/model/category.py +39 -0
  34. openepd/model/common.py +33 -25
  35. openepd/model/epd.py +97 -78
  36. openepd/model/factory.py +48 -0
  37. openepd/model/lcia.py +24 -13
  38. openepd/model/org.py +28 -18
  39. openepd/model/pcr.py +42 -14
  40. openepd/model/specs/README.md +19 -0
  41. openepd/model/specs/__init__.py +72 -4
  42. openepd/model/specs/aluminium.py +67 -0
  43. openepd/model/specs/asphalt.py +87 -0
  44. openepd/model/specs/base.py +60 -0
  45. openepd/model/specs/concrete.py +288 -24
  46. openepd/model/specs/generated/accessories.py +63 -0
  47. openepd/model/specs/generated/aggregates.py +71 -0
  48. openepd/model/specs/generated/aluminium.py +66 -0
  49. openepd/model/specs/generated/asphalt.py +86 -0
  50. openepd/model/specs/generated/bulk_materials.py +26 -0
  51. openepd/model/specs/generated/cast_decks_and_underlayment.py +26 -0
  52. openepd/model/specs/generated/cladding.py +214 -0
  53. openepd/model/specs/generated/cmu.py +46 -0
  54. openepd/model/specs/generated/common.py +27 -0
  55. openepd/model/specs/generated/concrete.py +151 -0
  56. openepd/model/specs/generated/conveying_equipment.py +57 -0
  57. openepd/model/specs/generated/electrical.py +297 -0
  58. openepd/model/specs/generated/electrical_transmission_and_distribution_equipment.py +63 -0
  59. openepd/model/specs/generated/electricity.py +26 -0
  60. openepd/model/specs/generated/enums.py +2420 -0
  61. openepd/model/specs/generated/finishes.py +519 -0
  62. openepd/model/specs/generated/fire_and_smoke_protection.py +79 -0
  63. openepd/model/specs/generated/furnishings.py +95 -0
  64. openepd/model/specs/generated/grouting.py +26 -0
  65. openepd/model/specs/generated/manufacturing_inputs.py +131 -0
  66. openepd/model/specs/generated/masonry.py +77 -0
  67. openepd/model/specs/generated/material_handling.py +35 -0
  68. openepd/model/specs/generated/mechanical.py +271 -0
  69. openepd/model/specs/generated/mechanical_insulation.py +41 -0
  70. openepd/model/specs/generated/network_infrastructure.py +181 -0
  71. openepd/model/specs/generated/openings.py +423 -0
  72. openepd/model/specs/generated/other_electrical_equipment.py +26 -0
  73. openepd/model/specs/generated/other_materials.py +123 -0
  74. openepd/model/specs/generated/plumbing.py +153 -0
  75. openepd/model/specs/generated/precast_concrete.py +68 -0
  76. openepd/model/specs/generated/sheathing.py +74 -0
  77. openepd/model/specs/generated/steel.py +224 -0
  78. openepd/model/specs/generated/thermal_moisture_protection.py +233 -0
  79. openepd/model/specs/generated/utility_piping.py +65 -0
  80. openepd/model/specs/generated/wood.py +167 -0
  81. openepd/model/specs/generated/wood_joists.py +38 -0
  82. openepd/model/specs/glass.py +360 -0
  83. openepd/model/specs/steel.py +184 -0
  84. openepd/model/specs/wood.py +130 -0
  85. openepd/model/standard.py +2 -3
  86. openepd/model/validation/__init__.py +19 -0
  87. openepd/model/validation/common.py +59 -0
  88. openepd/model/validation/numbers.py +26 -0
  89. openepd/model/validation/quantity.py +132 -0
  90. openepd/model/versioning.py +129 -0
  91. {openepd-2.0.0.dist-info → openepd-3.1.0.dist-info}/METADATA +36 -5
  92. openepd-3.1.0.dist-info/RECORD +95 -0
  93. openepd-2.0.0.dist-info/RECORD +0 -22
  94. {openepd-2.0.0.dist-info → openepd-3.1.0.dist-info}/LICENSE +0 -0
  95. {openepd-2.0.0.dist-info → openepd-3.1.0.dist-info}/WHEEL +0 -0
@@ -0,0 +1,297 @@
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 CableTraysMaterial, EnergySource, RacewaysMaterial
23
+ from openepd.model.validation.quantity import (
24
+ LengthMmStr,
25
+ LengthMStr,
26
+ MassKgStr,
27
+ TemperatureCStr,
28
+ validate_quantity_ge_factory,
29
+ validate_quantity_le_factory,
30
+ validate_unit_factory,
31
+ )
32
+
33
+
34
+ class LowVoltBusesV1(BaseOpenEpdHierarchicalSpec):
35
+ """Low volt buses performance specification."""
36
+
37
+ _EXT_VERSION = "1.0"
38
+
39
+
40
+ class MedVoltBusesV1(BaseOpenEpdHierarchicalSpec):
41
+ """Med volt buses performance specification."""
42
+
43
+ _EXT_VERSION = "1.0"
44
+
45
+
46
+ class BatteriesV1(BaseOpenEpdHierarchicalSpec):
47
+ """Batteries performance specification."""
48
+
49
+ _EXT_VERSION = "1.0"
50
+
51
+
52
+ class OtherElectricalPowerStorageV1(BaseOpenEpdHierarchicalSpec):
53
+ """Other electrical power storage performance specification."""
54
+
55
+ _EXT_VERSION = "1.0"
56
+
57
+
58
+ class CableTraysV1(BaseOpenEpdHierarchicalSpec):
59
+ """Cable trays performance specification."""
60
+
61
+ _EXT_VERSION = "1.0"
62
+
63
+ # Own fields:
64
+ height: LengthMmStr | None = pyd.Field(default=None, description="", example="100 mm")
65
+ width: LengthMmStr | None = pyd.Field(default=None, description="", example="100 mm")
66
+ depth: LengthMmStr | None = pyd.Field(default=None, description="", example="100 mm")
67
+ static_load: MassKgStr | None = pyd.Field(default=None, description="", example="1 kg")
68
+ ventilated: bool | None = pyd.Field(
69
+ default=None, description="At least 40% of the tray base is open to air flow", example=True
70
+ )
71
+ cable_trays_material: CableTraysMaterial | None = pyd.Field(default=None, description="", example="Stainless Steel")
72
+
73
+ _height_is_quantity_validator = pyd.validator("height", allow_reuse=True)(validate_unit_factory("m"))
74
+ _width_is_quantity_validator = pyd.validator("width", allow_reuse=True)(validate_unit_factory("m"))
75
+ _depth_is_quantity_validator = pyd.validator("depth", allow_reuse=True)(validate_unit_factory("m"))
76
+ _static_load_is_quantity_validator = pyd.validator("static_load", allow_reuse=True)(validate_unit_factory("kg"))
77
+
78
+
79
+ class ElectricalBusesV1(BaseOpenEpdHierarchicalSpec):
80
+ """Electrical buses performance specification."""
81
+
82
+ _EXT_VERSION = "1.0"
83
+
84
+ # Nested specs:
85
+ LowVoltBuses: LowVoltBusesV1 | None = None
86
+ MedVoltBuses: MedVoltBusesV1 | None = None
87
+
88
+
89
+ class FloorEquipmentBoxesV1(BaseOpenEpdHierarchicalSpec):
90
+ """Floor equipment boxes performance specification."""
91
+
92
+ _EXT_VERSION = "1.0"
93
+
94
+
95
+ class PowerDistributionUnitsV1(BaseOpenEpdHierarchicalSpec):
96
+ """Power distribution units performance specification."""
97
+
98
+ _EXT_VERSION = "1.0"
99
+
100
+
101
+ class RacewaysV1(BaseOpenEpdHierarchicalSpec):
102
+ """Raceways performance specification."""
103
+
104
+ _EXT_VERSION = "1.0"
105
+
106
+ # Own fields:
107
+ width: LengthMStr | None = pyd.Field(default=None, description="", example="100 mm")
108
+ depth: LengthMStr | None = pyd.Field(default=None, description="", example="100 mm")
109
+ painted: bool | None = pyd.Field(default=None, description="", example=True)
110
+ divided: bool | None = pyd.Field(default=None, description="", example=True)
111
+ raceways_material: RacewaysMaterial | None = pyd.Field(default=None, description="", example="Aluminum")
112
+
113
+ _width_is_quantity_validator = pyd.validator("width", allow_reuse=True)(validate_unit_factory("m"))
114
+ _depth_is_quantity_validator = pyd.validator("depth", allow_reuse=True)(validate_unit_factory("m"))
115
+
116
+
117
+ class FueledElectricalGeneratorsV1(BaseOpenEpdHierarchicalSpec):
118
+ """Fueled electrical generators performance specification."""
119
+
120
+ _EXT_VERSION = "1.0"
121
+
122
+
123
+ class OtherGenerationV1(BaseOpenEpdHierarchicalSpec):
124
+ """Other generation performance specification."""
125
+
126
+ _EXT_VERSION = "1.0"
127
+
128
+
129
+ class PhotovoltaicsV1(BaseOpenEpdHierarchicalSpec):
130
+ """Photovoltaics performance specification."""
131
+
132
+ _EXT_VERSION = "1.0"
133
+
134
+
135
+ class WindTurbinesV1(BaseOpenEpdHierarchicalSpec):
136
+ """Wind turbines performance specification."""
137
+
138
+ _EXT_VERSION = "1.0"
139
+
140
+
141
+ class ElectricityFromPowerGridV1(BaseOpenEpdHierarchicalSpec):
142
+ """Electricity from power grid performance specification."""
143
+
144
+ _EXT_VERSION = "1.0"
145
+
146
+
147
+ class ElectricityFromSpecificGeneratorV1(BaseOpenEpdHierarchicalSpec):
148
+ """Electricity from specific generator performance specification."""
149
+
150
+ _EXT_VERSION = "1.0"
151
+
152
+ # Own fields:
153
+ energy_source: EnergySource | None = pyd.Field(default=None, description="", example="Grid")
154
+
155
+
156
+ class PowerPurchaseAgreementsV1(BaseOpenEpdHierarchicalSpec):
157
+ """Power purchase agreements performance specification."""
158
+
159
+ _EXT_VERSION = "1.0"
160
+
161
+ # Own fields:
162
+ energy_source: EnergySource | None = pyd.Field(default=None, description="", example="Grid")
163
+
164
+
165
+ class LightbulbsV1(BaseOpenEpdHierarchicalSpec):
166
+ """Lightbulbs performance specification."""
167
+
168
+ _EXT_VERSION = "1.0"
169
+
170
+
171
+ class LightingControlsV1(BaseOpenEpdHierarchicalSpec):
172
+ """Lighting controls performance specification."""
173
+
174
+ _EXT_VERSION = "1.0"
175
+
176
+
177
+ class LightingFixturesV1(BaseOpenEpdHierarchicalSpec):
178
+ """Lighting fixtures performance specification."""
179
+
180
+ _EXT_VERSION = "1.0"
181
+
182
+
183
+ class OutdoorLightingV1(BaseOpenEpdHierarchicalSpec):
184
+ """Outdoor lighting performance specification."""
185
+
186
+ _EXT_VERSION = "1.0"
187
+
188
+
189
+ class SpecialtyLightingV1(BaseOpenEpdHierarchicalSpec):
190
+ """Specialty lighting performance specification."""
191
+
192
+ _EXT_VERSION = "1.0"
193
+
194
+
195
+ class TaskLightingV1(BaseOpenEpdHierarchicalSpec):
196
+ """Task lighting performance specification."""
197
+
198
+ _EXT_VERSION = "1.0"
199
+
200
+
201
+ class ElectricalPowerStorageV1(BaseOpenEpdHierarchicalSpec):
202
+ """Electrical power storage performance specification."""
203
+
204
+ _EXT_VERSION = "1.0"
205
+
206
+ # Nested specs:
207
+ Batteries: BatteriesV1 | None = None
208
+ OtherElectricalPowerStorage: OtherElectricalPowerStorageV1 | None = None
209
+
210
+
211
+ class LowVoltageElectricalDistributionV1(BaseOpenEpdHierarchicalSpec):
212
+ """Low voltage electrical distribution performance specification."""
213
+
214
+ _EXT_VERSION = "1.0"
215
+
216
+ # Nested specs:
217
+ CableTrays: CableTraysV1 | None = None
218
+ ElectricalBuses: ElectricalBusesV1 | None = None
219
+ FloorEquipmentBoxes: FloorEquipmentBoxesV1 | None = None
220
+ PowerDistributionUnits: PowerDistributionUnitsV1 | None = None
221
+ Raceways: RacewaysV1 | None = None
222
+
223
+
224
+ class ElectricalGenerationEquipmentV1(BaseOpenEpdHierarchicalSpec):
225
+ """Electrical generation equipment performance specification."""
226
+
227
+ _EXT_VERSION = "1.0"
228
+
229
+ # Nested specs:
230
+ FueledElectricalGenerators: FueledElectricalGeneratorsV1 | None = None
231
+ OtherGeneration: OtherGenerationV1 | None = None
232
+ Photovoltaics: PhotovoltaicsV1 | None = None
233
+ WindTurbines: WindTurbinesV1 | None = None
234
+
235
+
236
+ class ElectricPowerV1(BaseOpenEpdHierarchicalSpec):
237
+ """Electric power performance specification."""
238
+
239
+ _EXT_VERSION = "1.0"
240
+
241
+ # Nested specs:
242
+ ElectricityFromPowerGrid: ElectricityFromPowerGridV1 | None = None
243
+ ElectricityFromSpecificGenerator: ElectricityFromSpecificGeneratorV1 | None = None
244
+ PowerPurchaseAgreements: PowerPurchaseAgreementsV1 | None = None
245
+
246
+
247
+ class LightingV1(BaseOpenEpdHierarchicalSpec):
248
+ """Lighting performance specification."""
249
+
250
+ _EXT_VERSION = "1.0"
251
+
252
+ # Own fields:
253
+ color_temperature: TemperatureCStr | None = pyd.Field(default=None, description="", example="1 K")
254
+ typical_utilization: str | None = pyd.Field(default=None, description="", example="1 h / yr")
255
+ luminosity: str | None = pyd.Field(default=None, description="", example="1 lumen")
256
+ wattage: str | None = pyd.Field(default=None, description="", example="1000.0 W")
257
+ color_rendering_index: float | None = pyd.Field(default=None, description="", example=2.3)
258
+ dimmable: bool | None = pyd.Field(default=None, description="", example=True)
259
+
260
+ _color_temperature_quantity_ge_validator = pyd.validator("color_temperature", allow_reuse=True)(
261
+ validate_quantity_ge_factory("1E+03 K")
262
+ )
263
+ _color_temperature_quantity_le_validator = pyd.validator("color_temperature", allow_reuse=True)(
264
+ validate_quantity_le_factory("1E+04 K")
265
+ )
266
+ _typical_utilization_quantity_ge_validator = pyd.validator("typical_utilization", allow_reuse=True)(
267
+ validate_quantity_ge_factory("25 h / yr")
268
+ )
269
+ _luminosity_quantity_ge_validator = pyd.validator("luminosity", allow_reuse=True)(
270
+ validate_quantity_ge_factory("450 lumen")
271
+ )
272
+ _luminosity_quantity_le_validator = pyd.validator("luminosity", allow_reuse=True)(
273
+ validate_quantity_le_factory("2.6E+03 lumen")
274
+ )
275
+ _wattage_quantity_ge_validator = pyd.validator("wattage", allow_reuse=True)(validate_quantity_ge_factory("5 W"))
276
+ _wattage_quantity_le_validator = pyd.validator("wattage", allow_reuse=True)(validate_quantity_le_factory("100 W"))
277
+
278
+ # Nested specs:
279
+ Lightbulbs: LightbulbsV1 | None = None
280
+ LightingControls: LightingControlsV1 | None = None
281
+ LightingFixtures: LightingFixturesV1 | None = None
282
+ OutdoorLighting: OutdoorLightingV1 | None = None
283
+ SpecialtyLighting: SpecialtyLightingV1 | None = None
284
+ TaskLighting: TaskLightingV1 | None = None
285
+
286
+
287
+ class ElectricalV1(BaseOpenEpdHierarchicalSpec):
288
+ """Electrical performance specification."""
289
+
290
+ _EXT_VERSION = "1.0"
291
+
292
+ # Nested specs:
293
+ ElectricalPowerStorage: ElectricalPowerStorageV1 | None = None
294
+ LowVoltageElectricalDistribution: LowVoltageElectricalDistributionV1 | None = None
295
+ ElectricalGenerationEquipment: ElectricalGenerationEquipmentV1 | None = None
296
+ ElectricPower: ElectricPowerV1 | None = None
297
+ Lighting: LightingV1 | None = None
@@ -0,0 +1,63 @@
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 AcTransformersV1(BaseOpenEpdHierarchicalSpec):
24
+ """AC transformers performance specification."""
25
+
26
+ _EXT_VERSION = "1.0"
27
+
28
+
29
+ class ElectricalInsulatorsV1(BaseOpenEpdHierarchicalSpec):
30
+ """Electrical insulators performance specification."""
31
+
32
+ _EXT_VERSION = "1.0"
33
+
34
+
35
+ class ElectricalSubstationsV1(BaseOpenEpdHierarchicalSpec):
36
+ """Electrical substations performance specification."""
37
+
38
+ _EXT_VERSION = "1.0"
39
+
40
+
41
+ class ElectricalSwitchgearV1(BaseOpenEpdHierarchicalSpec):
42
+ """Electrical switchgear performance specification."""
43
+
44
+ _EXT_VERSION = "1.0"
45
+
46
+
47
+ class PowerCablingV1(BaseOpenEpdHierarchicalSpec):
48
+ """Power cabling performance specification."""
49
+
50
+ _EXT_VERSION = "1.0"
51
+
52
+
53
+ class ElectricalTransmissionAndDistributionEquipmentV1(BaseOpenEpdHierarchicalSpec):
54
+ """Electrical transmission and distribution equipment performance specification."""
55
+
56
+ _EXT_VERSION = "1.0"
57
+
58
+ # Nested specs:
59
+ AcTransformers: AcTransformersV1 | None = None
60
+ ElectricalInsulators: ElectricalInsulatorsV1 | None = None
61
+ ElectricalSubstations: ElectricalSubstationsV1 | None = None
62
+ ElectricalSwitchgear: ElectricalSwitchgearV1 | None = None
63
+ PowerCabling: PowerCablingV1 | 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 ElectricityV1(BaseOpenEpdHierarchicalSpec):
24
+ """Electricity performance specification."""
25
+
26
+ _EXT_VERSION = "1.0"