openepd 6.17.0__tar.gz → 6.18.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.
Files changed (150) hide show
  1. {openepd-6.17.0 → openepd-6.18.0}/PKG-INFO +1 -1
  2. {openepd-6.17.0 → openepd-6.18.0}/pyproject.toml +1 -1
  3. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/__version__.py +1 -1
  4. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/__init__.py +2 -2
  5. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/exterior_improvements.py +3 -3
  6. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/finishes.py +2 -23
  7. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/manufacturing_inputs.py +13 -1
  8. openepd-6.18.0/src/openepd/model/specs/range/mixins/access_flooring_mixin.py +42 -0
  9. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/finishes.py +2 -31
  10. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/manufacturing_inputs.py +13 -1
  11. openepd-6.18.0/src/openepd/model/specs/singular/mixins/access_flooring_mixin.py +49 -0
  12. openepd-6.18.0/src/openepd/model/validation/__init__.py +15 -0
  13. {openepd-6.17.0 → openepd-6.18.0}/LICENSE +0 -0
  14. {openepd-6.17.0 → openepd-6.18.0}/README.md +0 -0
  15. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/__init__.py +0 -0
  16. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/api/__init__.py +0 -0
  17. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/api/average_dataset/__init__.py +0 -0
  18. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/api/average_dataset/generic_estimate_sync_api.py +0 -0
  19. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/api/average_dataset/industry_epd_sync_api.py +0 -0
  20. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/api/base_sync_client.py +0 -0
  21. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/api/category/__init__.py +0 -0
  22. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/api/category/dto.py +0 -0
  23. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/api/category/sync_api.py +0 -0
  24. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/api/common.py +0 -0
  25. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/api/dto/__init__.py +0 -0
  26. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/api/dto/base.py +0 -0
  27. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/api/dto/common.py +0 -0
  28. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/api/dto/meta.py +0 -0
  29. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/api/dto/mf.py +0 -0
  30. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/api/dto/params.py +0 -0
  31. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/api/epd/__init__.py +0 -0
  32. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/api/epd/dto.py +0 -0
  33. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/api/epd/sync_api.py +0 -0
  34. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/api/errors.py +0 -0
  35. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/api/pcr/__init__.py +0 -0
  36. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/api/pcr/sync_api.py +0 -0
  37. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/api/sync_client.py +0 -0
  38. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/api/test/__init__.py +0 -0
  39. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/api/utils.py +0 -0
  40. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/bundle/__init__.py +0 -0
  41. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/bundle/base.py +0 -0
  42. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/bundle/model.py +0 -0
  43. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/bundle/reader.py +0 -0
  44. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/bundle/writer.py +0 -0
  45. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/compat/__init__.py +0 -0
  46. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/compat/compat_functional_validators.py +0 -0
  47. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/compat/pydantic.py +0 -0
  48. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/m49/__init__.py +0 -0
  49. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/m49/const.py +0 -0
  50. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/m49/utils.py +0 -0
  51. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/__init__.py +0 -0
  52. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/base.py +0 -0
  53. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/category.py +0 -0
  54. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/common.py +0 -0
  55. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/declaration.py +0 -0
  56. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/epd.py +0 -0
  57. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/factory.py +0 -0
  58. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/generic_estimate.py +0 -0
  59. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/geography.py +0 -0
  60. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/industry_epd.py +0 -0
  61. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/lcia.py +0 -0
  62. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/org.py +0 -0
  63. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/pcr.py +0 -0
  64. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/README.md +0 -0
  65. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/__init__.py +0 -0
  66. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/asphalt.py +0 -0
  67. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/base.py +0 -0
  68. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/concrete.py +0 -0
  69. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/enums.py +0 -0
  70. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/accessories.py +0 -0
  71. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/aggregates.py +0 -0
  72. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/aluminium.py +0 -0
  73. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/asphalt.py +0 -0
  74. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/bulk_materials.py +0 -0
  75. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/cast_decks_and_underlayment.py +0 -0
  76. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/cladding.py +0 -0
  77. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/cmu.py +0 -0
  78. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/concrete.py +0 -0
  79. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/conveying_equipment.py +0 -0
  80. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/electrical.py +0 -0
  81. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/electrical_transmission_and_distribution_equipment.py +0 -0
  82. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/electricity.py +0 -0
  83. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/fire_and_smoke_protection.py +0 -0
  84. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/furnishings.py +0 -0
  85. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/grouting.py +0 -0
  86. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/masonry.py +0 -0
  87. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/material_handling.py +0 -0
  88. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/mechanical.py +0 -0
  89. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/mechanical_insulation.py +0 -0
  90. {openepd-6.17.0/src/openepd/model/specs/singular → openepd-6.18.0/src/openepd/model/specs/range}/mixins/__init__.py +0 -0
  91. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/network_infrastructure.py +0 -0
  92. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/openings.py +0 -0
  93. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/other_electrical_equipment.py +0 -0
  94. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/other_materials.py +0 -0
  95. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/plumbing.py +0 -0
  96. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/precast_concrete.py +0 -0
  97. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/sheathing.py +0 -0
  98. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/steel.py +0 -0
  99. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/thermal_moisture_protection.py +0 -0
  100. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/utility_piping.py +0 -0
  101. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/wood.py +0 -0
  102. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/range/wood_joists.py +0 -0
  103. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/__init__.py +0 -0
  104. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/accessories.py +0 -0
  105. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/aggregates.py +0 -0
  106. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/aluminium.py +0 -0
  107. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/asphalt.py +0 -0
  108. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/bulk_materials.py +0 -0
  109. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/cast_decks_and_underlayment.py +0 -0
  110. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/cladding.py +0 -0
  111. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/cmu.py +0 -0
  112. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/common.py +0 -0
  113. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/concrete.py +0 -0
  114. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/conveying_equipment.py +0 -0
  115. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/deprecated/__init__.py +0 -0
  116. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/deprecated/concrete.py +0 -0
  117. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/deprecated/steel.py +0 -0
  118. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/electrical.py +0 -0
  119. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/electrical_transmission_and_distribution_equipment.py +0 -0
  120. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/electricity.py +0 -0
  121. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/exterior_improvements.py +0 -0
  122. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/fire_and_smoke_protection.py +0 -0
  123. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/furnishings.py +0 -0
  124. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/grouting.py +0 -0
  125. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/masonry.py +0 -0
  126. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/material_handling.py +0 -0
  127. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/mechanical.py +0 -0
  128. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/mechanical_insulation.py +0 -0
  129. {openepd-6.17.0/src/openepd/model/validation → openepd-6.18.0/src/openepd/model/specs/singular/mixins}/__init__.py +0 -0
  130. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/mixins/conduit_mixin.py +0 -0
  131. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/network_infrastructure.py +0 -0
  132. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/openings.py +0 -0
  133. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/other_electrical_equipment.py +0 -0
  134. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/other_materials.py +0 -0
  135. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/plumbing.py +0 -0
  136. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/precast_concrete.py +0 -0
  137. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/sheathing.py +0 -0
  138. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/steel.py +0 -0
  139. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/thermal_moisture_protection.py +0 -0
  140. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/utility_piping.py +0 -0
  141. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/wood.py +0 -0
  142. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/specs/singular/wood_joists.py +0 -0
  143. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/standard.py +0 -0
  144. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/validation/common.py +0 -0
  145. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/validation/enum.py +0 -0
  146. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/validation/numbers.py +0 -0
  147. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/validation/quantity.py +0 -0
  148. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/model/versioning.py +0 -0
  149. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/patch_pydantic.py +0 -0
  150. {openepd-6.17.0 → openepd-6.18.0}/src/openepd/py.typed +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: openepd
