openepd 4.13.1__py3-none-any.whl → 5.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 (60) hide show
  1. openepd/__version__.py +1 -1
  2. openepd/model/common.py +40 -1
  3. openepd/model/declaration.py +7 -2
  4. openepd/model/geography.py +1 -1
  5. openepd/model/lcia.py +191 -19
  6. openepd/model/pcr.py +2 -2
  7. openepd/model/specs/README.md +34 -8
  8. openepd/model/specs/asphalt.py +2 -2
  9. openepd/model/specs/base.py +15 -5
  10. openepd/model/specs/generated/__init__.py +80 -0
  11. openepd/model/specs/generated/cladding.py +4 -4
  12. openepd/model/specs/generated/concrete.py +8 -7
  13. openepd/model/specs/generated/electrical.py +2 -2
  14. openepd/model/specs/generated/finishes.py +10 -6
  15. openepd/model/specs/generated/masonry.py +6 -2
  16. openepd/model/specs/generated/network_infrastructure.py +7 -2
  17. openepd/model/specs/generated/openings.py +10 -6
  18. openepd/model/specs/generated/sheathing.py +8 -4
  19. openepd/model/specs/generated/steel.py +10 -5
  20. openepd/model/specs/range/__init__.py +101 -0
  21. openepd/model/specs/range/accessories.py +97 -0
  22. openepd/model/specs/range/aggregates.py +57 -0
  23. openepd/model/specs/range/aluminium.py +92 -0
  24. openepd/model/specs/range/asphalt.py +61 -0
  25. openepd/model/specs/range/bulk_materials.py +31 -0
  26. openepd/model/specs/range/cast_decks_and_underlayment.py +34 -0
  27. openepd/model/specs/range/cladding.py +275 -0
  28. openepd/model/specs/range/cmu.py +44 -0
  29. openepd/model/specs/range/concrete.py +179 -0
  30. openepd/model/specs/range/conveying_equipment.py +86 -0
  31. openepd/model/specs/range/electrical.py +422 -0
  32. openepd/model/specs/range/electrical_transmission_and_distribution_equipment.py +96 -0
  33. openepd/model/specs/range/electricity.py +31 -0
  34. openepd/model/specs/range/finishes.py +585 -0
  35. openepd/model/specs/range/fire_and_smoke_protection.py +108 -0
  36. openepd/model/specs/range/furnishings.py +137 -0
  37. openepd/model/specs/range/grouting.py +34 -0
  38. openepd/model/specs/range/manufacturing_inputs.py +190 -0
  39. openepd/model/specs/range/masonry.py +87 -0
  40. openepd/model/specs/range/material_handling.py +50 -0
  41. openepd/model/specs/range/mechanical.py +307 -0
  42. openepd/model/specs/range/mechanical_insulation.py +42 -0
  43. openepd/model/specs/range/network_infrastructure.py +208 -0
  44. openepd/model/specs/range/openings.py +512 -0
  45. openepd/model/specs/range/other_electrical_equipment.py +31 -0
  46. openepd/model/specs/range/other_materials.py +194 -0
  47. openepd/model/specs/range/plumbing.py +200 -0
  48. openepd/model/specs/range/precast_concrete.py +115 -0
  49. openepd/model/specs/range/sheathing.py +86 -0
  50. openepd/model/specs/range/steel.py +332 -0
  51. openepd/model/specs/range/thermal_moisture_protection.py +336 -0
  52. openepd/model/specs/range/utility_piping.py +75 -0
  53. openepd/model/specs/range/wood.py +228 -0
  54. openepd/model/specs/range/wood_joists.py +44 -0
  55. openepd/model/validation/numbers.py +11 -5
  56. openepd/model/validation/quantity.py +469 -58
  57. {openepd-4.13.1.dist-info → openepd-5.1.0.dist-info}/METADATA +6 -1
  58. {openepd-4.13.1.dist-info → openepd-5.1.0.dist-info}/RECORD +60 -25
  59. {openepd-4.13.1.dist-info → openepd-5.1.0.dist-info}/LICENSE +0 -0
  60. {openepd-4.13.1.dist-info → openepd-5.1.0.dist-info}/WHEEL +0 -0
@@ -13,10 +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 Literal
16
+ from typing import Annotated, Literal
17
17
 
18
18
  from openepd.compat.pydantic import pyd
