openepd 7.1.0__py3-none-any.whl → 7.2.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 +1 -1
- openepd/api/average_dataset/generic_estimate_sync_api.py +2 -1
- openepd/api/average_dataset/industry_epd_sync_api.py +2 -1
- openepd/api/base_sync_client.py +10 -8
- openepd/api/common.py +17 -11
- openepd/api/dto/common.py +1 -1
- openepd/api/epd/sync_api.py +2 -1
- openepd/api/org/__init__.py +15 -0
- openepd/api/org/sync_api.py +79 -0
- openepd/api/pcr/sync_api.py +35 -0
- openepd/api/plant/__init__.py +15 -0
- openepd/api/plant/sync_api.py +79 -0
- openepd/api/standard/__init__.py +15 -0
- openepd/api/standard/sync_api.py +79 -0
- openepd/api/sync_client.py +27 -0
- openepd/bundle/base.py +5 -4
- openepd/bundle/reader.py +13 -7
- openepd/bundle/writer.py +11 -6
- openepd/m49/__init__.py +2 -0
- openepd/m49/const.py +1 -1
- openepd/m49/utils.py +16 -10
- openepd/model/base.py +20 -15
- openepd/model/common.py +10 -5
- openepd/model/declaration.py +2 -2
- openepd/model/epd.py +2 -1
- openepd/model/factory.py +5 -3
- openepd/model/generic_estimate.py +4 -0
- openepd/model/lcia.py +10 -10
- openepd/model/org.py +14 -7
- openepd/model/pcr.py +2 -2
- openepd/model/specs/__init__.py +37 -0
- openepd/model/specs/asphalt.py +3 -3
- openepd/model/specs/base.py +2 -1
- openepd/model/specs/enums.py +9 -1
- openepd/model/specs/range/__init__.py +5 -3
- openepd/model/specs/range/accessories.py +1 -1
- openepd/model/specs/range/aluminium.py +1 -1
- openepd/model/specs/range/cladding.py +10 -10
- openepd/model/specs/range/cmu.py +0 -2
- openepd/model/specs/range/concrete.py +25 -2
- openepd/model/specs/range/conveying_equipment.py +2 -2
- openepd/model/specs/range/electrical.py +18 -18
- openepd/model/specs/range/electrical_transmission_and_distribution_equipment.py +1 -1
- openepd/model/specs/range/exterior_improvements.py +47 -0
- openepd/model/specs/range/finishes.py +19 -40
- openepd/model/specs/range/fire_and_smoke_protection.py +3 -3
- openepd/model/specs/range/furnishings.py +7 -7
- openepd/model/specs/range/manufacturing_inputs.py +17 -5
- openepd/model/specs/range/masonry.py +1 -1
- openepd/model/specs/range/mechanical.py +6 -6
- openepd/model/specs/range/mixins/__init__.py +15 -0
- openepd/model/specs/range/mixins/access_flooring_mixin.py +43 -0
- openepd/model/specs/range/network_infrastructure.py +3 -3
- openepd/model/specs/range/openings.py +17 -17
- openepd/model/specs/range/other_materials.py +4 -4
- openepd/model/specs/range/plumbing.py +5 -5
- openepd/model/specs/range/precast_concrete.py +2 -2
- openepd/model/specs/range/steel.py +18 -9
- openepd/model/specs/range/thermal_moisture_protection.py +12 -12
- openepd/model/specs/range/wood.py +4 -6
- openepd/model/specs/singular/__init__.py +119 -2
- openepd/model/specs/singular/aluminium.py +2 -1
- openepd/model/specs/singular/concrete.py +25 -1
- openepd/model/specs/singular/deprecated/__init__.py +1 -1
- openepd/model/specs/singular/exterior_improvements.py +47 -0
- openepd/model/specs/singular/finishes.py +3 -59
- openepd/model/specs/singular/manufacturing_inputs.py +13 -1
- openepd/model/specs/singular/mixins/access_flooring_mixin.py +55 -0
- openepd/model/specs/singular/steel.py +10 -2
- openepd/model/validation/common.py +10 -6
- openepd/model/validation/enum.py +4 -2
- openepd/model/validation/quantity.py +13 -6
- openepd/model/versioning.py +8 -6
- {openepd-7.1.0.dist-info → openepd-7.2.0.dist-info}/METADATA +3 -4
- {openepd-7.1.0.dist-info → openepd-7.2.0.dist-info}/RECORD +77 -66
- {openepd-7.1.0.dist-info → openepd-7.2.0.dist-info}/WHEEL +1 -1
- {openepd-7.1.0.dist-info → openepd-7.2.0.dist-info}/LICENSE +0 -0
@@ -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
|
16
|
+
from collections.abc import Callable
|
17
|
+
from typing import Annotated, Any, TypeAlias
|
17
18
|
|
18
19
|
import pydantic
|
19
20
|
|
@@ -25,7 +26,8 @@ def together_validator(field1: str, field2: Any, values: dict[str, Any]) -> Any:
|
|
25
26
|
value1 = values.get(field1)
|
26
27
|
value2 = values.get(field2)
|
27
28
|
if value1 is not None and value2 is None or value1 is None and value2 is not None:
|
28
|
-
|
29
|
+
msg = f"Both or neither {field1} and {field2} days must be provided together"
|
30
|
+
raise ValueError(msg)
|
29
31
|
|
30
32
|
|
31
33
|
def validate_version_format(v: str) -> str:
|
@@ -36,17 +38,19 @@ def validate_version_format(v: str) -> str:
|
|
36
38
|
|
37
39
|
def validate_version_compatibility(
|
38
40
|
class_version_attribute_name: str,
|
39
|
-
) -> Callable[[
|
41
|
+
) -> Callable[[type, str], str]:
|
40
42
|
"""Ensure that the object which is passed for parsing and validation is compatible with the class."""
|
41
43
|
|
42
44
|
# we need closure to pass property name, since actual class will only be available in runtime
|
43
|
-
def internal_validate_version_compatibility(cls:
|
45
|
+
def internal_validate_version_compatibility(cls: type, v: str) -> str:
|
44
46
|
if not hasattr(cls, class_version_attribute_name):
|
45
|
-
|
47
|
+
msg = f"Class {cls} must declare a class var extension var named {class_version_attribute_name}"
|
48
|
+
raise ValueError(msg)
|
46
49
|
|
47
50
|
class_version = getattr(cls, class_version_attribute_name)
|
48
51
|
if Version.parse_version(v).major != Version.parse_version(class_version).major:
|
49
|
-
|
52
|
+
msg = f"Extension version {v} does not match class version {class_version}"
|
53
|
+
raise ValueError(msg)
|
50
54
|
return v
|
51
55
|
|
52
56
|
return internal_validate_version_compatibility
|
openepd/model/validation/enum.py
CHANGED
@@ -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
|
16
|
+
from collections.abc import Callable
|
17
|
+
from typing import Any
|
17
18
|
|
18
19
|
from openepd.model.common import EnumGroupingAware
|
19
20
|
|
@@ -35,7 +36,8 @@ def exclusive_groups_validator_factory(enum_type: type[EnumGroupingAware]) -> Ca
|
|
35
36
|
for grouping in enum_type.get_groupings():
|
36
37
|
matching_from_group = [v for v in (value or []) if v in grouping]
|
37
38
|
if len(matching_from_group) > 1:
|
38
|
-
|
39
|
+
msg = f"Values {', '.join(matching_from_group)} are not allowed together."
|
40
|
+
raise ValueError(msg)
|
39
41
|
|
40
42
|
return value
|
41
43
|
|
@@ -14,12 +14,12 @@
|
|
14
14
|
# limitations under the License.
|
15
15
|
#
|
16
16
|
from abc import ABC, abstractmethod
|
17
|
-
from
|
17
|
+
from collections.abc import Callable
|
18
|
+
from typing import TYPE_CHECKING, Any, ClassVar, Self
|
18
19
|
|
19
20
|
import pydantic
|
20
21
|
from pydantic import ConfigDict
|
21
22
|
import pydantic_core
|
22
|
-
from typing_extensions import Self
|
23
23
|
|
24
24
|
from openepd.model.base import BaseOpenEpdSchema
|
25
25
|
from openepd.model.common import Amount, OpenEPDUnit, RangeAmount
|
@@ -59,8 +59,10 @@ class QuantityValidator(ABC):
|
|
59
59
|
dimensionality: The dimensionality to validate against, like "kg"
|
60
60
|
Returns:
|
61
61
|
None if the value is valid, raises an error otherwise.
|
62
|
+
|
62
63
|
Raises:
|
63
64
|
ValueError: If the value is not valid.
|
65
|
+
|
64
66
|
"""
|
65
67
|
pass
|
66
68
|
|
@@ -74,8 +76,10 @@ class QuantityValidator(ABC):
|
|
74
76
|
min_value: The value to compare with, like "102.4 kg"
|
75
77
|
Returns:
|
76
78
|
None if the value is valid, raises an error otherwise.
|
79
|
+
|
77
80
|
Raises:
|
78
81
|
ValueError: If the value is not valid.
|
82
|
+
|
79
83
|
"""
|
80
84
|
pass
|
81
85
|
|
@@ -89,8 +93,10 @@ class QuantityValidator(ABC):
|
|
89
93
|
max_value: The value to compare with, like "0.4 kg"
|
90
94
|
Returns:
|
91
95
|
None if the value is valid, raises an error otherwise.
|
96
|
+
|
92
97
|
Raises:
|
93
98
|
ValueError: If the value is not valid.
|
99
|
+
|
94
100
|
"""
|
95
101
|
pass
|
96
102
|
|
@@ -168,10 +174,10 @@ class QuantityStr(str):
|
|
168
174
|
unit: ClassVar[str]
|
169
175
|
|
170
176
|
@classmethod
|
171
|
-
def _validate(cls, value: str) ->
|
177
|
+
def _validate(cls, value: str) -> Self:
|
172
178
|
value = validate_quantity_unit_factory(cls.unit)(cls, value)
|
173
179
|
value = validate_quantity_ge_factory(f"0 {cls.unit}")(cls, value)
|
174
|
-
return value
|
180
|
+
return cls(value)
|
175
181
|
|
176
182
|
@classmethod
|
177
183
|
def __get_pydantic_core_schema__(
|
@@ -389,7 +395,8 @@ class WithDimensionalityMixin(BaseOpenEpdSchema):
|
|
389
395
|
return self
|
390
396
|
|
391
397
|
if self.unit is None:
|
392
|
-
|
398
|
+
msg = "`unit` is required for dimensionality-validated amounts"
|
399
|
+
raise ValueError(msg)
|
393
400
|
|
394
401
|
validate_unit_factory(self.dimensionality_unit)(BaseOpenEpdSchema, self.unit)
|
395
402
|
return self
|
@@ -490,7 +497,7 @@ class WithPressureMpaMixin(WithDimensionalityMixin):
|
|
490
497
|
|
491
498
|
|
492
499
|
class AmountPressureMpa(Amount, WithPressureMpaMixin):
|
493
|
-
"""
|
500
|
+
"""Pressure (MPa)."""
|
494
501
|
|
495
502
|
pass
|
496
503
|
|
openepd/model/versioning.py
CHANGED
@@ -44,7 +44,8 @@ class Version(NamedTuple):
|
|
44
44
|
|
45
45
|
@staticmethod
|
46
46
|
def parse_version(version: str | None) -> "Version":
|
47
|
-
"""
|
47
|
+
"""
|
48
|
+
Parse the version of extension or the format.
|
48
49
|
|
49
50
|
Version is expected to be major.minor
|
50
51
|
|
@@ -56,9 +57,11 @@ class Version(NamedTuple):
|
|
56
57
|
else:
|
57
58
|
splits = []
|
58
59
|
if len(splits) != 2:
|
59
|
-
|
60
|
+
msg = f"Invalid version: {version}"
|
61
|
+
raise ValueError(msg)
|
60
62
|
if not splits[0].isdigit() or not splits[1].isdigit():
|
61
|
-
|
63
|
+
msg = f"Invalid version: {version}"
|
64
|
+
raise ValueError(msg)
|
62
65
|
return Version(major=int(splits[0]), minor=int(splits[1]))
|
63
66
|
|
64
67
|
def __str__(self) -> str:
|
@@ -115,9 +118,8 @@ class OpenEpdVersions(Version, ReprEnum):
|
|
115
118
|
for x in cls:
|
116
119
|
if x.value.major == branch:
|
117
120
|
return x.value
|
118
|
-
|
119
|
-
|
120
|
-
)
|
121
|
+
msg = f"No version {branch}.x is not supported. Supported versions are: {', '.join(str(x.value) for x in cls)}"
|
122
|
+
raise ValueError(msg)
|
121
123
|
|
122
124
|
@classmethod
|
123
125
|
def get_current(cls) -> Version:
|
@@ -1,8 +1,7 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.3
|
2
2
|
Name: openepd
|
3
|
-
Version: 7.
|
3
|
+
Version: 7.2.0
|
4
4
|
Summary: Python library to work with OpenEPD format
|
5
|
-
Home-page: https://github.com/cchangelabs/openepd
|
6
5
|
License: Apache-2.0
|
7
6
|
Author: C-Change Labs
|
8
7
|
Author-email: support@c-change-labs.com
|
@@ -60,7 +59,7 @@ including uniqueness of organizations/plants, precise PCR references, and dated
|
|
60
59
|
The openEPD format is **extensible**. Standard extensions exist for concrete products, and for
|
61
60
|
documenting supply-chain specific data.
|
62
61
|
|
63
|
-
[Read More about OpenEPD format here](https://www.
|
62
|
+
[Read More about OpenEPD format here](https://www.open-epd-forum.org).
|
64
63
|
|
65
64
|
## Usage
|
66
65
|
|
@@ -1,119 +1,130 @@
|
|
1
1
|
openepd/__init__.py,sha256=9THJcV3LT7JDBOMz1px-QFf_sdJ0LOqJ5dmA9Dvvtd4,620
|
2
|
-
openepd/__version__.py,sha256=
|
2
|
+
openepd/__version__.py,sha256=_5NJwIJ7J9H-KhVx7TGryTwScUPd5wpsdLOYvKyssyU,638
|
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
|
-
openepd/api/average_dataset/generic_estimate_sync_api.py,sha256=
|
6
|
-
openepd/api/average_dataset/industry_epd_sync_api.py,sha256=
|
7
|
-
openepd/api/base_sync_client.py,sha256=
|
5
|
+
openepd/api/average_dataset/generic_estimate_sync_api.py,sha256=mjTT8eGtfj6Fgp-wcs0cCWA7DJo1KL_iQ75rgKkaY3c,8037
|
6
|
+
openepd/api/average_dataset/industry_epd_sync_api.py,sha256=yA-khQXfnoVZvea_bNUsZgiXHkBEMyloNlSHs4ReR9I,6360
|
7
|
+
openepd/api/base_sync_client.py,sha256=s4gHoDXk0GegBxlrdgqyiYb--RJJ4-ToAQ1CDw1Az2I,21797
|
8
8
|
openepd/api/category/__init__.py,sha256=9THJcV3LT7JDBOMz1px-QFf_sdJ0LOqJ5dmA9Dvvtd4,620
|
9
9
|
openepd/api/category/dto.py,sha256=-nsSNH1zWIluFuF50qmnIcvloX08Jk_KV5mebJqzLe4,850
|
10
10
|
openepd/api/category/sync_api.py,sha256=XU68fMQXSsfwfKkZvAlvBS78Z5hNwpXbO_Ffsh7LP0U,1381
|
11
|
-
openepd/api/common.py,sha256=
|
11
|
+
openepd/api/common.py,sha256=KfV-HX93QtQp1vnmfAp-pdpDBvpfzahbXavCXbLt6L0,8943
|
12
12
|
openepd/api/dto/__init__.py,sha256=9THJcV3LT7JDBOMz1px-QFf_sdJ0LOqJ5dmA9Dvvtd4,620
|
13
13
|
openepd/api/dto/base.py,sha256=hZbzzBDPEN5-5Hhfcy7FgZj_Ya3g9oS7CgaQYhQiRwU,1041
|
14
|
-
openepd/api/dto/common.py,sha256=
|
14
|
+
openepd/api/dto/common.py,sha256=uoGyAG_UBouwET7RXU-FZIagwXpcin8jk-w8RloksJA,4470
|
15
15
|
openepd/api/dto/meta.py,sha256=0x_rAx4ijO4l0C9C3jSu4sfX7lNctqCAUd51WUkoY3s,2276
|
16
16
|
openepd/api/dto/mf.py,sha256=3pobE0iihSBqH0rZgWP95_IlQzSJBqKZrYYufWDobUo,2000
|
17
17
|
openepd/api/dto/params.py,sha256=9THJcV3LT7JDBOMz1px-QFf_sdJ0LOqJ5dmA9Dvvtd4,620
|
18
18
|
openepd/api/epd/__init__.py,sha256=9THJcV3LT7JDBOMz1px-QFf_sdJ0LOqJ5dmA9Dvvtd4,620
|
19
19
|
openepd/api/epd/dto.py,sha256=rcRUKUj-N885K6tjQnPGiFVDhc8yd9nUJKnkhIwgOtM,5084
|
20
|
-
openepd/api/epd/sync_api.py,sha256=
|
20
|
+
openepd/api/epd/sync_api.py,sha256=KFJyUs2zbOV0KmWF99-ZslIdnQ-p3GTw3Quhxy2yxy8,7387
|
21
21
|
openepd/api/errors.py,sha256=BgZeNfMNAKVPfhpuiVapCXNBSsXygAOWql-gy7m9j7E,2868
|
22
|
+
openepd/api/org/__init__.py,sha256=9THJcV3LT7JDBOMz1px-QFf_sdJ0LOqJ5dmA9Dvvtd4,620
|
23
|
+
openepd/api/org/sync_api.py,sha256=40D4X3Tt0kbN9AAc6DM-LWz_Obsh0zEG07mgQk1gd-k,3177
|
22
24
|
openepd/api/pcr/__init__.py,sha256=9THJcV3LT7JDBOMz1px-QFf_sdJ0LOqJ5dmA9Dvvtd4,620
|
23
|
-
openepd/api/pcr/sync_api.py,sha256=
|
24
|
-
openepd/api/
|
25
|
+
openepd/api/pcr/sync_api.py,sha256=ySc9Hh_fs6gRdfAL5PXkjPUBwcVRkYEEQv0pGjIpjyY,2864
|
26
|
+
openepd/api/plant/__init__.py,sha256=9THJcV3LT7JDBOMz1px-QFf_sdJ0LOqJ5dmA9Dvvtd4,620
|
27
|
+
openepd/api/plant/sync_api.py,sha256=k0jbLrNnFKFjiSKihPbTBG-vSb6lLUM511kO4aPhgPE,3131
|
28
|
+
openepd/api/standard/__init__.py,sha256=9THJcV3LT7JDBOMz1px-QFf_sdJ0LOqJ5dmA9Dvvtd4,620
|
29
|
+
openepd/api/standard/sync_api.py,sha256=ODk8lczxqZn_meTchXjg5T0VZs-nIaB-4rbQBs3yAIA,3274
|
30
|
+
openepd/api/sync_client.py,sha256=DiDSQU0kBd9gU17KrPUvo07pyLv15rGozuWXbkM1JzA,4037
|
25
31
|
openepd/api/test/__init__.py,sha256=9THJcV3LT7JDBOMz1px-QFf_sdJ0LOqJ5dmA9Dvvtd4,620
|
26
32
|
openepd/api/utils.py,sha256=xOU8ihC0eghsoaCFhC85PU4WYRwNxVEpfK3gzq4e9ik,2092
|
27
33
|
openepd/bundle/__init__.py,sha256=9THJcV3LT7JDBOMz1px-QFf_sdJ0LOqJ5dmA9Dvvtd4,620
|
28
|
-
openepd/bundle/base.py,sha256=
|
34
|
+
openepd/bundle/base.py,sha256=ovURf721k9XWe0C8-tmik_bEOrHdOtF1jbN03T5G7M4,6918
|
29
35
|
openepd/bundle/model.py,sha256=bO6GAN_hMmpnYn9LQAHl6bw9cqwphlZZtMCkQZHzP8c,2627
|
30
|
-
openepd/bundle/reader.py,sha256=
|
31
|
-
openepd/bundle/writer.py,sha256=
|
32
|
-
openepd/m49/__init__.py,sha256=
|
33
|
-
openepd/m49/const.py,sha256=
|
34
|
-
openepd/m49/utils.py,sha256=
|
36
|
+
openepd/bundle/reader.py,sha256=9gmcfwzWTUukVtUJbIsJG-Nxumsf1e4wEKCSwmtLLJ4,6936
|
37
|
+
openepd/bundle/writer.py,sha256=nfzpkHqY3jX0x7GGsWMts-9x1vJhjETfnL6lnDAqqJQ,8392
|
38
|
+
openepd/m49/__init__.py,sha256=AApOMp9PJPMXZbPB4piedqKtgHE01mlj_MyF3kf519U,718
|
39
|
+
openepd/m49/const.py,sha256=bkYu6J7dQNVb2-nNkjy97uMpt64vICX5o-PHr0lk_90,31833
|
40
|
+
openepd/m49/utils.py,sha256=vQl0wMXtYS2b7NeLIWilDNUopq3MATmLnhEFcMYTeZA,7256
|
35
41
|
openepd/model/__init__.py,sha256=9THJcV3LT7JDBOMz1px-QFf_sdJ0LOqJ5dmA9Dvvtd4,620
|
36
|
-
openepd/model/base.py,sha256=
|
42
|
+
openepd/model/base.py,sha256=CLE6iMS0hE5AiQo0rUWsatp2bt78DG2dRAWNw78t5T8,10928
|
37
43
|
openepd/model/category.py,sha256=iyzzAsiVwW4zJ61oYsm9Sy-sEBA71-aMFXcJP1Y-dPI,1734
|
38
|
-
openepd/model/common.py,sha256=
|
39
|
-
openepd/model/declaration.py,sha256=
|
40
|
-
openepd/model/epd.py,sha256=
|
41
|
-
openepd/model/factory.py,sha256=
|
42
|
-
openepd/model/generic_estimate.py,sha256=
|
44
|
+
openepd/model/common.py,sha256=D-FmaKk_ay6Of3HdUiloagc2nUiOLp97781BDRZMp8U,14662
|
45
|
+
openepd/model/declaration.py,sha256=v-X2JBOK-7ZYWziEUP7GOSrQFK4pI9EMZvp3Z7-mwwM,14669
|
46
|
+
openepd/model/epd.py,sha256=FL8g-dKb4SaCF_xIrtVx21tmNoofARaxN-yp6_Vv_bY,12748
|
47
|
+
openepd/model/factory.py,sha256=UWSGpfCr3GiMTP4rzBkwqxzbXB6GKZ_5Okb1Dqa_4aA,2701
|
48
|
+
openepd/model/generic_estimate.py,sha256=_R18Uz-hvxtSBl53D0_OkwVCWvoa2nIDjBdec6vEPDE,4304
|
43
49
|
openepd/model/geography.py,sha256=Jx7NIDdk_sIvwyh-7YxnIjAwIHW2HCQK7UtFGM2xKtw,42095
|
44
50
|
openepd/model/industry_epd.py,sha256=Cqn01IUNSZqRkyU05TwtOLXDKlg0YnGzqvKL8A__zbI,4061
|
45
|
-
openepd/model/lcia.py,sha256=
|
46
|
-
openepd/model/org.py,sha256=
|
47
|
-
openepd/model/pcr.py,sha256=
|
51
|
+
openepd/model/lcia.py,sha256=Ug7m_O3DcyxMDxoZYR8eb4Q0tDvGa2PGdavHj7Wxips,27770
|
52
|
+
openepd/model/org.py,sha256=f1tr1A2KaeC9METAArM5n1_mqiCrPYNxZ-mYLEwUh_s,6506
|
53
|
+
openepd/model/pcr.py,sha256=cu3EakCAjBCkcb_AaLXB-xEjY0mlG-wJe74zGc5tdS0,5637
|
48
54
|
openepd/model/specs/README.md,sha256=UGhSiFJ9hOxT1mZl-5ZrhkOrPKf1W_gcu5CI9hzV7LU,2430
|
49
|
-
openepd/model/specs/__init__.py,sha256=
|
50
|
-
openepd/model/specs/asphalt.py,sha256=
|
51
|
-
openepd/model/specs/base.py,sha256=
|
55
|
+
openepd/model/specs/__init__.py,sha256=RMLxvwD-_N5qaU0U2o5LxMKmP_W0_yssl72uTTC2tJg,3904
|
56
|
+
openepd/model/specs/asphalt.py,sha256=Vj9q6ZDwl6Mv8XX_PWVuqVwDIzQ7MEIamysF5cmYteQ,3536
|
57
|
+
openepd/model/specs/base.py,sha256=0dwoChpyj-vnsMlaSEpklZnJkK9C05GbuTYi71AS_FY,2779
|
52
58
|
openepd/model/specs/concrete.py,sha256=gjly5f7QEuaKnYZStMm0CisU0Us1PUa2HmxPyhhmuO0,5573
|
53
|
-
openepd/model/specs/enums.py,sha256=
|
54
|
-
openepd/model/specs/range/__init__.py,sha256=
|
55
|
-
openepd/model/specs/range/accessories.py,sha256=
|
59
|
+
openepd/model/specs/enums.py,sha256=o_9Li-T2CrL73ugiELj_JnI4NqrrgR0rhCswpVR7IS4,63828
|
60
|
+
openepd/model/specs/range/__init__.py,sha256=nV5ODdlIF2o0JZzIkgmzjo5_B3GNqKYEL_FWjyFvM8Y,4536
|
61
|
+
openepd/model/specs/range/accessories.py,sha256=hZYz8mvAqrfLFiOIZ9qQZ59zmEiu0xE61Ko9cQ7NSKU,2498
|
56
62
|
openepd/model/specs/range/aggregates.py,sha256=wnGI6AxtQaaYgCGvqYUuM94JVOBipCBRvFLTwpflsyA,2555
|
57
|
-
openepd/model/specs/range/aluminium.py,sha256=
|
63
|
+
openepd/model/specs/range/aluminium.py,sha256=6fvrm2cyToG_pf7B_vl6QPYjoyWFSctEA8CIi8E1ys4,2741
|
58
64
|
openepd/model/specs/range/asphalt.py,sha256=qd7oGvsIztz2WRMlCfTVqQfRUYBDA-1qzQTiF7tD2O8,3002
|
59
65
|
openepd/model/specs/range/bulk_materials.py,sha256=SuKhmJXMa9jl0CrkYr3QVvPX_GDbr7KATzrSS-fJEU4,1051
|
60
66
|
openepd/model/specs/range/cast_decks_and_underlayment.py,sha256=37fx7jDRy6xryZTVweW_vu78h0kRs5vQurGS-Ypayog,1132
|
61
|
-
openepd/model/specs/range/cladding.py,sha256
|
62
|
-
openepd/model/specs/range/cmu.py,sha256=
|
63
|
-
openepd/model/specs/range/concrete.py,sha256=
|
64
|
-
openepd/model/specs/range/conveying_equipment.py,sha256=
|
65
|
-
openepd/model/specs/range/electrical.py,sha256=
|
66
|
-
openepd/model/specs/range/electrical_transmission_and_distribution_equipment.py,sha256=
|
67
|
+
openepd/model/specs/range/cladding.py,sha256=7sk1wE3V_yt_nwvLFSnIZMjJ5d7OCbMh2MYxqTNHM_4,7277
|
68
|
+
openepd/model/specs/range/cmu.py,sha256=Xi_YL58VPBgfW0I6jqRwsIxnMoVztRfx1IFn3EP9MlM,1851
|
69
|
+
openepd/model/specs/range/concrete.py,sha256=PnvgMzshcB5nvLYMkT41PzixpEtiYtAGOGLixvtEQ5Q,7685
|
70
|
+
openepd/model/specs/range/conveying_equipment.py,sha256=BLuy_FhgERau3fSaGOuP7ZZpe_PH7s0ttVUzB06BjtU,3216
|
71
|
+
openepd/model/specs/range/electrical.py,sha256=NDMcW_D1Twt0xnaUcc1_W-xiPycIlpL4694BPDNh_0I,11945
|
72
|
+
openepd/model/specs/range/electrical_transmission_and_distribution_equipment.py,sha256=xDdyLj6oJRmdybq7W91MtgE80FDpaG6ii5hE921aRGQ,2525
|
67
73
|
openepd/model/specs/range/electricity.py,sha256=yn_S25C_tZqseb8hiJ1yiHszu2mQ49FOFWWCqNpOBY0,997
|
68
|
-
openepd/model/specs/range/
|
69
|
-
openepd/model/specs/range/
|
70
|
-
openepd/model/specs/range/
|
74
|
+
openepd/model/specs/range/exterior_improvements.py,sha256=MRKRXB648H4DkK-kpvrcbNek2mSJKHSoMak_OC9iWVA,1720
|
75
|
+
openepd/model/specs/range/finishes.py,sha256=1CmI0nQtN7AumrahtPBy9IAYd_o-ljiXWoc3JYGvIRM,20316
|
76
|
+
openepd/model/specs/range/fire_and_smoke_protection.py,sha256=5OXhDlPiWQ4AWu9tDuQ1AkpcCnd9rfP9c1GRsOhBSyA,3333
|
77
|
+
openepd/model/specs/range/furnishings.py,sha256=j-uNj2E5GNX-sgSgqSUcp6DosyuYOa36EBNIdIQ7F80,6748
|
71
78
|
openepd/model/specs/range/grouting.py,sha256=BQPxH6BvlXpdhLEZBui9zTuY93K_9syjoa6rdnF8GGY,1095
|
72
|
-
openepd/model/specs/range/manufacturing_inputs.py,sha256=
|
73
|
-
openepd/model/specs/range/masonry.py,sha256=
|
79
|
+
openepd/model/specs/range/manufacturing_inputs.py,sha256=4HzcvNwwfwQKcZKB-seZSaCDpuSeDzci1mWA2P_DQM8,6027
|
80
|
+
openepd/model/specs/range/masonry.py,sha256=KQHdHx8cqE8e5KakNM0Ajn8pKmHVUpSdyc4MfMXUKIc,2908
|
74
81
|
openepd/model/specs/range/material_handling.py,sha256=9jxRHpjMKu71B5omH55UjkNVJvaTLgTMtEidSKPFn5c,1483
|
75
|
-
openepd/model/specs/range/mechanical.py,sha256=
|
82
|
+
openepd/model/specs/range/mechanical.py,sha256=is6R3PpY0W8L1IQS-esDDnHPCls8J8KUpOESNZMxYsY,10463
|
76
83
|
openepd/model/specs/range/mechanical_insulation.py,sha256=eBvNMuW-zZyphay9aKOphwfAv2Uo3AiBR1UG9sOwBnk,1733
|
77
|
-
openepd/model/specs/range/
|
78
|
-
openepd/model/specs/range/
|
84
|
+
openepd/model/specs/range/mixins/__init__.py,sha256=9THJcV3LT7JDBOMz1px-QFf_sdJ0LOqJ5dmA9Dvvtd4,620
|
85
|
+
openepd/model/specs/range/mixins/access_flooring_mixin.py,sha256=pQH7lt7oD3e8g19-_4DEo8xmVU4pnpT-XKQbCwygmbc,2366
|
86
|
+
openepd/model/specs/range/network_infrastructure.py,sha256=nq8g1s7_EKjZNODxnlfMB7ipZ90z5w7TVd6b5EUywkA,8738
|
87
|
+
openepd/model/specs/range/openings.py,sha256=LvpKH1RynTkmuNm4A_ycCLuxuovMtGxggX5b-vz5BUY,15587
|
79
88
|
openepd/model/specs/range/other_electrical_equipment.py,sha256=H4tZHcHyR2uUYHn-bQfLC6hR4tynVp_7EJbiI-YpK7Y,1001
|
80
|
-
openepd/model/specs/range/other_materials.py,sha256=
|
81
|
-
openepd/model/specs/range/plumbing.py,sha256=
|
82
|
-
openepd/model/specs/range/precast_concrete.py,sha256=
|
89
|
+
openepd/model/specs/range/other_materials.py,sha256=RHusAyExYl9n1BDiOFDq2_znEn3MXGxEkunb3BjiC2U,4495
|
90
|
+
openepd/model/specs/range/plumbing.py,sha256=pjdIOvQAat-8e0zqJM7gs30h131mqryU5uCGOdeTRaE,5382
|
91
|
+
openepd/model/specs/range/precast_concrete.py,sha256=i766QYGjnl5_1Ip_6_-x1QpCXSybM0bjN4ESq2njIQ0,3820
|
83
92
|
openepd/model/specs/range/sheathing.py,sha256=FOosFJ8fsyqQnlLTgEqxM4xzDtiYP2jQ7dCf2T4K1O4,3446
|
84
|
-
openepd/model/specs/range/steel.py,sha256=
|
85
|
-
openepd/model/specs/range/thermal_moisture_protection.py,sha256=
|
93
|
+
openepd/model/specs/range/steel.py,sha256=n89gzQhkNLRbRcjTJBzOPpD7epWqJbF6YalMwJoPOBQ,10759
|
94
|
+
openepd/model/specs/range/thermal_moisture_protection.py,sha256=cdr610ZdOlbd3LYzsG3WPgRxicEyK8x51Xvehzz1iwI,9470
|
86
95
|
openepd/model/specs/range/utility_piping.py,sha256=doRcQRfBWvHX7FDDYk-bEU5rVCS_vjZ_5gKslI0xR7Y,2671
|
87
|
-
openepd/model/specs/range/wood.py,sha256=
|
96
|
+
openepd/model/specs/range/wood.py,sha256=WIZOSixS1hlmI66XpL9PhVRZ3ST423A_ihCz2CEbuCk,6914
|
88
97
|
openepd/model/specs/range/wood_joists.py,sha256=PVGJZPdaI685rUI6TS3MZrAFkeMckFGpCYTNJLBr6IM,1786
|
89
|
-
openepd/model/specs/singular/__init__.py,sha256=
|
98
|
+
openepd/model/specs/singular/__init__.py,sha256=pxzA_LgYI-XIlcqYS3VxvcwyFMSYhRkdOYfFOXdsM7c,11611
|
90
99
|
openepd/model/specs/singular/accessories.py,sha256=xcuSJrG84oTm_w76_wlv_sItfK36gSyDmUD2TnpZnVE,2013
|
91
100
|
openepd/model/specs/singular/aggregates.py,sha256=n_AbZK6TJHJ6boyMz6AyikUkMiNlq8G_NOcqEy_A-Sg,2975
|
92
|
-
openepd/model/specs/singular/aluminium.py,sha256=
|
101
|
+
openepd/model/specs/singular/aluminium.py,sha256=rOFEzIVvR2t0QGLN3Zk_Pi_m4v2dMU4PoDQN1hULMn4,2524
|
93
102
|
openepd/model/specs/singular/asphalt.py,sha256=pVOBCaceMKR6eKztVZ-fRk1bgoY0X8QfBr_KCkgvZyM,3488
|
94
103
|
openepd/model/specs/singular/bulk_materials.py,sha256=LKTmh432ak51L0GsVf-40389Lwx-sxZm_jSfzWNfagE,875
|
95
104
|
openepd/model/specs/singular/cast_decks_and_underlayment.py,sha256=HjIEKekxCAKx51XEvH1tthUP6gNTbntDoi8gSu8LjZk,955
|
96
105
|
openepd/model/specs/singular/cladding.py,sha256=KuKNcmkZSKTMVMsNIHQIZ3qkj21_vj_6I7cIladPmo4,6857
|
97
106
|
openepd/model/specs/singular/cmu.py,sha256=J5BqQZyoZA6tGVBxg77jaeFOXLNvLwDmA0qAe8wHgJs,2100
|
98
107
|
openepd/model/specs/singular/common.py,sha256=1WSoihRTeOkdcOPSmcauzyHNyAVspiacAU5lQX9vahk,1030
|
99
|
-
openepd/model/specs/singular/concrete.py,sha256=
|
108
|
+
openepd/model/specs/singular/concrete.py,sha256=dit1AJD3zIRCqv09lkn_Bzya3Vjf6U6Oktib2sMY9dk,9006
|
100
109
|
openepd/model/specs/singular/conveying_equipment.py,sha256=Hcy1zcXKsGIuh303xiRJwDmnEOqyGzhsZoVEz3DpdHY,3203
|
101
|
-
openepd/model/specs/singular/deprecated/__init__.py,sha256=
|
110
|
+
openepd/model/specs/singular/deprecated/__init__.py,sha256=NufJ5lJeuWQ_aV7tHIX_H_StU4fNdGkcEaCA64FOcsA,2619
|
102
111
|
openepd/model/specs/singular/deprecated/concrete.py,sha256=xqHxwFUzy0XEa66e1N1Z3aKt6hhnHhbJ76XiRoe0wtQ,5604
|
103
112
|
openepd/model/specs/singular/deprecated/steel.py,sha256=xqp6rqA49ARY7uvObvnNh-y9cN0WCy0Qz3sMuuIBXPY,3647
|
104
113
|
openepd/model/specs/singular/electrical.py,sha256=lLp8MjAULlnfINi7AayexTGDorSEH_r9OONFcxVHcs4,11598
|
105
114
|
openepd/model/specs/singular/electrical_transmission_and_distribution_equipment.py,sha256=oZYyHgnXn9RH3YzltUEDiiQKrin2mvMlTgC3OhxV7DY,1978
|
106
115
|
openepd/model/specs/singular/electricity.py,sha256=f1cJ9eklNUf97khCIZiT5-z8V_TbOcvH2me_1UTQVrE,823
|
107
|
-
openepd/model/specs/singular/
|
116
|
+
openepd/model/specs/singular/exterior_improvements.py,sha256=f_xJJCVVAlHi5A7v1x9Xu_CIht4M-PstAtabWxDxLMA,1695
|
117
|
+
openepd/model/specs/singular/finishes.py,sha256=To1eHyvgJJTTOCNHXGpX27hMPrnMOcuhUTpvEDv8eRk,22020
|
108
118
|
openepd/model/specs/singular/fire_and_smoke_protection.py,sha256=h8Dy4ps_xfa5g8EQEIN8OHxjH6aDvqmZUFRdEzYy7aY,3081
|
109
119
|
openepd/model/specs/singular/furnishings.py,sha256=-8_96GZala4_xuI6u29OO0KfGA0OctsD3M5Iid2NHvE,5737
|
110
120
|
openepd/model/specs/singular/grouting.py,sha256=pg2tX3W7a2TQ3z_eyFYGlBJY3WEwn6JlZyqM3PQIJcU,934
|
111
|
-
openepd/model/specs/singular/manufacturing_inputs.py,sha256=
|
121
|
+
openepd/model/specs/singular/manufacturing_inputs.py,sha256=JQnyrSRLpP0Ew-d2ieYS-yzlh55PWm5OYbZlWzsdq24,5628
|
112
122
|
openepd/model/specs/singular/masonry.py,sha256=e9siblrPFFSvIjucYkwZzSlpSSZPZ9rA1bdVIDQz-RM,3627
|
113
123
|
openepd/model/specs/singular/material_handling.py,sha256=iEeUx1hNKla669y0zl-QAJn6xA7ceq75aRG8qT0p56Q,1274
|
114
124
|
openepd/model/specs/singular/mechanical.py,sha256=q-89Ch0uTlEqFRXM5QPgkmf23L-xyCzVK_mQ33pU4UA,10191
|
115
125
|
openepd/model/specs/singular/mechanical_insulation.py,sha256=OjgDkH9ft2mxsfYveuwozCT6x-WrF_XC9V9KbEYKwuQ,1616
|
116
126
|
openepd/model/specs/singular/mixins/__init__.py,sha256=9THJcV3LT7JDBOMz1px-QFf_sdJ0LOqJ5dmA9Dvvtd4,620
|
127
|
+
openepd/model/specs/singular/mixins/access_flooring_mixin.py,sha256=gM5H6lTjj2eytYnzt-4PaJ_dc8wNH_gJzBazJb83j5E,3083
|
117
128
|
openepd/model/specs/singular/mixins/conduit_mixin.py,sha256=H5rbXIy3lpiU_Rub3_f7cECtQE2odu1-nIKuRjtO6ts,1959
|
118
129
|
openepd/model/specs/singular/network_infrastructure.py,sha256=QGMIFzexHH94phkFw7iYl-fTZ_514dwYgvC-2sHjOZw,9316
|
119
130
|
openepd/model/specs/singular/openings.py,sha256=fcYBvSJW64fBArvs0ajcRXRegE07p-YmURICmLA8ilY,19544
|
@@ -122,20 +133,20 @@ openepd/model/specs/singular/other_materials.py,sha256=_00_fCPn7G_-HVKC1cQcNvBDf
|
|
122
133
|
openepd/model/specs/singular/plumbing.py,sha256=dP6r7xy2yeP8ICEBN79CfJqyDiuwpTtDnURBfWmFWPs,4639
|
123
134
|
openepd/model/specs/singular/precast_concrete.py,sha256=25vn5UxiQbhsNisqBF9_GYASMl3D1iuDWxfnV5HOV4k,7567
|
124
135
|
openepd/model/specs/singular/sheathing.py,sha256=J1lHRo0eTcWGhqwLHGnEZq3SHJkVCvSedvg2lGuwDyo,3995
|
125
|
-
openepd/model/specs/singular/steel.py,sha256=
|
136
|
+
openepd/model/specs/singular/steel.py,sha256=I3mg71KI_ok9fNZEezczWIl6ExTUNKvYaq-fY5-272w,11026
|
126
137
|
openepd/model/specs/singular/thermal_moisture_protection.py,sha256=ZtN1yfED959eMqpdLASge06OZzCseurtPzXrmi8LSjo,8363
|
127
138
|
openepd/model/specs/singular/utility_piping.py,sha256=kHflrQpCFGW54daIWwbhb0rvWoPy1Zwa6KGD8eB5ryQ,2522
|
128
139
|
openepd/model/specs/singular/wood.py,sha256=ChvILu6Pkend3O-45Fs-FrK0n5yWlu5BFZVYrCv5_TQ,6810
|
129
140
|
openepd/model/specs/singular/wood_joists.py,sha256=WhS8_Og8e4cCEd43v00njGNvjLdfCwAabO7XOogC5o4,1829
|
130
141
|
openepd/model/standard.py,sha256=5y57ZakJ9nbvz1Hxx8Uo6jISNMGg9kg2kBeBZrjBB5g,1744
|
131
142
|
openepd/model/validation/__init__.py,sha256=9THJcV3LT7JDBOMz1px-QFf_sdJ0LOqJ5dmA9Dvvtd4,620
|
132
|
-
openepd/model/validation/common.py,sha256=
|
133
|
-
openepd/model/validation/enum.py,sha256=
|
143
|
+
openepd/model/validation/common.py,sha256=SsYgCOoO2sJYm4VzI2tBmukXMrzwvbncEdkLlJk0cMA,2533
|
144
|
+
openepd/model/validation/enum.py,sha256=0nRnjwmObw8ERQYWRWbovZjm90CMHi1Sc-UeNxCFnsc,1846
|
134
145
|
openepd/model/validation/numbers.py,sha256=9THJcV3LT7JDBOMz1px-QFf_sdJ0LOqJ5dmA9Dvvtd4,620
|
135
|
-
openepd/model/validation/quantity.py,sha256=
|
136
|
-
openepd/model/versioning.py,sha256=
|
146
|
+
openepd/model/validation/quantity.py,sha256=M9dz3byTK6Lrys43I0Gq7n2b0aE8WYys-idxi6bKCII,21755
|
147
|
+
openepd/model/versioning.py,sha256=LldrNjPjVBsVTWyJrBe6VoI19B0d47QXbHk_6omXPxc,4561
|
137
148
|
openepd/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
138
|
-
openepd-7.
|
139
|
-
openepd-7.
|
140
|
-
openepd-7.
|
141
|
-
openepd-7.
|
149
|
+
openepd-7.2.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
150
|
+
openepd-7.2.0.dist-info/METADATA,sha256=ApO7NYw6zL9cNkbOPtnwL_qQn4p7cg0pD3mSWkgYPvg,9063
|
151
|
+
openepd-7.2.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
152
|
+
openepd-7.2.0.dist-info/RECORD,,
|
File without changes
|