openepd 6.13.2__py3-none-any.whl → 7.0.1__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 (99) hide show
  1. openepd/__init__.py +0 -6
  2. openepd/__version__.py +1 -1
  3. openepd/api/average_dataset/generic_estimate_sync_api.py +11 -10
  4. openepd/api/average_dataset/industry_epd_sync_api.py +9 -8
  5. openepd/api/base_sync_client.py +53 -9
  6. openepd/api/category/sync_api.py +1 -1
  7. openepd/api/dto/base.py +4 -4
  8. openepd/api/dto/common.py +24 -16
  9. openepd/api/dto/meta.py +15 -11
  10. openepd/api/dto/mf.py +9 -8
  11. openepd/api/epd/dto.py +43 -33
  12. openepd/api/epd/sync_api.py +9 -9
  13. openepd/api/pcr/sync_api.py +2 -2
  14. openepd/bundle/model.py +11 -10
  15. openepd/bundle/reader.py +12 -5
  16. openepd/bundle/writer.py +17 -6
  17. openepd/model/base.py +61 -44
  18. openepd/model/category.py +13 -10
  19. openepd/model/common.py +107 -59
  20. openepd/model/declaration.py +93 -64
  21. openepd/model/epd.py +51 -43
  22. openepd/model/generic_estimate.py +28 -13
  23. openepd/model/industry_epd.py +15 -9
  24. openepd/model/lcia.py +161 -136
  25. openepd/model/org.py +70 -37
  26. openepd/model/pcr.py +38 -32
  27. openepd/model/specs/asphalt.py +31 -22
  28. openepd/model/specs/base.py +14 -11
  29. openepd/model/specs/concrete.py +60 -39
  30. openepd/model/specs/range/aggregates.py +9 -9
  31. openepd/model/specs/range/aluminium.py +7 -7
  32. openepd/model/specs/range/asphalt.py +22 -19
  33. openepd/model/specs/range/cladding.py +16 -16
  34. openepd/model/specs/range/cmu.py +10 -9
  35. openepd/model/specs/range/concrete.py +36 -27
  36. openepd/model/specs/range/conveying_equipment.py +16 -15
  37. openepd/model/specs/range/electrical.py +24 -22
  38. openepd/model/specs/range/finishes.py +109 -104
  39. openepd/model/specs/range/fire_and_smoke_protection.py +7 -7
  40. openepd/model/specs/range/furnishings.py +16 -12
  41. openepd/model/specs/range/manufacturing_inputs.py +16 -16
  42. openepd/model/specs/range/masonry.py +16 -16
  43. openepd/model/specs/range/mechanical.py +47 -47
  44. openepd/model/specs/range/mechanical_insulation.py +7 -7
  45. openepd/model/specs/range/network_infrastructure.py +54 -46
  46. openepd/model/specs/range/openings.py +36 -31
  47. openepd/model/specs/range/plumbing.py +15 -13
  48. openepd/model/specs/range/precast_concrete.py +20 -16
  49. openepd/model/specs/range/sheathing.py +18 -18
  50. openepd/model/specs/range/steel.py +27 -25
  51. openepd/model/specs/range/thermal_moisture_protection.py +20 -20
  52. openepd/model/specs/range/utility_piping.py +9 -9
  53. openepd/model/specs/range/wood.py +19 -19
  54. openepd/model/specs/range/wood_joists.py +8 -8
  55. openepd/model/specs/singular/__init__.py +9 -5
  56. openepd/model/specs/singular/aggregates.py +22 -15
  57. openepd/model/specs/singular/aluminium.py +20 -5
  58. openepd/model/specs/singular/asphalt.py +44 -20
  59. openepd/model/specs/singular/cladding.py +38 -23
  60. openepd/model/specs/singular/cmu.py +26 -11
  61. openepd/model/specs/singular/common.py +3 -2
  62. openepd/model/specs/singular/concrete.py +85 -48
  63. openepd/model/specs/singular/conveying_equipment.py +30 -17
  64. openepd/model/specs/singular/deprecated/__init__.py +3 -2
  65. openepd/model/specs/singular/deprecated/concrete.py +68 -33
  66. openepd/model/specs/singular/deprecated/steel.py +28 -15
  67. openepd/model/specs/singular/electrical.py +69 -41
  68. openepd/model/specs/singular/finishes.py +250 -140
  69. openepd/model/specs/singular/fire_and_smoke_protection.py +9 -6
  70. openepd/model/specs/singular/furnishings.py +16 -14
  71. openepd/model/specs/singular/manufacturing_inputs.py +23 -14
  72. openepd/model/specs/singular/masonry.py +66 -21
  73. openepd/model/specs/singular/mechanical.py +48 -47
  74. openepd/model/specs/singular/mechanical_insulation.py +7 -6
  75. openepd/model/specs/singular/mixins/conduit_mixin.py +13 -10
  76. openepd/model/specs/singular/network_infrastructure.py +111 -52
  77. openepd/model/specs/singular/openings.py +127 -95
  78. openepd/model/specs/singular/plumbing.py +15 -12
  79. openepd/model/specs/singular/precast_concrete.py +68 -54
  80. openepd/model/specs/singular/sheathing.py +47 -27
  81. openepd/model/specs/singular/steel.py +69 -45
  82. openepd/model/specs/singular/thermal_moisture_protection.py +36 -20
  83. openepd/model/specs/singular/utility_piping.py +11 -8
  84. openepd/model/specs/singular/wood.py +48 -24
  85. openepd/model/specs/singular/wood_joists.py +19 -6
  86. openepd/model/standard.py +15 -8
  87. openepd/model/validation/common.py +9 -3
  88. openepd/model/validation/numbers.py +0 -13
  89. openepd/model/validation/quantity.py +88 -55
  90. openepd/model/versioning.py +9 -6
  91. {openepd-6.13.2.dist-info → openepd-7.0.1.dist-info}/METADATA +2 -2
  92. openepd-7.0.1.dist-info/RECORD +141 -0
  93. openepd/compat/__init__.py +0 -15
  94. openepd/compat/compat_functional_validators.py +0 -25
  95. openepd/compat/pydantic.py +0 -30
  96. openepd/patch_pydantic.py +0 -108
  97. openepd-6.13.2.dist-info/RECORD +0 -145
  98. {openepd-6.13.2.dist-info → openepd-7.0.1.dist-info}/LICENSE +0 -0
  99. {openepd-6.13.2.dist-info → openepd-7.0.1.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 openepd.compat.pydantic import pyd
16
+ import pydantic
17
+
17
18
  from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
18
19
  from openepd.model.specs.enums import CountertopMaterial
19
- from openepd.model.validation.numbers import RatioFloat
20
20
  from openepd.model.validation.quantity import AreaM2Str, LengthMmStr, VolumeStr
21
21
 
22
22
 
@@ -38,8 +38,8 @@ class CountertopsV1(BaseOpenEpdHierarchicalSpec):
38
38
  _EXT_VERSION = "1.0"
39
39
 
40
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")
41
+ thickness: LengthMmStr | None = pydantic.Field(default=None, description="", examples=["30 mm"])
42
+ countertop_material: CountertopMaterial | None = pydantic.Field(default=None, description="", examples=["Stone"])
43
43
 
44
44
 
45
45
  class DemountablePartitionsV1(BaseOpenEpdHierarchicalSpec):
@@ -156,35 +156,37 @@ class FurnishingsV1(BaseOpenEpdHierarchicalSpec):
156
156
  _EXT_VERSION = "1.1"
157
157
 
158
158
  # Own fields:
159
- functional_floor_area_m2: AreaM2Str | None = pyd.Field(
159
+ functional_floor_area_m2: AreaM2Str | None = pydantic.Field(
160
160
  default=None,
161
161
  title="Functional Floor Area",
162
162
  description="The floor area that the product occupies.",
163
- example="1 m2",
163
+ examples=["1 m2"],
164
164
  )
165
- work_surface_area_m2: AreaM2Str | None = pyd.Field(
165
+ work_surface_area_m2: AreaM2Str | None = pydantic.Field(
166
166
  default=None,
167
167
  title="Work Surface Area",
168
168
  description="The usable work surface area that the product provides.",
169
- example="1 m2",
169
+ examples=["1 m2"],
170
170
  )
171
- functional_storage_volume_m3: VolumeStr | None = pyd.Field(
171
+ functional_storage_volume_m3: VolumeStr | None = pydantic.Field(
172
172
  default=None,
173
173
  title="Functional Storage Volume",
174
174
  description="",
175
- example="1 m3",
175
+ examples=["1 m3"],
176
176
  )
177
- functional_seating_capacity: pyd.NonNegativeInt | None = pyd.Field(
177
+ functional_seating_capacity: pydantic.NonNegativeInt | None = pydantic.Field(
178
178
  default=None,
179
179
  title="Functional Seating Capacity",
180
180
  description="Intended number of individuals the product seats. This value is used in calculating impact per functional unit.",
181
- example=1,
181
+ examples=[1],
182
182
  )
183
- installation_waste_factor: RatioFloat | None = pyd.Field(
183
+ installation_waste_factor: float | None = pydantic.Field(
184
184
  default=None,
185
185
  title="Installation Waste Factor",
186
186
  description="Typical increase in impacts to account for installation waste.",
187
- example=0.01,
187
+ examples=[0.01],
188
+ ge=0,
189
+ le=1,
188
190
  )
189
191
 
190
192
  # Nested specs:
@@ -13,7 +13,8 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
  #
16
- from openepd.compat.pydantic import pyd
16
+ import pydantic
17
+
17
18
  from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
18
19
  from openepd.model.specs.concrete import Cementitious
19
20
  from openepd.model.specs.enums import (
@@ -39,13 +40,21 @@ class CementV1(BaseOpenEpdHierarchicalSpec):
39
40
  _EXT_VERSION = "1.0"
40
41
 
41
42
  # Own fields:
42
- cementitious: Cementitious | None = pyd.Field(default=None, description="")
43
- white_cement: bool | None = pyd.Field(default=None, description="", example=True)
44
- astm_type: CementAstmType | None = pyd.Field(default=None, description="", example="C150 Type I")
45
- c1157: list[CementC1157] | None = pyd.Field(default=None, description="", example=["GU"])
46
- csa_a3001: list[CementCsaA3001] | None = pyd.Field(default=None, description="", example=["A3001 GU"])
47
- en197_1: CementEn197_1 | None = pyd.Field(default=None, description="", example="CEM I")
48
- oil_well_cement: bool | None = pyd.Field(default=None, description="", example=True)
43
+ cementitious: Cementitious | None = pydantic.Field(default=None, description="")
44
+ white_cement: bool | None = pydantic.Field(
45
+ default=None,
46
+ description="",
47
+ examples=[True],
48
+ )
49
+ astm_type: CementAstmType | None = pydantic.Field(default=None, description="", examples=["C150 Type I"])
50
+ c1157: list[CementC1157] | None = pydantic.Field(default=None, description="", examples=[["GU"]])
51
+ csa_a3001: list[CementCsaA3001] | None = pydantic.Field(default=None, description="", examples=[["A3001 GU"]])
52
+ en197_1: CementEn197_1 | None = pydantic.Field(default=None, description="", examples=["CEM I"])
53
+ oil_well_cement: bool | None = pydantic.Field(
54
+ default=None,
55
+ description="",
56
+ examples=[True],
57
+ )
49
58
 
50
59
 
51
60
  class MasonryCementV1(BaseOpenEpdHierarchicalSpec):
@@ -58,7 +67,7 @@ class MasonryCementV1(BaseOpenEpdHierarchicalSpec):
58
67
  _EXT_VERSION = "1.0"
59
68
 
60
69
  # Own fields:
61
- astm_c91_type: MasonryCementAstmC91Type | None = pyd.Field(default=None, description="", example="Type N")
70
+ astm_c91_type: MasonryCementAstmC91Type | None = pydantic.Field(default=None, description="", examples=["Type N"])
62
71
 
63
72
 
64
73
  class SupplementaryCementitiousMaterialsV1(BaseOpenEpdHierarchicalSpec):
@@ -67,7 +76,7 @@ class SupplementaryCementitiousMaterialsV1(BaseOpenEpdHierarchicalSpec):
67
76
  _EXT_VERSION = "1.0"
68
77
 
69
78
  # Own fields:
70
- cement_scm: list[CementScm] | None = pyd.Field(default=None, description="", example=["ggbs"])
79
+ cement_scm: list[CementScm] | None = pydantic.Field(default=None, description="", examples=[["ggbs"]])
71
80
 
72
81
 
73
82
  class AccessFlooringPedestalsV1(BaseOpenEpdHierarchicalSpec):
@@ -93,8 +102,8 @@ class CarpetFiberV1(BaseOpenEpdHierarchicalSpec):
93
102
  _EXT_VERSION = "1.0"
94
103
 
95
104
  # Own fields:
96
- yarn_material: CarpetYarnType | None = pyd.Field(default=None, description="", example="Nylon 6,6")
97
- yarn_recycled_content: float | None = pyd.Field(default=None, description="", example=2.3)
105
+ yarn_material: CarpetYarnType | None = pydantic.Field(default=None, description="", examples=["Nylon 6,6"])
106
+ yarn_recycled_content: float | None = pydantic.Field(default=None, description="", examples=[2.3])
98
107
 
99
108
 
100
109
  class CementitiousMaterialsV1(BaseOpenEpdHierarchicalSpec):
@@ -120,7 +129,7 @@ class ConcreteAdmixturesV1(BaseOpenEpdHierarchicalSpec):
120
129
  _EXT_VERSION = "1.0"
121
130
 
122
131
  # Own fields:
123
- effects: list[AdmixtureEffects] | None = pyd.Field(default=None, description="", example=["Air Entrainer"])
132
+ effects: list[AdmixtureEffects] | None = pydantic.Field(default=None, description="", examples=[["Air Entrainer"]])
124
133
 
125
134
 
126
135
  class TextilesV1(BaseOpenEpdHierarchicalSpec):
@@ -129,7 +138,7 @@ class TextilesV1(BaseOpenEpdHierarchicalSpec):
129
138
  _EXT_VERSION = "1.0"
130
139
 
131
140
  # Own fields:
132
- fabric_type: list[TextilesFabricType] | None = pyd.Field(default=None, description="", example=["Leather"])
141
+ fabric_type: list[TextilesFabricType] | None = pydantic.Field(default=None, description="", examples=[["Leather"]])
133
142
 
134
143
 
135
144
  class ManufacturingInputsV1(BaseOpenEpdHierarchicalSpec):
@@ -13,7 +13,8 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
  #
16
- from openepd.compat.pydantic import pyd
16
+ import pydantic
17
+
17
18
  from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
18
19
  from openepd.model.validation.quantity import (
19
20
  PressureMPaStr,
@@ -35,19 +36,23 @@ class AutoclavedAeratedConcreteV1(BaseOpenEpdHierarchicalSpec):
35
36
  _EXT_VERSION = "1.0"
36
37
 
37
38
  # Own fields:
38
- strength_28d: PressureMPaStr | None = pyd.Field(default=None, description="", example="1 MPa")
39
- thermal_conductivity: ThermalConductivityStr | None = pyd.Field(
40
- default=None, description="", example="1 W / (m * K)"
39
+ strength_28d: PressureMPaStr | None = pydantic.Field(default=None, description="", examples=["1 MPa"])
40
+ thermal_conductivity: ThermalConductivityStr | None = pydantic.Field(
41
+ default=None, description="", examples=["1 W / (m * K)"]
41
42
  )
42
- white: bool | None = pyd.Field(default=None, description="", example=True)
43
-
44
- _aac_thermal_conductivity_is_quantity_validator = pyd.validator("thermal_conductivity", allow_reuse=True)(
45
- validate_quantity_unit_factory("W / (m * K)")
43
+ white: bool | None = pydantic.Field(
44
+ default=None,
45
+ description="",
46
+ examples=[True],
46
47
  )
47
48
 
48
- _aac_thermal_conductivity_min_validator = pyd.validator("thermal_conductivity", allow_reuse=True)(
49
- validate_quantity_ge_factory("0 W / (m * K)")
50
- )
49
+ @pydantic.field_validator("thermal_conductivity")
50
+ def _aac_thermal_conductivity_is_quantity_validator(cls, value):
51
+ return validate_quantity_unit_factory("W / (m * K)")(value)
52
+
53
+ @pydantic.field_validator("thermal_conductivity")
54
+ def _aac_thermal_conductivity_min_validator(cls, value):
55
+ return validate_quantity_ge_factory("0 W / (m * K)")(value)
51
56
 
52
57
 
53
58
  class BrickV1(BaseOpenEpdHierarchicalSpec):
@@ -56,15 +61,51 @@ class BrickV1(BaseOpenEpdHierarchicalSpec):
56
61
  _EXT_VERSION = "1.0"
57
62
 
58
63
  # Own fields:
59
- building: bool | None = pyd.Field(default=None, description="", example=True)
60
- facing: bool | None = pyd.Field(default=None, description="", example=True)
61
- floor: bool | None = pyd.Field(default=None, description="", example=True)
62
- pedestrian: bool | None = pyd.Field(default=None, description="", example=True)
63
- paving: bool | None = pyd.Field(default=None, description="", example=True)
64
- other: bool | None = pyd.Field(default=None, description="", example=True)
65
- chemical_resistant: bool | None = pyd.Field(default=None, description="", example=True)
66
- glazed: bool | None = pyd.Field(default=None, description="", example=True)
67
- tiles: bool | None = pyd.Field(default=None, description="", example=True)
64
+ building: bool | None = pydantic.Field(
65
+ default=None,
66
+ description="",
67
+ examples=[True],
68
+ )
69
+ facing: bool | None = pydantic.Field(
70
+ default=None,
71
+ description="",
72
+ examples=[True],
73
+ )
74
+ floor: bool | None = pydantic.Field(
75
+ default=None,
76
+ description="",
77
+ examples=[True],
78
+ )
79
+ pedestrian: bool | None = pydantic.Field(
80
+ default=None,
81
+ description="",
82
+ examples=[True],
83
+ )
84
+ paving: bool | None = pydantic.Field(
85
+ default=None,
86
+ description="",
87
+ examples=[True],
88
+ )
89
+ other: bool | None = pydantic.Field(
90
+ default=None,
91
+ description="",
92
+ examples=[True],
93
+ )
94
+ chemical_resistant: bool | None = pydantic.Field(
95
+ default=None,
96
+ description="",
97
+ examples=[True],
98
+ )
99
+ glazed: bool | None = pydantic.Field(
100
+ default=None,
101
+ description="",
102
+ examples=[True],
103
+ )
104
+ tiles: bool | None = pydantic.Field(
105
+ default=None,
106
+ description="",
107
+ examples=[True],
108
+ )
68
109
 
69
110
 
70
111
  class MasonryV1(BaseOpenEpdHierarchicalSpec):
@@ -73,7 +114,11 @@ class MasonryV1(BaseOpenEpdHierarchicalSpec):
73
114
  _EXT_VERSION = "1.0"
74
115
 
75
116
  # Own fields:
76
- white_cement: bool | None = pyd.Field(default=None, description="", example=True)
117
+ white_cement: bool | None = pydantic.Field(
118
+ default=None,
119
+ description="",
120
+ examples=[True],
121
+ )
77
122
 
78
123
  # Nested specs:
79
124
  GMU: GMUV1 | None = None
@@ -13,7 +13,8 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
  #
16
- from openepd.compat.pydantic import pyd
16
+ import pydantic
17
+
17
18
  from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
18
19
  from openepd.model.specs.enums import (
19
20
  AhuAirflowControl,
@@ -45,11 +46,11 @@ class HvacVrfIndoorV1(BaseOpenEpdHierarchicalSpec):
45
46
  _EXT_VERSION = "1.0"
46
47
 
47
48
  # Own fields:
48
- refrigerants: list[MechanicalRefrigerants] | None = pyd.Field(default=None, description="", example=["R11"])
49
- heating_capacity: PowerStr | None = pyd.Field(default=None, description="", example="1000.0 W")
50
- cooling_capacity: PowerStr | None = pyd.Field(default=None, description="", example="1000.0 W")
51
- airflow_rate: AirflowStr | None = pyd.Field(default=None, description="", example="1 m3 / s")
52
- air_volume: VolumeStr | None = pyd.Field(default=None, description="", example="1 m3")
49
+ refrigerants: list[MechanicalRefrigerants] | None = pydantic.Field(default=None, description="", examples=[["R11"]])
50
+ heating_capacity: PowerStr | None = pydantic.Field(default=None, description="", examples=["1000.0 W"])
51
+ cooling_capacity: PowerStr | None = pydantic.Field(default=None, description="", examples=["1000.0 W"])
52
+ airflow_rate: AirflowStr | None = pydantic.Field(default=None, description="", examples=["1 m3 / s"])
53
+ air_volume: VolumeStr | None = pydantic.Field(default=None, description="", examples=["1 m3"])
53
54
 
54
55
 
55
56
  class HvacVrfOutdoorV1(BaseOpenEpdHierarchicalSpec):
@@ -58,11 +59,11 @@ class HvacVrfOutdoorV1(BaseOpenEpdHierarchicalSpec):
58
59
  _EXT_VERSION = "1.0"
59
60
 
60
61
  # Own fields:
61
- refrigerants: list[MechanicalRefrigerants] | None = pyd.Field(default=None, description="", example=["R11"])
62
- heating_capacity: PowerStr | None = pyd.Field(default=None, description="", example="1000.0 W")
63
- cooling_capacity: PowerStr | None = pyd.Field(default=None, description="", example="1000.0 W")
64
- airflow_rate: AirflowStr | None = pyd.Field(default=None, description="", example="1 m3 / s")
65
- air_volume: VolumeStr | None = pyd.Field(default=None, description="", example="1 m3")
62
+ refrigerants: list[MechanicalRefrigerants] | None = pydantic.Field(default=None, description="", examples=[["R11"]])
63
+ heating_capacity: PowerStr | None = pydantic.Field(default=None, description="", examples=["1000.0 W"])
64
+ cooling_capacity: PowerStr | None = pydantic.Field(default=None, description="", examples=["1000.0 W"])
65
+ airflow_rate: AirflowStr | None = pydantic.Field(default=None, description="", examples=["1 m3 / s"])
66
+ air_volume: VolumeStr | None = pydantic.Field(default=None, description="", examples=["1 m3"])
66
67
 
67
68
 
68
69
  class HvacAirDiffusersV1(BaseOpenEpdHierarchicalSpec):
@@ -77,8 +78,8 @@ class HvacAirFiltersV1(BaseOpenEpdHierarchicalSpec):
77
78
  _EXT_VERSION = "1.0"
78
79
 
79
80
  # Own fields:
80
- merv_rating: AirFiltersMervRating | None = pyd.Field(default=None, description="", example="MERV 1")
81
- media_type: AirFiltersMediaType | None = pyd.Field(default=None, description="", example="Acrylic")
81
+ merv_rating: AirFiltersMervRating | None = pydantic.Field(default=None, description="", examples=["MERV 1"])
82
+ media_type: AirFiltersMediaType | None = pydantic.Field(default=None, description="", examples=["Acrylic"])
82
83
 
83
84
 
84
85
  class HvacAHUsV1(BaseOpenEpdHierarchicalSpec):
@@ -92,14 +93,14 @@ class HvacAHUsV1(BaseOpenEpdHierarchicalSpec):
92
93
  _EXT_VERSION = "1.0"
93
94
 
94
95
  # Own fields:
95
- refrigerants: list[MechanicalRefrigerants] | None = pyd.Field(default=None, description="", example=["R11"])
96
- installation: MechanicalInstallation | None = pyd.Field(default=None, description="", example="Indoor")
97
- airflow_rate: AirflowStr | None = pyd.Field(default=None, description="", example="1 m3 / s")
98
- air_volume: VolumeStr | None = pyd.Field(default=None, description="", example="1 m3")
99
- cooling_capacity: PowerStr | None = pyd.Field(default=None, description="", example="1000.0 W")
100
- heating_capacity: PowerStr | None = pyd.Field(default=None, description="", example="1000.0 W")
101
- airflow_control: AhuAirflowControl | None = pyd.Field(default=None, description="", example="CAV")
102
- zone_control: AhuZoneControl | None = pyd.Field(default=None, description="", example="Single Zone")
96
+ refrigerants: list[MechanicalRefrigerants] | None = pydantic.Field(default=None, description="", examples=[["R11"]])
97
+ installation: MechanicalInstallation | None = pydantic.Field(default=None, description="", examples=["Indoor"])
98
+ airflow_rate: AirflowStr | None = pydantic.Field(default=None, description="", examples=["1 m3 / s"])
99
+ air_volume: VolumeStr | None = pydantic.Field(default=None, description="", examples=["1 m3"])
100
+ cooling_capacity: PowerStr | None = pydantic.Field(default=None, description="", examples=["1000.0 W"])
101
+ heating_capacity: PowerStr | None = pydantic.Field(default=None, description="", examples=["1000.0 W"])
102
+ airflow_control: AhuAirflowControl | None = pydantic.Field(default=None, description="", examples=["CAV"])
103
+ zone_control: AhuZoneControl | None = pydantic.Field(default=None, description="", examples=["Single Zone"])
103
104
 
104
105
 
105
106
  class HvacBoilersV1(BaseOpenEpdHierarchicalSpec):
@@ -108,10 +109,10 @@ class HvacBoilersV1(BaseOpenEpdHierarchicalSpec):
108
109
  _EXT_VERSION = "1.0"
109
110
 
110
111
  # Own fields:
111
- flow_rate: FlowRateStr | None = pyd.Field(default=None, description="", example="1 l / min")
112
- heating_capacity: PowerStr | None = pyd.Field(default=None, description="", example="1000.0 W")
113
- configuration: BoilerConfiguration | None = pyd.Field(default=None, description="", example="Hot water")
114
- fuel_type: BoilerEquipmentFuelType | None = pyd.Field(default=None, description="", example="Coal")
112
+ flow_rate: FlowRateStr | None = pydantic.Field(default=None, description="", examples=["1 l / min"])
113
+ heating_capacity: PowerStr | None = pydantic.Field(default=None, description="", examples=["1000.0 W"])
114
+ configuration: BoilerConfiguration | None = pydantic.Field(default=None, description="", examples=["Hot water"])
115
+ fuel_type: BoilerEquipmentFuelType | None = pydantic.Field(default=None, description="", examples=["Coal"])
115
116
 
116
117
 
117
118
  class HvacChillersV1(BaseOpenEpdHierarchicalSpec):
@@ -125,12 +126,12 @@ class HvacChillersV1(BaseOpenEpdHierarchicalSpec):
125
126
  _EXT_VERSION = "1.0"
126
127
 
127
128
  # Own fields:
128
- refrigerants: list[MechanicalRefrigerants] | None = pyd.Field(default=None, description="", example=["R11"])
129
- installation: MechanicalInstallation | None = pyd.Field(default=None, description="", example="Indoor")
130
- heating_capacity: PowerStr | None = pyd.Field(default=None, description="", example="1000.0 W")
131
- cooling_capacity: PowerStr | None = pyd.Field(default=None, description="", example="1000.0 W")
132
- air_volume: VolumeStr | None = pyd.Field(default=None, description="", example="1 m3")
133
- airflow_rate: AirflowStr | None = pyd.Field(default=None, description="", example="1 m3 / s")
129
+ refrigerants: list[MechanicalRefrigerants] | None = pydantic.Field(default=None, description="", examples=[["R11"]])
130
+ installation: MechanicalInstallation | None = pydantic.Field(default=None, description="", examples=["Indoor"])
131
+ heating_capacity: PowerStr | None = pydantic.Field(default=None, description="", examples=["1000.0 W"])
132
+ cooling_capacity: PowerStr | None = pydantic.Field(default=None, description="", examples=["1000.0 W"])
133
+ air_volume: VolumeStr | None = pydantic.Field(default=None, description="", examples=["1 m3"])
134
+ airflow_rate: AirflowStr | None = pydantic.Field(default=None, description="", examples=["1 m3 / s"])
134
135
 
135
136
 
136
137
  class HvacFansV1(BaseOpenEpdHierarchicalSpec):
@@ -145,12 +146,12 @@ class HvacHeatPumpsV1(BaseOpenEpdHierarchicalSpec):
145
146
  _EXT_VERSION = "1.0"
146
147
 
147
148
  # Own fields:
148
- refrigerants: list[MechanicalRefrigerants] | None = pyd.Field(default=None, description="", example=["R11"])
149
- cooling_capacity: PowerStr | None = pyd.Field(default=None, description="", example="1000.0 W")
150
- heating_capacity: PowerStr | None = pyd.Field(default=None, description="", example="1000.0 W")
151
- air_volume: VolumeStr | None = pyd.Field(default=None, description="", example="1 m3")
152
- airflow_rate: AirflowStr | None = pyd.Field(default=None, description="", example="1 m3 / s")
153
- heat_pumps_type: HeatPumpType | None = pyd.Field(default=None, description="", example="Air-to-Water")
149
+ refrigerants: list[MechanicalRefrigerants] | None = pydantic.Field(default=None, description="", examples=[["R11"]])
150
+ cooling_capacity: PowerStr | None = pydantic.Field(default=None, description="", examples=["1000.0 W"])
151
+ heating_capacity: PowerStr | None = pydantic.Field(default=None, description="", examples=["1000.0 W"])
152
+ air_volume: VolumeStr | None = pydantic.Field(default=None, description="", examples=["1 m3"])
153
+ airflow_rate: AirflowStr | None = pydantic.Field(default=None, description="", examples=["1 m3 / s"])
154
+ heat_pumps_type: HeatPumpType | None = pydantic.Field(default=None, description="", examples=["Air-to-Water"])
154
155
 
155
156
 
156
157
  class HvacHeatExV1(BaseOpenEpdHierarchicalSpec):
@@ -164,9 +165,9 @@ class HvacHeatExV1(BaseOpenEpdHierarchicalSpec):
164
165
  _EXT_VERSION = "1.0"
165
166
 
166
167
  # Own fields:
167
- refrigerants: list[MechanicalRefrigerants] | None = pyd.Field(default=None, description="", example=["R11"])
168
- heat_exchangers_type: HvacHeatExchangersType | None = pyd.Field(
169
- default=None, description="", example="Shell and Tube"
168
+ refrigerants: list[MechanicalRefrigerants] | None = pydantic.Field(default=None, description="", examples=[["R11"]])
169
+ heat_exchangers_type: HvacHeatExchangersType | None = pydantic.Field(
170
+ default=None, description="", examples=["Shell and Tube"]
170
171
  )
171
172
 
172
173
 
@@ -181,9 +182,9 @@ class HvacPumpsV1(BaseOpenEpdHierarchicalSpec):
181
182
  _EXT_VERSION = "1.0"
182
183
 
183
184
  # Own fields:
184
- flow_rate: FlowRateStr | None = pyd.Field(default=None, description="", example="1 l / min")
185
- pump_discharge_pressure: PressureMPaStr | None = pyd.Field(default=None, description="", example="1 MPa")
186
- pump_horsepower: PowerStr | None = pyd.Field(default=None, description="", example="1000.0 W")
185
+ flow_rate: FlowRateStr | None = pydantic.Field(default=None, description="", examples=["1 l / min"])
186
+ pump_discharge_pressure: PressureMPaStr | None = pydantic.Field(default=None, description="", examples=["1 MPa"])
187
+ pump_horsepower: PowerStr | None = pydantic.Field(default=None, description="", examples=["1000.0 W"])
187
188
 
188
189
 
189
190
  class HvacRTUsV1(BaseOpenEpdHierarchicalSpec):
@@ -213,11 +214,11 @@ class HvacDuctsV1(BaseOpenEpdHierarchicalSpec):
213
214
 
214
215
  _EXT_VERSION = "1.0"
215
216
 
216
- shape: HvacDuctShape | None = pyd.Field(default=None, description="Hvac duct shape", example="Rectangular")
217
- material: HvacDuctMaterial | None = pyd.Field(
218
- default=None, description="Hvac duct material", example="Galvanized Steel"
217
+ shape: HvacDuctShape | None = pydantic.Field(default=None, description="Hvac duct shape", examples=["Rectangular"])
218
+ material: HvacDuctMaterial | None = pydantic.Field(
219
+ default=None, description="Hvac duct material", examples=["Galvanized Steel"]
219
220
  )
220
- type: HvacDuctType | None = pyd.Field(default=None, description="Hvac duct type", example="Flexible")
221
+ type: HvacDuctType | None = pydantic.Field(default=None, description="Hvac duct type", examples=["Flexible"])
221
222
 
222
223
 
223
224
  class MechanicalV1(BaseOpenEpdHierarchicalSpec):
@@ -13,7 +13,8 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
  #
16
- from openepd.compat.pydantic import pyd
16
+ import pydantic
17
+
17
18
  from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
18
19
  from openepd.model.specs.enums import InsulatingMaterial, InsulationIntendedApplication
19
20
  from openepd.model.validation.quantity import LengthMmStr
@@ -29,9 +30,9 @@ class MechanicalInsulationV1(BaseOpenEpdHierarchicalSpec):
29
30
  _EXT_VERSION = "1.0"
30
31
 
31
32
  # Own fields:
32
- r_value: float | None = pyd.Field(default=None, description="", example=2.3)
33
- material: InsulatingMaterial | None = pyd.Field(default=None, description="", example="Mineral Wool")
34
- intended_application: list[InsulationIntendedApplication] | None = pyd.Field(
35
- default=None, description="", example=["Wall & General"]
33
+ r_value: float | None = pydantic.Field(default=None, description="", examples=[2.3])
34
+ material: InsulatingMaterial | None = pydantic.Field(default=None, description="", examples=["Mineral Wool"])
35
+ intended_application: list[InsulationIntendedApplication] | None = pydantic.Field(
36
+ default=None, description="", examples=[["Wall & General"]]
36
37
  )
37
- thickness_per_declared_unit: LengthMmStr | None = pyd.Field(default=None, description="", example="20 mm")
38
+ thickness_per_declared_unit: LengthMmStr | None = pydantic.Field(default=None, description="", examples=["20 mm"])
@@ -15,7 +15,8 @@
15
15
  #
16
16
  __all__ = ["ConduitMixin"]
17
17
 
18
- from openepd.compat.pydantic import pyd
18
+ import pydantic
19
+
19
20
  from openepd.model.specs.base import BaseOpenEpdSpec
20
21
  from openepd.model.specs.enums import ConduitMaterial
21
22
  from openepd.model.validation.quantity import LengthMmStr
@@ -28,23 +29,25 @@ class ConduitMixin(BaseOpenEpdSpec):
28
29
  Those properties are the same for communication and electrical conduits.
29
30
  """
30
31
 
31
- nominal_diameter: LengthMmStr | None = pyd.Field(
32
+ nominal_diameter: LengthMmStr | None = pydantic.Field(
32
33
  default=None,
33
34
  description="Nominal Diameter is also known as the mean or average outside diameter.",
34
- example="100 mm",
35
+ examples=["100 mm"],
35
36
  )
36
- outer_diameter: LengthMmStr | None = pyd.Field(
37
+ outer_diameter: LengthMmStr | None = pydantic.Field(
37
38
  default=None,
38
39
  description="The measurement of the distance of a straight line between points on the outer walls of the pipe.",
39
- example="100 mm",
40
+ examples=["100 mm"],
40
41
  )
41
- inner_diameter: LengthMmStr | None = pyd.Field(
42
+ inner_diameter: LengthMmStr | None = pydantic.Field(
42
43
  default=None,
43
44
  description="The measurement of the distance of a straight line between points on the inner walls of the pipe.",
44
- example="100 mm",
45
+ examples=["100 mm"],
45
46
  )
46
- wall_thickness: LengthMmStr | None = pyd.Field(
47
- default=None, description="Conduit wall thickness.", example="100 mm"
47
+ wall_thickness: LengthMmStr | None = pydantic.Field(
48
+ default=None, description="Conduit wall thickness.", examples=["100 mm"]
48
49
  )
49
50
 
50
- material: ConduitMaterial | None = pyd.Field(default=None, description="Material of the conduit.", example="PVC")
51
+ material: ConduitMaterial | None = pydantic.Field(
52
+ default=None, description="Material of the conduit.", examples=["PVC"]
53
+ )