openepd 7.0.1__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 +27 -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 +17 -17
- 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/furnishings.py +10 -10
- 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.0.1.dist-info → openepd-7.2.0.dist-info}/METADATA +5 -4
- {openepd-7.0.1.dist-info → openepd-7.2.0.dist-info}/RECORD +78 -67
- {openepd-7.0.1.dist-info → openepd-7.2.0.dist-info}/WHEEL +1 -1
- {openepd-7.0.1.dist-info → openepd-7.2.0.dist-info}/LICENSE +0 -0
@@ -28,6 +28,7 @@ from openepd.model.specs.enums import (
|
|
28
28
|
MasonryCementAstmC91Type,
|
29
29
|
TextilesFabricType,
|
30
30
|
)
|
31
|
+
from openepd.model.specs.singular.mixins.access_flooring_mixin import AccessFlooringMixin
|
31
32
|
|
32
33
|
|
33
34
|
class CementV1(BaseOpenEpdHierarchicalSpec):
|
@@ -141,6 +142,16 @@ class TextilesV1(BaseOpenEpdHierarchicalSpec):
|
|
141
142
|
fabric_type: list[TextilesFabricType] | None = pydantic.Field(default=None, description="", examples=[["Leather"]])
|
142
143
|
|
143
144
|
|
145
|
+
class AccessFlooringPanelsV1(BaseOpenEpdHierarchicalSpec, AccessFlooringMixin):
|
146
|
+
"""
|
147
|
+
Part of an access floor system.
|
148
|
+
|
149
|
+
Panels are laid on top of an access floor pedestal, creating a finish floor.
|
150
|
+
"""
|
151
|
+
|
152
|
+
_EXT_VERSION = "1.0"
|
153
|
+
|
154
|
+
|
144
155
|
class ManufacturingInputsV1(BaseOpenEpdHierarchicalSpec):
|
145
156
|
"""
|
146
157
|
Manufacturing inputs.
|
@@ -149,7 +160,7 @@ class ManufacturingInputsV1(BaseOpenEpdHierarchicalSpec):
|
|
149
160
|
a construction.
|
150
161
|
"""
|
151
162
|
|
152
|
-
_EXT_VERSION = "1.
|
163
|
+
_EXT_VERSION = "1.1"
|
153
164
|
|
154
165
|
# Nested specs:
|
155
166
|
AccessFlooringPedestals: AccessFlooringPedestalsV1 | None = None
|
@@ -158,3 +169,4 @@ class ManufacturingInputsV1(BaseOpenEpdHierarchicalSpec):
|
|
158
169
|
CementitiousMaterials: CementitiousMaterialsV1 | None = None
|
159
170
|
ConcreteAdmixtures: ConcreteAdmixturesV1 | None = None
|
160
171
|
Textiles: TextilesV1 | None = None
|
172
|
+
AccessFlooringPanels: AccessFlooringPanelsV1 | None = None
|
@@ -0,0 +1,55 @@
|
|
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
|
+
import pydantic as pyd
|
17
|
+
|
18
|
+
from openepd.model.specs.base import BaseOpenEpdSpec
|
19
|
+
from openepd.model.specs.enums import (
|
20
|
+
AccessFlooringCoreMaterial,
|
21
|
+
AccessFlooringFinishMaterial,
|
22
|
+
AccessFlooringSeismicRating,
|
23
|
+
AccessFlooringStringers,
|
24
|
+
)
|
25
|
+
from openepd.model.validation.quantity import ForceNStr, LengthMmStr, PressureMPaStr, validate_quantity_unit_factory
|
26
|
+
|
27
|
+
|
28
|
+
class AccessFlooringMixin(BaseOpenEpdSpec):
|
29
|
+
core_material: AccessFlooringCoreMaterial | None = pyd.Field(
|
30
|
+
default=None, description="", examples=["Cementitious"]
|
31
|
+
)
|
32
|
+
finish_material: AccessFlooringFinishMaterial | None = pyd.Field(
|
33
|
+
default=None, description="", examples=["Linoleum"]
|
34
|
+
)
|
35
|
+
stringers: AccessFlooringStringers | None = pyd.Field(default=None, description="", examples=["Standard"])
|
36
|
+
seismic_rating: AccessFlooringSeismicRating | None = pyd.Field(default=None, description="", examples=["Type 0"])
|
37
|
+
magnetically_attached_finish: bool | None = pyd.Field(default=None, description="", examples=[True])
|
38
|
+
permanent_finish: bool | None = pyd.Field(default=None, description="", examples=[True])
|
39
|
+
drylay: bool | None = pyd.Field(default=None, description="", examples=[True])
|
40
|
+
adjustable_height: bool | None = pyd.Field(default=None, description="", examples=[True])
|
41
|
+
fixed_height: bool | None = pyd.Field(default=None, description="", examples=[True])
|
42
|
+
finished_floor_height: LengthMmStr | None = pyd.Field(default=None, description="", examples=["1 m"])
|
43
|
+
panel_thickness: LengthMmStr | None = pyd.Field(default=None, description="", examples=["1 m"])
|
44
|
+
concentrated_load: PressureMPaStr | None = pyd.Field(default=None, description="", examples=["1 MPa"])
|
45
|
+
uniform_load: PressureMPaStr | None = pyd.Field(default=None, description="", examples=["1 MPa"])
|
46
|
+
rolling_load_10_pass: ForceNStr | None = pyd.Field(default=None, description="", examples=["1 N"])
|
47
|
+
rolling_load_10000_pass: ForceNStr | None = pyd.Field(default=None, description="", examples=["1 N"])
|
48
|
+
|
49
|
+
@pyd.field_validator("rolling_load_10_pass", mode="before", check_fields=False)
|
50
|
+
def _access_flooring_rolling_load_10_pass_is_quantity_validator(cls, value):
|
51
|
+
return validate_quantity_unit_factory("N")(cls, value)
|
52
|
+
|
53
|
+
@pyd.field_validator("rolling_load_10000_pass", mode="before", check_fields=False)
|
54
|
+
def _access_flooring_rolling_load_10000_pass_is_quantity_validator(cls, value):
|
55
|
+
return validate_quantity_unit_factory("N")(cls, value)
|
@@ -89,7 +89,8 @@ class HotRolledSectionsV1(BaseOpenEpdHierarchicalSpec, SteelFabricatedMixin):
|
|
89
89
|
|
90
90
|
|
91
91
|
class PlateSteelV1(BaseOpenEpdHierarchicalSpec, SteelFabricatedMixin):
|
92
|
-
"""
|
92
|
+
"""
|
93
|
+
Plate Steels.
|
93
94
|
|
94
95
|
Flat hot-rolled steel, typically thicker than 'sheet', made by compressing multiple steel
|
95
96
|
layers together into one.
|
@@ -260,10 +261,16 @@ class OtherSteelV1(BaseOpenEpdHierarchicalSpec):
|
|
260
261
|
_EXT_VERSION = "1.0"
|
261
262
|
|
262
263
|
|
264
|
+
class CrudeSteelV1(BaseOpenEpdHierarchicalSpec):
|
265
|
+
"""Steel ingots, billets, blooms, and slabs for use in manufacturing steel products."""
|
266
|
+
|
267
|
+
_EXT_VERSION = "1.0"
|
268
|
+
|
269
|
+
|
263
270
|
class SteelV1(BaseOpenEpdHierarchicalSpec):
|
264
271
|
"""Broad category for construction materials made from steel and its alloys."""
|
265
272
|
|
266
|
-
_EXT_VERSION = "1.
|
273
|
+
_EXT_VERSION = "1.2"
|
267
274
|
|
268
275
|
# Own fields:
|
269
276
|
yield_tensile_str: PressureMPaStr | None = pydantic.Field(
|
@@ -327,3 +334,4 @@ class SteelV1(BaseOpenEpdHierarchicalSpec):
|
|
327
334
|
RebarSteel: RebarSteelV1 | None = None
|
328
335
|
WireMeshSteel: WireMeshSteelV1 | None = None
|
329
336
|
OtherSteel: OtherSteelV1 | None = None
|
337
|
+
CrudeSteel: CrudeSteelV1 | 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
|
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.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
|
@@ -15,6 +14,8 @@ Classifier: License :: OSI Approved :: Apache Software License
|
|
15
14
|
Classifier: Operating System :: OS Independent
|
16
15
|
Classifier: Programming Language :: Python :: 3
|
17
16
|
Classifier: Programming Language :: Python :: 3.11
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
18
19
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
19
20
|
Provides-Extra: api-client
|
20
21
|
Requires-Dist: email-validator (>=1.3.1)
|
@@ -58,7 +59,7 @@ including uniqueness of organizations/plants, precise PCR references, and dated
|
|
58
59
|
The openEPD format is **extensible**. Standard extensions exist for concrete products, and for
|
59
60
|
documenting supply-chain specific data.
|
60
61
|
|
61
|
-
[Read More about OpenEPD format here](https://www.
|
62
|
+
[Read More about OpenEPD format here](https://www.open-epd-forum.org).
|
62
63
|
|
63
64
|
## Usage
|
64
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
|
-
openepd/model/specs/singular/furnishings.py,sha256
|
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.0.
|
139
|
-
openepd-7.0.
|
140
|
-
openepd-7.0.
|
141
|
-
openepd-7.0.
|
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
|