openepd 6.10.0__tar.gz → 6.12.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 (144) hide show
  1. {openepd-6.10.0 → openepd-6.12.0}/PKG-INFO +1 -1
  2. {openepd-6.10.0 → openepd-6.12.0}/pyproject.toml +1 -1
  3. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/__version__.py +1 -1
  4. openepd-6.12.0/src/openepd/model/specs/range/furnishings.py +255 -0
  5. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/steel.py +18 -6
  6. openepd-6.12.0/src/openepd/model/specs/singular/furnishings.py +198 -0
  7. openepd-6.10.0/src/openepd/model/specs/range/furnishings.py +0 -137
  8. openepd-6.10.0/src/openepd/model/specs/singular/furnishings.py +0 -89
  9. {openepd-6.10.0 → openepd-6.12.0}/LICENSE +0 -0
  10. {openepd-6.10.0 → openepd-6.12.0}/README.md +0 -0
  11. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/__init__.py +0 -0
  12. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/api/__init__.py +0 -0
  13. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/api/average_dataset/__init__.py +0 -0
  14. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/api/average_dataset/generic_estimate_sync_api.py +0 -0
  15. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/api/average_dataset/industry_epd_sync_api.py +0 -0
  16. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/api/base_sync_client.py +0 -0
  17. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/api/category/__init__.py +0 -0
  18. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/api/category/dto.py +0 -0
  19. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/api/category/sync_api.py +0 -0
  20. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/api/common.py +0 -0
  21. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/api/dto/__init__.py +0 -0
  22. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/api/dto/base.py +0 -0
  23. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/api/dto/common.py +0 -0
  24. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/api/dto/meta.py +0 -0
  25. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/api/dto/mf.py +0 -0
  26. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/api/dto/params.py +0 -0
  27. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/api/epd/__init__.py +0 -0
  28. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/api/epd/dto.py +0 -0
  29. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/api/epd/sync_api.py +0 -0
  30. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/api/errors.py +0 -0
  31. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/api/pcr/__init__.py +0 -0
  32. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/api/pcr/sync_api.py +0 -0
  33. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/api/sync_client.py +0 -0
  34. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/api/test/__init__.py +0 -0
  35. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/api/utils.py +0 -0
  36. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/bundle/__init__.py +0 -0
  37. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/bundle/base.py +0 -0
  38. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/bundle/model.py +0 -0
  39. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/bundle/reader.py +0 -0
  40. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/bundle/writer.py +0 -0
  41. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/compat/__init__.py +0 -0
  42. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/compat/compat_functional_validators.py +0 -0
  43. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/compat/pydantic.py +0 -0
  44. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/__init__.py +0 -0
  45. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/base.py +0 -0
  46. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/category.py +0 -0
  47. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/common.py +0 -0
  48. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/declaration.py +0 -0
  49. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/epd.py +0 -0
  50. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/factory.py +0 -0
  51. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/generic_estimate.py +0 -0
  52. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/geography.py +0 -0
  53. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/industry_epd.py +0 -0
  54. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/lcia.py +0 -0
  55. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/org.py +0 -0
  56. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/pcr.py +0 -0
  57. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/README.md +0 -0
  58. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/__init__.py +0 -0
  59. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/asphalt.py +0 -0
  60. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/base.py +0 -0
  61. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/concrete.py +0 -0
  62. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/enums.py +0 -0
  63. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/__init__.py +0 -0
  64. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/accessories.py +0 -0
  65. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/aggregates.py +0 -0
  66. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/aluminium.py +0 -0
  67. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/asphalt.py +0 -0
  68. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/bulk_materials.py +0 -0
  69. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/cast_decks_and_underlayment.py +0 -0
  70. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/cladding.py +0 -0
  71. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/cmu.py +0 -0
  72. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/concrete.py +0 -0
  73. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/conveying_equipment.py +0 -0
  74. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/electrical.py +0 -0
  75. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/electrical_transmission_and_distribution_equipment.py +0 -0
  76. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/electricity.py +0 -0
  77. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/finishes.py +0 -0
  78. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/fire_and_smoke_protection.py +0 -0
  79. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/grouting.py +0 -0
  80. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/manufacturing_inputs.py +0 -0
  81. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/masonry.py +0 -0
  82. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/material_handling.py +0 -0
  83. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/mechanical.py +0 -0
  84. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/mechanical_insulation.py +0 -0
  85. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/network_infrastructure.py +0 -0
  86. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/openings.py +0 -0
  87. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/other_electrical_equipment.py +0 -0
  88. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/other_materials.py +0 -0
  89. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/plumbing.py +0 -0
  90. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/precast_concrete.py +0 -0
  91. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/sheathing.py +0 -0
  92. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/thermal_moisture_protection.py +0 -0
  93. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/utility_piping.py +0 -0
  94. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/wood.py +0 -0
  95. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/range/wood_joists.py +0 -0
  96. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/__init__.py +0 -0
  97. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/accessories.py +0 -0
  98. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/aggregates.py +0 -0
  99. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/aluminium.py +0 -0
  100. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/asphalt.py +0 -0
  101. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/bulk_materials.py +0 -0
  102. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/cast_decks_and_underlayment.py +0 -0
  103. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/cladding.py +0 -0
  104. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/cmu.py +0 -0
  105. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/common.py +0 -0
  106. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/concrete.py +0 -0
  107. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/conveying_equipment.py +0 -0
  108. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/deprecated/__init__.py +0 -0
  109. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/deprecated/concrete.py +0 -0
  110. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/deprecated/steel.py +0 -0
  111. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/electrical.py +0 -0
  112. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/electrical_transmission_and_distribution_equipment.py +0 -0
  113. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/electricity.py +0 -0
  114. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/finishes.py +0 -0
  115. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/fire_and_smoke_protection.py +0 -0
  116. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/grouting.py +0 -0
  117. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/manufacturing_inputs.py +0 -0
  118. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/masonry.py +0 -0
  119. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/material_handling.py +0 -0
  120. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/mechanical.py +0 -0
  121. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/mechanical_insulation.py +0 -0
  122. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/mixins/__init__.py +0 -0
  123. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/mixins/conduit_mixin.py +0 -0
  124. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/network_infrastructure.py +0 -0
  125. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/openings.py +0 -0
  126. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/other_electrical_equipment.py +0 -0
  127. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/other_materials.py +0 -0
  128. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/plumbing.py +0 -0
  129. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/precast_concrete.py +0 -0
  130. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/sheathing.py +0 -0
  131. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/steel.py +0 -0
  132. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/thermal_moisture_protection.py +0 -0
  133. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/utility_piping.py +0 -0
  134. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/wood.py +0 -0
  135. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/specs/singular/wood_joists.py +0 -0
  136. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/standard.py +0 -0
  137. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/validation/__init__.py +0 -0
  138. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/validation/common.py +0 -0
  139. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/validation/enum.py +0 -0
  140. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/validation/numbers.py +0 -0
  141. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/validation/quantity.py +0 -0
  142. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/model/versioning.py +0 -0
  143. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/patch_pydantic.py +0 -0
  144. {openepd-6.10.0 → openepd-6.12.0}/src/openepd/py.typed +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: openepd
