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.
Files changed (77) hide show
  1. openepd/__version__.py +1 -1
  2. openepd/api/average_dataset/generic_estimate_sync_api.py +2 -1
  3. openepd/api/average_dataset/industry_epd_sync_api.py +2 -1
  4. openepd/api/base_sync_client.py +10 -8
  5. openepd/api/common.py +17 -11
  6. openepd/api/dto/common.py +1 -1
  7. openepd/api/epd/sync_api.py +2 -1
  8. openepd/api/org/__init__.py +15 -0
  9. openepd/api/org/sync_api.py +79 -0
  10. openepd/api/pcr/sync_api.py +35 -0
  11. openepd/api/plant/__init__.py +15 -0
  12. openepd/api/plant/sync_api.py +79 -0
  13. openepd/api/standard/__init__.py +15 -0
  14. openepd/api/standard/sync_api.py +79 -0
  15. openepd/api/sync_client.py +27 -0
  16. openepd/bundle/base.py +5 -4
  17. openepd/bundle/reader.py +13 -7
  18. openepd/bundle/writer.py +11 -6
  19. openepd/m49/__init__.py +2 -0
  20. openepd/m49/const.py +1 -1
  21. openepd/m49/utils.py +16 -10
  22. openepd/model/base.py +20 -15
  23. openepd/model/common.py +10 -5
  24. openepd/model/declaration.py +2 -2
  25. openepd/model/epd.py +2 -1
  26. openepd/model/factory.py +5 -3
  27. openepd/model/generic_estimate.py +4 -0
  28. openepd/model/lcia.py +10 -10
  29. openepd/model/org.py +14 -7
  30. openepd/model/pcr.py +2 -2
  31. openepd/model/specs/__init__.py +37 -0
  32. openepd/model/specs/asphalt.py +3 -3
  33. openepd/model/specs/base.py +2 -1
  34. openepd/model/specs/enums.py +9 -1
  35. openepd/model/specs/range/__init__.py +5 -3
  36. openepd/model/specs/range/accessories.py +1 -1
  37. openepd/model/specs/range/aluminium.py +1 -1
  38. openepd/model/specs/range/cladding.py +10 -10
  39. openepd/model/specs/range/cmu.py +0 -2
  40. openepd/model/specs/range/concrete.py +25 -2
  41. openepd/model/specs/range/conveying_equipment.py +2 -2
  42. openepd/model/specs/range/electrical.py +18 -18
  43. openepd/model/specs/range/electrical_transmission_and_distribution_equipment.py +1 -1
  44. openepd/model/specs/range/exterior_improvements.py +47 -0
  45. openepd/model/specs/range/finishes.py +19 -40
  46. openepd/model/specs/range/fire_and_smoke_protection.py +3 -3
  47. openepd/model/specs/range/furnishings.py +7 -7
  48. openepd/model/specs/range/manufacturing_inputs.py +17 -5
  49. openepd/model/specs/range/masonry.py +1 -1
  50. openepd/model/specs/range/mechanical.py +6 -6
  51. openepd/model/specs/range/mixins/__init__.py +15 -0
  52. openepd/model/specs/range/mixins/access_flooring_mixin.py +43 -0
  53. openepd/model/specs/range/network_infrastructure.py +3 -3
  54. openepd/model/specs/range/openings.py +17 -17
  55. openepd/model/specs/range/other_materials.py +4 -4
  56. openepd/model/specs/range/plumbing.py +5 -5
  57. openepd/model/specs/range/precast_concrete.py +2 -2
  58. openepd/model/specs/range/steel.py +18 -9
  59. openepd/model/specs/range/thermal_moisture_protection.py +12 -12
  60. openepd/model/specs/range/wood.py +4 -6
  61. openepd/model/specs/singular/__init__.py +119 -2
  62. openepd/model/specs/singular/aluminium.py +2 -1
  63. openepd/model/specs/singular/concrete.py +25 -1
  64. openepd/model/specs/singular/deprecated/__init__.py +1 -1
  65. openepd/model/specs/singular/exterior_improvements.py +47 -0
  66. openepd/model/specs/singular/finishes.py +3 -59
  67. openepd/model/specs/singular/manufacturing_inputs.py +13 -1
  68. openepd/model/specs/singular/mixins/access_flooring_mixin.py +55 -0
  69. openepd/model/specs/singular/steel.py +10 -2
  70. openepd/model/validation/common.py +10 -6
  71. openepd/model/validation/enum.py +4 -2
  72. openepd/model/validation/quantity.py +13 -6
  73. openepd/model/versioning.py +8 -6
  74. {openepd-7.1.0.dist-info → openepd-7.2.0.dist-info}/METADATA +3 -4
  75. {openepd-7.1.0.dist-info → openepd-7.2.0.dist-info}/RECORD +77 -66
  76. {openepd-7.1.0.dist-info → openepd-7.2.0.dist-info}/WHEEL +1 -1
  77. {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 typing import Annotated, Any, Callable, Type, TypeAlias
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
- raise ValueError(f"Both or neither {field1} and {field2} days must be provided together")
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[[Type, str], str]:
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: Type, v: str) -> str:
45
+ def internal_validate_version_compatibility(cls: type, v: str) -> str:
44
46
  if not hasattr(cls, class_version_attribute_name):
