openepd 6.0.0__tar.gz → 6.1.0__tar.gz
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-6.0.0 → openepd-6.1.0}/PKG-INFO +1 -1
- {openepd-6.0.0 → openepd-6.1.0}/pyproject.toml +1 -1
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/__version__.py +1 -1
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/bundle/model.py +3 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/base.py +2 -1
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/asphalt.py +3 -3
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/cmu.py +5 -4
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/electrical.py +2 -1
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/finishes.py +12 -5
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/masonry.py +2 -2
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/openings.py +10 -3
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/sheathing.py +2 -2
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/steel.py +8 -3
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/wood.py +7 -5
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/__init__.py +6 -1
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/asphalt.py +5 -3
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/cmu.py +9 -3
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/electrical.py +2 -1
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/finishes.py +7 -4
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/masonry.py +4 -1
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/openings.py +9 -3
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/sheathing.py +2 -2
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/steel.py +10 -4
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/wood.py +11 -5
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/validation/quantity.py +179 -0
- {openepd-6.0.0 → openepd-6.1.0}/LICENSE +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/README.md +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/__init__.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/api/__init__.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/api/average_dataset/__init__.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/api/average_dataset/generic_estimate_sync_api.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/api/average_dataset/industry_epd_sync_api.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/api/base_sync_client.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/api/category/__init__.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/api/category/dto.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/api/category/sync_api.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/api/common.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/api/dto/__init__.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/api/dto/base.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/api/dto/common.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/api/dto/meta.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/api/dto/mf.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/api/dto/params.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/api/epd/__init__.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/api/epd/dto.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/api/epd/sync_api.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/api/errors.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/api/pcr/__init__.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/api/pcr/sync_api.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/api/sync_client.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/api/test/__init__.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/api/utils.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/bundle/__init__.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/bundle/base.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/bundle/reader.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/bundle/writer.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/compat/__init__.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/compat/compat_functional_validators.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/compat/pydantic.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/__init__.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/base.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/category.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/common.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/declaration.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/epd.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/factory.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/generic_estimate.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/geography.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/industry_epd.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/lcia.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/org.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/pcr.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/README.md +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/__init__.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/asphalt.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/concrete.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/enums.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/__init__.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/accessories.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/aggregates.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/aluminium.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/bulk_materials.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/cast_decks_and_underlayment.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/cladding.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/concrete.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/conveying_equipment.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/electrical_transmission_and_distribution_equipment.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/electricity.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/fire_and_smoke_protection.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/furnishings.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/grouting.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/manufacturing_inputs.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/material_handling.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/mechanical.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/mechanical_insulation.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/network_infrastructure.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/other_electrical_equipment.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/other_materials.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/plumbing.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/precast_concrete.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/thermal_moisture_protection.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/utility_piping.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/range/wood_joists.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/accessories.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/aggregates.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/aluminium.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/bulk_materials.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/cast_decks_and_underlayment.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/cladding.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/common.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/concrete.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/conveying_equipment.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/electrical_transmission_and_distribution_equipment.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/electricity.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/fire_and_smoke_protection.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/furnishings.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/grouting.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/manufacturing_inputs.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/material_handling.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/mechanical.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/mechanical_insulation.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/mixins/__init__.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/mixins/conduit_mixin.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/network_infrastructure.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/other_electrical_equipment.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/other_materials.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/plumbing.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/precast_concrete.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/thermal_moisture_protection.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/utility_piping.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/specs/singular/wood_joists.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/standard.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/validation/__init__.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/validation/common.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/validation/enum.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/validation/numbers.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/model/versioning.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/patch_pydantic.py +0 -0
- {openepd-6.0.0 → openepd-6.1.0}/src/openepd/py.typed +0 -0
@@ -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 datetime import datetime
|
16
17
|
from enum import StrEnum
|
17
18
|
|
18
19
|
from openepd.compat.pydantic import pyd
|
@@ -61,6 +62,8 @@ class BundleManifest(BaseOpenEpdSchema):
|
|
61
62
|
"""The generator of the bundle."""
|
62
63
|
assets: BundleManifestAssetsStats = pyd.Field(default_factory=BundleManifestAssetsStats)
|
63
64
|
comment: str | None = pyd.Field(default=None)
|
65
|
+
created_at: datetime = pyd.Field(default_factory=datetime.utcnow)
|
66
|
+
"""The date and time when the bundle was generated."""
|
64
67
|
|
65
68
|
|
66
69
|
class AssetInfo(BaseOpenEpdSchema):
|
@@ -14,6 +14,7 @@
|
|
14
14
|
# limitations under the License.
|
15
15
|
#
|
16
16
|
import dataclasses
|
17
|
+
from types import UnionType
|
17
18
|
from typing import Any
|
18
19
|
|
19
20
|
from openepd.compat.pydantic import pyd
|
@@ -63,4 +64,4 @@ class CodegenSpec:
|
|
63
64
|
"""
|
64
65
|
|
65
66
|
exclude_from_codegen: bool = False
|
66
|
-
override_type: type
|
67
|
+
override_type: type | UnionType
|
@@ -22,7 +22,7 @@ from openepd.compat.pydantic import pyd
|
|
22
22
|
from openepd.model.common import RangeRatioFloat
|
23
23
|
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
24
24
|
from openepd.model.specs.enums import AsphaltGradation, AsphaltMixType
|
25
|
-
from openepd.model.validation.quantity import AmountRangeLengthMm,
|
25
|
+
from openepd.model.validation.quantity import AmountRangeLengthMm, TemperatureCStr
|
26
26
|
|
27
27
|
|
28
28
|
class AsphaltRangeV1(BaseOpenEpdHierarchicalSpec):
|
@@ -44,11 +44,11 @@ class AsphaltRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
44
44
|
ground_tire_rubber: RangeRatioFloat | None = pyd.Field(
|
45
45
|
default=None, description="Percent of mixture that has been replaced by ground tire rubber (GTR)."
|
46
46
|
)
|
47
|
-
max_temperature:
|
47
|
+
max_temperature: TemperatureCStr | None = pyd.Field(
|
48
48
|
default=None,
|
49
49
|
description="The upper threshold temperature to which an asphalt binder can be heated preventing the asphalt mixture from rutting",
|
50
50
|
)
|
51
|
-
min_temperature:
|
51
|
+
min_temperature: TemperatureCStr | None = pyd.Field(
|
52
52
|
default=None,
|
53
53
|
description="The lower threshold temperature for an asphalt binder to prevent thermal cracking of the asphalt mixture.",
|
54
54
|
)
|
@@ -18,11 +18,12 @@ __all__ = ("CMURangeV1",)
|
|
18
18
|
# NB! This is a generated code. Do not edit it manually. Please see src/openepd/model/specs/README.md
|
19
19
|
|
20
20
|
|
21
|
+
from builtins import float
|
22
|
+
|
21
23
|
from openepd.compat.pydantic import pyd
|
22
|
-
from openepd.model.common import RangeFloat
|
23
24
|
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
24
25
|
from openepd.model.specs.enums import CmuBlockType, CmuWeightClassification
|
25
|
-
from openepd.model.validation.quantity import
|
26
|
+
from openepd.model.validation.quantity import AmountRangePressureMpa, GwpKgCo2eStr
|
26
27
|
|
27
28
|
|
28
29
|
class CMURangeV1(BaseOpenEpdHierarchicalSpec):
|
@@ -40,5 +41,5 @@ class CMURangeV1(BaseOpenEpdHierarchicalSpec):
|
|
40
41
|
block_type: list[CmuBlockType] | None = pyd.Field(default=None, description="")
|
41
42
|
insulated: bool | None = pyd.Field(default=None, description="")
|
42
43
|
sound_performance: bool | None = pyd.Field(default=None, description="")
|
43
|
-
b1_recarbonation:
|
44
|
-
b1_recarbonation_z:
|
44
|
+
b1_recarbonation: GwpKgCo2eStr | None = pyd.Field(default=None, description="")
|
45
|
+
b1_recarbonation_z: float | None = pyd.Field(default=None, description="")
|
@@ -58,6 +58,7 @@ from openepd.model.validation.quantity import (
|
|
58
58
|
AmountRangeLuminosity,
|
59
59
|
AmountRangeMass,
|
60
60
|
AmountRangePower,
|
61
|
+
AmountRangeUtilization,
|
61
62
|
)
|
62
63
|
|
63
64
|
|
@@ -376,7 +377,7 @@ class LightingRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
376
377
|
_EXT_VERSION = "1.0"
|
377
378
|
|
378
379
|
color_temperature: AmountRangeColorTemperature | None = pyd.Field(default=None, description="")
|
379
|
-
typical_utilization:
|
380
|
+
typical_utilization: AmountRangeUtilization | None = pyd.Field(default=None, description="")
|
380
381
|
luminosity: AmountRangeLuminosity | None = pyd.Field(default=None, description="")
|
381
382
|
wattage: AmountRangePower | None = pyd.Field(default=None, description="")
|
382
383
|
color_rendering_index: RangeFloat | None = pyd.Field(default=None, description="")
|
@@ -78,7 +78,14 @@ from openepd.model.specs.enums import (
|
|
78
78
|
WoodFlooringFabrication,
|
79
79
|
WoodFlooringTimberSpecies,
|
80
80
|
)
|
81
|
-
from openepd.model.validation.quantity import
|
81
|
+
from openepd.model.validation.quantity import (
|
82
|
+
AmountRangeForce,
|
83
|
+
AmountRangeGWP,
|
84
|
+
AmountRangeLengthMm,
|
85
|
+
AmountRangePressureMpa,
|
86
|
+
AmountRangeRFactor,
|
87
|
+
AmountRangeYarnWeight,
|
88
|
+
)
|
82
89
|
|
83
90
|
|
84
91
|
class AccessFlooringRangeV1(BaseOpenEpdHierarchicalSpec):
|
@@ -106,8 +113,8 @@ class AccessFlooringRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
106
113
|
panel_thickness: AmountRangeLengthMm | None = pyd.Field(default=None, description="")
|
107
114
|
concentrated_load: AmountRangePressureMpa | None = pyd.Field(default=None, description="")
|
108
115
|
uniform_load: AmountRangePressureMpa | None = pyd.Field(default=None, description="")
|
109
|
-
rolling_load_10_pass:
|
110
|
-
rolling_load_10000_pass:
|
116
|
+
rolling_load_10_pass: AmountRangeForce | None = pyd.Field(default=None, description="")
|
117
|
+
rolling_load_10000_pass: AmountRangeForce | None = pyd.Field(default=None, description="")
|
111
118
|
|
112
119
|
|
113
120
|
class CarpetRangeV1(BaseOpenEpdHierarchicalSpec):
|
@@ -124,7 +131,7 @@ class CarpetRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
124
131
|
intended_application: list[CarpetIntendedApplication] | None = pyd.Field(default=None, description="")
|
125
132
|
manufacture_type: list[CarpetManufactureType] | None = pyd.Field(default=None, description="")
|
126
133
|
form_factor: list[CarpetFormFactor] | None = pyd.Field(default=None, description="")
|
127
|
-
yarn_weight:
|
134
|
+
yarn_weight: AmountRangeYarnWeight | None = pyd.Field(default=None, description="")
|
128
135
|
yarn_type: list[CarpetYarnType] | None = pyd.Field(default=None, description="")
|
129
136
|
fire_radiant_panel_rating_astme648: str | None = pyd.Field(default=None, description="")
|
130
137
|
fire_smoke_density_rating_astme648: str | None = pyd.Field(default=None, description="")
|
@@ -457,7 +464,7 @@ class GypsumRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
457
464
|
fire_rating: list[GypsumFireRating] | None = pyd.Field(default=None, description="")
|
458
465
|
thickness: list[GypsumThickness] | None = pyd.Field(default=None, description="")
|
459
466
|
facing: list[GypsumFacing] | None = pyd.Field(default=None, description="")
|
460
|
-
r_factor:
|
467
|
+
r_factor: AmountRangeRFactor | None = pyd.Field(default=None, description="")
|
461
468
|
flame_spread_astm_e84: RangeInt | None = pyd.Field(default=None, description="")
|
462
469
|
smoke_production_astm_e84: RangeInt | None = pyd.Field(default=None, description="")
|
463
470
|
surface_abrasion_d4977: RangeInt | None = pyd.Field(default=None, description="")
|
@@ -25,7 +25,7 @@ __all__ = (
|
|
25
25
|
|
26
26
|
from openepd.compat.pydantic import pyd
|
27
27
|
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
28
|
-
from openepd.model.validation.quantity import AmountRangePressureMpa
|
28
|
+
from openepd.model.validation.quantity import AmountRangePressureMpa, AmountRangeThermalConductivity
|
29
29
|
|
30
30
|
|
31
31
|
class GMURangeV1(BaseOpenEpdHierarchicalSpec):
|
@@ -48,7 +48,7 @@ class AutoclavedAeratedConcreteRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
48
48
|
_EXT_VERSION = "1.0"
|
49
49
|
|
50
50
|
strength_28d: AmountRangePressureMpa | None = pyd.Field(default=None, description="")
|
51
|
-
thermal_conductivity:
|
51
|
+
thermal_conductivity: AmountRangeThermalConductivity | None = pyd.Field(default=None, description="")
|
52
52
|
white: bool | None = pyd.Field(default=None, description="")
|
53
53
|
|
54
54
|
|
@@ -59,7 +59,12 @@ from openepd.model.specs.enums import (
|
|
59
59
|
ThermalSeparation,
|
60
60
|
)
|
61
61
|
from openepd.model.specs.singular.openings import GlazingIntendedApplication, NAFSPerformanceClass
|
62
|
-
from openepd.model.validation.quantity import
|
62
|
+
from openepd.model.validation.quantity import (
|
63
|
+
AmountRangeLengthMm,
|
64
|
+
AmountRangePressureMpa,
|
65
|
+
AmountRangeSpeed,
|
66
|
+
AmountRangeUFactor,
|
67
|
+
)
|
63
68
|
|
64
69
|
|
65
70
|
class PanelDoorsRangeV1(BaseOpenEpdHierarchicalSpec):
|
@@ -328,7 +333,7 @@ class NAFSFenestrationRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
328
333
|
hurricane_resistant: bool | None = pyd.Field(
|
329
334
|
default=None, description="The product has been designed to resist windborne debris."
|
330
335
|
)
|
331
|
-
assembly_u_factor:
|
336
|
+
assembly_u_factor: AmountRangeUFactor | None = pyd.Field(
|
332
337
|
default=None, description="Weighted average conductance of heat across assembly (including frame)."
|
333
338
|
)
|
334
339
|
air_infiltration: AmountRangeSpeed | None = pyd.Field(
|
@@ -386,7 +391,9 @@ class InsulatingGlazingUnitsRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
386
391
|
default=None,
|
387
392
|
description="Number of panes, each separated by a cavity. A 3 pane unit has 2 cavities. example: 3",
|
388
393
|
)
|
389
|
-
cog_u_factor:
|
394
|
+
cog_u_factor: AmountRangeUFactor | None = pyd.Field(
|
395
|
+
default=None, description="Conductance of heat at center of glass."
|
396
|
+
)
|
390
397
|
spacer: list[Spacer] | None = pyd.Field(default=None, description="Spacer material for Integrated Glass Unit.")
|
391
398
|
|
392
399
|
|
@@ -26,7 +26,7 @@ from openepd.compat.pydantic import pyd
|
|
26
26
|
from openepd.model.common import RangeInt
|
27
27
|
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
28
28
|
from openepd.model.specs.enums import GypsumFacing, GypsumFireRating, GypsumThickness
|
29
|
-
from openepd.model.validation.quantity import AmountRangeLengthMm
|
29
|
+
from openepd.model.validation.quantity import AmountRangeLengthMm, AmountRangeRFactor
|
30
30
|
|
31
31
|
|
32
32
|
class CementitiousSheathingBoardRangeV1(BaseOpenEpdHierarchicalSpec):
|
@@ -58,7 +58,7 @@ class GypsumSheathingBoardRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
58
58
|
fire_rating: list[GypsumFireRating] | None = pyd.Field(default=None, description="")
|
59
59
|
thickness: list[GypsumThickness] | None = pyd.Field(default=None, description="")
|
60
60
|
facing: list[GypsumFacing] | None = pyd.Field(default=None, description="")
|
61
|
-
r_factor:
|
61
|
+
r_factor: AmountRangeRFactor | None = pyd.Field(default=None, description="")
|
62
62
|
flame_spread_astm_e84: RangeInt | None = pyd.Field(default=None, description="")
|
63
63
|
smoke_production_astm_e84: RangeInt | None = pyd.Field(default=None, description="")
|
64
64
|
surface_abrasion_d4977: RangeInt | None = pyd.Field(default=None, description="")
|
@@ -44,7 +44,12 @@ from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
|
44
44
|
from openepd.model.specs.enums import SteelComposition, SteelRebarGrade
|
45
45
|
from openepd.model.specs.singular.steel import SteelMakingRoute
|
46
46
|
from openepd.model.standard import Standard
|
47
|
-
from openepd.model.validation.quantity import
|
47
|
+
from openepd.model.validation.quantity import (
|
48
|
+
AmountRangeLengthMm,
|
49
|
+
AmountRangePressureMpa,
|
50
|
+
AmountRangeThermalConductivity,
|
51
|
+
AmountRangeThermalExpansion,
|
52
|
+
)
|
48
53
|
|
49
54
|
|
50
55
|
class ColdFormedFramingRangeV1(BaseOpenEpdHierarchicalSpec):
|
@@ -224,10 +229,10 @@ class StructuralSteelRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
224
229
|
modulus_of_elasticity: AmountRangePressureMpa | None = pyd.Field(
|
225
230
|
default=None, description="Modulus of Elasticity, https://en.wikipedia.org/wiki/Elastic_modulus "
|
226
231
|
)
|
227
|
-
thermal_expansion:
|
232
|
+
thermal_expansion: AmountRangeThermalExpansion | None = pyd.Field(
|
228
233
|
default=None, description="Thermal Expansion, https://en.wikipedia.org/wiki/Thermal_expansion"
|
229
234
|
)
|
230
|
-
thermal_conductivity:
|
235
|
+
thermal_conductivity: AmountRangeThermalConductivity | None = pyd.Field(
|
231
236
|
default=None,
|
232
237
|
description="Thermal Conductivity, https://en.wikipedia.org/wiki/Thermal_conductivity_and_resistivity",
|
233
238
|
)
|
@@ -32,8 +32,9 @@ __all__ = (
|
|
32
32
|
# NB! This is a generated code. Do not edit it manually. Please see src/openepd/model/specs/README.md
|
33
33
|
|
34
34
|
|
35
|
+
from builtins import float
|
36
|
+
|
35
37
|
from openepd.compat.pydantic import pyd
|
36
|
-
from openepd.model.common import RangeFloat, RangeRatioFloat
|
37
38
|
from openepd.model.org import OrgRef
|
38
39
|
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
39
40
|
from openepd.model.specs.enums import (
|
@@ -45,6 +46,7 @@ from openepd.model.specs.enums import (
|
|
45
46
|
SawnTimberSpecies,
|
46
47
|
SheathingPanelsFabrication,
|
47
48
|
)
|
49
|
+
from openepd.model.validation.numbers import RatioFloat
|
48
50
|
from openepd.model.validation.quantity import AmountRangeLengthMm
|
49
51
|
|
50
52
|
|
@@ -212,12 +214,12 @@ class WoodRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
212
214
|
weather_exposed: bool | None = pyd.Field(default=None, description="Weather exposed")
|
213
215
|
fire_retardant: bool | None = pyd.Field(default=None, description="Fire retardant")
|
214
216
|
decay_resistant: bool | None = pyd.Field(default=None, description="Decay resistant")
|
215
|
-
fsc_certified:
|
217
|
+
fsc_certified: RatioFloat | None = pyd.Field(
|
216
218
|
default=None, description="Forest Stewardship Council certified proportion"
|
217
219
|
)
|
218
|
-
fsc_certified_z:
|
219
|
-
recycled_content:
|
220
|
-
recycled_content_z:
|
220
|
+
fsc_certified_z: float | None = pyd.Field(default=None, description="")
|
221
|
+
recycled_content: RatioFloat | None = pyd.Field(default=None, description="Recycled content")
|
222
|
+
recycled_content_z: float | None = pyd.Field(default=None, description="")
|
221
223
|
CompositeLumber: CompositeLumberRangeV1 | None = None
|
222
224
|
DimensionLumber: DimensionLumberRangeV1 | None = None
|
223
225
|
HeavyTimber: HeavyTimberRangeV1 | None = None
|
@@ -14,6 +14,7 @@
|
|
14
14
|
# limitations under the License.
|
15
15
|
#
|
16
16
|
from openepd.model.base import BaseOpenEpdSchema
|
17
|
+
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
17
18
|
from openepd.model.specs.singular.accessories import AccessoriesV1
|
18
19
|
from openepd.model.specs.singular.aggregates import AggregatesV1
|
19
20
|
from openepd.model.specs.singular.aluminium import AluminiumV1
|
@@ -51,10 +52,14 @@ from openepd.model.specs.singular.utility_piping import UtilityPipingV1
|
|
51
52
|
from openepd.model.specs.singular.wood import WoodV1
|
52
53
|
from openepd.model.specs.singular.wood_joists import WoodJoistsV1
|
53
54
|
|
55
|
+
__all__ = ("Specs",)
|
54
56
|
|
55
|
-
|
57
|
+
|
58
|
+
class Specs(BaseOpenEpdHierarchicalSpec):
|
56
59
|
"""Material specific specs."""
|
57
60
|
|
61
|
+
_EXT_VERSION = "1.0"
|
62
|
+
|
58
63
|
# Nested specs:
|
59
64
|
CMU: CMUV1 | None = None
|
60
65
|
Masonry: MasonryV1 | None = None
|
@@ -13,8 +13,10 @@
|
|
13
13
|
# See the License for the specific language governing permissions and
|
14
14
|
# limitations under the License.
|
15
15
|
#
|
16
|
+
from typing import Annotated
|
17
|
+
|
16
18
|
from openepd.compat.pydantic import pyd
|
17
|
-
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
19
|
+
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec, CodegenSpec
|
18
20
|
from openepd.model.specs.enums import AsphaltGradation, AsphaltMixType
|
19
21
|
from openepd.model.validation.numbers import RatioFloat
|
20
22
|
from openepd.model.validation.quantity import LengthMmStr, TemperatureCStr
|
@@ -48,14 +50,14 @@ class AsphaltV1(BaseOpenEpdHierarchicalSpec):
|
|
48
50
|
ge=0,
|
49
51
|
le=1,
|
50
52
|
)
|
51
|
-
max_temperature: TemperatureCStr | None = pyd.Field(
|
53
|
+
max_temperature: Annotated[TemperatureCStr | None, CodegenSpec(override_type=TemperatureCStr)] = pyd.Field(
|
52
54
|
default=None,
|
53
55
|
description="The upper threshold temperature to which an asphalt "
|
54
56
|
"binder can be heated preventing the asphalt mixture "
|
55
57
|
"from rutting",
|
56
58
|
example="90 °C",
|
57
59
|
)
|
58
|
-
min_temperature: TemperatureCStr | None = pyd.Field(
|
60
|
+
min_temperature: Annotated[TemperatureCStr | None, CodegenSpec(override_type=TemperatureCStr)] = pyd.Field(
|
59
61
|
default=None,
|
60
62
|
description="The lower threshold temperature for an asphalt "
|
61
63
|
"binder to prevent thermal cracking of the asphalt"
|
@@ -13,8 +13,10 @@
|
|
13
13
|
# See the License for the specific language governing permissions and
|
14
14
|
# limitations under the License.
|
15
15
|
#
|
16
|
+
from typing import Annotated
|
17
|
+
|
16
18
|
from openepd.compat.pydantic import pyd
|
17
|
-
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
19
|
+
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec, CodegenSpec
|
18
20
|
from openepd.model.specs.enums import CmuBlockType, CmuWeightClassification
|
19
21
|
from openepd.model.validation.quantity import GwpKgCo2eStr, PressureMPaStr
|
20
22
|
|
@@ -31,5 +33,9 @@ class CMUV1(BaseOpenEpdHierarchicalSpec):
|
|
31
33
|
block_type: CmuBlockType | None = pyd.Field(default=None, description="", example="Gray")
|
32
34
|
insulated: bool | None = pyd.Field(default=None, description="", example=True)
|
33
35
|
sound_performance: bool | None = pyd.Field(default=None, description="", example=True)
|
34
|
-
b1_recarbonation: GwpKgCo2eStr | None = pyd.Field(
|
35
|
-
|
36
|
+
b1_recarbonation: Annotated[GwpKgCo2eStr | None, CodegenSpec(override_type=GwpKgCo2eStr)] = pyd.Field(
|
37
|
+
default=None, description="", example="1 kgCO2e"
|
38
|
+
)
|
39
|
+
b1_recarbonation_z: Annotated[float | None, CodegenSpec(override_type=float)] = pyd.Field(
|
40
|
+
default=None, description="", example=2.3
|
41
|
+
)
|
@@ -24,6 +24,7 @@ from openepd.model.validation.quantity import (
|
|
24
24
|
LuminosityStr,
|
25
25
|
MassKgStr,
|
26
26
|
PowerStr,
|
27
|
+
UtilizationStr,
|
27
28
|
validate_quantity_ge_factory,
|
28
29
|
validate_quantity_le_factory,
|
29
30
|
validate_quantity_unit_factory,
|
@@ -255,7 +256,7 @@ class LightingV1(BaseOpenEpdHierarchicalSpec):
|
|
255
256
|
|
256
257
|
# Own fields:
|
257
258
|
color_temperature: ColorTemperatureStr | None = pyd.Field(default=None, description="", example="1 K")
|
258
|
-
typical_utilization:
|
259
|
+
typical_utilization: UtilizationStr | None = pyd.Field(default=None, description="", example="1 h / yr")
|
259
260
|
luminosity: LuminosityStr | None = pyd.Field(default=None, description="", example="1 lumen")
|
260
261
|
wattage: PowerStr | None = pyd.Field(default=None, description="")
|
261
262
|
color_rendering_index: float | None = pyd.Field(default=None, description="", example=2.3)
|
@@ -46,10 +46,13 @@ from openepd.model.specs.singular.common import HasForestPracticesCertifiers
|
|
46
46
|
from openepd.model.validation.numbers import RatioFloat
|
47
47
|
from openepd.model.validation.quantity import (
|
48
48
|
AreaPerVolumeStr,
|
49
|
+
ForceNStr,
|
49
50
|
GwpKgCo2eStr,
|
50
51
|
LengthMmStr,
|
51
52
|
LengthMStr,
|
52
53
|
PressureMPaStr,
|
54
|
+
RFactorStr,
|
55
|
+
YarnWeightStr,
|
53
56
|
validate_quantity_ge_factory,
|
54
57
|
validate_quantity_le_factory,
|
55
58
|
validate_quantity_unit_factory,
|
@@ -80,8 +83,8 @@ class AccessFlooringV1(BaseOpenEpdHierarchicalSpec):
|
|
80
83
|
panel_thickness: LengthMmStr | None = pyd.Field(default=None, description="", example="1 m")
|
81
84
|
concentrated_load: PressureMPaStr | None = pyd.Field(default=None, description="", example="1 MPa")
|
82
85
|
uniform_load: PressureMPaStr | None = pyd.Field(default=None, description="", example="1 MPa")
|
83
|
-
rolling_load_10_pass:
|
84
|
-
rolling_load_10000_pass:
|
86
|
+
rolling_load_10_pass: ForceNStr | None = pyd.Field(default=None, description="", example="1 N")
|
87
|
+
rolling_load_10000_pass: ForceNStr | None = pyd.Field(default=None, description="", example="1 N")
|
85
88
|
|
86
89
|
_access_flooring_rolling_load_10_pass_is_quantity_validator = pyd.validator(
|
87
90
|
"rolling_load_10_pass", allow_reuse=True
|
@@ -104,7 +107,7 @@ class CarpetV1(BaseOpenEpdHierarchicalSpec):
|
|
104
107
|
)
|
105
108
|
manufacture_type: CarpetManufactureType | None = pyd.Field(default=None, description="", example="Tufted")
|
106
109
|
form_factor: CarpetFormFactor | None = pyd.Field(default=None, description="", example="Tiles")
|
107
|
-
yarn_weight:
|
110
|
+
yarn_weight: YarnWeightStr | None = pyd.Field(default=None, description="", example="1 g / m2")
|
108
111
|
yarn_type: CarpetYarnType | None = pyd.Field(default=None, description="", example="Nylon 6,6")
|
109
112
|
fire_radiant_panel_rating_astme648: str | None = pyd.Field(default=None, description="")
|
110
113
|
fire_smoke_density_rating_astme648: str | None = pyd.Field(default=None, description="")
|
@@ -446,7 +449,7 @@ class GypsumV1(BaseOpenEpdHierarchicalSpec):
|
|
446
449
|
fire_rating: GypsumFireRating | None = pyd.Field(default=None, description="", example="-")
|
447
450
|
thickness: GypsumThickness | None = pyd.Field(default=None, description="", example="1 m")
|
448
451
|
facing: GypsumFacing | None = pyd.Field(default=None, description="", example="Paper")
|
449
|
-
r_factor:
|
452
|
+
r_factor: RFactorStr | None = pyd.Field(default=None, description="", example="1 RSI")
|
450
453
|
flame_spread_astm_e84: int | None = pyd.Field(default=None, description="", example=3)
|
451
454
|
smoke_production_astm_e84: int | None = pyd.Field(default=None, description="", example=3)
|
452
455
|
surface_abrasion_d4977: int | None = pyd.Field(default=None, description="", example=3)
|
@@ -17,6 +17,7 @@ from openepd.compat.pydantic import pyd
|
|
17
17
|
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
18
18
|
from openepd.model.validation.quantity import (
|
19
19
|
PressureMPaStr,
|
20
|
+
ThermalConductivityStr,
|
20
21
|
validate_quantity_ge_factory,
|
21
22
|
validate_quantity_unit_factory,
|
22
23
|
)
|
@@ -35,7 +36,9 @@ class AutoclavedAeratedConcreteV1(BaseOpenEpdHierarchicalSpec):
|
|
35
36
|
|
36
37
|
# Own fields:
|
37
38
|
strength_28d: PressureMPaStr | None = pyd.Field(default=None, description="", example="1 MPa")
|
38
|
-
thermal_conductivity:
|
39
|
+
thermal_conductivity: ThermalConductivityStr | None = pyd.Field(
|
40
|
+
default=None, description="", example="1 W / (m * K)"
|
41
|
+
)
|
39
42
|
white: bool | None = pyd.Field(default=None, description="", example=True)
|
40
43
|
|
41
44
|
_aac_thermal_conductivity_is_quantity_validator = pyd.validator("thermal_conductivity", allow_reuse=True)(
|
@@ -26,7 +26,13 @@ from openepd.model.specs.enums import (
|
|
26
26
|
ThermalSeparation,
|
27
27
|
)
|
28
28
|
from openepd.model.validation.numbers import RatioFloat
|
29
|
-
from openepd.model.validation.quantity import
|
29
|
+
from openepd.model.validation.quantity import (
|
30
|
+
LengthMmStr,
|
31
|
+
PressureMPaStr,
|
32
|
+
SpeedStr,
|
33
|
+
UFactorStr,
|
34
|
+
validate_quantity_unit_factory,
|
35
|
+
)
|
30
36
|
|
31
37
|
|
32
38
|
class GlazingIntendedApplication(BaseOpenEpdSchema):
|
@@ -346,7 +352,7 @@ class NAFSFenestrationV1(BaseOpenEpdHierarchicalSpec, GlazingOptionsMixin):
|
|
346
352
|
default=None, description="The product has been designed to resist windborne debris.", example=True
|
347
353
|
)
|
348
354
|
|
349
|
-
assembly_u_factor:
|
355
|
+
assembly_u_factor: UFactorStr | None = pyd.Field(
|
350
356
|
default=None,
|
351
357
|
description="Weighted average conductance of heat across assembly (including frame).",
|
352
358
|
example="1 USI",
|
@@ -417,7 +423,7 @@ class InsulatingGlazingUnitsV1(BaseOpenEpdHierarchicalSpec, GlazingOptionsMixin)
|
|
417
423
|
description="Number of panes, each separated by a cavity. A 3 pane unit has 2 cavities. example: 3",
|
418
424
|
example=3,
|
419
425
|
)
|
420
|
-
cog_u_factor:
|
426
|
+
cog_u_factor: UFactorStr | None = pyd.Field(
|
421
427
|
default=None, description="Conductance of heat at center of glass.", example="1 USI"
|
422
428
|
)
|
423
429
|
spacer: Spacer | None = pyd.Field(
|
@@ -16,7 +16,7 @@
|
|
16
16
|
from openepd.compat.pydantic import pyd
|
17
17
|
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
18
18
|
from openepd.model.specs.enums import GypsumFacing, GypsumFireRating, GypsumThickness
|
19
|
-
from openepd.model.validation.quantity import LengthMmStr, validate_quantity_unit_factory
|
19
|
+
from openepd.model.validation.quantity import LengthMmStr, RFactorStr, validate_quantity_unit_factory
|
20
20
|
|
21
21
|
|
22
22
|
class CementitiousSheathingBoardV1(BaseOpenEpdHierarchicalSpec):
|
@@ -51,7 +51,7 @@ class GypsumSheathingBoardV1(BaseOpenEpdHierarchicalSpec):
|
|
51
51
|
thickness: GypsumThickness | None = pyd.Field(default=None, description="", example="9 mm")
|
52
52
|
facing: GypsumFacing | None = pyd.Field(default=None, description="", example="Paper")
|
53
53
|
|
54
|
-
r_factor:
|
54
|
+
r_factor: RFactorStr | None = pyd.Field(default=None, description="", example="1 RSI")
|
55
55
|
|
56
56
|
flame_spread_astm_e84: int | None = pyd.Field(default=None, description="", example=3)
|
57
57
|
smoke_production_astm_e84: int | None = pyd.Field(default=None, description="", example=3)
|
@@ -21,7 +21,13 @@ from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec, BaseOpenEpdSpe
|
|
21
21
|
from openepd.model.specs.enums import SteelComposition, SteelRebarGrade
|
22
22
|
from openepd.model.standard import Standard
|
23
23
|
from openepd.model.validation.numbers import RatioFloat
|
24
|
-
from openepd.model.validation.quantity import
|
24
|
+
from openepd.model.validation.quantity import (
|
25
|
+
LengthMmStr,
|
26
|
+
PressureMPaStr,
|
27
|
+
ThermalConductivityStr,
|
28
|
+
ThermalExpansionStr,
|
29
|
+
validate_quantity_unit_factory,
|
30
|
+
)
|
25
31
|
|
26
32
|
|
27
33
|
class SteelMakingRoute(BaseOpenEpdSchema):
|
@@ -175,15 +181,15 @@ class StructuralSteelV1(BaseOpenEpdHierarchicalSpec):
|
|
175
181
|
description="Modulus of Elasticity, https://en.wikipedia.org/wiki/Elastic_modulus ",
|
176
182
|
example="193 GPa",
|
177
183
|
)
|
178
|
-
thermal_expansion:
|
184
|
+
thermal_expansion: ThermalExpansionStr | None = pyd.Field(
|
179
185
|
default=None,
|
180
186
|
description="Thermal Expansion, https://en.wikipedia.org/wiki/Thermal_expansion",
|
181
187
|
example="1.11E-5 / K",
|
182
188
|
)
|
183
|
-
thermal_conductivity:
|
189
|
+
thermal_conductivity: ThermalConductivityStr | None = pyd.Field(
|
184
190
|
default=None,
|
185
191
|
description="Thermal Conductivity, https://en.wikipedia.org/wiki/Thermal_conductivity_and_resistivity",
|
186
|
-
example="1.45E-5 W /
|
192
|
+
example="1.45E-5 W / m / K)",
|
187
193
|
)
|
188
194
|
|
189
195
|
_steel_thermal_expansion_is_quantity_validator = pyd.validator("thermal_expansion", allow_reuse=True)(
|
@@ -13,8 +13,10 @@
|
|
13
13
|
# See the License for the specific language governing permissions and
|
14
14
|
# limitations under the License.
|
15
15
|
#
|
16
|
+
from typing import Annotated
|
17
|
+
|
16
18
|
from openepd.compat.pydantic import pyd
|
17
|
-
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
19
|
+
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec, CodegenSpec
|
18
20
|
from openepd.model.specs.enums import (
|
19
21
|
AllFabrication,
|
20
22
|
AllTimberSpecies,
|
@@ -156,15 +158,19 @@ class WoodV1(BaseOpenEpdHierarchicalSpec, HasForestPracticesCertifiers):
|
|
156
158
|
weather_exposed: bool | None = pyd.Field(default=None, description="Weather exposed", example=True)
|
157
159
|
fire_retardant: bool | None = pyd.Field(default=None, description="Fire retardant", example=True)
|
158
160
|
decay_resistant: bool | None = pyd.Field(default=None, description="Decay resistant", example=True)
|
159
|
-
fsc_certified: RatioFloat | None = pyd.Field(
|
161
|
+
fsc_certified: Annotated[RatioFloat | None, CodegenSpec(override_type=RatioFloat)] = pyd.Field(
|
160
162
|
default=None, description="Forest Stewardship Council certified proportion", example=0.3, ge=0, le=1
|
161
163
|
)
|
162
|
-
fsc_certified_z: float | None = pyd.Field(
|
164
|
+
fsc_certified_z: Annotated[float | None, CodegenSpec(override_type=float)] = pyd.Field(
|
165
|
+
default=None, description="", example=0.7
|
166
|
+
)
|
163
167
|
|
164
|
-
recycled_content: RatioFloat | None = pyd.Field(
|
168
|
+
recycled_content: Annotated[RatioFloat | None, CodegenSpec(override_type=RatioFloat)] = pyd.Field(
|
165
169
|
default=None, description="Recycled content", example=0.3, ge=0, le=1
|
166
170
|
)
|
167
|
-
recycled_content_z: float | None = pyd.Field(
|
171
|
+
recycled_content_z: Annotated[float | None, CodegenSpec(override_type=float)] = pyd.Field(
|
172
|
+
default=None, description="", example=0.7
|
173
|
+
)
|
168
174
|
|
169
175
|
# Nested specs:
|
170
176
|
CompositeLumber: CompositeLumberV1 | None = None
|