openepd 4.12.0__tar.gz → 4.13.0__tar.gz
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-4.12.0 → openepd-4.13.0}/PKG-INFO +1 -1
- {openepd-4.12.0 → openepd-4.13.0}/pyproject.toml +2 -1
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/__version__.py +1 -1
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/base.py +30 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/declaration.py +36 -4
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/epd.py +2 -34
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/pcr.py +3 -3
- {openepd-4.12.0 → openepd-4.13.0}/LICENSE +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/README.md +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/__init__.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/api/__init__.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/api/average_dataset/__init__.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/api/average_dataset/generic_estimate_sync_api.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/api/average_dataset/industry_epd_sync_api.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/api/base_sync_client.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/api/category/__init__.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/api/category/dto.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/api/category/sync_api.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/api/common.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/api/dto/__init__.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/api/dto/base.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/api/dto/common.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/api/dto/meta.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/api/dto/mf.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/api/dto/params.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/api/epd/__init__.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/api/epd/dto.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/api/epd/sync_api.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/api/errors.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/api/pcr/__init__.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/api/pcr/sync_api.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/api/sync_client.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/api/test/__init__.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/api/utils.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/bundle/__init__.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/bundle/base.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/bundle/model.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/bundle/reader.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/bundle/writer.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/compat/__init__.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/compat/compat_functional_validators.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/compat/pydantic.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/__init__.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/category.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/common.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/factory.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/generic_estimate.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/geography.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/industry_epd.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/lcia.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/org.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/README.md +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/__init__.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/asphalt.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/base.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/concrete.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/__init__.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/accessories.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/aggregates.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/aluminium.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/asphalt.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/bulk_materials.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/cast_decks_and_underlayment.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/cladding.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/cmu.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/common.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/concrete.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/conveying_equipment.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/electrical.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/electrical_transmission_and_distribution_equipment.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/electricity.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/enums.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/finishes.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/fire_and_smoke_protection.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/furnishings.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/grouting.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/manufacturing_inputs.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/masonry.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/material_handling.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/mechanical.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/mechanical_insulation.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/mixins/__init__.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/mixins/conduit_mixin.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/network_infrastructure.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/openings.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/other_electrical_equipment.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/other_materials.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/plumbing.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/precast_concrete.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/sheathing.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/steel.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/thermal_moisture_protection.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/utility_piping.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/wood.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/wood_joists.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/standard.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/validation/__init__.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/validation/common.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/validation/numbers.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/validation/quantity.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/versioning.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/patch_pydantic.py +0 -0
- {openepd-4.12.0 → openepd-4.13.0}/src/openepd/py.typed +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
[tool.poetry]
|
2
2
|
name = "openepd"
|
3
|
-
version = "4.
|
3
|
+
version = "4.13.0"
|
4
4
|
license = "Apache-2.0"
|
5
5
|
description = "Python library to work with OpenEPD format"
|
6
6
|
authors = ["C-Change Labs <support@c-change-labs.com>"]
|
@@ -37,6 +37,7 @@ pytest-subtests = "~=0.4"
|
|
37
37
|
pytest-cov = "~=4.0"
|
38
38
|
teamcity-messages = ">=1.31"
|
39
39
|
wheel = "~=0.40.0"
|
40
|
+
open-xpd-uuid = "~=0.2.1"
|
40
41
|
|
41
42
|
# Dev tools
|
42
43
|
black = "~=24.3"
|
@@ -18,6 +18,8 @@ from enum import StrEnum
|
|
18
18
|
import json
|
19
19
|
from typing import Any, Callable, ClassVar, Generic, Optional, Type, TypeAlias, TypeVar
|
20
20
|
|
21
|
+
from cqd import open_xpd_uuid # type:ignore[import-untyped]
|
22
|
+
|
21
23
|
from openepd.compat.pydantic import pyd, pyd_generics
|
22
24
|
from openepd.model.validation.common import validate_version_compatibility, validate_version_format
|
23
25
|
from openepd.model.versioning import OpenEpdVersions, Version
|
@@ -233,3 +235,31 @@ class BaseDocumentFactory(Generic[TRootDocument]):
|
|
233
235
|
)
|
234
236
|
supported_versions = ", ".join(f"{v.major}.x" for v in cls.VERSION_MAP.keys())
|
235
237
|
raise ValueError(f"Version {version} is not supported. Supported versions are: {supported_versions}")
|
238
|
+
|
239
|
+
|
240
|
+
class OpenXpdUUID(str):
|
241
|
+
"""
|
242
|
+
An open xpd UUID format for IDs of openEPD documents.
|
243
|
+
|
244
|
+
See https://github.com/cchangelabs/open-xpd-uuid-lib for details.
|
245
|
+
"""
|
246
|
+
|
247
|
+
def _validate_id(cls, v: str | None) -> str | None:
|
248
|
+
if v is None:
|
249
|
+
return v
|
250
|
+
|
251
|
+
try:
|
252
|
+
open_xpd_uuid.validate(open_xpd_uuid.sanitize(str(v)))
|
253
|
+
return v
|
254
|
+
except open_xpd_uuid.GuidValidationError as e:
|
255
|
+
raise ValueError("Invalid format") from e
|
256
|
+
|
257
|
+
@classmethod
|
258
|
+
def __get_validators__(cls):
|
259
|
+
yield cls._validate_id
|
260
|
+
|
261
|
+
@classmethod
|
262
|
+
def __modify_schema__(cls, field_schema):
|
263
|
+
field_schema.update(
|
264
|
+
example="XC300001",
|
265
|
+
)
|
@@ -17,7 +17,7 @@ import abc
|
|
17
17
|
import datetime
|
18
18
|
|
19
19
|
from openepd.compat.pydantic import pyd
|
20
|
-
from openepd.model.base import BaseOpenEpdSchema, RootDocument
|
20
|
+
from openepd.model.base import BaseOpenEpdSchema, OpenXpdUUID, RootDocument
|
21
21
|
from openepd.model.common import Amount
|
22
22
|
from openepd.model.geography import Geography
|
23
23
|
from openepd.model.org import Org
|
@@ -34,8 +34,7 @@ THIRD_PARTY_VERIFIER_DESCRIPTION = "JSON object for Org that performed a critica
|
|
34
34
|
class BaseDeclaration(RootDocument, abc.ABC):
|
35
35
|
"""Base class for declaration-related documents (EPDs, Industry-wide EPDs, Generic Estimates)."""
|
36
36
|
|
37
|
-
|
38
|
-
id: str | None = pyd.Field(
|
37
|
+
id: OpenXpdUUID | None = pyd.Field(
|
39
38
|
description="The unique ID for this document. To ensure global uniqueness, should be registered at "
|
40
39
|
"open-xpd-uuid.cqd.io/register or a coordinating registry.",
|
41
40
|
example="1u7zsed8",
|
@@ -127,6 +126,39 @@ class BaseDeclaration(RootDocument, abc.ABC):
|
|
127
126
|
""",
|
128
127
|
)
|
129
128
|
|
129
|
+
product_image_small: pyd.AnyUrl | None = pyd.Field(
|
130
|
+
description="Pointer to image illustrating the product, which is no more than 200x200 pixels", default=None
|
131
|
+
)
|
132
|
+
product_image: pyd.AnyUrl | pyd.FileUrl | None = pyd.Field(
|
133
|
+
description="pointer to image illustrating the product no more than 10MB", default=None
|
134
|
+
)
|
135
|
+
declaration_url: str | None = pyd.Field(
|
136
|
+
description="Link to data object on original registrar's site",
|
137
|
+
example="https://epd-online.com/EmbeddedEpdList/Download/6029",
|
138
|
+
)
|
139
|
+
kg_C_per_declared_unit: AmountMass | None = pyd.Field(
|
140
|
+
default=None,
|
141
|
+
description="Mass of elemental carbon, per declared unit, contained in the product itself at the manufacturing "
|
142
|
+
"facility gate. Used (among other things) to check a carbon balance or calculate incineration "
|
143
|
+
"emissions. The source of carbon (e.g. biogenic) is not relevant in this field.",
|
144
|
+
example=Amount(qty=8.76, unit="kg"),
|
145
|
+
)
|
146
|
+
kg_C_biogenic_per_declared_unit: AmountMass | None = pyd.Field(
|
147
|
+
default=None,
|
148
|
+
description="Mass of elemental carbon from biogenic sources, per declared unit, contained in the product "
|
149
|
+
"itself at the manufacturing facility gate. It may be presumed that any biogenic carbon content "
|
150
|
+
"has been accounted for as -44/12 kgCO2e per kg C in stages A1-A3, per EN15804 and ISO 21930.",
|
151
|
+
example=Amount(qty=8.76, unit="kg"),
|
152
|
+
)
|
153
|
+
product_service_life_years: float | None = pyd.Field(
|
154
|
+
gt=0.0009,
|
155
|
+
lt=101,
|
156
|
+
description="Reference service life of the product, in years. Serves as a maximum for replacement interval, "
|
157
|
+
"which may also be constrained by usage or the service life of what the product goes into "
|
158
|
+
"(e.g. a building).",
|
159
|
+
example=50.0,
|
160
|
+
)
|
161
|
+
|
130
162
|
|
131
163
|
class AverageDatasetMixin(pyd.BaseModel, title="Average Dataset"):
|
132
164
|
"""Fields common for average dataset (Industry-wide EPDs, Generic Estimates)."""
|
@@ -185,7 +217,7 @@ class WithEpdDeveloperMixin(pyd.BaseModel):
|
|
185
217
|
class RefBase(BaseOpenEpdSchema, title="Ref Object"):
|
186
218
|
"""Base class for reference-style objects."""
|
187
219
|
|
188
|
-
id:
|
220
|
+
id: OpenXpdUUID | None = pyd.Field(
|
189
221
|
description="The unique ID for this object. To ensure global uniqueness, should be registered at "
|
190
222
|
"open-xpd-uuid.cqd.io/register or a coordinating registry.",
|
191
223
|
example="1u7zsed8",
|
@@ -17,7 +17,7 @@ from typing import Annotated
|
|
17
17
|
|
18
18
|
from openepd.compat.pydantic import pyd
|
19
19
|
from openepd.model.base import BaseDocumentFactory, OpenEpdDoctypes
|
20
|
-
from openepd.model.common import
|
20
|
+
from openepd.model.common import Ingredient, WithAltIdsMixin, WithAttachmentsMixin
|
21
21
|
from openepd.model.declaration import (
|
22
22
|
DEVELOPER_DESCRIPTION,
|
23
23
|
PROGRAM_OPERATOR_DESCRIPTION,
|
@@ -30,7 +30,6 @@ from openepd.model.declaration import (
|
|
30
30
|
from openepd.model.lcia import WithLciaMixin
|
31
31
|
from openepd.model.org import Org, Plant
|
32
32
|
from openepd.model.specs import Specs
|
33
|
-
from openepd.model.validation.quantity import AmountMass
|
34
33
|
from openepd.model.versioning import OpenEpdVersions, Version
|
35
34
|
|
36
35
|
MANUFACTURER_DESCRIPTION = (
|
@@ -69,44 +68,13 @@ class EpdPreviewV0(
|
|
69
68
|
max_length=2000,
|
70
69
|
description="1-paragraph description of product. Supports plain text or github flavored markdown.",
|
71
70
|
)
|
72
|
-
product_image_small: pyd.AnyUrl | None = pyd.Field(
|
73
|
-
description="Pointer to image illustrating the product, which is no more than 200x200 pixels", default=None
|
74
|
-
)
|
75
|
-
product_image: pyd.AnyUrl | pyd.FileUrl | None = pyd.Field(
|
76
|
-
description="pointer to image illustrating the product no more than 10MB", default=None
|
77
|
-
)
|
78
|
-
declaration_url: str | None = pyd.Field(
|
79
|
-
description="Link to data object on original registrar's site",
|
80
|
-
example="https://epd-online.com/EmbeddedEpdList/Download/6029",
|
81
|
-
)
|
82
71
|
manufacturer: Org | None = pyd.Field(description=MANUFACTURER_DESCRIPTION)
|
83
72
|
plants: list[Plant] = pyd.Field(
|
84
73
|
max_items=32,
|
85
74
|
description="List of object(s) for one or more plant(s) that this declaration applies to.",
|
86
75
|
default_factory=list,
|
87
76
|
)
|
88
|
-
|
89
|
-
default=None,
|
90
|
-
description="Mass of elemental carbon, per declared unit, contained in the product itself at the manufacturing "
|
91
|
-
"facility gate. Used (among other things) to check a carbon balance or calculate incineration "
|
92
|
-
"emissions. The source of carbon (e.g. biogenic) is not relevant in this field.",
|
93
|
-
example=Amount(qty=8.76, unit="kg"),
|
94
|
-
)
|
95
|
-
kg_C_biogenic_per_declared_unit: AmountMass | None = pyd.Field(
|
96
|
-
default=None,
|
97
|
-
description="Mass of elemental carbon from biogenic sources, per declared unit, contained in the product "
|
98
|
-
"itself at the manufacturing facility gate. It may be presumed that any biogenic carbon content "
|
99
|
-
"has been accounted for as -44/12 kgCO2e per kg C in stages A1-A3, per EN15804 and ISO 21930.",
|
100
|
-
example=Amount(qty=8.76, unit="kg"),
|
101
|
-
)
|
102
|
-
product_service_life_years: float | None = pyd.Field(
|
103
|
-
gt=0.0009,
|
104
|
-
lt=101,
|
105
|
-
description="Reference service life of the product, in years. Serves as a maximum for replacement interval, "
|
106
|
-
"which may also be constrained by usage or the service life of what the product goes into "
|
107
|
-
"(e.g. a building).",
|
108
|
-
example=50.0,
|
109
|
-
)
|
77
|
+
|
110
78
|
annual_production: float | None = pyd.Field(
|
111
79
|
gt=0,
|
112
80
|
default=None,
|
@@ -18,7 +18,7 @@ from enum import StrEnum
|
|
18
18
|
from typing import Annotated, Optional
|
19
19
|
|
20
20
|
from openepd.compat.pydantic import pyd
|
21
|
-
from openepd.model.base import BaseOpenEpdSchema
|
21
|
+
from openepd.model.base import BaseOpenEpdSchema, OpenXpdUUID
|
22
22
|
from openepd.model.common import Amount, WithAltIdsMixin, WithAttachmentsMixin
|
23
23
|
from openepd.model.org import Org
|
24
24
|
|
@@ -36,7 +36,7 @@ class PcrStatus(StrEnum):
|
|
36
36
|
class PcrRef(BaseOpenEpdSchema):
|
37
37
|
"""Reference to a PCR."""
|
38
38
|
|
39
|
-
id:
|
39
|
+
id: OpenXpdUUID | None = pyd.Field(
|
40
40
|
description="The unique ID for this PCR. To ensure global uniqueness, should be registered "
|
41
41
|
"at open-xpd-uuid.cqd.io/register or a coordinating registry.",
|
42
42
|
example="ec3xpgq2",
|
@@ -56,7 +56,7 @@ class PcrRef(BaseOpenEpdSchema):
|
|
56
56
|
class Pcr(WithAttachmentsMixin, WithAltIdsMixin, BaseOpenEpdSchema):
|
57
57
|
"""Represent a PCR (Product Category Rules)."""
|
58
58
|
|
59
|
-
id:
|
59
|
+
id: OpenXpdUUID | None = pyd.Field(
|
60
60
|
description="The unique ID for this PCR. To ensure global uniqueness, should be registered "
|
61
61
|
"at open-xpd-uuid.cqd.io/register or a coordinating registry.",
|
62
62
|
example="ec3xpgq2",
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{openepd-4.12.0 → openepd-4.13.0}/src/openepd/api/average_dataset/generic_estimate_sync_api.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/cast_decks_and_underlayment.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/fire_and_smoke_protection.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/mechanical_insulation.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/network_infrastructure.py
RENAMED
File without changes
|
File without changes
|
{openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/other_electrical_equipment.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{openepd-4.12.0 → openepd-4.13.0}/src/openepd/model/specs/generated/thermal_moisture_protection.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|