19
- from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
19
+ from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec, CodegenSpec
20
20
  from openepd.model.specs.concrete import Cementitious, ConcreteTypicalApplication
21
21
  from openepd.model.specs.generated.enums import AciExposureClass, CsaExposureClass, EnExposureClass
22
22
  from openepd.model.validation.numbers import RatioFloat
@@ -25,7 +25,7 @@ from openepd.model.validation.quantity import (
25
25
  LengthMmStr,
26
26
  MassKgStr,
27
27
  PressureMPaStr,
28
- validate_unit_factory,
28
+ validate_quantity_unit_factory,
29
29
  )
30
30
 
31
31
 
@@ -53,7 +53,7 @@ class ConcretePavingV1(BaseOpenEpdHierarchicalSpec):
53
53
  )
54
54
 
55
55
  _concrete_flexion_strength_is_quantity_validator = pyd.validator("flexion_strength", allow_reuse=True)(
56
- validate_unit_factory("MPa")
56
+ validate_quantity_unit_factory("MPa")
57
57
  )
58
58
 
59
59
 
@@ -119,9 +119,10 @@ class ConcreteV1(BaseOpenEpdHierarchicalSpec):
119
119
  description="A strength spec which is to be reached later other 28 days (e.g. 42d)",
120
120
  example="30 MPa",
121
121
  )
122
- strength_other_d: Literal[3, 7, 14, 42, 56, 72, 96, 120] | None = pyd.Field(
123
- default=None, description="Test Day for strength_other", example=42
124
- )
122
+ strength_other_d: Annotated[
123
+ Literal[3, 7, 14, 42, 56, 72, 96, 120] | None,
124
+ CodegenSpec(override_type=Literal[3, 7, 14, 42, 56, 72, 96, 120]),
125
+ ] = pyd.Field(default=None, description="Test Day for strength_other", example=42)
125
126
 
126
127
  slump: LengthInchStr | None = pyd.Field(default=None, description="", example="2 in")
127
128
  min_slump: LengthInchStr | None = pyd.Field(default=None, description="Minimum test slump", example="2 in")
@@ -26,7 +26,7 @@ from openepd.model.validation.quantity import (
26
26
  PowerStr,
27
27
  validate_quantity_ge_factory,
28
28
  validate_quantity_le_factory,
29
- validate_unit_factory,
29
+ validate_quantity_unit_factory,
30
30
  )
31
31
 
32
32
 
@@ -268,7 +268,7 @@ class LightingV1(BaseOpenEpdHierarchicalSpec):
268
268
  validate_quantity_le_factory("1E+04 K")
269
269
  )
270
270
  _typical_utilization_unit_validator = pyd.validator("typical_utilization", allow_reuse=True)(
271
- validate_unit_factory("h / yr")
271
+ validate_quantity_unit_factory("h / yr")
272
272
  )
273
273
  _typical_utilization_quantity_ge_validator = pyd.validator("typical_utilization", allow_reuse=True)(
274
274
  validate_quantity_ge_factory("25 h / yr")
@@ -52,7 +52,7 @@ from openepd.model.validation.quantity import (
52
52
  PressureMPaStr,
53
53
  validate_quantity_ge_factory,
54
54
  validate_quantity_le_factory,
55
- validate_unit_factory,
55
+ validate_quantity_unit_factory,
56
56
  )
57
57
 
58
58
 
@@ -85,10 +85,10 @@ class AccessFlooringV1(BaseOpenEpdHierarchicalSpec):
85
85
 
86
86
  _access_flooring_rolling_load_10_pass_is_quantity_validator = pyd.validator(
87
87
  "rolling_load_10_pass", allow_reuse=True
88
- )(validate_unit_factory("N"))
88
+ )(validate_quantity_unit_factory("N"))
89
89
  _access_flooring_rolling_load_10000_pass_is_quantity_validator = pyd.validator(
90
90
  "rolling_load_10000_pass", allow_reuse=True
91
- )(validate_unit_factory("N"))
91
+ )(validate_quantity_unit_factory("N"))
92
92
 
93
93
 
94
94
  class CarpetV1(BaseOpenEpdHierarchicalSpec):
@@ -114,7 +114,9 @@ class CarpetV1(BaseOpenEpdHierarchicalSpec):
114
114
  gwp_factor_base: GwpKgCo2eStr | None = pyd.Field(default=None, description="", example="1 kgCO2e")
