openepd 4.0.0__py3-none-any.whl → 4.2.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/base.py +22 -1
- openepd/model/specs/generated/common.py +4 -1
- openepd/model/specs/generated/enums.py +10 -0
- openepd/model/specs/generated/finishes.py +24 -4
- openepd/model/specs/generated/wood.py +0 -4
- openepd/model/specs/generated/wood_joists.py +0 -2
- openepd/model/validation/quantity.py +6 -0
- {openepd-4.0.0.dist-info → openepd-4.2.0.dist-info}/METADATA +1 -1
- {openepd-4.0.0.dist-info → openepd-4.2.0.dist-info}/RECORD +12 -12
- {openepd-4.0.0.dist-info → openepd-4.2.0.dist-info}/LICENSE +0 -0
- {openepd-4.0.0.dist-info → openepd-4.2.0.dist-info}/WHEEL +0 -0
openepd/__version__.py
CHANGED
openepd/model/base.py
CHANGED
@@ -56,7 +56,28 @@ def modify_pydantic_schema(schema_dict: dict, cls: type) -> dict:
|
|
56
56
|
return schema_dict
|
57
57
|
|
58
58
|
|
59
|
-
class
|
59
|
+
class PydanticClassAttributeExposeModelMetaclass(pyd.main.ModelMetaclass):
|
60
|
+
"""
|
61
|
+
Extension of the pydantic's ModelMetaclass which restores class attribute lookup for fields.
|
62
|
+
|
63
|
+
In pydantic, while the model fields are defined in the model as class-level attributes, in runtime they disappear
|
64
|
+
due to ModelMetaclass logic. ModelMetaclass takes the defined attributes, removes them from class dict and puts
|
65
|
+
into a special __fields__ attribute to avoid naming conflict.
|
66
|
+
|
67
|
+
We would like to be able to access the attributes via dot notation in the runtimes, since it makes refactoring
|
68
|
+
easier.
|
69
|
+
|
70
|
+
This class exposes the original fields when accessed via class name. For example, one can call `Pcr.name` and get
|
71
|
+
`ModelField`, in addition to calling `pcr.__fields__` on an instance.
|
72
|
+
"""
|
73
|
+
|
74
|
+
def __getattr__(cls, name: str) -> Any:
|
75
|
+
if name in cls.__fields__:
|
76
|
+
return cls.__fields__[name]
|
77
|
+
return getattr(super, name)
|
78
|
+
|
79
|
+
|
80
|
+
class BaseOpenEpdSchema(pyd.BaseModel, metaclass=PydanticClassAttributeExposeModelMetaclass):
|
60
81
|
"""Base class for all OpenEPD models."""
|
61
82
|
|
62
83
|
ext: dict[str, AnySerializable] | None = pyd.Field(alias="ext", default=None)
|
@@ -13,6 +13,7 @@
|
|
13
13
|
# See the License for the specific language governing permissions and
|
14
14
|
# limitations under the License.
|
15
15
|
#
|
16
|
+
from openepd.compat.pydantic import pyd
|
16
17
|
from openepd.model.base import BaseOpenEpdSchema
|
17
18
|
from openepd.model.org import OrgRef
|
18
19
|
|
@@ -20,4 +21,6 @@ from openepd.model.org import OrgRef
|
|
20
21
|
class HasForestPracticesCertifiers(BaseOpenEpdSchema):
|
21
22
|
"""An interface for models which are linked to forest practices certifiers."""
|
22
23
|
|
23
|
-
forest_practices_certifiers: list[OrgRef] | None
|
24
|
+
forest_practices_certifiers: list[OrgRef] | None = pyd.Field(
|
25
|
+
default=None, description="List of organizations that certify forest practices."
|
26
|
+
)
|
@@ -2422,3 +2422,13 @@ class NAFSPerformanceGrade(StrEnum):
|
|
2422
2422
|
GRADE_200_PSF = "200 psf"
|
2423
2423
|
GRADE_205_PSF = "205 psf"
|
2424
2424
|
GRADE_210_PSF = "210 psf"
|
2425
|
+
|
2426
|
+
|
2427
|
+
class PlasterComposition(StrEnum):
|
2428
|
+
"""Plaster Composition."""
|
2429
|
+
|
2430
|
+
CEMENT = "Cement"
|
2431
|
+
GYPSUM = "Gypsum"
|
2432
|
+
ACRYLIC = "Acrylic"
|
2433
|
+
LIME = "Lime"
|
2434
|
+
OTHER = "Other"
|
@@ -14,7 +14,6 @@
|
|
14
14
|
# limitations under the License.
|
15
15
|
#
|
16
16
|
from openepd.compat.pydantic import pyd
|
17
|
-
from openepd.model.org import OrgRef
|
18
17
|
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
19
18
|
from openepd.model.specs.generated.common import HasForestPracticesCertifiers
|
20
19
|
from openepd.model.specs.generated.enums import (
|
@@ -34,6 +33,7 @@ from openepd.model.specs.generated.enums import (
|
|
34
33
|
GypsumFacing,
|
35
34
|
GypsumFireRating,
|
36
35
|
GypsumThickness,
|
36
|
+
PlasterComposition,
|
37
37
|
ResilientFlooringFormFactor,
|
38
38
|
ResilientFlooringMaterial,
|
39
39
|
ResilientFlooringThickness,
|
@@ -45,6 +45,7 @@ from openepd.model.specs.generated.enums import (
|
|
45
45
|
)
|
46
46
|
from openepd.model.validation.numbers import RatioFloat
|
47
47
|
from openepd.model.validation.quantity import (
|
48
|
+
AreaPerVolumeStr,
|
48
49
|
GwpKgCo2eStr,
|
49
50
|
LengthMmStr,
|
50
51
|
LengthMStr,
|
@@ -177,7 +178,6 @@ class WoodFlooringV1(BaseOpenEpdHierarchicalSpec, HasForestPracticesCertifiers):
|
|
177
178
|
thickness: LengthMmStr | None = pyd.Field(default=None, description="", example="10 mm")
|
178
179
|
timber_species: WoodFlooringTimberSpecies | None = pyd.Field(default=None, description="", example="Oak")
|
179
180
|
fabrication: WoodFlooringFabrication | None = pyd.Field(default=None, description="", example="Solid hardwood")
|
180
|
-
forest_practices_certifiers: list[OrgRef] | None = pyd.Field(default=None, description="")
|
181
181
|
|
182
182
|
|
183
183
|
class AcousticalCeilingsV1(BaseOpenEpdHierarchicalSpec):
|
@@ -423,7 +423,6 @@ class DeckingBoardsV1(BaseOpenEpdHierarchicalSpec, HasForestPracticesCertifiers)
|
|
423
423
|
# Own fields:
|
424
424
|
timber_species: SawnTimberSpecies | None = pyd.Field(default=None, description="", example="Alaska Cedar")
|
425
425
|
fabrication: AllFabrication | None = pyd.Field(default=None, description="", example="LVL")
|
426
|
-
forest_practices_certifiers: list[OrgRef] | None = pyd.Field(default=None, description="")
|
427
426
|
weather_exposed: bool | None = pyd.Field(default=None, description="", example=True)
|
428
427
|
fire_retardant: bool | None = pyd.Field(default=None, description="", example=True)
|
429
428
|
decay_resistant: bool | None = pyd.Field(default=None, description="", example=True)
|
@@ -484,10 +483,30 @@ class WallFinishesV1(BaseOpenEpdHierarchicalSpec):
|
|
484
483
|
thickness: LengthMmStr | None = pyd.Field(default=None, description="", example="10 mm")
|
485
484
|
|
486
485
|
|
486
|
+
class PlasterV1(BaseOpenEpdHierarchicalSpec):
|
487
|
+
"""
|
488
|
+
Plaster, Stucco, & Render.
|
489
|
+
|
490
|
+
Used for the protective or decorative coating of walls and ceilings and for
|
491
|
+
moulding and casting decorative elements. These are typically gypsum-, lime-,
|
492
|
+
or cement-based. Products in this category refer to dry mix.
|
493
|
+
"""
|
494
|
+
|
495
|
+
_EXT_VERSION = "1.0"
|
496
|
+
|
497
|
+
# Own fields:
|
498
|
+
composition: PlasterComposition | None = pyd.Field(default=None, description="", example="Cement")
|
499
|
+
application_rate: AreaPerVolumeStr | None = pyd.Field(
|
500
|
+
default=None,
|
501
|
+
description="Typical or reference amount of material covering a unit of a host surface.",
|
502
|
+
example="10 m2/l",
|
503
|
+
)
|
504
|
+
|
505
|
+
|
487
506
|
class FinishesV1(BaseOpenEpdHierarchicalSpec):
|
488
507
|
"""General category - finishes for interior ceilings, floors, walls."""
|
489
508
|
|
490
|
-
_EXT_VERSION = "1.
|
509
|
+
_EXT_VERSION = "1.1"
|
491
510
|
|
492
511
|
# Nested specs:
|
493
512
|
Flooring: FlooringV1 | None = None
|
@@ -501,3 +520,4 @@ class FinishesV1(BaseOpenEpdHierarchicalSpec):
|
|
501
520
|
Mirrors: MirrorsV1 | None = None
|
502
521
|
PaintingAndCoating: PaintingAndCoatingV1 | None = None
|
503
522
|
WallFinishes: WallFinishesV1 | None = None
|
523
|
+
Plaster: PlasterV1 | None = None
|
@@ -14,7 +14,6 @@
|
|
14
14
|
# limitations under the License.
|
15
15
|
#
|
16
16
|
from openepd.compat.pydantic import pyd
|
17
|
-
from openepd.model.org import OrgRef
|
18
17
|
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
19
18
|
from openepd.model.specs.generated.common import HasForestPracticesCertifiers
|
20
19
|
from openepd.model.specs.generated.enums import (
|
@@ -154,9 +153,6 @@ class WoodV1(BaseOpenEpdHierarchicalSpec, HasForestPracticesCertifiers):
|
|
154
153
|
default=None, description="Timber species", example="Alaska Cedar"
|
155
154
|
)
|
156
155
|
fabrication: AllFabrication | None = pyd.Field(default=None, description="Timber fabrication", example="LVL")
|
157
|
-
forest_practices_certifiers: list[OrgRef] | None = pyd.Field(
|
158
|
-
default=None, description="List of organizations that certify forest practices."
|
159
|
-
)
|
160
156
|
weather_exposed: bool | None = pyd.Field(default=None, description="Weather exposed", example=True)
|
161
157
|
fire_retardant: bool | None = pyd.Field(default=None, description="Fire retardant", example=True)
|
162
158
|
decay_resistant: bool | None = pyd.Field(default=None, description="Decay resistant", example=True)
|
@@ -14,7 +14,6 @@
|
|
14
14
|
# limitations under the License.
|
15
15
|
#
|
16
16
|
from openepd.compat.pydantic import pyd
|
17
|
-
from openepd.model.org import OrgRef
|
18
17
|
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
19
18
|
from openepd.model.specs.generated.common import HasForestPracticesCertifiers
|
20
19
|
from openepd.model.specs.generated.enums import AllFabrication, AllTimberSpecies
|
@@ -33,7 +32,6 @@ class WoodJoistsV1(BaseOpenEpdHierarchicalSpec, HasForestPracticesCertifiers):
|
|
33
32
|
# Own fields:
|
34
33
|
timber_species: AllTimberSpecies | None = pyd.Field(default=None, description="", example="Alaska Cedar")
|
35
34
|
fabrication: AllFabrication | None = pyd.Field(default=None, description="", example="LVL")
|
36
|
-
forest_practices_certifiers: list[OrgRef] | None = pyd.Field(default=None, description="")
|
37
35
|
weather_exposed: bool | None = pyd.Field(default=None, description="", example=True)
|
38
36
|
fire_retardant: bool | None = pyd.Field(default=None, description="", example=True)
|
39
37
|
decay_resistant: bool | None = pyd.Field(default=None, description="", example=True)
|
@@ -1,5 +1,5 @@
|
|
1
1
|
openepd/__init__.py,sha256=UGmZGEyMnASrYwEBPHuXmVzHiuCUskUsJEPoHTIo-lg,620
|
2
|
-
openepd/__version__.py,sha256=
|
2
|
+
openepd/__version__.py,sha256=IT2njgGsj7sZj8Fhuc29NsUD079UbTrJ_u_Mw7RoCMk,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
|
@@ -30,7 +30,7 @@ openepd/compat/__init__.py,sha256=UGmZGEyMnASrYwEBPHuXmVzHiuCUskUsJEPoHTIo-lg,62
|
|
30
30
|
openepd/compat/compat_functional_validators.py,sha256=yz6DfWeg7knBHEN_enpCGGTLRknEsecXfpzD1FDlywY,834
|
31
31
|
openepd/compat/pydantic.py,sha256=DOjSixsylLqMtFAIARu50sGcT4VPXN_c473q_2JwZQ0,1146
|
32
32
|
openepd/model/__init__.py,sha256=UGmZGEyMnASrYwEBPHuXmVzHiuCUskUsJEPoHTIo-lg,620
|
33
|
-
openepd/model/base.py,sha256=
|
33
|
+
openepd/model/base.py,sha256=XGuXCWr0PTAeewQj8u75OcRWFumFP2wiSdJsrsL_ZGI,9959
|
34
34
|
openepd/model/category.py,sha256=IQXNGQFQmFZ_H9PRONloX_UOSf1sTMDq1rM1yz8JR0Y,1639
|
35
35
|
openepd/model/common.py,sha256=aa_bfotPybPoYyzHtwj5E5X1T-fCEyznMfVUWvpUhiM,5460
|
36
36
|
openepd/model/epd.py,sha256=_PyVM3cKrOBS2vgLLPBZzKkNfiBEtp2rECP0imp49bc,14082
|
@@ -52,14 +52,14 @@ openepd/model/specs/generated/bulk_materials.py,sha256=otVwnI8N5zCs-JqklykdQDena
|
|
52
52
|
openepd/model/specs/generated/cast_decks_and_underlayment.py,sha256=qZjryfTZc1ltPUkut7pkITb-wwZmBZWGIfUl1p8FNXs,955
|
53
53
|
openepd/model/specs/generated/cladding.py,sha256=bdHmLyAWdp0Altjxm2vrrQ6N1KXpZSTwrRtUeO_IDds,6562
|
54
54
|
openepd/model/specs/generated/cmu.py,sha256=Vv-aiT4Q7Zl5XTkSCnTeGOpE_ufTy63zt2Z5aXbv_Qo,1794
|
55
|
-
openepd/model/specs/generated/common.py,sha256=
|
55
|
+
openepd/model/specs/generated/common.py,sha256=iNeJmVYZURVQWewx3zskwnwy7DBuaggCHFWQBThtY2A,1048
|
56
56
|
openepd/model/specs/generated/concrete.py,sha256=wnR656XxF6b26aBP4TRijMJf5CdLUzbZtSLXsbE3Yxw,6987
|
57
57
|
openepd/model/specs/generated/conveying_equipment.py,sha256=sQSnFccpTIw8sNGywW0KajE1lCHzbVBCISKyrYFW02U,3052
|
58
58
|
openepd/model/specs/generated/electrical.py,sha256=z4v6zbDvyMSYwbz7kb70aks1Ik9Q14ZkLss7cLqUdTs,10755
|
59
59
|
openepd/model/specs/generated/electrical_transmission_and_distribution_equipment.py,sha256=h6UQixACOHrquhQ2GFqqYWel_zqOXT-vAkI0o_RLf0A,1978
|
60
60
|
openepd/model/specs/generated/electricity.py,sha256=iGtN21K1MRVwoRfO6friVgiXc2b6cVdITbvnXqLmW3k,823
|
61
|
-
openepd/model/specs/generated/enums.py,sha256=
|
62
|
-
openepd/model/specs/generated/finishes.py,sha256=
|
61
|
+
openepd/model/specs/generated/enums.py,sha256=JaQZFGrGLPxz_J8t5VcSszM8HgmqHaIxqg9-nqFnv_k,58504
|
62
|
+
openepd/model/specs/generated/finishes.py,sha256=QHFtUZcUCGAzZeHJlLoG1D9SxAW9FGPj7g48Fu1Nvdc,21660
|
63
63
|
openepd/model/specs/generated/fire_and_smoke_protection.py,sha256=zkOlnNCnAZ9MUWk2sDqUX14YxNEDU3MGfUlePG3su0Q,3068
|
64
64
|
openepd/model/specs/generated/furnishings.py,sha256=QY_FDsFZaqjCiw2xHsD3kmyBGJA7jCHlSIvaw4TmqXI,2581
|
65
65
|
openepd/model/specs/generated/grouting.py,sha256=mDpfsax6TO72SuBqv8HftJDYoQPP741dD1vi_2cuNCE,934
|
@@ -78,16 +78,16 @@ openepd/model/specs/generated/sheathing.py,sha256=06Y9Dy7_9Iy3VfA6fQGr6AUq30u1K_
|
|
78
78
|
openepd/model/specs/generated/steel.py,sha256=nqkGivvAg5rll2NhClhKE6UCORsvPaVgHiuhirKP3Js,9901
|
79
79
|
openepd/model/specs/generated/thermal_moisture_protection.py,sha256=px1GPZyumr1w0r0ikKO1FefHNK66cxYp1PpmZvpTzPU,8205
|
80
80
|
openepd/model/specs/generated/utility_piping.py,sha256=X0cHq5kQP41RH1iGWrkwUdFX0PI4V00WzxH9BA-i7SY,2493
|
81
|
-
openepd/model/specs/generated/wood.py,sha256=
|
82
|
-
openepd/model/specs/generated/wood_joists.py,sha256=
|
81
|
+
openepd/model/specs/generated/wood.py,sha256=RMNoPRS9K3XF2aXCbvRN3awpO23_5ugYhRCrnvCvI20,6341
|
82
|
+
openepd/model/specs/generated/wood_joists.py,sha256=IWDRZ6OvZq6jaqjndK1Ge6H0vrQutAEgdbvcVJb-Ybw,1730
|
83
83
|
openepd/model/standard.py,sha256=QhGpWN3U27fDcS0Yy1Dk8ElJfD0etet6i_PzoTD6B48,1318
|
84
84
|
openepd/model/validation/__init__.py,sha256=UGmZGEyMnASrYwEBPHuXmVzHiuCUskUsJEPoHTIo-lg,620
|
85
85
|
openepd/model/validation/common.py,sha256=FLYqK8gYFagx08LCkS0jy3qo4-Zq9VAv5i8ZwF2svkc,2435
|
86
86
|
openepd/model/validation/numbers.py,sha256=tgirqrDGgrSo6APGlW1ozNuVV8mJz_4HCAXS2OUENq0,888
|
87
|
-
openepd/model/validation/quantity.py,sha256=
|
87
|
+
openepd/model/validation/quantity.py,sha256=kzug0MZ3Ao0zeVzN-aleyxUg5hA_7D5tNOOerverfRQ,7415
|
88
88
|
openepd/model/versioning.py,sha256=R_zm6rCrgF3vlJQYbpyWhirdS_Oek16cv_mvZmpuE8I,4473
|
89
89
|
openepd/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
90
|
-
openepd-4.
|
91
|
-
openepd-4.
|
92
|
-
openepd-4.
|
93
|
-
openepd-4.
|
90
|
+
openepd-4.2.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
91
|
+
openepd-4.2.0.dist-info/METADATA,sha256=S2oqtKvw4rDM-N5a9NDPrD0AVRPknspcRFuufvz48YM,7790
|
92
|
+
openepd-4.2.0.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
|
93
|
+
openepd-4.2.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|