3
- Version: 6.17.0
3
+ Version: 6.18.0
4
4
  Summary: Python library to work with OpenEPD format
5
5
  License: Apache-2.0
6
6
  Author: C-Change Labs
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "openepd"
3
- version = "6.17.0"
3
+ version = "6.18.0"
4
4
  license = "Apache-2.0"
5
5
  description = "Python library to work with OpenEPD format"
6
6
  authors = ["C-Change Labs <support@c-change-labs.com>"]
@@ -13,4 +13,4 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
  #
16
- VERSION = "6.17.0"
16
+ VERSION = "6.18.0"
@@ -33,7 +33,7 @@ from .conveying_equipment import ConveyingEquipmentRangeV1
33
33
  from .electrical import ElectricalRangeV1
34
34
  from .electrical_transmission_and_distribution_equipment import ElectricalTransmissionAndDistributionEquipmentRangeV1
35
35
  from .electricity import ElectricityRangeV1
36
- from .exterior_improvements import ExteriorImprovementsV1
36
+ from .exterior_improvements import ExteriorImprovementsRangeV1
37
37
  from .finishes import FinishesRangeV1
38
38
  from .fire_and_smoke_protection import FireAndSmokeProtectionRangeV1
39
39
  from .furnishings import FurnishingsRangeV1