115
115
  gwp_factor_yarn: GwpKgCo2eStr | None = pyd.Field(default=None, description="", example="1 kgCO2e")
116
116
 
117
- _yarn_weight_is_quantity_validator = pyd.validator("yarn_weight", allow_reuse=True)(validate_unit_factory("g / m2"))
117
+ _yarn_weight_is_quantity_validator = pyd.validator("yarn_weight", allow_reuse=True)(
118
+ validate_quantity_unit_factory("g / m2")
119
+ )
118
120
  _yarn_weight_ge_validator = pyd.validator("yarn_weight", allow_reuse=True)(validate_quantity_ge_factory("0 g / m2"))
119
121
 
120
122
 
@@ -348,7 +350,7 @@ class CementBoardV1(BaseOpenEpdHierarchicalSpec):
348
350
  )
349
351
 
350
352
  _cement_board_thickness_is_quantity_validator = pyd.validator("thickness", allow_reuse=True)(
351
- validate_unit_factory("m")
353
+ validate_quantity_unit_factory("m")
352
354
  )
353
355
 
354
356
 
@@ -456,7 +458,9 @@ class GypsumV1(BaseOpenEpdHierarchicalSpec):
456
458
  moisture_resistant: bool | None = pyd.Field(default=None, description="", example=True)
457
459
  abuse_resistant: bool | None = pyd.Field(default=None, description="", example=True)
458
460
 
459
- _gypsum_r_factor_is_quantity_validator = pyd.validator("r_factor", allow_reuse=True)(validate_unit_factory("RSI"))
461
+ _gypsum_r_factor_is_quantity_validator = pyd.validator("r_factor", allow_reuse=True)(
462
+ validate_quantity_unit_factory("RSI")
463
+ )
460
464
 
461
465
  # Nested specs:
462
466
  GypsumSupports: GypsumSupportsV1 | None = None
@@ -15,7 +15,11 @@
15
15
  #
16
16
  from openepd.compat.pydantic import pyd
17
17
  from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
18
- from openepd.model.validation.quantity import PressureMPaStr, validate_quantity_ge_factory, validate_unit_factory
18
+ from openepd.model.validation.quantity import (
19
+ PressureMPaStr,
20
+ validate_quantity_ge_factory,
21
+ validate_quantity_unit_factory,
22
+ )
19
23
 
20
24
 
21
25
  class GMUV1(BaseOpenEpdHierarchicalSpec):
@@ -35,7 +39,7 @@ class AutoclavedAeratedConcreteV1(BaseOpenEpdHierarchicalSpec):
35
39
  white: bool | None = pyd.Field(default=None, description="", example=True)
36
40
 
37
41
  _aac_thermal_conductivity_is_quantity_validator = pyd.validator("thermal_conductivity", allow_reuse=True)(
38
- validate_unit_factory("W / (m * K)")
42
+ validate_quantity_unit_factory("W / (m * K)")
39
43
  )
40
44
 