45
- raise ValueError(f"Class {cls} must declare a class var extension var named {class_version_attribute_name}")
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
- raise ValueError(f"Extension version {v} does not match class version {class_version}")
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
@@ -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 typing import Any, Callable
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
- raise ValueError(f"Values {', '.join(matching_from_group)} are not allowed together.")
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 typing import TYPE_CHECKING, Any, Callable, ClassVar
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) -> 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
- raise ValueError("`unit` is required for dimensionality-validated amounts")
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
- """Length (mm)."""
500
+ """Pressure (MPa)."""
494
501
 
495
502
  pass
496
503
 
@@ -44,7 +44,8 @@ class Version(NamedTuple):
44
44
 
45
45
  @staticmethod
46
46
  def parse_version(version: str | None) -> "Version":
47
- """Parse the version of extension or the format.
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
- raise ValueError(f"Invalid version: {version}")
60
+ msg = f"Invalid version: {version}"
61
+ raise ValueError(msg)
60
62
  if not splits[0].isdigit() or not splits[1].isdigit():
61
- raise ValueError(f"Invalid version: {version}")
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
- raise ValueError(
119
- f"No version {branch}.x is not supported. Supported versions are: {', '.join(str(x.value) for x in cls)}"
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
1
+ Metadata-Version: 2.3
2
2
  Name: openepd
3
- Version: 7.1.0
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.buildingtransparency.org/programs/openepd/).
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=YE_JkVAHWAazVwAceVI_tNykuQM3UyXJiDIfU2dySlI,638
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=SRIs-qmb_wO7ELumeP1DLXJbVUtdBJ4CToecoCIsPAQ,8015
6
- openepd/api/average_dataset/industry_epd_sync_api.py,sha256=b3oBjt-HIZuuHd6qDTJgHAIBHV73FCIZSc8cLq-htXE,6338
7
- openepd/api/base_sync_client.py,sha256=lVOn8d_EM6-Vwn99poRt1IEyLmDwatXDOH1D68F0LQ8,21739
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=bLSER3RQQFR4lyEuxQPKNjTaa3S0K8fFi8x4QRAPM_g,8812
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=qwZaquepK1vQrOHVSzP5hMVy8klwrfqmpTSfrJ-YBs0,4489
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=QN62LQH3sHLvCqCVo2MGgN9ZvoTxIsdleEypyW3m-zA,7365
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=bWa6PyU0xT1sZzG4nAHUo83gjo3YcP5QUxVXOMFNQH0,1567
24
- openepd/api/sync_client.py,sha256=reD_OXsaVOvUvnC-cyp5aq8sKSOH2Z8xmImxV2ClQIM,3105
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=Ou2zlAV7VRKp7Lxu8h4k56OLEMwn5F1nrEEF_ies_lE,6869
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=_kKOCcCtHF-DuezifsArvyUzDMAK2vs4pJB6cNttTeA,6801
31
- openepd/bundle/writer.py,sha256=ZWQKVRfd0wrys1R4rOabK8KFvwNhUpeBdK9KGS-yt5Q,8283
32
- openepd/m49/__init__.py,sha256=vkXC6i8OeCl5K88JUIRN_NKfsAIpNIaN-fyPmmd-Lfk,689
33
- openepd/m49/const.py,sha256=buspTHOOWhkBXWUIS0oqvQ0y1L7y70Y_PXilkiBIKD4,31819
34
- openepd/m49/utils.py,sha256=Qm8HvxAZlQncsyUYDO0lG0feMFFnT4HQPNSMp78W4zU,7111
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=zSV_tgZZsd2x0jgmwfrrncGDTr0QINTDkPJDubk-W7Q,10811
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=TxcLcYDgAgHtS-go8xYzPYnWTHLuE8bUebiVrXMXf5M,14544
39
- openepd/model/declaration.py,sha256=1NT3NhaYI_5u1K9ErfphOSFMY6r1-97qpBYNxuCmbs0,14687
40
- openepd/model/epd.py,sha256=KACR_2tbbk0eltaL37MvDxqdJUDWXtiqYGW0_bWl7v4,12730
41
- openepd/model/factory.py,sha256=doexyqZXJVGd45T1JsbjuyGUjEykW-MerKUq4SQHhRY,2656
42
- openepd/model/generic_estimate.py,sha256=RGNrGNwaqY42m6nRrwmDZYO_Gy2EhOBZn6g0EAWiDHs,4224
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=swKO8vAISpesYzF-w7HHLjckVhCb3jj3dv4FbIwp3Ak,27749
46
- openepd/model/org.py,sha256=1ALm91OyJrvyFjkJ1hWQWGKO5fDdYQE8lMWEVZRUPrs,6348
47
- openepd/model/pcr.py,sha256=W_GjmMwFxZGLnbbU7khoYziSvOxxd6Id4xBdhitq_SE,5655
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=YcAvn0h_Bhz_Cb4-uEl8DiBI82nXogQsocB-c2zvr_A,3094
50
- openepd/model/specs/asphalt.py,sha256=6jAZEBkB4hpwcSDvwVUGiNXgg3W3NElgdhS9caVpocI,3545
51
- openepd/model/specs/base.py,sha256=X_1TiMmTSSoOtZlbRl0jqzo1agX_QivQL4gToGNQeRY,2757
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=_WMe0l8ZKPIGQG53A1rB_Sv_p2izr8Zemg9AEEYOU2g,63638
54
- openepd/model/specs/range/__init__.py,sha256=ZXgsyzn_c6H2SPCo5hTVZOjRqlCf0HvVVMDQ4RGaPSU,4502
55
- openepd/model/specs/range/accessories.py,sha256=wnOv1V_uatA6g_9QVfZaSp-rNLbyZ_KS-t3wlHaeEsI,2498
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=U58Sg6TJi0CfqOtoiNT4M8uwx9H2jlTPxmMWCt-JKHc,2741
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=-cBYQrABiTbByl-ZioHKBmTL2h-SjukeSJdNTLY7FgQ,7277
62
- openepd/model/specs/range/cmu.py,sha256=Syfk4gJzWNzBQcKsPKgVcQQutR2syruM1ZJUJ1FdCdU,1879
63
- openepd/model/specs/range/concrete.py,sha256=BIeM1ozlfjLqohMTfdFPxmk6cIKg19MwYXyVhoHL1i8,7064
64
- openepd/model/specs/range/conveying_equipment.py,sha256=AvSg6PqK-GcFt-aUCTsaBhjPyEjGfVPu61QiHscQt1M,3216
65
- openepd/model/specs/range/electrical.py,sha256=jebPfOwDCzUS5ppCXbZBcgQLtMNYl__f5P0hGOfiE10,11945
66
- openepd/model/specs/range/electrical_transmission_and_distribution_equipment.py,sha256=rbdmHvz9nRMgcWrCGVnN0xXSl5ZezuwArOZ_4xCQIgM,2525
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/finishes.py,sha256=gJnMvjhivQC0jnKizKcrwn1Y7UJjrK_emixigQhbbfE,21792
69
- openepd/model/specs/range/fire_and_smoke_protection.py,sha256=KLH5t3d-a2cppF5i-uW4233z1vAPbJIY1zTn89_gV4k,3333
70
- openepd/model/specs/range/furnishings.py,sha256=LWu88Y7QEuq7IdNCKQG5v0u0PAWpG919gxkMdmm5Sig,6748
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=iqK4QS-T5vyjMQtl5v63Feb99qSNwKS0kM-1izoJTzA,5615
73
- openepd/model/specs/range/masonry.py,sha256=egeqDr0K3eTFDHeIzFHrg9_u9d6XIHOSmBPnBERkvxY,2908
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=4_onG6dMjYDvpFe7NmF_gPFwI0N52CAZty4YwDUqx4E,10463
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/network_infrastructure.py,sha256=WPudKji72n46SXDGCEV9PMWD-zheZd7rvBJv3cZ0L3E,8738
78
- openepd/model/specs/range/openings.py,sha256=icQFUQLwhoWc5GFrnxUJuQ6pxUzSxTWMdQHyQ342TUM,15587
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=k7Gv6YvWy43B-QFBabBt-TkvkC450Pz2a2pz9t6r4OU,4495
81
- openepd/model/specs/range/plumbing.py,sha256=GS-q4nMOaE1aoPwHmDXEjlG7xuZOl0veovZraSSQcc4,5382
82
- openepd/model/specs/range/precast_concrete.py,sha256=9bNluxpGuQ_7HqA5rpvg9FJHeMyrGSIH-c1M9Mzz2qQ,3820
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=T4vk8g9X2PUbkm8pfjAvcZ7Y0iN7ErpNZapp89l0lIg,10547
85
- openepd/model/specs/range/thermal_moisture_protection.py,sha256=BOZZTNA9mHTaImN4J484LYnYTvv3joBX5OkH6LGBklc,9470
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=0Prq5n3n_-DEFe4-fBKDj9zCu2NdBD7ysCun7DRhT_o,6942
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=xN6exBUHRoaM-30YfLPfB4UrLLcQo55MOfK70Dg5KIQ,6945
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=n25EvcrwYNkz4OvZbu4FH008owSkC8B8j7qEHGefTD0,2519
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=w7_fvJri1bY1f1sEe6kuxvbjg2iiwDPTh-6Kx5CzHCY,8257
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=OmC79bG2zbDcaPZAjSx5T506h2D7QJXMJOkXSSf8LVo,2617
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/finishes.py,sha256=8BtFK2_olB8OJQFv8rxf7afoLhqlJI1o2tEKopidOGA,24398
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=OBy7Lzm1TbC8kGxE3YXIXeyrqIPqf2_rXcGEN7MEMBw,5233
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=rrWAyz6w5bgV2lR6H93dLZ_ruwr8N67vATh9nIHS6eU,10809
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=ZlpByfGzCHZuGfj9p0S_uG8NoGy9ezJVZmwAITp7gR8,2450
133
- openepd/model/validation/enum.py,sha256=ttODVtMEQaBemMFywGUNlXU4bAM25FiBlVDKZbOv2iY,1793
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=zsyNGygYW4GGeWAtyM9708lFdEuebtSctr3qIfNdEXQ,21720
136
- openepd/model/versioning.py,sha256=de53OlduidxAkDlSbAu6xrIy2IUuCnwI69vUJPCXX_8,4512
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.1.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
139
- openepd-7.1.0.dist-info/METADATA,sha256=xmx2tvBuvOMpEzJ_ViXm82pnWkZQ1_XqqnaBBMo11So,9137
140
- openepd-7.1.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
141
- openepd-7.1.0.dist-info/RECORD,,
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,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 1.9.1
2
+ Generator: poetry-core 2.1.3
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any