3
- Version: 6.10.0
3
+ Version: 6.12.0
4
4
  Summary: Python library to work with OpenEPD format
5
5
  Home-page: https://github.com/cchangelabs/openepd
6
6
  License: Apache-2.0
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "openepd"
3
- version = "6.10.0"
3
+ version = "6.12.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.10.0"
16
+ VERSION = "6.12.0"
@@ -0,0 +1,255 @@
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
+ __all__ = (
17
+ "DemountablePartitionTrackRangeV1",
18
+ "ChairsRangeV1",
19
+ "CountertopsRangeV1",
20
+ "DemountablePartitionsRangeV1",
21
+ "OtherFurnishingsRangeV1",
22
+ "OpenStorageRangeV1",
23
+ "ClosedStorageRangeV1",
24
+ "RetractableStorageRangeV1",
25
+ "MobileStorageRangeV1",
26
+ "WallMountedShelvingRangeV1",
27
+ "OtherStorageFurnitureRangeV1",
28
+ "StorageFurnitureRangeV1",
29
+ "TablesRangeV1",
30
+ "WorkSurfacesRangeV1",
31
+ "WorkspacesRangeV1",
32
+ "FurnishingsRangeV1",
33
+ )
34
+
35
+ # NB! This is a generated code. Do not edit it manually. Please see src/openepd/model/specs/README.md
36
+
37
+
38
+ from openepd.compat.pydantic import pyd
39
+ from openepd.model.common import RangeInt, RangeRatioFloat
40
+ from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
41
+ from openepd.model.specs.enums import CountertopMaterial
42
+ from openepd.model.validation.quantity import AmountRangeAreaM2, AmountRangeLengthMm, AmountRangeVolume
43
+
44
+
45
+ class DemountablePartitionTrackRangeV1(BaseOpenEpdHierarchicalSpec):
46
+ """
47
+ Track for modular partitions.
48
+
49
+ Range version.
50
+ """
51
+
52
+ _EXT_VERSION = "1.0"
53
+
54
+
55
+ class ChairsRangeV1(BaseOpenEpdHierarchicalSpec):
56
+ """
57
+ Chairs.
58
+
59
+ Range version.
60
+ """
61
+
62
+ _EXT_VERSION = "1.0"
63
+
64
+
65
+ class CountertopsRangeV1(BaseOpenEpdHierarchicalSpec):
66
+ """
67
+ Raised, flat, and horizontal surfaces often used in kitchens, bathrooms, and workrooms.
68
+
69
+ Range version.
70
+ """
71
+
72
+ _EXT_VERSION = "1.0"
73
+
74
+ thickness: AmountRangeLengthMm | None = pyd.Field(default=None, description="")
75
+ countertop_material: list[CountertopMaterial] | None = pyd.Field(default=None, description="")
76
+
77
+
78
+ class DemountablePartitionsRangeV1(BaseOpenEpdHierarchicalSpec):
79
+ """
80
+ Demountable partitions.
81
+
82
+ Range version.
83
+ """
84
+
85
+ _EXT_VERSION = "1.0"
86
+
87
+ DemountablePartitionTrack: DemountablePartitionTrackRangeV1 | None = None
88
+
89
+
90
+ class OtherFurnishingsRangeV1(BaseOpenEpdHierarchicalSpec):
91
+ """
92
+ Other furnishings.
93
+
94
+ Range version.
95
+ """
96
+
97
+ _EXT_VERSION = "1.0"
98
+
99
+
100
+ class OpenStorageRangeV1(BaseOpenEpdHierarchicalSpec):
101
+ """
102
+ Open Storage.
103
+
104
+ Open Storage furniture which is static and has no moving parts.
105
+
106
+ Range version.
107
+ """
108
+
109
+ _EXT_VERSION = "1.0"
110
+
111
+
112
+ class ClosedStorageRangeV1(BaseOpenEpdHierarchicalSpec):
113
+ """
114
+ Closed Storage.
115
+
116
+ Closed storage furniture making use of doors, sliding and/or hinged parts.
117
+
118
+ Range version.
119
+ """
120
+
121
+ _EXT_VERSION = "1.0"
122
+
123
+
124
+ class RetractableStorageRangeV1(BaseOpenEpdHierarchicalSpec):
125
+ """
126
+ Retractable Storage.
127
+
128
+ Storage Furniture with retractable (drawer) elements.
129
+
130
+ Range version.
131
+ """
132
+
133
+ _EXT_VERSION = "1.0"
134
+
135
+
136
+ class MobileStorageRangeV1(BaseOpenEpdHierarchicalSpec):
137
+ """
138
+ Mobile Storage.
139
+
140
+ Mobile storage furniture having wheels or casters for movement.
141
+
142
+ Range version.
143
+ """
144
+
145
+ _EXT_VERSION = "1.0"
146
+
147
+
148
+ class WallMountedShelvingRangeV1(BaseOpenEpdHierarchicalSpec):
149
+ """
150
+ Wall Mounted Shelving.
151
+
152
+ Storage furniture which requires usage of a vertical structure for attachment and functional support.
153
+
154
+ Range version.
155
+ """
156
+
157
+ _EXT_VERSION = "1.0"
158
+
159
+
160
+ class OtherStorageFurnitureRangeV1(BaseOpenEpdHierarchicalSpec):
161
+ """
162
+ Other Storage Furniture.
163
+
164
+ Range version.
165
+ """
166
+
167
+ _EXT_VERSION = "1.0"
168
+
169
+
170
+ class StorageFurnitureRangeV1(BaseOpenEpdHierarchicalSpec):
171
+ """
172
+ Storage Furniture.
173
+
174
+ Range version.
175
+ """
176
+
177
+ _EXT_VERSION = "1.1"
178
+
179
+ OpenStorage: OpenStorageRangeV1 | None = None
180
+ ClosedStorage: ClosedStorageRangeV1 | None = None
181
+ RetractableStorage: RetractableStorageRangeV1 | None = None
182
+ MobileStorage: MobileStorageRangeV1 | None = None
183
+ WallMountedShelving: WallMountedShelvingRangeV1 | None = None
184
+ OtherStorageFurniture: OtherStorageFurnitureRangeV1 | None = None
185
+
186
+
187
+ class TablesRangeV1(BaseOpenEpdHierarchicalSpec):
188
+ """
189
+ Tables.
190
+
191
+ Range version.
192
+ """
193
+
194
+ _EXT_VERSION = "1.0"
195
+
196
+
197
+ class WorkSurfacesRangeV1(BaseOpenEpdHierarchicalSpec):
198
+ """
199
+ Work surfaces.
200
+
201
+ Range version.
202
+ """
203
+
204
+ _EXT_VERSION = "1.0"
205
+
206
+
207
+ class WorkspacesRangeV1(BaseOpenEpdHierarchicalSpec):
208
+ """
209
+ Workspaces.
210
+
211
+ Office furniture and furniture systems for performing office work, such as cubicle systems.
212
+ Typically includes component(s) that may fit in other categories.
213
+
214
+ Range version.
215
+ """
216
+
217
+ _EXT_VERSION = "1.0"
218
+
219
+
220
+ class FurnishingsRangeV1(BaseOpenEpdHierarchicalSpec):
221
+ """
222
+ Home and office furnishings.
223
+
224
+ Range version.
225
+ """
226
+
227
+ _EXT_VERSION = "1.1"
228
+
229
+ functional_floor_area_m2: AmountRangeAreaM2 | None = pyd.Field(
230
+ default=None, title="Functional Floor Area", description="The floor area that the product occupies."
231
+ )
232
+ work_surface_area_m2: AmountRangeAreaM2 | None = pyd.Field(
233
+ default=None, title="Work Surface Area", description="The usable work surface area that the product provides."
234
+ )
235
+ functional_storage_volume_m3: AmountRangeVolume | None = pyd.Field(
236
+ default=None, title="Functional Storage Volume", description=""
237
+ )
238
+ functional_seating_capacity: RangeInt | None = pyd.Field(
239
+ default=1,
240
+ title="Functional Seating Capacity",
241
+ description="Intended number of individuals the product seats. This value is used in calculating impact per functional unit.",
242
+ )
243
+ installation_waste_factor: RangeRatioFloat | None = pyd.Field(
244
+ default=0.01,
245
+ title="Installation Waste Factor",
246
+ description="Typical increase in impacts to account for installation waste.",
247
+ )
248
+ Chairs: ChairsRangeV1 | None = None
249
+ Countertops: CountertopsRangeV1 | None = None
250
+ DemountablePartitions: DemountablePartitionsRangeV1 | None = None
251
+ OtherFurnishings: OtherFurnishingsRangeV1 | None = None
252
+ StorageFurniture: StorageFurnitureRangeV1 | None = None
253
+ Tables: TablesRangeV1 | None = None
254
+ WorkSurfaces: WorkSurfacesRangeV1 | None = None
255
+ Workspaces: WorkspacesRangeV1 | None = None
@@ -227,10 +227,12 @@ class StructuralSteelRangeV1(BaseOpenEpdHierarchicalSpec):
227
227
  _EXT_VERSION = "1.0"