41
45
  _aac_thermal_conductivity_min_validator = pyd.validator("thermal_conductivity", allow_reuse=True)(
@@ -28,7 +28,12 @@ from openepd.model.specs.generated.enums import (
28
28
  RackType,
29
29
  )
30
30
  from openepd.model.specs.generated.mixins.conduit_mixin import ConduitMixin
31
- from openepd.model.validation.quantity import ElectricalCurrentStr, LengthMmStr, MassKgStr, validate_unit_factory
31
+ from openepd.model.validation.quantity import (
32
+ ElectricalCurrentStr,
33
+ LengthMmStr,
34
+ MassKgStr,
35
+ validate_quantity_unit_factory,
36
+ )
32
37
 
33
38
 
34
39
  class PDUV1(BaseOpenEpdHierarchicalSpec):
@@ -43,7 +48,7 @@ class PDUV1(BaseOpenEpdHierarchicalSpec):
43
48
  pdu_technology: PduTechnology | None = pyd.Field(default=None, description="", example="Basic")
44
49
  pdu_outlets: int | None = pyd.Field(default=None, description="", example=3, le=200)
45
50
 
46
- _amperage_is_quantity_validator = pyd.validator("amperage", allow_reuse=True)(validate_unit_factory("A"))
51
+ _amperage_is_quantity_validator = pyd.validator("amperage", allow_reuse=True)(validate_quantity_unit_factory("A"))
47
52
 
48
53
 
49
54
  class CabinetsRacksAndEnclosuresV1(BaseOpenEpdHierarchicalSpec):
@@ -26,7 +26,7 @@ from openepd.model.specs.generated.enums import (
26
26
  ThermalSeparation,
27
27
  )
28
28
  from openepd.model.validation.numbers import RatioFloat
29
- from openepd.model.validation.quantity import LengthMmStr, PressureMPaStr, SpeedStr, validate_unit_factory
29
+ from openepd.model.validation.quantity import LengthMmStr, PressureMPaStr, SpeedStr, validate_quantity_unit_factory
30
30
 
31
31
 
32
32
  class GlazingIntendedApplication(BaseOpenEpdSchema):
@@ -197,7 +197,7 @@ class FlatGlassPanesV1(BaseOpenEpdHierarchicalSpec):
197
197
  thickness: FlatGlassPanesThickness | None = pyd.Field(default=None, example="12 mm")
198
198
 
199
199
  _flat_glass_panes_thickness_is_quantity_validator = pyd.validator("thickness", allow_reuse=True)(
200
- validate_unit_factory("m")
200
+ validate_quantity_unit_factory("m")
201
201
  )
202
202
 
203
203
 
@@ -380,10 +380,10 @@ class NAFSFenestrationV1(BaseOpenEpdHierarchicalSpec, GlazingOptionsMixin):
380
380
  )
381
381
 
382
382
  _assembly_u_factor_is_quantity_validator = pyd.validator("assembly_u_factor", allow_reuse=True)(
383
- validate_unit_factory("USI")
383
+ validate_quantity_unit_factory("USI")
384
384
  )
385
385
  _nafs_performance_grade_is_quantity_validator = pyd.validator("performance_grade", allow_reuse=True)(
386
- validate_unit_factory("psf")
386
+ validate_quantity_unit_factory("psf")
387
387
  )
388
388
 
389
389
  # Nested specs:
@@ -424,8 +424,12 @@ class InsulatingGlazingUnitsV1(BaseOpenEpdHierarchicalSpec, GlazingOptionsMixin)
424
424
  default=None, description="Spacer material for Integrated Glass Unit.", example="Aluminium"
425
425
  )
426
426
 
427
- _dp_rating_is_quantity_validator = pyd.validator("dp_rating", allow_reuse=True)(validate_unit_factory("MPa"))
428
- _cog_u_factor_is_quantity_validator = pyd.validator("cog_u_factor", allow_reuse=True)(validate_unit_factory("USI"))
427
+ _dp_rating_is_quantity_validator = pyd.validator("dp_rating", allow_reuse=True)(
428
+ validate_quantity_unit_factory("MPa")
429
+ )
430
+ _cog_u_factor_is_quantity_validator = pyd.validator("cog_u_factor", allow_reuse=True)(
431
+ validate_quantity_unit_factory("USI")
432
+ )
429
433
 
430
434
 
431
435
  class CurtainWallsV1(BaseOpenEpdHierarchicalSpec):
@@ -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.generated.enums import GypsumFacing, GypsumFireRating, GypsumThickness
19
- from openepd.model.validation.quantity import LengthMmStr, validate_unit_factory
19
+ from openepd.model.validation.quantity import LengthMmStr, validate_quantity_unit_factory
20
20
 
21
21
 
22
22
  class CementitiousSheathingBoardV1(BaseOpenEpdHierarchicalSpec):
@@ -33,7 +33,7 @@ class CementitiousSheathingBoardV1(BaseOpenEpdHierarchicalSpec):
33
33
  cement_board_thickness: LengthMmStr | None = pyd.Field(default=None, description="", example="10 mm")
34
34
 
35
35
  _cement_board_thickness_is_quantity_validator = pyd.validator("cement_board_thickness", allow_reuse=True)(
36
- validate_unit_factory("m")
36
+ validate_quantity_unit_factory("m")
37
37
  )
38
38
 
39
39
 
@@ -65,8 +65,12 @@ class GypsumSheathingBoardV1(BaseOpenEpdHierarchicalSpec):
65
65
  moisture_resistant: bool | None = pyd.Field(default=None, description="", example=True)