@@ -100,4 +100,4 @@ class SpecsRange(BaseOpenEpdHierarchicalSpec):
100
100
  MechanicalInsulation: MechanicalInsulationRangeV1 | None = None
101
101
  OtherElectricalEquipment: OtherElectricalEquipmentRangeV1 | None = None
102
102
  WoodJoists: WoodJoistsRangeV1 | None = None
103
- ExteriorImprovements: ExteriorImprovementsV1 | None = None
103
+ ExteriorImprovements: ExteriorImprovementsRangeV1 | None = None
@@ -18,7 +18,7 @@ from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
18
18
  from openepd.model.validation.quantity import AmountRangePressureMpa
19
19
 
20
20
 
21
- class ConcretePaversV1(BaseOpenEpdHierarchicalSpec):
21
+ class ConcretePaversRangeV1(BaseOpenEpdHierarchicalSpec):
22
22
  """
23
23
  Segmental units of concrete of standardized sizes and shapes for use in paving applications.
24
24
 
@@ -38,9 +38,9 @@ class ConcretePaversV1(BaseOpenEpdHierarchicalSpec):
38
38
  white_cement: bool | None = pyd.Field(default=None, description="CMU using some portion of white cement")
39
39
 
40
40
 
41
- class ExteriorImprovementsV1(BaseOpenEpdHierarchicalSpec):
41
+ class ExteriorImprovementsRangeV1(BaseOpenEpdHierarchicalSpec):
42
42
  """Products that alter the exterior appearance of a lot or its structures."""
43
43
 
44
44
  _EXT_VERSION = "1.0"
45
45
 
46
- ConcretePavers: ConcretePaversV1 | None = None
46
+ ConcretePavers: ConcretePaversRangeV1 | None = None
@@ -50,10 +50,6 @@ from openepd.model.common import RangeAmount, RangeFloat, RangeInt, RangeRatioFl
50
50
  from openepd.model.org import OrgRef
51
51
  from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
52
52
  from openepd.model.specs.enums import (
53
- AccessFlooringCoreMaterial,
54
- AccessFlooringFinishMaterial,
55
- AccessFlooringSeismicRating,
56
- AccessFlooringStringers,
57
53
  AllFabrication,
58
54
  CarpetFormFactor,
59
55
  CarpetIntendedApplication,
@@ -76,17 +72,16 @@ from openepd.model.specs.enums import (
76
72
  WoodFlooringFabrication,
77
73
  WoodFlooringTimberSpecies,
78
74
  )
75
+ from openepd.model.specs.range.mixins.access_flooring_mixin import AccessFlooringRangeMixin
79
76
  from openepd.model.validation.quantity import (
80
- AmountRangeForce,
81
77
  AmountRangeGWP,
82
78
  AmountRangeLengthMm,
83
- AmountRangePressureMpa,
84
79
  AmountRangeRFactor,
85
80
  AmountRangeYarnWeight,
86
81
  )
87
82
 
88
83
 
89
- class AccessFlooringRangeV1(BaseOpenEpdHierarchicalSpec):
84
+ class AccessFlooringRangeV1(BaseOpenEpdHierarchicalSpec, AccessFlooringRangeMixin):
90
85
  """
91
86
  Elevated floor system built on top of concrete slab surface.
92
87
 
@@ -98,22 +93,6 @@ class AccessFlooringRangeV1(BaseOpenEpdHierarchicalSpec):
98
93
 
99
94
  _EXT_VERSION = "1.0"
100
95
 
101
- core_material: list[AccessFlooringCoreMaterial] | None = pyd.Field(default=None, description="")
102
- finish_material: list[AccessFlooringFinishMaterial] | None = pyd.Field(default=None, description="")
103
- stringers: list[AccessFlooringStringers] | None = pyd.Field(default=None, description="")
104
- seismic_rating: list[AccessFlooringSeismicRating] | None = pyd.Field(default=None, description="")
105
- magnetically_attached_finish: bool | None = pyd.Field(default=None, description="")
106
- permanent_finish: bool | None = pyd.Field(default=None, description="")
107
- drylay: bool | None = pyd.Field(default=None, description="")
108
- adjustable_height: bool | None = pyd.Field(default=None, description="")
109
- fixed_height: bool | None = pyd.Field(default=None, description="")
110
- finished_floor_height: AmountRangeLengthMm | None = pyd.Field(default=None, description="")
111
- panel_thickness: AmountRangeLengthMm | None = pyd.Field(default=None, description="")
112
- concentrated_load: AmountRangePressureMpa | None = pyd.Field(default=None, description="")
113
- uniform_load: AmountRangePressureMpa | None = pyd.Field(default=None, description="")
114
- rolling_load_10_pass: AmountRangeForce | None = pyd.Field(default=None, description="")
115
- rolling_load_10000_pass: AmountRangeForce | None = pyd.Field(default=None, description="")
116
-
117
96
 
