openepd 6.28.0__py3-none-any.whl → 6.30.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
openepd/__version__.py CHANGED
@@ -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.28.0"
16
+ VERSION = "6.30.0"
@@ -16,10 +16,12 @@
16
16
  import abc
17
17
  import datetime
18
18
  from enum import StrEnum
19
+ import math
20
+ from typing import Final
19
21
 
20
22
  from openepd.compat.pydantic import pyd
21
23
  from openepd.model.base import BaseOpenEpdSchema, OpenXpdUUID, RootDocument
22
- from openepd.model.common import Amount
24
+ from openepd.model.common import Amount, DataUrl
23
25
  from openepd.model.geography import Geography
24
26
  from openepd.model.org import Org
25
27
  from openepd.model.pcr import Pcr
@@ -32,6 +34,14 @@ DEVELOPER_DESCRIPTION = "The organization responsible for the underlying LCA (an
32
34
  PROGRAM_OPERATOR_DESCRIPTION = "JSON object for program operator Org"
33
35
  THIRD_PARTY_VERIFIER_DESCRIPTION = "JSON object for Org that performed a critical review of the EPD data"
34
36
 
37
+ PRODUCT_IMAGE_MAX_LENGTH: Final[int] = math.ceil(32 * 1024 * 4 / 3)
38
+ """
39
+ Maximum length for product_image, product_image_small fields.
40
+
41
+ Image file size must be less than 32KB. Base64 encoding overhead (approximately 33%) requires
42
+ limiting the encoded string length to 4/3 of the file size limit.
43
+ """
44
+
35
45
 
36
46
  class BaseDeclaration(RootDocument, abc.ABC):
37
47
  """Base class for declaration-related documents (EPDs, Industry-wide EPDs, Generic Estimates)."""
@@ -128,11 +138,13 @@ class BaseDeclaration(RootDocument, abc.ABC):
128
138
  """,
129
139
  )
130
140
 
131
- product_image_small: pyd.AnyUrl | None = pyd.Field(
132
- description="Pointer to image illustrating the product, which is no more than 200x200 pixels", default=None
141
+ product_image_small: pyd.AnyUrl | DataUrl | None = pyd.Field(
142
+ description="URL referencing an image illustrating the product. May be a dataURL of up to 32kb. 200x200 or smaller.",
143
+ default=None,
133
144
  )
134
- product_image: pyd.AnyUrl | pyd.FileUrl | None = pyd.Field(
135
- description="pointer to image illustrating the product no more than 10MB", default=None
145
+ product_image: pyd.AnyUrl | pyd.FileUrl | DataUrl | None = pyd.Field(
146
+ description="URL referencing an image illustrating the product, of no more than 10MB. May be a dataURL of up to 32KB.",
147
+ default=None,
136
148
  )
137
149
  declaration_url: str | None = pyd.Field(
138
150
  description="Link to data object on original registrar's site",
@@ -161,6 +173,13 @@ class BaseDeclaration(RootDocument, abc.ABC):
161
173
  example=50.0,
162
174
  )
163
175
 
176
+ @pyd.validator("product_image", "product_image_small")
177
+ def validate_product_image(cls, v: str | None) -> str | None:
178
+ if v and len(v) > PRODUCT_IMAGE_MAX_LENGTH:
179
+ msg = f"URL must not exceed {PRODUCT_IMAGE_MAX_LENGTH} characters"
180
+ raise ValueError(msg)
181
+ return v
182
+
164
183
 
165
184
  class AverageDatasetMixin(pyd.BaseModel, title="Average Dataset"):
166
185
  """Fields common for average dataset (Industry-wide EPDs, Generic Estimates)."""
@@ -44,9 +44,17 @@ from .material_handling import MaterialHandlingRangeV1
44
44
  from .mechanical import MechanicalRangeV1
45
45
  from .mechanical_insulation import MechanicalInsulationRangeV1
46
46
  from .network_infrastructure import NetworkInfrastructureRangeV1
47
+ from .non_construction import (
48
+ ChemicalsRangeV1,
49
+ ConsumerGoodsRangeV1,
50
+ ElectricityAndFuelRangeV1,
51
+ MachineryAndEquipmentRangeV1,
52
+ ServicesRangeV1,
53
+ VehiclesRangeV1,
54
+ )
47
55
  from .openings import OpeningsRangeV1
48
56
  from .other_electrical_equipment import OtherElectricalEquipmentRangeV1
49
- from .other_materials import OtherMaterialsRangeV1
57
+ from .other_materials import FoodBeverageRangeV1, OtherMaterialsRangeV1, TextileProductsRangeV1
50
58
  from .plumbing import PlumbingRangeV1
51
59
  from .precast_concrete import PrecastConcreteRangeV1
52
60
  from .sheathing import SheathingRangeV1
@@ -64,7 +72,7 @@ class SpecsRange(BaseOpenEpdHierarchicalSpec):
64
72
  Range version.
65
73
  """