228
228
 
229
229
  modulus_of_elasticity: AmountRangePressureMpa | None = pyd.Field(
230
- default=None, description="Modulus of Elasticity, https://en.wikipedia.org/wiki/Elastic_modulus "
230
+ default=None,
231
+ description="Modulus of Elasticity, https://en.wikipedia.org/wiki/Elastic_modulus ",
231
232
  )
232
233
  thermal_expansion: AmountRangeThermalExpansion | None = pyd.Field(
233
- default=None, description="Thermal Expansion, https://en.wikipedia.org/wiki/Thermal_expansion"
234
+ default=None,
235
+ description="Thermal Expansion, https://en.wikipedia.org/wiki/Thermal_expansion",
234
236
  )
235
237
  thermal_conductivity: AmountRangeThermalConductivity | None = pyd.Field(
236
238
  default=None,
@@ -280,7 +282,8 @@ class RebarSteelRangeV1(BaseOpenEpdHierarchicalSpec):
280
282
  diameter_min: AmountRangeLengthMm | None = pyd.Field(default=None, description="Minimal diameter")
281
283
  bending_pin_max: RangeFloat | None = pyd.Field(default=None)
282
284
  ts_ys_ratio_max: RangeFloat | None = pyd.Field(
283
- default=None, description="Max ratio of ultimate tensile to yield tensile strength"
285
+ default=None,
286
+ description="Max ratio of ultimate tensile to yield tensile strength",
284
287
  )
285
288
  epoxy_coated: bool | None = pyd.Field(default=None)
286
289
 
@@ -297,6 +300,12 @@ class WireMeshSteelRangeV1(BaseOpenEpdHierarchicalSpec):
297
300
  fabricated: bool | None = None
298
301
 
299
302
 
303
+ class OtherSteelRangeV1(BaseOpenEpdHierarchicalSpec):
304
+ """Steel products that do not fit into a defined subcategory."""
305
+
306
+ _EXT_VERSION = "1.0"
307
+
308
+
300
309
  class SteelRangeV1(BaseOpenEpdHierarchicalSpec):
301
310
  """
302
311
  Broad category for construction materials made from steel and its alloys.
@@ -304,18 +313,20 @@ class SteelRangeV1(BaseOpenEpdHierarchicalSpec):
304
313
  Range version.
305
314
  """
306
315
 
307
- _EXT_VERSION = "1.0"
316
+ _EXT_VERSION = "1.1"
308
317
 
309
318
  yield_tensile_str: AmountRangePressureMpa | None = pyd.Field(
310
319
  default=None,
311
320
  description="Yield Tensile strength (Mpa) per unit area. Yield strength is the point at which a material begins to permanently deform or change shape due to applied stress.",
312
321
  )
313
322
  bar_elongation: RangeFloat | None = pyd.Field(
314
- default=None, description="Increase in length at break, in percent. Typically 10%-20%"
323
+ default=None,
324
+ description="Increase in length at break, in percent. Typically 10%-20%",
315
325
  )
316
326
  recycled_content: RangeRatioFloat | None = pyd.Field(default=None, description="")
317
327
  post_consumer_recycled_content: RangeRatioFloat | None = pyd.Field(
318
- default=None, description="Should be a number between zero and the Recycled Content (steel_recycled_content)"
328
+ default=None,
329
+ description="Should be a number between zero and the Recycled Content (steel_recycled_content)",
319
330
  )
320
331
  astm_marking: str | None = pyd.Field(default=None, description="The marking to be expected on the product.")
321
332
  euro_marking: str | None = pyd.Field(default=None, description="The marking to be expected on the product.")
@@ -335,3 +346,4 @@ class SteelRangeV1(BaseOpenEpdHierarchicalSpec):
335
346
  PostTensioningSteel: PostTensioningSteelRangeV1 | None = None
336
347
  RebarSteel: RebarSteelRangeV1 | None = None
337
348
  WireMeshSteel: WireMeshSteelRangeV1 | None = None
349
+ OtherSteel: OtherSteelRangeV1 | None = None
@@ -0,0 +1,198 @@
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 BaseOpenEpdHierarchicalSpec
18
+ from openepd.model.specs.enums import CountertopMaterial
19
+ from openepd.model.validation.numbers import RatioFloat
20
+ from openepd.model.validation.quantity import AreaM2Str, LengthMmStr, VolumeStr
21
+
22
+
23
+ class DemountablePartitionTrackV1(BaseOpenEpdHierarchicalSpec):
24
+ """Track for modular partitions."""
25
+
26
+ _EXT_VERSION = "1.0"
27
+
28
+
29
+ class ChairsV1(BaseOpenEpdHierarchicalSpec):
30
+ """Chairs."""
31
+
32
+ _EXT_VERSION = "1.0"
33
+
34
+
35
+ class CountertopsV1(BaseOpenEpdHierarchicalSpec):
36
+ """Raised, flat, and horizontal surfaces often used in kitchens, bathrooms, and workrooms."""
37
+
38
+ _EXT_VERSION = "1.0"
39
+
40
+ # Own fields:
41
+ thickness: LengthMmStr | None = pyd.Field(default=None, description="", example="30 mm")
42
+ countertop_material: CountertopMaterial | None = pyd.Field(default=None, description="", example="Stone")
43
+
44
+
45
+ class DemountablePartitionsV1(BaseOpenEpdHierarchicalSpec):
46
+ """Demountable partitions."""
47
+
48
+ _EXT_VERSION = "1.0"
49
+
50
+ # Nested specs:
51
+ DemountablePartitionTrack: DemountablePartitionTrackV1 | None = None
52
+
53
+
54
+ class OtherFurnishingsV1(BaseOpenEpdHierarchicalSpec):
55
+ """Other furnishings."""
56
+
57
+ _EXT_VERSION = "1.0"
58
+
59
+
60
+ class OpenStorageV1(BaseOpenEpdHierarchicalSpec):
61
+ """
62
+ Open Storage.
63
+
64
+ Open Storage furniture which is static and has no moving parts.
65
+ """
66
+
67
+ _EXT_VERSION = "1.0"
68
+
69
+
70
+ class ClosedStorageV1(BaseOpenEpdHierarchicalSpec):
71
+ """
72
+ Closed Storage.
73
+
74
+ Closed storage furniture making use of doors, sliding and/or hinged parts.
75
+ """
76
+
77
+ _EXT_VERSION = "1.0"
78
+
79
+
80
+ class RetractableStorageV1(BaseOpenEpdHierarchicalSpec):
81
+ """
82
+ Retractable Storage.
83
+
84
+ Storage Furniture with retractable (drawer) elements.
85
+ """
86
+
87
+ _EXT_VERSION = "1.0"
88
+
89
+
90
+ class MobileStorageV1(BaseOpenEpdHierarchicalSpec):
91
+ """
92
+ Mobile Storage.
93
+
94
+ Mobile storage furniture having wheels or casters for movement.
95
+ """
96
+
97
+ _EXT_VERSION = "1.0"
98
+
99
+
100
+ class WallMountedShelvingV1(BaseOpenEpdHierarchicalSpec):
101
+ """
102
+ Wall Mounted Shelving.
103
+
104
+ Storage furniture which requires usage of a vertical structure for attachment and functional support.
105
+ """
106
+
107
+ _EXT_VERSION = "1.0"
108
+
109
+
110
+ class OtherStorageFurnitureV1(BaseOpenEpdHierarchicalSpec):
111
+ """Other Storage Furniture."""
112
+
113
+ _EXT_VERSION = "1.0"
114
+
115
+
116
+ class StorageFurnitureV1(BaseOpenEpdHierarchicalSpec):
117
+ """Storage Furniture."""
118
+
119
+ _EXT_VERSION = "1.1"
120
+
121
+ # Nested specs:
122
+ OpenStorage: OpenStorageV1 | None = None
123
+ ClosedStorage: ClosedStorageV1 | None = None
124
+ RetractableStorage: RetractableStorageV1 | None = None
125
+ MobileStorage: MobileStorageV1 | None = None
126
+ WallMountedShelving: WallMountedShelvingV1 | None = None
127
+ OtherStorageFurniture: OtherStorageFurnitureV1 | None = None
128
+
129
+
130
+ class TablesV1(BaseOpenEpdHierarchicalSpec):
131
+ """Tables."""
132
+
133
+ _EXT_VERSION = "1.0"
134
+
135
+
136
+ class WorkSurfacesV1(BaseOpenEpdHierarchicalSpec):
137
+ """Work surfaces."""
138
+
139
+ _EXT_VERSION = "1.0"
140
+
141
+
142
+ class WorkspacesV1(BaseOpenEpdHierarchicalSpec):
143
+ """
144
+ Workspaces.
145
+
146
+ Office furniture and furniture systems for performing office work, such as cubicle systems.
147
+ Typically includes component(s) that may fit in other categories.
148
+ """
149
+
150
+ _EXT_VERSION = "1.0"
151
+
152
+
153
+ class FurnishingsV1(BaseOpenEpdHierarchicalSpec):
154
+ """Home and office furnishings."""
155
+
156
+ _EXT_VERSION = "1.1"
157
+
158
+ # Own fields:
159
+ functional_floor_area_m2: AreaM2Str | None = pyd.Field(
160
+ default=None,
161
+ title="Functional Floor Area",
162
+ description="The floor area that the product occupies.",
163
+ example="1 m2",
164
+ )
165
+ work_surface_area_m2: AreaM2Str | None = pyd.Field(
166
+ default=None,
167
+ title="Work Surface Area",
168
+ description="The usable work surface area that the product provides.",
169
+ example="1 m2",
170
+ )
171
+ functional_storage_volume_m3: VolumeStr | None = pyd.Field(
172
+ default=None,
173
+ title="Functional Storage Volume",
174
+ description="",
175
+ example="1 m3",
176
+ )
177
+ functional_seating_capacity: pyd.NonNegativeInt | None = pyd.Field(
178
+ default=1,
179
+ title="Functional Seating Capacity",
180
+ description="Intended number of individuals the product seats. This value is used in calculating impact per functional unit.",
181
+ example=1,
182
+ )
183
+ installation_waste_factor: RatioFloat | None = pyd.Field(
184
+ default=0.01,
185
+ title="Installation Waste Factor",
186
+ description="Typical increase in impacts to account for installation waste.",
187
+ example=0.01,
188
+ )
189
+
190
+ # Nested specs:
191
+ Chairs: ChairsV1 | None = None
192
+ Countertops: CountertopsV1 | None = None
193
+ DemountablePartitions: DemountablePartitionsV1 | None = None
194
+ OtherFurnishings: OtherFurnishingsV1 | None = None
195
+ StorageFurniture: StorageFurnitureV1 | None = None
196
+ Tables: TablesV1 | None = None
197
+ WorkSurfaces: WorkSurfacesV1 | None = None
198
+ Workspaces: WorkspacesV1 | None = None
@@ -1,137 +0,0 @@
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
- __all__ = (
17
- "DemountablePartitionTrackRangeV1",
18
- "ChairsRangeV1",
19
- "CountertopsRangeV1",
20
- "DemountablePartitionsRangeV1",
21
- "OtherFurnishingsRangeV1",
22
- "StorageFurnitureRangeV1",
23
- "TablesRangeV1",
24
- "WorkSurfacesRangeV1",
25
- "FurnishingsRangeV1",
26
- )
27
-
28
- # NB! This is a generated code. Do not edit it manually. Please see src/openepd/model/specs/README.md
29
-
30
-
31
- from openepd.compat.pydantic import pyd
32
- from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
33
- from openepd.model.specs.enums import CountertopMaterial
34
- from openepd.model.validation.quantity import AmountRangeLengthMm
35
-
36
-
37
- class DemountablePartitionTrackRangeV1(BaseOpenEpdHierarchicalSpec):
38
- """
39
- Track for modular partitions.
40
-
41
- Range version.
42
- """
43
-
44
- _EXT_VERSION = "1.0"
45
-
46
-
47
- class ChairsRangeV1(BaseOpenEpdHierarchicalSpec):
48
- """
49
- Chairs.
50
-
51
- Range version.
52
- """
53
-
54
- _EXT_VERSION = "1.0"
55
-
56
-
57
- class CountertopsRangeV1(BaseOpenEpdHierarchicalSpec):
58
- """
59
- Raised, flat, and horizontal surfaces often used in kitchens, bathrooms, and workrooms.
60
-
61
- Range version.
62
- """
63
-
64
- _EXT_VERSION = "1.0"
65
-
66
- thickness: AmountRangeLengthMm | None = pyd.Field(default=None, description="")
67
- countertop_material: list[CountertopMaterial] | None = pyd.Field(default=None, description="")
68
-
69
-
70
- class DemountablePartitionsRangeV1(BaseOpenEpdHierarchicalSpec):
71
- """
72
- Demountable partitions.
73
-
74
- Range version.
75
- """
76
-
77
- _EXT_VERSION = "1.0"
78
-
79
- DemountablePartitionTrack: DemountablePartitionTrackRangeV1 | None = None
80
-
81
-
82
- class OtherFurnishingsRangeV1(BaseOpenEpdHierarchicalSpec):
83
- """
84
- Other furnishings.
85
-
86
- Range version.
87
- """
88
-
89
- _EXT_VERSION = "1.0"
90
-
91
-
92
- class StorageFurnitureRangeV1(BaseOpenEpdHierarchicalSpec):
93
- """
94
- Storage Furniture.
95
-
96
- Range version.
97
- """
98
-
99
- _EXT_VERSION = "1.0"
100
-
101
-
102
- class TablesRangeV1(BaseOpenEpdHierarchicalSpec):
103
- """
104
- Tables.
105
-
106
- Range version.
107
- """
108
-
109
- _EXT_VERSION = "1.0"
110
-
111
-
112
- class WorkSurfacesRangeV1(BaseOpenEpdHierarchicalSpec):
113
- """
114
- Work surfaces.
115
-
116
- Range version.
117
- """
118
-
119
- _EXT_VERSION = "1.0"
120
-
121
-
122
- class FurnishingsRangeV1(BaseOpenEpdHierarchicalSpec):
123
- """
124
- Home and office furnishings.
125
-
126
- Range version.
127
- """
128
-
129
- _EXT_VERSION = "1.0"
130
-
131
- Chairs: ChairsRangeV1 | None = None
132
- Countertops: CountertopsRangeV1 | None = None
133
- DemountablePartitions: DemountablePartitionsRangeV1 | None = None
134
- OtherFurnishings: OtherFurnishingsRangeV1 | None = None
135
- StorageFurniture: StorageFurnitureRangeV1 | None = None
136
- Tables: TablesRangeV1 | None = None
137
- WorkSurfaces: WorkSurfacesRangeV1 | None = None