118
97
  class CarpetRangeV1(BaseOpenEpdHierarchicalSpec):
119
98
  """
@@ -44,6 +44,7 @@ from openepd.model.specs.enums import (
44
44
  MasonryCementAstmC91Type,
45
45
  TextilesFabricType,
46
46
  )
47
+ from openepd.model.specs.range.mixins.access_flooring_mixin import AccessFlooringRangeMixin
47
48
 
48
49
 
49
50
  class CementRangeV1(BaseOpenEpdHierarchicalSpec):
@@ -170,6 +171,16 @@ class TextilesRangeV1(BaseOpenEpdHierarchicalSpec):
170
171
  fabric_type: list[TextilesFabricType] | None = pyd.Field(default=None, description="")
171
172
 
172
173
 
174
+ class AccessFlooringPanelsRangeV1(BaseOpenEpdHierarchicalSpec, AccessFlooringRangeMixin):
175
+ """
176
+ Part of an access floor system.
177
+
178
+ Panels are laid on top of an access floor pedestal, creating a finish floor.
179
+ """
180
+
181
+ _EXT_VERSION = "1.0"
182
+
183
+
173
184
  class ManufacturingInputsRangeV1(BaseOpenEpdHierarchicalSpec):
174
185
  """
175
186
  Manufacturing inputs.
@@ -180,7 +191,7 @@ class ManufacturingInputsRangeV1(BaseOpenEpdHierarchicalSpec):
180
191
  Range version.
181
192
  """
182
193
 
183
- _EXT_VERSION = "1.0"
194
+ _EXT_VERSION = "1.1"
184
195
 
185
196
  AccessFlooringPedestals: AccessFlooringPedestalsRangeV1 | None = None
186
197
  CarpetBacking: CarpetBackingRangeV1 | None = None
@@ -188,3 +199,4 @@ class ManufacturingInputsRangeV1(BaseOpenEpdHierarchicalSpec):
188
199
  CementitiousMaterials: CementitiousMaterialsRangeV1 | None = None
189
200
  ConcreteAdmixtures: ConcreteAdmixturesRangeV1 | None = None
190
201
  Textiles: TextilesRangeV1 | None = None
202
+ AccessFlooringPanels: AccessFlooringPanelsRangeV1 | None = None
@@ -0,0 +1,42 @@
1
+ #
2
+ # Copyright 2025 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
+ from openepd.compat.pydantic import pyd
17
+ from openepd.model.specs.base import BaseOpenEpdSpec
18
+ from openepd.model.specs.enums import (
19
+ AccessFlooringCoreMaterial,
20
+ AccessFlooringFinishMaterial,
21
+ AccessFlooringSeismicRating,
22
+ AccessFlooringStringers,
23
+ )
24
+ from openepd.model.validation.quantity import AmountRangeForce, AmountRangeLengthMm, AmountRangePressureMpa
25
+
26
+
27
+ class AccessFlooringRangeMixin(BaseOpenEpdSpec):
28
+ core_material: list[AccessFlooringCoreMaterial] | None = pyd.Field(default=None, description="")
29
+ finish_material: list[AccessFlooringFinishMaterial] | None = pyd.Field(default=None, description="")
30
+ stringers: list[AccessFlooringStringers] | None = pyd.Field(default=None, description="")
31
+ seismic_rating: list[AccessFlooringSeismicRating] | None = pyd.Field(default=None, description="")
32
+ magnetically_attached_finish: bool | None = pyd.Field(default=None, description="")
33
+ permanent_finish: bool | None = pyd.Field(default=None, description="")
34
+ drylay: bool | None = pyd.Field(default=None, description="")
35
+ adjustable_height: bool | None = pyd.Field(default=None, description="")
36
+ fixed_height: bool | None = pyd.Field(default=None, description="")
37
+ finished_floor_height: AmountRangeLengthMm | None = pyd.Field(default=None, description="")
38
+ panel_thickness: AmountRangeLengthMm | None = pyd.Field(default=None, description="")
39
+ concentrated_load: AmountRangePressureMpa | None = pyd.Field(default=None, description="")
40
+ uniform_load: AmountRangePressureMpa | None = pyd.Field(default=None, description="")
41
+ rolling_load_10_pass: AmountRangeForce | None = pyd.Field(default=None, description="")
42
+ rolling_load_10000_pass: AmountRangeForce | None = pyd.Field(default=None, description="")
@@ -16,10 +16,6 @@
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 (
19
- AccessFlooringCoreMaterial,
20
- AccessFlooringFinishMaterial,
21
- AccessFlooringSeismicRating,
22
- AccessFlooringStringers,
23
19
  AllFabrication,
24
20
  CarpetFormFactor,
25
21
  CarpetIntendedApplication,
@@ -43,14 +39,13 @@ from openepd.model.specs.enums import (
43
39
  WoodFlooringTimberSpecies,
44
40
  )
45
41
  from openepd.model.specs.singular.common import HasForestPracticesCertifiers
42
+ from openepd.model.specs.singular.mixins.access_flooring_mixin import AccessFlooringMixin
46
43
  from openepd.model.validation.numbers import RatioFloat
47
44
  from openepd.model.validation.quantity import (
48
45
  AreaPerVolumeStr,
49
- ForceNStr,
50
46
  GwpKgCo2eStr,
51
47
  LengthMmStr,
52
48
  LengthMStr,
53
- PressureMPaStr,
54
49
  RFactorStr,
55
50
  YarnWeightStr,
56
51
  validate_quantity_ge_factory,
@@ -59,7 +54,7 @@ from openepd.model.validation.quantity import (
59
54
  )
60
55
 
61
56
 
62
- class AccessFlooringV1(BaseOpenEpdHierarchicalSpec):
57
+ class AccessFlooringV1(BaseOpenEpdHierarchicalSpec, AccessFlooringMixin):
63
58
  """