66
66
  abuse_resistant: bool | None = pyd.Field(default=None, description="", example=True)
67
67
 
68
- _gypsum_thickness_is_quantity_validator = pyd.validator("thickness", allow_reuse=True)(validate_unit_factory("m"))
69
- _gypsum_r_factor_is_quantity_validator = pyd.validator("r_factor", allow_reuse=True)(validate_unit_factory("RSI"))
68
+ _gypsum_thickness_is_quantity_validator = pyd.validator("thickness", allow_reuse=True)(
69
+ validate_quantity_unit_factory("m")
70
+ )
71
+ _gypsum_r_factor_is_quantity_validator = pyd.validator("r_factor", allow_reuse=True)(
72
+ validate_quantity_unit_factory("RSI")
73
+ )
70
74
 
71
75
 
72
76
  class SheathingV1(BaseOpenEpdHierarchicalSpec):
@@ -13,13 +13,15 @@
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
19
  from openepd.model.base import BaseOpenEpdSchema
18
- from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec, BaseOpenEpdSpec
20
+ from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec, BaseOpenEpdSpec, CodegenSpec
19
21
  from openepd.model.specs.generated.enums import SteelComposition, SteelRebarGrade
20
22
  from openepd.model.standard import Standard
21
23
  from openepd.model.validation.numbers import RatioFloat
22
- from openepd.model.validation.quantity import LengthMmStr, PressureMPaStr, validate_unit_factory
24
+ from openepd.model.validation.quantity import LengthMmStr, PressureMPaStr, validate_quantity_unit_factory
23
25
 
24
26
 
25
27
  class SteelMakingRoute(BaseOpenEpdSchema):
@@ -185,10 +187,10 @@ class StructuralSteelV1(BaseOpenEpdHierarchicalSpec):
185
187
  )
186
188
 
187
189
  _steel_thermal_expansion_is_quantity_validator = pyd.validator("thermal_expansion", allow_reuse=True)(
188
- validate_unit_factory("1 / K")
190
+ validate_quantity_unit_factory("1 / K")
189
191
  )
190
192
  _steel_thermal_conductivity_is_quantity_validator = pyd.validator("thermal_conductivity", allow_reuse=True)(
191
- validate_unit_factory("W / (m * K)")
193
+ validate_quantity_unit_factory("W / (m * K)")
192
194
  )
193
195
 
194
196
  # Nested specs:
@@ -252,6 +254,7 @@ class SteelV1(BaseOpenEpdHierarchicalSpec):
252
254
  default=None, description="Increase in length at break, in percent. Typically 10%-20%", example=0.2
253
255
  )
254
256
  recycled_content: RatioFloat | None = pyd.Field(default=None, description="", example=0.5, ge=0, le=1)