66
74
 
67
- _EXT_VERSION = "1.0"
75
+ _EXT_VERSION = "1.1"
68
76
 
69
77
  CMU: CMURangeV1 | None = None
70
78
  Masonry: MasonryRangeV1 | None = None
@@ -101,3 +109,11 @@ class SpecsRange(BaseOpenEpdHierarchicalSpec):
101
109
  OtherElectricalEquipment: OtherElectricalEquipmentRangeV1 | None = None
102
110
  WoodJoists: WoodJoistsRangeV1 | None = None
103
111
  ExteriorImprovements: ExteriorImprovementsRangeV1 | None = None
112
+ TextileProducts: TextileProductsRangeV1 | None = None
113
+ Chemicals: ChemicalsRangeV1 | None = None
114
+ ElectricityAndFuel: ElectricityAndFuelRangeV1 | None = None
115
+ Vehicles: VehiclesRangeV1 | None = None
116
+ MachineryAndEquipment: MachineryAndEquipmentRangeV1 | None = None
117
+ Services: ServicesRangeV1 | None = None
118
+ ConsumerGoods: ConsumerGoodsRangeV1 | None = None
119
+ FoodBeverage: FoodBeverageRangeV1 | None = None
@@ -0,0 +1,52 @@
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.model.specs.base import BaseOpenEpdHierarchicalSpec
17
+
18
+
19
+ class ChemicalsRangeV1(BaseOpenEpdHierarchicalSpec):
20
+ """Products of the Chemical or Allied Industries. Includes most products in WCO HS Section VI."""
21
+
22
+ _EXT_VERSION = "1.0"
23
+
24
+
25
+ class ElectricityAndFuelRangeV1(BaseOpenEpdHierarchicalSpec):
26
+ """Energy carriers including fuels, electricity, and steam."""
27
+
28
+ _EXT_VERSION = "1.0"
29
+
30
+
31
+ class VehiclesRangeV1(BaseOpenEpdHierarchicalSpec):
32
+ """Machinery for moving people and goods. Includes most products in WCO HS Section XVII."""
33
+
34
+ _EXT_VERSION = "1.0"
35
+
36
+
37
+ class MachineryAndEquipmentRangeV1(BaseOpenEpdHierarchicalSpec):
38
+ """Machinery other than for installation in a building."""
39
+
40
+ _EXT_VERSION = "1.0"
41
+
42
+
43
+ class ServicesRangeV1(BaseOpenEpdHierarchicalSpec):
44
+ """Services, including digital and professional services."""
45
+
46
+ _EXT_VERSION = "1.0"
47
+
48
+
49
+ class ConsumerGoodsRangeV1(BaseOpenEpdHierarchicalSpec):
50
+ """Nonperishable products intended for use by individual consumers."""
51
+
52
+ _EXT_VERSION = "1.0"
@@ -13,6 +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
17
+
16
18
  __all__ = (
17
19
  "AuxiliariesRangeV1",
18
20
  "CleaningProductsRangeV1",
@@ -100,8 +102,27 @@ class UnsupportedRangeV1(BaseOpenEpdHierarchicalSpec):
100
102
  _EXT_VERSION = "1.0"
101
103
 
102
104
  CleaningProducts: CleaningProductsRangeV1 | None = None
105
+ Clothing: ClothingRangeV1 | None = pyd.Field(
106
+ default=None,
107
+ deprecated="UnsupportedRangeV1.Clothing is deprecated. Use TextileProductsRangeV1.Clothing instead.",
108
+ )
109
+ """
110
+ UnsupportedRangeV1.Clothing is deprecated. Use TextileProductsRangeV1.Clothing instead.
111
+ """
112
+ FoodBeverage: FoodBeverageRangeV1 | None = pyd.Field(
113
+ default=None, deprecated="UnsupportedRangeV1.FoodBeverage is deprecated. Use SpecsRange.FoodBeverage instead."
114
+ )
115
+ """
116
+ UnsupportedRangeV1.FoodBeverage is deprecated. Use SpecsRange.FoodBeverage instead.
117
+ """
118
+
119
+
120
+ class TextileProductsRangeV1(BaseOpenEpdHierarchicalSpec):
121
+ """Products to be worn by humans, and materials intended to manufacture them. Includes most of WS HS Sections XI, XII."""
122
+
123
+ _EXT_VERSION = "1.0"
124
+
103
125
  Clothing: ClothingRangeV1 | None = None
104
- FoodBeverage: FoodBeverageRangeV1 | None = None
105
126
 
106
127
 
107
128
  class CopperRangeV1(BaseOpenEpdHierarchicalSpec):
@@ -174,6 +195,18 @@ class ZincRangeV1(BaseOpenEpdHierarchicalSpec):
174
195
  _EXT_VERSION = "1.0"
175
196
 
176
197
 
198
+ class OtherPaperPlasticRangeV1(BaseOpenEpdHierarchicalSpec):
199
+ """Other products primarily made of plastic or paper. Includes WCO HS sections VII and X."""
200
+
201
+ _EXT_VERSION = "1.0"
202
+
203
+
204
+ class OtherMineralMetalRangeV1(BaseOpenEpdHierarchicalSpec):
205
+ """Base minerals, metals, materials, and products made primarily of them not otherwise classified. Includes most of WCO HS Section XV."""
206
+
207
+ _EXT_VERSION = "1.0"
208
+
209
+
177
210
  class OtherMaterialsRangeV1(BaseOpenEpdHierarchicalSpec):
178
211
  """
179
212
  Broad category of materials not yet classified.
@@ -181,7 +214,7 @@ class OtherMaterialsRangeV1(BaseOpenEpdHierarchicalSpec):
181
214
  Range version.
182
215
  """
183
216
 
184
- _EXT_VERSION = "1.0"
217
+ _EXT_VERSION = "1.1"
185
218
 
186
219
  TransportationInfrastructure: TransportationInfrastructureRangeV1 | None = None
187
220
  Unsupported: UnsupportedRangeV1 | None = None
@@ -192,3 +225,5 @@ class OtherMaterialsRangeV1(BaseOpenEpdHierarchicalSpec):
192
225
  Profiles: ProfilesRangeV1 | None = None
193
226
  Unknown: UnknownRangeV1 | None = None
194
227
  Zinc: ZincRangeV1 | None = None
228
+ OtherPaperPlastic: OtherPaperPlasticRangeV1 | None = None
229
+ OtherMineralMetal: OtherMineralMetalRangeV1 | None = None
@@ -53,9 +53,17 @@ from openepd.model.specs.singular.material_handling import MaterialHandlingV1
53
53
  from openepd.model.specs.singular.mechanical import MechanicalV1
54
54
  from openepd.model.specs.singular.mechanical_insulation import MechanicalInsulationV1
55
55
  from openepd.model.specs.singular.network_infrastructure import NetworkInfrastructureV1
56
+ from openepd.model.specs.singular.non_construction import (
57
+ ChemicalsV1,
58
+ ConsumerGoodsV1,
59
+ ElectricityAndFuelV1,
60
+ MachineryAndEquipmentV1,
61
+ ServicesV1,
62
+ VehiclesV1,
63
+ )
56
64
  from openepd.model.specs.singular.openings import OpeningsV1
57
65
  from openepd.model.specs.singular.other_electrical_equipment import OtherElectricalEquipmentV1
58
- from openepd.model.specs.singular.other_materials import OtherMaterialsV1
66
+ from openepd.model.specs.singular.other_materials import FoodBeverageV1, OtherMaterialsV1, TextileProductsV1
59
67
  from openepd.model.specs.singular.plumbing import PlumbingV1
60
68
  from openepd.model.specs.singular.precast_concrete import PrecastConcreteV1
61
69
  from openepd.model.specs.singular.sheathing import SheathingV1
@@ -73,7 +81,7 @@ class Specs(BaseOpenEpdHierarchicalSpec):
73
81
 
74
82
  COMPATIBILITY_SPECS: ClassVar[list[type[BaseCompatibilitySpec]]] = [ConcreteOldSpec, SteelOldSpec]
75
83
 
76
- _EXT_VERSION = "1.0"
84
+ _EXT_VERSION = "1.1"
77
85
 
78
86
  # Nested specs:
79
87
  CMU: CMUV1 | None = None
@@ -111,6 +119,14 @@ class Specs(BaseOpenEpdHierarchicalSpec):
111
119
  OtherElectricalEquipment: OtherElectricalEquipmentV1 | None = None
112
120
  WoodJoists: WoodJoistsV1 | None = None
113
121
  ExteriorImprovements: ExteriorImprovementsV1 | None = None
122
+ TextileProducts: TextileProductsV1 | None = None
123
+ Chemicals: ChemicalsV1 | None = None
124
+ ElectricityAndFuel: ElectricityAndFuelV1 | None = None
125
+ Vehicles: VehiclesV1 | None = None
126
+ MachineryAndEquipment: MachineryAndEquipmentV1 | None = None
127
+ Services: ServicesV1 | None = None
128
+ ConsumerGoods: ConsumerGoodsV1 | None = None
129
+ FoodBeverage: FoodBeverageV1 | None = None
114
130
 
115
131
  # historical backward-compatible specs
116
132
  concrete: ConcreteOldSpec | None = None
@@ -0,0 +1,52 @@
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.model.specs.base import BaseOpenEpdHierarchicalSpec
17
+
18
+
19
+ class ChemicalsV1(BaseOpenEpdHierarchicalSpec):
20
+ """Products of the Chemical or Allied Industries. Includes most products in WCO HS Section VI."""
21
+
22
+ _EXT_VERSION = "1.0"
23
+
24
+
25
+ class ElectricityAndFuelV1(BaseOpenEpdHierarchicalSpec):
26
+ """Energy carriers including fuels, electricity, and steam."""
27
+
28
+ _EXT_VERSION = "1.0"
29
+
30
+
31
+ class VehiclesV1(BaseOpenEpdHierarchicalSpec):
32
+ """Machinery for moving people and goods. Includes most products in WCO HS Section XVII."""
33
+
34
+ _EXT_VERSION = "1.0"
35
+
36
+
37
+ class MachineryAndEquipmentV1(BaseOpenEpdHierarchicalSpec):
38
+ """Machinery other than for installation in a building."""
39
+
40
+ _EXT_VERSION = "1.0"
41
+
42
+
43
+ class ServicesV1(BaseOpenEpdHierarchicalSpec):
44
+ """Services, including digital and professional services."""
45
+
46
+ _EXT_VERSION = "1.0"
47
+
48
+
49
+ class ConsumerGoodsV1(BaseOpenEpdHierarchicalSpec):
50
+ """Nonperishable products intended for use by individual consumers."""
51
+
52
+ _EXT_VERSION = "1.0"
@@ -13,6 +13,7 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
  #
16
+ from openepd.compat.pydantic import pyd
16
17
  from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
17
18
 
18
19
 
@@ -60,8 +61,27 @@ class UnsupportedV1(BaseOpenEpdHierarchicalSpec):
60
61
 
61
62
  # Nested specs:
62
63
  CleaningProducts: CleaningProductsV1 | None = None
64
+
65
+ Clothing: ClothingV1 | None = pyd.Field(
66
+ default=None, deprecated="UnsupportedV1.Clothing is deprecated. Use TextileProductsV1.Clothing instead."
67
+ )
68
+ """
69
+ UnsupportedV1.Clothing is deprecated. Use TextileProductsV1.Clothing instead.
70
+ """
71
+ FoodBeverage: FoodBeverageV1 | None = pyd.Field(
72
+ default=None, deprecated="UnsupportedV1.FoodBeverage is deprecated. Use Specs.FoodBeverage instead."
73
+ )
74
+ """
75
+ UnsupportedV1.FoodBeverage is deprecated. Use TextileProductsV1.FoodBeverage instead.
76
+ """
77
+
78
+
79
+ class TextileProductsV1(BaseOpenEpdHierarchicalSpec):
80
+ """Products to be worn by humans, and materials intended to manufacture them. Includes most of WS HS Sections XI, XII."""
81
+
82
+ _EXT_VERSION = "1.0"
83
+
63
84
  Clothing: ClothingV1 | None = None
64
- FoodBeverage: FoodBeverageV1 | None = None
65
85
 
66
86
 
67
87
  class CopperV1(BaseOpenEpdHierarchicalSpec):
@@ -106,10 +126,22 @@ class ZincV1(BaseOpenEpdHierarchicalSpec):
106
126
  _EXT_VERSION = "1.0"
107
127
 
108
128
 
129
+ class OtherPaperPlasticV1(BaseOpenEpdHierarchicalSpec):
130
+ """Other products primarily made of plastic or paper. Includes WCO HS sections VII and X."""
131
+
132
+ _EXT_VERSION = "1.0"
133
+
134
+
135
+ class OtherMineralMetalV1(BaseOpenEpdHierarchicalSpec):
136
+ """Base minerals, metals, materials, and products made primarily of them not otherwise classified. Includes most of WCO HS Section XV."""
137
+
138
+ _EXT_VERSION = "1.0"
139
+
140
+
109
141
  class OtherMaterialsV1(BaseOpenEpdHierarchicalSpec):
110
142
  """Broad category of materials not yet classified."""
111
143
 
112
- _EXT_VERSION = "1.0"
144
+ _EXT_VERSION = "1.1"
113
145
 
114
146
  # Nested specs:
115
147
  TransportationInfrastructure: TransportationInfrastructureV1 | None = None
@@ -121,3 +153,5 @@ class OtherMaterialsV1(BaseOpenEpdHierarchicalSpec):
121
153
  Profiles: ProfilesV1 | None = None
122
154
  Unknown: UnknownV1 | None = None
123
155
  Zinc: ZincV1 | None = None
156
+ OtherPaperPlastic: OtherPaperPlasticV1 | None = None
157
+ OtherMineralMetal: OtherMineralMetalV1 | None = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: openepd
3
- Version: 6.28.0
3
+ Version: 6.30.0
4
4
  Summary: Python library to work with OpenEPD format
5
5
  License: Apache-2.0
6
6
  Author: C-Change Labs
@@ -1,5 +1,5 @@
1
1
  openepd/__init__.py,sha256=fhxfEyEurLvSfvQci-vb3njzl_lvhcLXiZrecCOaMU8,794
2
- openepd/__version__.py,sha256=IUCrF_atrQRdHN3rso9BDfVu8IPQGot8f1SiPEB8L9Y,639
2
+ openepd/__version__.py,sha256=enRsBfml2NzBafBOFfvlU90PUt0sxIWFr532d5FuVvU,639
3
3
  openepd/api/__init__.py,sha256=9THJcV3LT7JDBOMz1px-QFf_sdJ0LOqJ5dmA9Dvvtd4,620
4
4
  openepd/api/average_dataset/__init__.py,sha256=9THJcV3LT7JDBOMz1px-QFf_sdJ0LOqJ5dmA9Dvvtd4,620
5
5
  openepd/api/average_dataset/generic_estimate_sync_api.py,sha256=_eZt_jGVL1a3p9cr-EF39Ve9Vl5sB8zwzTc_slnRL50,7975
@@ -47,7 +47,7 @@ openepd/model/__init__.py,sha256=9THJcV3LT7JDBOMz1px-QFf_sdJ0LOqJ5dmA9Dvvtd4,620
47
47
  openepd/model/base.py,sha256=6rP6r-7NwKC6JLFB24v2w4Z-_f_w6ZSNLte5zyj5o70,9928
48
48
  openepd/model/category.py,sha256=reeOVRDuZPYU77EMwG0K5VjnK2H9yOGxT0PJXXqrjEk,1639
49
49
  openepd/model/common.py,sha256=WM6ankkeZazVzKwbn4s5FHwENMTIKWsgdRJkX7DYmpg,13875
50
- openepd/model/declaration.py,sha256=1WXTRlSRIUXTJJhL_e7BkoFyZ9gJKZH7c8pFVxihGFU,13980
50
+ openepd/model/declaration.py,sha256=F7LEMeZSJndtvO0AqnvTS43MeRxI3MO1IWLyF1SlwPU,14744
51
51
  openepd/model/epd.py,sha256=SGAgEEAuvRGsIlgIUI60UqV1alhb5kouOvp8fAC0VPg,12320
52
52
  openepd/model/factory.py,sha256=UWSGpfCr3GiMTP4rzBkwqxzbXB6GKZ_5Okb1Dqa_4aA,2701
53
53
  openepd/model/generic_estimate.py,sha256=zLGTyf4Uzmp2C0m-J1ePWItSz2RGdZ0OiGPWC5nhKHk,3992
@@ -62,7 +62,7 @@ openepd/model/specs/asphalt.py,sha256=eHhcITbBrNYR5N6x4Q2BxpsR64BR9OkjJ4bvPRYOqM
62
62
  openepd/model/specs/base.py,sha256=10IDyRFKQgFnyIPSqpeayP8Og1BDgs1EepXX5dyCMM4,2674
63
63
  openepd/model/specs/concrete.py,sha256=D9jbhZDtTXNBoAgljQBPxsmGsMvLSIAP5H53ZYiXcGI,5336
64
64
  openepd/model/specs/enums.py,sha256=6vNIDqt2kI-JKp9EBP9vhis935tfAS31znZ7v7LHb8s,63083
65
- openepd/model/specs/range/__init__.py,sha256=nV5ODdlIF2o0JZzIkgmzjo5_B3GNqKYEL_FWjyFvM8Y,4536
65
+ openepd/model/specs/range/__init__.py,sha256=MlECuiVIB3QBrcc-J_iQgqztD-Kp9mMFiacQoDzKliA,5202
66
66
  openepd/model/specs/range/accessories.py,sha256=hZYz8mvAqrfLFiOIZ9qQZ59zmEiu0xE61Ko9cQ7NSKU,2498
67
67
  openepd/model/specs/range/aggregates.py,sha256=udVbsYc1Lyrd6a4YZBGNDQ3sBi-L3WLub_e1ecq7U-Q,2549
68
68
  openepd/model/specs/range/aluminium.py,sha256=Z3laZKXoPtfmOLLr4c4uf7Z-8TNmfz51X-_yd7GQIj8,2745
@@ -89,9 +89,10 @@ openepd/model/specs/range/mechanical_insulation.py,sha256=S2-NkFVkjLmn_dk3gsG8C2
89
89
  openepd/model/specs/range/mixins/__init__.py,sha256=9THJcV3LT7JDBOMz1px-QFf_sdJ0LOqJ5dmA9Dvvtd4,620
90
90
  openepd/model/specs/range/mixins/access_flooring_mixin.py,sha256=JEcvlmKv3R5dVIM4X4ILH43WlMwF6FnZ4-_s2qU-MIM,2382
91
91
  openepd/model/specs/range/network_infrastructure.py,sha256=aqXEIGqFy0gNCM_ftd3J6aT3FZf9JlT0SBOImhdkTg0,8498
92
+ openepd/model/specs/range/non_construction.py,sha256=PDJn1QKQR9wHYr-KtWIxji-41IKFSeMZUS1fSjy4QGU,1664
92
93
  openepd/model/specs/range/openings.py,sha256=4MeNkbMAhtcGbiG5lxHCSRSdJ4F42uBMSXp5XJFODj4,15590
93
94
  openepd/model/specs/range/other_electrical_equipment.py,sha256=H4tZHcHyR2uUYHn-bQfLC6hR4tynVp_7EJbiI-YpK7Y,1001
94
- openepd/model/specs/range/other_materials.py,sha256=RHusAyExYl9n1BDiOFDq2_znEn3MXGxEkunb3BjiC2U,4495
95
+ openepd/model/specs/range/other_materials.py,sha256=EAKHR9VJAkoqHL0FL2x-7PBvBxDD07drqoVLhBlaYzw,5823
95
96
  openepd/model/specs/range/plumbing.py,sha256=jQKrKYGDR33uh3ffo6uVyt3xuSmexkkelfNh_-omNCg,5342
96
97
  openepd/model/specs/range/precast_concrete.py,sha256=nn1U1XwKqqzY1cOPP3KqHZMJq4Ut9RAox4SMVYBa5B8,3763
97
98
  openepd/model/specs/range/sheathing.py,sha256=tATL6dzKTdN0rUKZRzZd779dLhKdEavL5Bjybnt2MjU,3395
@@ -100,7 +101,7 @@ openepd/model/specs/range/thermal_moisture_protection.py,sha256=aUpStISG2snc8aZ7
100
101
  openepd/model/specs/range/utility_piping.py,sha256=mQTrKbMTES_0Yta9DBnKehsmA2BAN_zYF_uPZCTKLPo,2665
101
102
  openepd/model/specs/range/wood.py,sha256=ZMStFsFOw5d6tCL2P7kksBnlYhwfvWJBZqoAdqSIUDg,6917
102
103
  openepd/model/specs/range/wood_joists.py,sha256=NCBHL0gdKwdKlGCP6up_Royl9BtWUUeuFfS1r2vIZ30,1785
103
- openepd/model/specs/singular/__init__.py,sha256=YaySkDd4qgmHCk58TfMhgsiAnU_IY83xK847NEvOC60,11414
104
+ openepd/model/specs/singular/__init__.py,sha256=omwiL0I3e5SatFB2l3sJk8qqhi819HY7_Ja9T8Ny55w,12028
104
105
  openepd/model/specs/singular/accessories.py,sha256=xcuSJrG84oTm_w76_wlv_sItfK36gSyDmUD2TnpZnVE,2013
105
106
  openepd/model/specs/singular/aggregates.py,sha256=oSfArxvLUj63w_U0tZViRyiOpMRRjE72ncy2BimKxco,2934
106
107
  openepd/model/specs/singular/aluminium.py,sha256=7Z3WmuW22o92cPHfR6X_OBSoer0V5llwiNdQmWgKTx8,2408
@@ -132,9 +133,10 @@ openepd/model/specs/singular/mixins/__init__.py,sha256=9THJcV3LT7JDBOMz1px-QFf_s
132
133
  openepd/model/specs/singular/mixins/access_flooring_mixin.py,sha256=z_e5TYK2dtRMz--GrWQDkyyDEM0DmERZZO9V-EzAs1o,2915
133
134
  openepd/model/specs/singular/mixins/conduit_mixin.py,sha256=tj6p-MF84rg4LGxXPC65uMvmn6NlxmATuloe4TcuQdk,1928
134
135
  openepd/model/specs/singular/network_infrastructure.py,sha256=eB3p1zu1u15Ly5iuyyJ4xl3Z1GuBCRVU18Wpz8FWZrg,8521
136
+ openepd/model/specs/singular/non_construction.py,sha256=VW_dP5I8AUkwa923d2r9X8S78k6OUA5rU0UAypUX8t8,1634
135
137
  openepd/model/specs/singular/openings.py,sha256=IoLBp003qvWZOeTeIPtVPcq4AXdY3ZSSzRK10mnnJac,19183
136
138
  openepd/model/specs/singular/other_electrical_equipment.py,sha256=FX7p4rMuUbTrz1yDwKkS-Z6odohoq-zCw6SU3Kw5ISs,814
137
- openepd/model/specs/singular/other_materials.py,sha256=_00_fCPn7G_-HVKC1cQcNvBDf4CtXFLOGvYLDJtL5ZA,3498
139
+ openepd/model/specs/singular/other_materials.py,sha256=iD_AeC8vHXAQuvw62TrVOyoRS6uy5LFb_2PSODDn2hk,4759
138
140
  openepd/model/specs/singular/plumbing.py,sha256=fHmKyy1aQxu8NZ3RTwxuA0CCERMgwVUdMA74kMDVc8o,4568
139
141
  openepd/model/specs/singular/precast_concrete.py,sha256=W2tKf0vOnAdfeGc1n7Pk8yx9jy44afdFB0cbwHjw1HI,7327
140
142
  openepd/model/specs/singular/sheathing.py,sha256=dfBSGElsJ-suj3WH7CZx5k3_v5E5IHVDOscwRI5yghE,3709
@@ -156,7 +158,7 @@ openepd/utils/__init__.py,sha256=9THJcV3LT7JDBOMz1px-QFf_sdJ0LOqJ5dmA9Dvvtd4,620
156
158
  openepd/utils/functional.py,sha256=sm7od2_UE-cNToezBlwFQ1TCUJub1tz6VykA1X8XH-I,1274
157
159
  openepd/utils/mapping/__init__.py,sha256=9THJcV3LT7JDBOMz1px-QFf_sdJ0LOqJ5dmA9Dvvtd4,620
158
160
  openepd/utils/mapping/common.py,sha256=WphCzwQQlzX11tUk88Ubyq3QPBLvH0tBPSIuH0kmiug,7339
159
- openepd-6.28.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
160
- openepd-6.28.0.dist-info/METADATA,sha256=Csp45UMu54luUAHWZ46DFe4gAYhvLt4m0J0lUikNfaY,9827
161
- openepd-6.28.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
162
- openepd-6.28.0.dist-info/RECORD,,
161
+ openepd-6.30.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
162
+ openepd-6.30.0.dist-info/METADATA,sha256=m6zAhESjdLnk1hSXRpMSGpcwo677rI9_eunN1Qvlni0,9827
163
+ openepd-6.30.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
164
+ openepd-6.30.0.dist-info/RECORD,,