64
59
  Elevated floor system built on top of concrete slab surface.
65
60
 
@@ -69,30 +64,6 @@ class AccessFlooringV1(BaseOpenEpdHierarchicalSpec):
69
64
 
70
65
  _EXT_VERSION = "1.0"
71
66
 
72
- # Own fields:
73
- core_material: AccessFlooringCoreMaterial | None = pyd.Field(default=None, description="", example="Cementitious")
74
- finish_material: AccessFlooringFinishMaterial | None = pyd.Field(default=None, description="", example="Linoleum")
75
- stringers: AccessFlooringStringers | None = pyd.Field(default=None, description="", example="Standard")
76
- seismic_rating: AccessFlooringSeismicRating | None = pyd.Field(default=None, description="", example="Type 0")
77
- magnetically_attached_finish: bool | None = pyd.Field(default=None, description="", example=True)
78
- permanent_finish: bool | None = pyd.Field(default=None, description="", example=True)
79
- drylay: bool | None = pyd.Field(default=None, description="", example=True)
80
- adjustable_height: bool | None = pyd.Field(default=None, description="", example=True)
81
- fixed_height: bool | None = pyd.Field(default=None, description="", example=True)
82
- finished_floor_height: LengthMmStr | None = pyd.Field(default=None, description="", example="1 m")
83
- panel_thickness: LengthMmStr | None = pyd.Field(default=None, description="", example="1 m")
84
- concentrated_load: PressureMPaStr | None = pyd.Field(default=None, description="", example="1 MPa")
85
- uniform_load: PressureMPaStr | None = pyd.Field(default=None, description="", example="1 MPa")
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")
88
-
89
- _access_flooring_rolling_load_10_pass_is_quantity_validator = pyd.validator(
90
- "rolling_load_10_pass", allow_reuse=True
91
- )(validate_quantity_unit_factory("N"))
92
- _access_flooring_rolling_load_10000_pass_is_quantity_validator = pyd.validator(
93
- "rolling_load_10000_pass", allow_reuse=True
94
- )(validate_quantity_unit_factory("N"))
95
-
96
67
 
97
68
  class CarpetV1(BaseOpenEpdHierarchicalSpec):
98
69
  """Textile Floor Coverings."""
@@ -27,6 +27,7 @@ from openepd.model.specs.enums import (
27
27
  MasonryCementAstmC91Type,
28
28
  TextilesFabricType,
29
29
  )
30
+ from openepd.model.specs.singular.mixins.access_flooring_mixin import AccessFlooringMixin
30
31
 
31
32
 
32
33
  class CementV1(BaseOpenEpdHierarchicalSpec):