257
+ # todo look how to pass validation down to range fields
255
258
  post_consumer_recycled_content: RatioFloat | None = pyd.Field(
256
259
  default=None,
257
260
  description="Should be a number between zero and the Recycled Content (steel_recycled_content)",
@@ -271,7 +274,9 @@ class SteelV1(BaseOpenEpdHierarchicalSpec):
271
274
  cold_finished: bool | None = pyd.Field(default=None, example=True)
272
275
  galvanized: bool | None = pyd.Field(default=None, example=True)
273
276
  stainless: bool | None = pyd.Field(default=None, example=True)
274
- making_route: SteelMakingRoute | None = pyd.Field(default=None)
277
+ making_route: Annotated[SteelMakingRoute | None, CodegenSpec(override_type=SteelMakingRoute)] = pyd.Field(
278
+ default=None
279
+ )
275
280
  astm_standards: list[Standard] | None = pyd.Field(default=None, description="List of ASTM standards")
276
281
  sae_standards: list[Standard] | None = pyd.Field(default=None, description="List of SAE standards")
277
282
  en_standards: list[Standard] | None = pyd.Field(default=None, description="List of EN standards")
@@ -0,0 +1,101 @@
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
+ __all__ = ("SpecsRange",)
17
+
18
+ # NB! This is a generated code. Do not edit it manually. Please see src/openepd/model/specs/README.md
19
+
20
+
21
+ from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
22
+
23
+ from .accessories import AccessoriesRangeV1
24
+ from .aggregates import AggregatesRangeV1
25
+ from .aluminium import AluminiumRangeV1
26
+ from .asphalt import AsphaltRangeV1
27
+ from .bulk_materials import BulkMaterialsRangeV1
28
+ from .cast_decks_and_underlayment import CastDecksAndUnderlaymentRangeV1
29
+ from .cladding import CladdingRangeV1
30
+ from .cmu import CMURangeV1
31
+ from .concrete import ConcreteRangeV1
32
+ from .conveying_equipment import ConveyingEquipmentRangeV1
33
+ from .electrical import ElectricalRangeV1
34
+ from .electrical_transmission_and_distribution_equipment import ElectricalTransmissionAndDistributionEquipmentRangeV1
35
+ from .electricity import ElectricityRangeV1
36
+ from .finishes import FinishesRangeV1
37
+ from .fire_and_smoke_protection import FireAndSmokeProtectionRangeV1
38
+ from .furnishings import FurnishingsRangeV1
39
+ from .grouting import GroutingRangeV1
40
+ from .manufacturing_inputs import ManufacturingInputsRangeV1
41
+ from .masonry import MasonryRangeV1
42
+ from .material_handling import MaterialHandlingRangeV1
43
+ from .mechanical import MechanicalRangeV1
44
+ from .mechanical_insulation import MechanicalInsulationRangeV1
45
+ from .network_infrastructure import NetworkInfrastructureRangeV1
46
+ from .openings import OpeningsRangeV1
47
+ from .other_electrical_equipment import OtherElectricalEquipmentRangeV1
48
+ from .other_materials import OtherMaterialsRangeV1
49
+ from .plumbing import PlumbingRangeV1
50
+ from .precast_concrete import PrecastConcreteRangeV1
51
+ from .sheathing import SheathingRangeV1
52
+ from .steel import SteelRangeV1
53
+ from .thermal_moisture_protection import ThermalMoistureProtectionRangeV1
54
+ from .utility_piping import UtilityPipingRangeV1
55
+ from .wood import WoodRangeV1
56
+ from .wood_joists import WoodJoistsRangeV1
57
+
58
+
59
+ class SpecsRange(BaseOpenEpdHierarchicalSpec):
60
+ """
61
+ Material specific specs.
62
+
63
+ Range version.
64
+ """
65
+
66
+ _EXT_VERSION = "1.0"
67
+
68
+ CMU: CMURangeV1 | None = None
69
+ Masonry: MasonryRangeV1 | None = None
70
+ Steel: SteelRangeV1 | None = None
71
+ NetworkInfrastructure: NetworkInfrastructureRangeV1 | None = None
72
+ Finishes: FinishesRangeV1 | None = None
73
+ ManufacturingInputs: ManufacturingInputsRangeV1 | None = None
74
+ Accessories: AccessoriesRangeV1 | None = None
75
+ ElectricalTransmissionAndDistributionEquipment: ElectricalTransmissionAndDistributionEquipmentRangeV1 | None = None
76
+ Aggregates: AggregatesRangeV1 | None = None
77
+ ThermalMoistureProtection: ThermalMoistureProtectionRangeV1 | None = None
78
+ Mechanical: MechanicalRangeV1 | None = None
79
+ Aluminium: AluminiumRangeV1 | None = None
80
+ Cladding: CladdingRangeV1 | None = None
81
+ FireAndSmokeProtection: FireAndSmokeProtectionRangeV1 | None = None
82
+ PrecastConcrete: PrecastConcreteRangeV1 | None = None
83
+ Asphalt: AsphaltRangeV1 | None = None
84
+ OtherMaterials: OtherMaterialsRangeV1 | None = None
85
+ Plumbing: PlumbingRangeV1 | None = None
86
+ Electrical: ElectricalRangeV1 | None = None
87
+ UtilityPiping: UtilityPipingRangeV1 | None = None
88
+ BulkMaterials: BulkMaterialsRangeV1 | None = None
89
+ CastDecksAndUnderlayment: CastDecksAndUnderlaymentRangeV1 | None = None
90
+ Concrete: ConcreteRangeV1 | None = None
91
+ Sheathing: SheathingRangeV1 | None = None
92
+ Furnishings: FurnishingsRangeV1 | None = None
93
+ Wood: WoodRangeV1 | None = None
94
+ ConveyingEquipment: ConveyingEquipmentRangeV1 | None = None
95
+ MaterialHandling: MaterialHandlingRangeV1 | None = None
96
+ Openings: OpeningsRangeV1 | None = None
97
+ Electricity: ElectricityRangeV1 | None = None
98
+ Grouting: GroutingRangeV1 | None = None
99
+ MechanicalInsulation: MechanicalInsulationRangeV1 | None = None
100
+ OtherElectricalEquipment: OtherElectricalEquipmentRangeV1 | None = None
101
+ WoodJoists: WoodJoistsRangeV1 | None = None
@@ -0,0 +1,97 @@
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
+ __all__ = (
17
+ "BlanketFacingRangeV1",
18
+ "DoorsHardwareRangeV1",
19
+ "FlooringAccessoriesRangeV1",
20
+ "MortarRangeV1",
21
+ "TileGroutRangeV1",
22
+ "AccessoriesRangeV1",
23
+ )
24
+
25
+ # NB! This is a generated code. Do not edit it manually. Please see src/openepd/model/specs/README.md
26
+
27
+
28
+ from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
29
+
30
+
31
+ class BlanketFacingRangeV1(BaseOpenEpdHierarchicalSpec):
32
+ """
33
+ Facing materials for insulation products.
34
+
35
+ Such as kraft, white vinyl sheeting, or aluminum foil, which can serve as air barrier, vapor barrier, radiant
36
+ barrier, or flame resistive layer.
37
+
38
+ Range version.
39
+ """
40
+
41
+ _EXT_VERSION = "1.0"
42
+
43
+
44
+ class DoorsHardwareRangeV1(BaseOpenEpdHierarchicalSpec):
45
+ """
46
+ Door hardware, including automatic and security door hardware.
47
+
48
+ Range version.
49
+ """
50
+
51
+ _EXT_VERSION = "1.0"
52
+
53
+
54
+ class FlooringAccessoriesRangeV1(BaseOpenEpdHierarchicalSpec):
55
+ """
56
+ Products used in flooring, other than the actual flooring product itself.
57
+
58
+ Range version.
59
+ """
60
+
61
+ _EXT_VERSION = "1.0"
62
+
63
+
64
+ class MortarRangeV1(BaseOpenEpdHierarchicalSpec):
65
+ """
66
+ Cementitious paste used to bind building blocks such as stones, bricks, and concrete masonry.
67
+
68
+ Range version.
69
+ """
70
+
71
+ _EXT_VERSION = "1.0"
72
+
73
+
74
+ class TileGroutRangeV1(BaseOpenEpdHierarchicalSpec):
75
+ """
76
+ Water-cement-sand mixture for laying ceramic tile.
77
+
78
+ Range version.
79
+ """
80
+
81
+ _EXT_VERSION = "1.0"
82
+
83
+
84
+ class AccessoriesRangeV1(BaseOpenEpdHierarchicalSpec):
85
+ """
86
+ Materials that are used alongside other materials.
87
+
88
+ Range version.
89
+ """
90
+
91
+ _EXT_VERSION = "1.0"
92
+
93
+ BlanketFacing: BlanketFacingRangeV1 | None = None
94
+ DoorsHardware: DoorsHardwareRangeV1 | None = None
95
+ FlooringAccessories: FlooringAccessoriesRangeV1 | None = None
96
+ Mortar: MortarRangeV1 | None = None
97
+ TileGrout: TileGroutRangeV1 | None = None
@@ -0,0 +1,57 @@
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
+ __all__ = ("AggregatesRangeV1",)
17
+
18
+ # NB! This is a generated code. Do not edit it manually. Please see src/openepd/model/specs/README.md
19
+
20
+
21
+ from openepd.compat.pydantic import pyd
22
+ from openepd.model.common import RangeRatioFloat
23
+ from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
24
+ from openepd.model.specs.generated.aggregates import AggregateApplication
25
+ from openepd.model.specs.generated.enums import AggregateGradation, AggregateWeightClassification
26
+ from openepd.model.validation.quantity import AmountRangeLengthMm
27
+
28
+
29
+ class AggregatesRangeV1(BaseOpenEpdHierarchicalSpec):
30
+ """
31
+ Construction Aggregates.
32
+
33
+ Includes sand, gravel, crushed stone, etc. for use as bases, ballasts, or as a component in concrete or asphalt.
34
+
35
+ Range version.
36
+ """
37
+
38
+ _EXT_VERSION = "1.0"
39
+
40
+ recycled_content: RangeRatioFloat | None = pyd.Field(
41
+ default=None, description="Percent of total mass that is recycled aggregate"
42
+ )
43
+ nominal_max_size: AmountRangeLengthMm | None = pyd.Field(
44
+ default=None,
45
+ description="Nominal maximum aggregate size is defined as one sieve size smaller than the maximum aggregate size. The maximum aggregate size is defined as the smallest sieve size that requires 100% passing.",
46
+ )
47
+ weight_classification: list[AggregateWeightClassification] | None = pyd.Field(default=None)
48
+ gradation: list[AggregateGradation] | None = pyd.Field(default=None)
49
+ manufactured: bool | None = pyd.Field(
50
+ default=None,
51
+ description="Aggregate produced via expansion or sintering at high temperatures of the following materials: clay, shale, slate, perlite, vermiculite, or slag. Typically used to produce lightweight aggregate",
52
+ )
53
+ slag: bool | None = pyd.Field(
54
+ default=None,
55
+ description="Pelletized, foamed, and granulated blast furnace slag can be used as construction aggregate.",
56
+ )
57
+ application: AggregateApplication | None = None
@@ -0,0 +1,92 @@
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
+ __all__ = (
17
+ "AluminiumBilletsRangeV1",
18
+ "AluminiumExtrusionsRangeV1",
19
+ "AluminiumSheetGoodsRangeV1",
20
+ "AluminiumSuspensionAssemblyRangeV1",
21
+ "AluminiumRangeV1",
22
+ )
23
+
24
+ # NB! This is a generated code. Do not edit it manually. Please see src/openepd/model/specs/README.md
25
+
26
+
27
+ from openepd.compat.pydantic import pyd
28
+ from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
29
+ from openepd.model.specs.generated.enums import AluminiumAlloy
30
+
31
+
32
+ class AluminiumBilletsRangeV1(BaseOpenEpdHierarchicalSpec):
33
+ """
34
+ Cast Aluminium ingots or billets for use in manufacturing more finished products.
35
+
36
+ Range version.
37
+ """
38
+
39
+ _EXT_VERSION = "1.0"
40
+
41
+
42
+ class AluminiumExtrusionsRangeV1(BaseOpenEpdHierarchicalSpec):
43
+ """
44
+ Extruded aluminum products used in construction.
45
+
46
+ Includes range of finish options including mill finish, painted, and anodized.
47
+
48
+
49
+ Range version.
50
+ """
51
+
52
+ _EXT_VERSION = "1.0"
53
+
54
+ thermally_improved: bool | None = pyd.Field(default=None, description="")
55
+
56
+
57
+ class AluminiumSheetGoodsRangeV1(BaseOpenEpdHierarchicalSpec):
58
+ """
59
+ Rolled and/or Stamped Aluminium coil or sheets, often used in flashing, trim, panels, and deck.
60
+
61
+ Range version.
62
+ """
63
+
64
+ _EXT_VERSION = "1.0"
65
+
66
+
67
+ class AluminiumSuspensionAssemblyRangeV1(BaseOpenEpdHierarchicalSpec):
68
+ """
69
+ Aluminum suspension assemblies for acoustical ceiling systems.
70
+
71
+ Range version.
72
+ """
73
+
74
+ _EXT_VERSION = "1.0"
75
+
76
+
77
+ class AluminiumRangeV1(BaseOpenEpdHierarchicalSpec):
78
+ """
79
+ Broad category for construction materials made primarily from Aluminium and its alloys.
80
+
81
+ Range version.
82
+ """
83
+
84
+ _EXT_VERSION = "1.0"
85
+
86
+ alloy: list[AluminiumAlloy] | None = pyd.Field(default=None, description="")
87
+ anodized: bool | None = pyd.Field(default=None, description="")
88
+ painted: bool | None = pyd.Field(default=None, description="")
89
+ AluminiumBillets: AluminiumBilletsRangeV1 | None = None
90
+ AluminiumExtrusions: AluminiumExtrusionsRangeV1 | None = None
91
+ AluminiumSheetGoods: AluminiumSheetGoodsRangeV1 | None = None
92
+ AluminiumSuspensionAssembly: AluminiumSuspensionAssemblyRangeV1 | None = None