openepd 4.7.0__py3-none-any.whl → 4.9.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/__version__.py +1 -1
- openepd/model/generic_estimate.py +24 -4
- openepd/model/lcia.py +30 -3
- openepd/model/specs/generated/electrical.py +8 -1
- openepd/model/specs/generated/finishes.py +35 -1
- openepd/model/specs/generated/network_infrastructure.py +8 -1
- {openepd-4.7.0.dist-info → openepd-4.9.0.dist-info}/METADATA +1 -1
- {openepd-4.7.0.dist-info → openepd-4.9.0.dist-info}/RECORD +10 -10
- {openepd-4.7.0.dist-info → openepd-4.9.0.dist-info}/LICENSE +0 -0
- {openepd-4.7.0.dist-info → openepd-4.9.0.dist-info}/WHEEL +0 -0
openepd/__version__.py
CHANGED
@@ -16,12 +16,13 @@
|
|
16
16
|
from enum import StrEnum
|
17
17
|
|
18
18
|
from openepd.compat.pydantic import pyd
|
19
|
-
from openepd.model.base import BaseDocumentFactory, OpenEpdDoctypes
|
19
|
+
from openepd.model.base import BaseDocumentFactory, BaseOpenEpdSchema, OpenEpdDoctypes
|
20
20
|
from openepd.model.common import WithAltIdsMixin, WithAttachmentsMixin
|
21
21
|
from openepd.model.declaration import BaseDeclaration
|
22
22
|
from openepd.model.geography import Geography
|
23
23
|
from openepd.model.lcia import WithLciaMixin
|
24
24
|
from openepd.model.org import Org
|
25
|
+
from openepd.model.validation.common import ReferenceStr
|
25
26
|
from openepd.model.versioning import OpenEpdVersions, Version
|
26
27
|
|
27
28
|
|
@@ -46,7 +47,28 @@ class LicenseTerms(StrEnum):
|
|
46
47
|
"""
|
47
48
|
|
48
49
|
|
49
|
-
class
|
50
|
+
class GenericEstimateRef(BaseOpenEpdSchema, title="Generic Estimate (Ref)"):
|
51
|
+
"""Reference (short) version of Generic Estimate object."""
|
52
|
+
|
53
|
+
id: str | None = pyd.Field(
|
54
|
+
description="The unique ID for this document. To ensure global uniqueness, should be registered at "
|
55
|
+
"open-xpd-uuid.cqd.io/register or a coordinating registry.",
|
56
|
+
example="1u7zsed8",
|
57
|
+
default=None,
|
58
|
+
)
|
59
|
+
|
60
|
+
name: str | None = pyd.Field(max_length=200, description="Name of the generic estimate", default=None)
|
61
|
+
|
62
|
+
ref: ReferenceStr | None = pyd.Field(
|
63
|
+
default=None,
|
64
|
+
example="https://openepd.buildingtransparency.org/api/generic_estimates/EC300001",
|
65
|
+
description="Reference to this GenericEstimate JSON object",
|
66
|
+
)
|
67
|
+
|
68
|
+
|
69
|
+
class GenericEstimatePreviewV0(
|
70
|
+
WithAttachmentsMixin, GenericEstimateRef, BaseDeclaration, title="Generic Estimate (preview)"
|
71
|
+
):
|
50
72
|
"""
|
51
73
|
Generic Estimate preview, used in API list responses and where there is no need for a full object.
|
52
74
|
|
@@ -58,8 +80,6 @@ class GenericEstimatePreviewV0(WithAttachmentsMixin, BaseDeclaration, title="Gen
|
|
58
80
|
default="openGenericEstimate",
|
59
81
|
)
|
60
82
|
|
61
|
-
name: str | None = pyd.Field(max_length=200, description="Name of the generic estimate", default=None)
|
62
|
-
|
63
83
|
description: str | None = pyd.Field(
|
64
84
|
max_length=2000,
|
65
85
|
description="1-paragraph description of the Generic Estimate. Supports plain text or github flavored markdown.",
|
openepd/model/lcia.py
CHANGED
@@ -195,7 +195,34 @@ class ScopeSet(BaseOpenEpdSchema):
|
|
195
195
|
)
|
196
196
|
|
197
197
|
|
198
|
-
class
|
198
|
+
class ScopesetByNameBase(BaseOpenEpdSchema):
|
199
|
+
"""Base class for the data structures presented as typed name:scopeset mapping ."""
|
200
|
+
|
201
|
+
def get_scopeset_names(self) -> list[str]:
|
202
|
+
"""
|
203
|
+
Get the names of scopesets which have been set by model (not defaults).
|
204
|
+
|
205
|
+
:return: set of names, for example ['gwp', 'odp]
|
206
|
+
"""
|
207
|
+
return [self.__fields__[f].alias or f for f in self.__fields_set__]
|
208
|
+
|
209
|
+
def get_scopeset_by_name(self, name: str) -> ScopeSet | None:
|
210
|
+
"""
|
211
|
+
Get scopeset by name.
|
212
|
+
|
213
|
+
:param name: The name of the scopeset.
|
214
|
+
:return: A scopeset if found, None otherwise
|
215
|
+
"""
|
216
|
+
for f_name, f in self.__fields__.items():
|
217
|
+
if f.alias == name:
|
218
|
+
return getattr(self, f_name)
|
219
|
+
if f_name == name:
|
220
|
+
return getattr(self, f_name)
|
221
|
+
|
222
|
+
return None
|
223
|
+
|
224
|
+
|
225
|
+
class ImpactSet(ScopesetByNameBase):
|
199
226
|
"""A set of impacts, such as GWP, ODP, AP, EP, POCP, EP-marine, EP-terrestrial, EP-freshwater, etc."""
|
200
227
|
|
201
228
|
gwp: ScopeSet | None = pyd.Field(
|
@@ -345,7 +372,7 @@ class Impacts(pyd.BaseModel):
|
|
345
372
|
return self.__root__
|
346
373
|
|
347
374
|
|
348
|
-
class ResourceUseSet(
|
375
|
+
class ResourceUseSet(ScopesetByNameBase):
|
349
376
|
"""A set of resource use indicators, such as RPRec, RPRm, etc."""
|
350
377
|
|
351
378
|
RPRec: ScopeSet | None = pyd.Field(
|
@@ -418,7 +445,7 @@ class ResourceUseSet(BaseOpenEpdSchema):
|
|
418
445
|
)
|
419
446
|
|
420
447
|
|
421
|
-
class OutputFlowSet(
|
448
|
+
class OutputFlowSet(ScopesetByNameBase):
|
422
449
|
"""A set of output flows, such as waste, emissions, etc."""
|
423
450
|
|
424
451
|
twd: ScopeSet | None = pyd.Field(
|
@@ -290,10 +290,16 @@ class LightingV1(BaseOpenEpdHierarchicalSpec):
|
|
290
290
|
TaskLighting: TaskLightingV1 | None = None
|
291
291
|
|
292
292
|
|
293
|
+
class ElectricalConduitV1(BaseOpenEpdHierarchicalSpec):
|
294
|
+
"""Tubing used to protect and route electrical wiring in a building or structure."""
|
295
|
+
|
296
|
+
_EXT_VERSION = "1.0"
|
297
|
+
|
298
|
+
|
293
299
|
class ElectricalV1(BaseOpenEpdHierarchicalSpec):
|
294
300
|
"""Electric power and equipment."""
|
295
301
|
|
296
|
-
_EXT_VERSION = "1.
|
302
|
+
_EXT_VERSION = "1.1"
|
297
303
|
|
298
304
|
# Nested specs:
|
299
305
|
ElectricalPowerStorage: ElectricalPowerStorageV1 | None = None
|
@@ -301,3 +307,4 @@ class ElectricalV1(BaseOpenEpdHierarchicalSpec):
|
|
301
307
|
ElectricalGenerationEquipment: ElectricalGenerationEquipmentV1 | None = None
|
302
308
|
ElectricPower: ElectricPowerV1 | None = None
|
303
309
|
Lighting: LightingV1 | None = None
|
310
|
+
ElectricalConduit: ElectricalConduitV1 | None = None
|
@@ -468,10 +468,44 @@ class MirrorsV1(BaseOpenEpdHierarchicalSpec):
|
|
468
468
|
_EXT_VERSION = "1.0"
|
469
469
|
|
470
470
|
|
471
|
+
class PaintByMassV1(BaseOpenEpdHierarchicalSpec):
|
472
|
+
"""
|
473
|
+
Paintings and coatings by mass.
|
474
|
+
|
475
|
+
Expected declared unit for products is mass of ready to use product.
|
476
|
+
"""
|
477
|
+
|
478
|
+
_EXT_VERSION = "1.0"
|
479
|
+
|
480
|
+
|
481
|
+
class PaintByVolumeV1(BaseOpenEpdHierarchicalSpec):
|
482
|
+
"""
|
483
|
+
Paintings and coatings by volume.
|
484
|
+
|
485
|
+
Expecting declared unit for products is volume of ready to use product.
|
486
|
+
"""
|
487
|
+
|
488
|
+
_EXT_VERSION = "1.0"
|
489
|
+
|
490
|
+
|
491
|
+
class PaintByAreaV1(BaseOpenEpdHierarchicalSpec):
|
492
|
+
"""
|
493
|
+
Paintings and coatings by area.
|
494
|
+
|
495
|
+
Expected declared unit is area of host surface covered by the product.
|
496
|
+
"""
|
497
|
+
|
498
|
+
_EXT_VERSION = "1.0"
|
499
|
+
|
500
|
+
|
471
501
|
class PaintingAndCoatingV1(BaseOpenEpdHierarchicalSpec):
|
472
502
|
"""Paintings and coatings."""
|
473
503
|
|
474
|
-
_EXT_VERSION = "1.
|
504
|
+
_EXT_VERSION = "1.1"
|
505
|
+
|
506
|
+
PaintByMass: PaintByMassV1 | None = None
|
507
|
+
PaintByVolume: PaintByVolumeV1 | None = None
|
508
|
+
PaintByArea: PaintByAreaV1 | None = None
|
475
509
|
|
476
510
|
|
477
511
|
class WallFinishesV1(BaseOpenEpdHierarchicalSpec):
|
@@ -166,10 +166,16 @@ class NetworkingRacewaysV1(BaseOpenEpdHierarchicalSpec):
|
|
166
166
|
raceways_material: RacewaysMaterial | None = pyd.Field(default=None, description="", example="Aluminum")
|
167
167
|
|
168
168
|
|
169
|
+
class CommunicationsConduitV1(BaseOpenEpdHierarchicalSpec):
|
170
|
+
"""Tubing used to protect and route communications wiring in a building or structure."""
|
171
|
+
|
172
|
+
_EXT_VERSION = "1.0"
|
173
|
+
|
174
|
+
|
169
175
|
class NetworkInfrastructureV1(BaseOpenEpdHierarchicalSpec):
|
170
176
|
"""General category for network infrastructure products for data centers and commercial and residential buildings."""
|
171
177
|
|
172
|
-
_EXT_VERSION = "1.
|
178
|
+
_EXT_VERSION = "1.1"
|
173
179
|
|
174
180
|
# Nested specs:
|
175
181
|
PDU: PDUV1 | None = None
|
@@ -178,3 +184,4 @@ class NetworkInfrastructureV1(BaseOpenEpdHierarchicalSpec):
|
|
178
184
|
FloorBoxesAndAccessories: FloorBoxesAndAccessoriesV1 | None = None
|
179
185
|
NetworkingCableTrays: NetworkingCableTraysV1 | None = None
|
180
186
|
NetworkingRaceways: NetworkingRacewaysV1 | None = None
|
187
|
+
CommunicationsConduit: CommunicationsConduitV1 | None = None
|
@@ -1,5 +1,5 @@
|
|
1
1
|
openepd/__init__.py,sha256=Shkfh0Kun0YRhmRDw7LkUj2eQL3X-HnP55u2THOEALw,794
|
2
|
-
openepd/__version__.py,sha256=
|
2
|
+
openepd/__version__.py,sha256=A3iFx_kUtK0dkVs7itV9wiL0foJSKpYp8kZwKq3fk2I,638
|
3
3
|
openepd/api/__init__.py,sha256=UGmZGEyMnASrYwEBPHuXmVzHiuCUskUsJEPoHTIo-lg,620
|
4
4
|
openepd/api/base_sync_client.py,sha256=jviqtQgsOVdRq5x7_Yh_Tg8zIdWtVTIUqNCgebf6YDg,20925
|
5
5
|
openepd/api/category/__init__.py,sha256=UGmZGEyMnASrYwEBPHuXmVzHiuCUskUsJEPoHTIo-lg,620
|
@@ -36,9 +36,9 @@ openepd/model/common.py,sha256=aa_bfotPybPoYyzHtwj5E5X1T-fCEyznMfVUWvpUhiM,5460
|
|
36
36
|
openepd/model/declaration.py,sha256=5mzX24KpsezqBuGFAr-InsgB4FFNqI7HPJeDHQ93ZCI,5322
|
37
37
|
openepd/model/epd.py,sha256=bhmPNWQQ28uhaoxE7sW8_mxyswSCEvGovQ2tH69jzUo,10324
|
38
38
|
openepd/model/factory.py,sha256=StQUH7GNmRqskMnnRYkr_PLCl5X5sSLEPiYZOIQI9eo,2541
|
39
|
-
openepd/model/generic_estimate.py,sha256=
|
39
|
+
openepd/model/generic_estimate.py,sha256=cAgZDiYjqNaGXKc6fR8o9380zqgQMB38F0YTQJo__Lo,5508
|
40
40
|
openepd/model/geography.py,sha256=OngHXz-Dkg-NrVPIwNPP53xu4-HkQ_fnEfX5fYIVEfA,37417
|
41
|
-
openepd/model/lcia.py,sha256=
|
41
|
+
openepd/model/lcia.py,sha256=sDZIxyggqHIISCUocgvIEgkmqPLGNSEA3-zUd7TEgsw,18430
|
42
42
|
openepd/model/org.py,sha256=FHcYh2WOOQrCMyzm0Ow-iP79jMTBPcneidjH6NXIklA,3760
|
43
43
|
openepd/model/pcr.py,sha256=SwqLWMj9k_jqIzxz5mh6ttqvtLCspKSpywF5YTBOMsA,5397
|
44
44
|
openepd/model/specs/README.md,sha256=W5LSMpZuW5x36cKS4HRfeFsClsRf8J9yHMMICghdc0s,862
|
@@ -58,11 +58,11 @@ openepd/model/specs/generated/cmu.py,sha256=Vv-aiT4Q7Zl5XTkSCnTeGOpE_ufTy63zt2Z5
|
|
58
58
|
openepd/model/specs/generated/common.py,sha256=iNeJmVYZURVQWewx3zskwnwy7DBuaggCHFWQBThtY2A,1048
|
59
59
|
openepd/model/specs/generated/concrete.py,sha256=wnR656XxF6b26aBP4TRijMJf5CdLUzbZtSLXsbE3Yxw,6987
|
60
60
|
openepd/model/specs/generated/conveying_equipment.py,sha256=sQSnFccpTIw8sNGywW0KajE1lCHzbVBCISKyrYFW02U,3052
|
61
|
-
openepd/model/specs/generated/electrical.py,sha256=
|
61
|
+
openepd/model/specs/generated/electrical.py,sha256=571-26lGYG3z5ecmZyxawxO70USatWSzn7_vEXeVAE0,10985
|
62
62
|
openepd/model/specs/generated/electrical_transmission_and_distribution_equipment.py,sha256=h6UQixACOHrquhQ2GFqqYWel_zqOXT-vAkI0o_RLf0A,1978
|
63
63
|
openepd/model/specs/generated/electricity.py,sha256=iGtN21K1MRVwoRfO6friVgiXc2b6cVdITbvnXqLmW3k,823
|
64
64
|
openepd/model/specs/generated/enums.py,sha256=9JA9hay6s76kStmcAvpmF8NLgsYZA3IkNMRh-TMK2qY,60938
|
65
|
-
openepd/model/specs/generated/finishes.py,sha256=
|
65
|
+
openepd/model/specs/generated/finishes.py,sha256=Sq_jh3xnPlvLAiS6z7AIvWXIz31_bzW4SM_auXSxALE,22421
|
66
66
|
openepd/model/specs/generated/fire_and_smoke_protection.py,sha256=zkOlnNCnAZ9MUWk2sDqUX14YxNEDU3MGfUlePG3su0Q,3068
|
67
67
|
openepd/model/specs/generated/furnishings.py,sha256=QY_FDsFZaqjCiw2xHsD3kmyBGJA7jCHlSIvaw4TmqXI,2581
|
68
68
|
openepd/model/specs/generated/grouting.py,sha256=mDpfsax6TO72SuBqv8HftJDYoQPP741dD1vi_2cuNCE,934
|
@@ -71,7 +71,7 @@ openepd/model/specs/generated/masonry.py,sha256=35yUySGoRCApdZSYWbCjZ_rTR7WRPssz
|
|
71
71
|
openepd/model/specs/generated/material_handling.py,sha256=hx8fisNcFw6GXC7uMfW-4wkGUS8xJA9gTk_WpZGHkqY,1274
|
72
72
|
openepd/model/specs/generated/mechanical.py,sha256=qRKvOqRqn2DoyTCOnNwHClyoby0pa4YN8vXuE6CtY8A,9872
|
73
73
|
openepd/model/specs/generated/mechanical_insulation.py,sha256=sbXTXT4xOOgvyDeLN4HZ3xCIwKkaPEjoQlRyCrq4tlM,1617
|
74
|
-
openepd/model/specs/generated/network_infrastructure.py,sha256=
|
74
|
+
openepd/model/specs/generated/network_infrastructure.py,sha256=C4y2PKvC-0QXNDz5qFUgMMcK3n8b_9GsLotSWBDaxms,8403
|
75
75
|
openepd/model/specs/generated/openings.py,sha256=cpJr0Qk9FTLktM5hQAOsPBFL36CRP2sKpe_1v1EOVG4,18818
|
76
76
|
openepd/model/specs/generated/other_electrical_equipment.py,sha256=HUOI_NfCXn_pmon0KEy11hBrILA5QYtpnme0YqWoEfk,814
|
77
77
|
openepd/model/specs/generated/other_materials.py,sha256=ztaZHOr2HbiSpKdz4M1b2jsm_11fMDqZduEYWT1Q_rI,3498
|
@@ -91,7 +91,7 @@ openepd/model/validation/quantity.py,sha256=kzug0MZ3Ao0zeVzN-aleyxUg5hA_7D5tNOOe
|
|
91
91
|
openepd/model/versioning.py,sha256=R_zm6rCrgF3vlJQYbpyWhirdS_Oek16cv_mvZmpuE8I,4473
|
92
92
|
openepd/patch_pydantic.py,sha256=xrkzblatmU9HBzukWkp1cPq9ZSuohoz1p0pQqVKSlKs,4122
|
93
93
|
openepd/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
94
|
-
openepd-4.
|
95
|
-
openepd-4.
|
96
|
-
openepd-4.
|
97
|
-
openepd-4.
|
94
|
+
openepd-4.9.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
95
|
+
openepd-4.9.0.dist-info/METADATA,sha256=pgDKp3QMBRUOSfTtKsczMpMjOO7n_OEuFwaOz0LR6JI,8534
|
96
|
+
openepd-4.9.0.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
|
97
|
+
openepd-4.9.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|