@@ -132,6 +133,16 @@ class TextilesV1(BaseOpenEpdHierarchicalSpec):
132
133
  fabric_type: list[TextilesFabricType] | None = pyd.Field(default=None, description="", example=["Leather"])
133
134
 
134
135
 
136
+ class AccessFlooringPanelsV1(BaseOpenEpdHierarchicalSpec, AccessFlooringMixin):
137
+ """
138
+ Part of an access floor system.
139
+
140
+ Panels are laid on top of an access floor pedestal, creating a finish floor.
141
+ """
142
+
143
+ _EXT_VERSION = "1.0"
144
+
145
+
135
146
  class ManufacturingInputsV1(BaseOpenEpdHierarchicalSpec):
136
147
  """
137
148
  Manufacturing inputs.
@@ -140,7 +151,7 @@ class ManufacturingInputsV1(BaseOpenEpdHierarchicalSpec):
140
151
  a construction.
141
152
  """
142
153
 
143
- _EXT_VERSION = "1.0"
154
+ _EXT_VERSION = "1.1"
144
155
 
145
156
  # Nested specs:
146
157
  AccessFlooringPedestals: AccessFlooringPedestalsV1 | None = None
@@ -149,3 +160,4 @@ class ManufacturingInputsV1(BaseOpenEpdHierarchicalSpec):
149
160
  CementitiousMaterials: CementitiousMaterialsV1 | None = None
150
161
  ConcreteAdmixtures: ConcreteAdmixturesV1 | None = None
151
162
  Textiles: TextilesV1 | None = None
163
+ AccessFlooringPanels: AccessFlooringPanelsV1 | None = None
@@ -0,0 +1,49 @@
1
+ #
2
+ # Copyright 2025 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
+ from openepd.compat.pydantic import pyd
17
+ from openepd.model.specs.base import BaseOpenEpdSpec
18
+ from openepd.model.specs.enums import (
19
+ AccessFlooringCoreMaterial,
20
+ AccessFlooringFinishMaterial,
21
+ AccessFlooringSeismicRating,
22
+ AccessFlooringStringers,
23
+ )
24
+ from openepd.model.validation.quantity import ForceNStr, LengthMmStr, PressureMPaStr, validate_quantity_unit_factory
25
+
26
+
27
+ class AccessFlooringMixin(BaseOpenEpdSpec):
28
+ core_material: AccessFlooringCoreMaterial | None = pyd.Field(default=None, description="", example="Cementitious")
29
+ finish_material: AccessFlooringFinishMaterial | None = pyd.Field(default=None, description="", example="Linoleum")
30
+ stringers: AccessFlooringStringers | None = pyd.Field(default=None, description="", example="Standard")
31
+ seismic_rating: AccessFlooringSeismicRating | None = pyd.Field(default=None, description="", example="Type 0")
32
+ magnetically_attached_finish: bool | None = pyd.Field(default=None, description="", example=True)
33
+ permanent_finish: bool | None = pyd.Field(default=None, description="", example=True)
34
+ drylay: bool | None = pyd.Field(default=None, description="", example=True)
35
+ adjustable_height: bool | None = pyd.Field(default=None, description="", example=True)
36
+ fixed_height: bool | None = pyd.Field(default=None, description="", example=True)
37
+ finished_floor_height: LengthMmStr | None = pyd.Field(default=None, description="", example="1 m")
38
+ panel_thickness: LengthMmStr | None = pyd.Field(default=None, description="", example="1 m")
39
+ concentrated_load: PressureMPaStr | None = pyd.Field(default=None, description="", example="1 MPa")
40
+ uniform_load: PressureMPaStr | None = pyd.Field(default=None, description="", example="1 MPa")
41
+ rolling_load_10_pass: ForceNStr | None = pyd.Field(default=None, description="", example="1 N")
42
+ rolling_load_10000_pass: ForceNStr | None = pyd.Field(default=None, description="", example="1 N")
43
+
44
+ _access_flooring_rolling_load_10_pass_is_quantity_validator = pyd.validator(
45
+ "rolling_load_10_pass", allow_reuse=True
46
+ )(validate_quantity_unit_factory("N"))
47
+ _access_flooring_rolling_load_10000_pass_is_quantity_validator = pyd.validator(
48
+ "rolling_load_10000_pass", allow_reuse=True
49
+ )(validate_quantity_unit_factory("N"))
@@ -0,0 +1,15 @@
1
+ #
2
+ # Copyright 2025 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
+ #
File without changes
File without changes
File without changes