openepd 6.18.0__py3-none-any.whl → 6.20.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/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/model/specs/enums.py +1 -0
- openepd/model/specs/range/concrete.py +24 -1
- openepd/model/specs/singular/concrete.py +25 -1
- {openepd-6.18.0.dist-info → openepd-6.20.0.dist-info}/METADATA +1 -1
- {openepd-6.18.0.dist-info → openepd-6.20.0.dist-info}/RECORD +16 -10
- {openepd-6.18.0.dist-info → openepd-6.20.0.dist-info}/LICENSE +0 -0
- {openepd-6.18.0.dist-info → openepd-6.20.0.dist-info}/WHEEL +0 -0
openepd/__version__.py
CHANGED
@@ -0,0 +1,15 @@
|
|
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
|
+
#
|
@@ -0,0 +1,79 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2025 by C Change Labs Inc. www.c-change-labs.com
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
from typing import Literal, overload
|
17
|
+
|
18
|
+
from requests import Response
|
19
|
+
|
20
|
+
from openepd.api.base_sync_client import BaseApiMethodGroup
|
21
|
+
from openepd.api.utils import encode_path_param
|
22
|
+
from openepd.model.org import Org, OrgRef
|
23
|
+
|
24
|
+
|
25
|
+
class OrgApi(BaseApiMethodGroup):
|
26
|
+
"""API methods for Orgs."""
|
27
|
+
|
28
|
+
@overload
|
29
|
+
def create(self, to_create: Org, with_response: Literal[True]) -> tuple[OrgRef, Response]: ...
|
30
|
+
|
31
|
+
@overload
|
32
|
+
def create(self, to_create: Org, with_response: Literal[False] = False) -> OrgRef: ...
|
33
|
+
|
34
|
+
def create(self, to_create: Org, with_response: bool = False) -> OrgRef | tuple[OrgRef, Response]:
|
35
|
+
"""
|
36
|
+
Create a new organization.
|
37
|
+
|
38
|
+
:param to_create: Organization to create
|
39
|
+
:param with_response: if True, return a tuple of (OrgRef, Response), otherwise return only OrgRef
|
40
|
+
:return: Organization reference or Organization reference with HTTP Response object depending on parameter
|
41
|
+
:raise ValidationError: if given object Org is invalid
|
42
|
+
"""
|
43
|
+
response = self._client.do_request("post", "/orgs", json=to_create.to_serializable())
|
44
|
+
content = response.json()
|
45
|
+
ref = OrgRef.parse_obj(content)
|
46
|
+
if with_response:
|
47
|
+
return ref, response
|
48
|
+
return ref
|
49
|
+
|
50
|
+
@overload
|
51
|
+
def edit(self, to_edit: Org, with_response: Literal[True]) -> tuple[OrgRef, Response]: ...
|
52
|
+
|
53
|
+
@overload
|
54
|
+
def edit(self, to_edit: Org, with_response: Literal[False] = False) -> OrgRef: ...
|
55
|
+
|
56
|
+
def edit(self, to_edit: Org, with_response: bool = False) -> OrgRef | tuple[OrgRef, Response]:
|
57
|
+
"""
|
58
|
+
Edit an organization.
|
59
|
+
|
60
|
+
:param to_edit: Organization to edit
|
61
|
+
:param with_response: if True, return a tuple of (OrgRef, Response), otherwise return only Org
|
62
|
+
:return: Organization reference or Organization reference with HTTP Response object depending on parameter
|
63
|
+
:raise ValueError: if the organization web_domain is not set
|
64
|
+
"""
|
65
|
+
entity_id = to_edit.web_domain
|
66
|
+
if not entity_id:
|
67
|
+
msg = "The organization web_domain must be set to edit an organization."
|
68
|
+
raise ValueError(msg)
|
69
|
+
response = self._client.do_request(
|
70
|
+
"put",
|
71
|
+
f"/orgs/{encode_path_param(entity_id)}",
|
72
|
+
json=to_edit.to_serializable(exclude_unset=True, exclude_defaults=True, by_alias=True),
|
73
|
+
)
|
74
|
+
response.raise_for_status()
|
75
|
+
content = response.json()
|
76
|
+
ref = OrgRef.parse_obj(content)
|
77
|
+
if with_response:
|
78
|
+
return ref, response
|
79
|
+
return ref
|
openepd/api/pcr/sync_api.py
CHANGED
@@ -13,7 +13,12 @@
|
|
13
13
|
# See the License for the specific language governing permissions and
|
14
14
|
# limitations under the License.
|
15
15
|
#
|
16
|
+
from typing import Literal, overload
|
17
|
+
|
18
|
+
from requests import Response
|
19
|
+
|
16
20
|
from openepd.api.base_sync_client import BaseApiMethodGroup
|
21
|
+
from openepd.api.utils import encode_path_param
|
17
22
|
from openepd.model.pcr import Pcr, PcrRef
|
18
23
|
|
19
24
|
|
@@ -42,3 +47,33 @@ class PcrApi(BaseApiMethodGroup):
|
|
42
47
|
"""
|
43
48
|
pcr_ref_obj = self._client.do_request("post", "/pcrs", json=pcr.to_serializable()).json()
|
44
49
|
return PcrRef.parse_obj(pcr_ref_obj)
|
50
|
+
|
51
|
+
@overload
|
52
|
+
def edit(self, to_edit: Pcr, with_response: Literal[True]) -> tuple[PcrRef, Response]: ...
|
53
|
+
|
54
|
+
@overload
|
55
|
+
def edit(self, to_edit: Pcr, with_response: Literal[False] = False) -> PcrRef: ...
|
56
|
+
|
57
|
+
def edit(self, to_edit: Pcr, with_response: bool = False) -> PcrRef | tuple[PcrRef, Response]:
|
58
|
+
"""
|
59
|
+
Edit a pcr.
|
60
|
+
|
61
|
+
:param to_edit: Pcr to edit
|
62
|
+
:param with_response: if True, return a tuple of (PcrRef, Response), otherwise return only PcrRef
|
63
|
+
:return: Pcr reference or Pcr reference with HTTP Response object depending on parameter
|
64
|
+
:raise ValueError: if the pcr ID is not set
|
65
|
+
"""
|
66
|
+
entity_id = to_edit.id
|
67
|
+
if not entity_id:
|
68
|
+
msg = "The pcr ID must be set to edit a pcr."
|
69
|
+
raise ValueError(msg)
|
70
|
+
response = self._client.do_request(
|
71
|
+
"put",
|
72
|
+
f"/pcrs/{encode_path_param(entity_id)}",
|
73
|
+
json=to_edit.to_serializable(exclude_unset=True, exclude_defaults=True, by_alias=True),
|
74
|
+
)
|
75
|
+
content = response.json()
|
76
|
+
ref = PcrRef.parse_obj(content)
|
77
|
+
if with_response:
|
78
|
+
return ref, response
|
79
|
+
return ref
|
@@ -0,0 +1,15 @@
|
|
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
|
+
#
|
@@ -0,0 +1,79 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2025 by C Change Labs Inc. www.c-change-labs.com
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
from typing import Literal, overload
|
17
|
+
|
18
|
+
from requests import Response
|
19
|
+
|
20
|
+
from openepd.api.base_sync_client import BaseApiMethodGroup
|
21
|
+
from openepd.api.utils import encode_path_param
|
22
|
+
from openepd.model.org import Plant, PlantRef
|
23
|
+
|
24
|
+
|
25
|
+
class PlantApi(BaseApiMethodGroup):
|
26
|
+
"""API methods for Plants."""
|
27
|
+
|
28
|
+
@overload
|
29
|
+
def create(self, to_create: Plant, with_response: Literal[True]) -> tuple[PlantRef, Response]: ...
|
30
|
+
|
31
|
+
@overload
|
32
|
+
def create(self, to_create: Plant, with_response: Literal[False] = False) -> PlantRef: ...
|
33
|
+
|
34
|
+
def create(self, to_create: Plant, with_response: bool = False) -> PlantRef | tuple[PlantRef, Response]:
|
35
|
+
"""
|
36
|
+
Create a new plant.
|
37
|
+
|
38
|
+
:param to_create: Plant to create
|
39
|
+
:param with_response: if True, return a tuple of (PlantRef, Response), otherwise return only PlantRef
|
40
|
+
:return: Plant reference or Plant reference with HTTP Response object depending on parameter
|
41
|
+
:raise ValidationError: if given object Plant is invalid
|
42
|
+
"""
|
43
|
+
response = self._client.do_request("post", "/plants", json=to_create.to_serializable())
|
44
|
+
content = response.json()
|
45
|
+
ref = PlantRef.parse_obj(content)
|
46
|
+
if with_response:
|
47
|
+
return ref, response
|
48
|
+
return ref
|
49
|
+
|
50
|
+
@overload
|
51
|
+
def edit(self, to_edit: Plant, with_response: Literal[True]) -> tuple[PlantRef, Response]: ...
|
52
|
+
|
53
|
+
@overload
|
54
|
+
def edit(self, to_edit: Plant, with_response: Literal[False] = False) -> PlantRef: ...
|
55
|
+
|
56
|
+
def edit(self, to_edit: Plant, with_response: bool = False) -> PlantRef | tuple[PlantRef, Response]:
|
57
|
+
"""
|
58
|
+
Edit a plant.
|
59
|
+
|
60
|
+
:param to_edit: Plant to edit
|
61
|
+
:param with_response: if True, return a tuple of (PlantRef, Response), otherwise return only PlantRef
|
62
|
+
:return: Plant reference or Plant reference with HTTP Response object depending on parameter
|
63
|
+
:raise ValueError: if the plant ID is not set
|
64
|
+
"""
|
65
|
+
entity_id = to_edit.id
|
66
|
+
if not entity_id:
|
67
|
+
msg = "The plant ID must be set to edit a plant."
|
68
|
+
raise ValueError(msg)
|
69
|
+
response = self._client.do_request(
|
70
|
+
"put",
|
71
|
+
f"/plants/{encode_path_param(entity_id)}",
|
72
|
+
json=to_edit.to_serializable(exclude_unset=True, exclude_defaults=True, by_alias=True),
|
73
|
+
)
|
74
|
+
response.raise_for_status()
|
75
|
+
content = response.json()
|
76
|
+
ref = PlantRef.parse_obj(content)
|
77
|
+
if with_response:
|
78
|
+
return ref, response
|
79
|
+
return ref
|
@@ -0,0 +1,15 @@
|
|
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
|
+
#
|
@@ -0,0 +1,79 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2025 by C Change Labs Inc. www.c-change-labs.com
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
from typing import Literal, overload
|
17
|
+
|
18
|
+
from requests import Response
|
19
|
+
|
20
|
+
from openepd.api.base_sync_client import BaseApiMethodGroup
|
21
|
+
from openepd.api.utils import encode_path_param
|
22
|
+
from openepd.model.standard import Standard, StandardRef
|
23
|
+
|
24
|
+
|
25
|
+
class StandardApi(BaseApiMethodGroup):
|
26
|
+
"""API methods for Standards."""
|
27
|
+
|
28
|
+
@overload
|
29
|
+
def create(self, to_create: Standard, with_response: Literal[True]) -> tuple[StandardRef, Response]: ...
|
30
|
+
|
31
|
+
@overload
|
32
|
+
def create(self, to_create: Standard, with_response: Literal[False] = False) -> StandardRef: ...
|
33
|
+
|
34
|
+
def create(self, to_create: Standard, with_response: bool = False) -> StandardRef | tuple[StandardRef, Response]:
|
35
|
+
"""
|
36
|
+
Create a new standard.
|
37
|
+
|
38
|
+
:param to_create: Standard to create
|
39
|
+
:param with_response: if True, return a tuple of (StandardRef, Response), otherwise return only StandardRef
|
40
|
+
:return: Standard reference or Standard reference with HTTP Response object depending on parameter
|
41
|
+
:raise ValidationError: if given object Standard is invalid
|
42
|
+
"""
|
43
|
+
response = self._client.do_request("post", "/standards", json=to_create.to_serializable())
|
44
|
+
content = response.json()
|
45
|
+
ref = StandardRef.parse_obj(content)
|
46
|
+
if with_response:
|
47
|
+
return ref, response
|
48
|
+
return ref
|
49
|
+
|
50
|
+
@overload
|
51
|
+
def edit(self, to_edit: Standard, with_response: Literal[True]) -> tuple[StandardRef, Response]: ...
|
52
|
+
|
53
|
+
@overload
|
54
|
+
def edit(self, to_edit: Standard, with_response: Literal[False] = False) -> StandardRef: ...
|
55
|
+
|
56
|
+
def edit(self, to_edit: Standard, with_response: bool = False) -> StandardRef | tuple[StandardRef, Response]:
|
57
|
+
"""
|
58
|
+
Edit a standard.
|
59
|
+
|
60
|
+
:param to_edit: Standard to edit
|
61
|
+
:param with_response: if True, return a tuple of (StandardRef, Response), otherwise return only StandardRef
|
62
|
+
:return: Standard reference or Standard reference with HTTP Response object depending on parameter
|
63
|
+
:raise ValueError: if the standard short_name is not set
|
64
|
+
"""
|
65
|
+
entity_id = to_edit.short_name
|
66
|
+
if not entity_id:
|
67
|
+
msg = "The standard short_name must be set to edit a standard."
|
68
|
+
raise ValueError(msg)
|
69
|
+
response = self._client.do_request(
|
70
|
+
"put",
|
71
|
+
f"/standards/{encode_path_param(entity_id)}",
|
72
|
+
json=to_edit.to_serializable(exclude_unset=True, exclude_defaults=True, by_alias=True),
|
73
|
+
)
|
74
|
+
response.raise_for_status()
|
75
|
+
content = response.json()
|
76
|
+
ref = StandardRef.parse_obj(content)
|
77
|
+
if with_response:
|
78
|
+
return ref, response
|
79
|
+
return ref
|
openepd/api/sync_client.py
CHANGED
@@ -22,7 +22,10 @@ from openepd.api.average_dataset.industry_epd_sync_api import IndustryEpdApi
|
|
22
22
|
from openepd.api.base_sync_client import SyncHttpClient, TokenAuth
|
23
23
|
from openepd.api.category.sync_api import CategoryApi
|
24
24
|
from openepd.api.epd.sync_api import EpdApi
|
25
|
+
from openepd.api.org.sync_api import OrgApi
|
25
26
|
from openepd.api.pcr.sync_api import PcrApi
|
27
|
+
from openepd.api.plant.sync_api import PlantApi
|
28
|
+
from openepd.api.standard.sync_api import StandardApi
|
26
29
|
|
27
30
|
|
28
31
|
class OpenEpdApiClientSync:
|
@@ -41,6 +44,9 @@ class OpenEpdApiClientSync:
|
|
41
44
|
self._http_client = SyncHttpClient(base_url, auth=auth, **kwargs)
|
42
45
|
self.__epd_api: EpdApi | None = None
|
43
46
|
self.__pcr_api: PcrApi | None = None
|
47
|
+
self.__org_api: OrgApi | None = None
|
48
|
+
self.__plant_api: PlantApi | None = None
|
49
|
+
self.__standard_api: StandardApi | None = None
|
44
50
|
self.__category_api: CategoryApi | None = None
|
45
51
|
self.__generic_estimate_api: GenericEstimateApi | None = None
|
46
52
|
self.__industry_epd_api: IndustryEpdApi | None = None
|
@@ -59,6 +65,27 @@ class OpenEpdApiClientSync:
|
|
59
65
|
self.__pcr_api = PcrApi(self._http_client)
|
60
66
|
return self.__pcr_api
|
61
67
|
|
68
|
+
@property
|
69
|
+
def orgs(self) -> OrgApi:
|
70
|
+
"""Get the Org API."""
|
71
|
+
if self.__org_api is None:
|
72
|
+
self.__org_api = OrgApi(self._http_client)
|
73
|
+
return self.__org_api
|
74
|
+
|
75
|
+
@property
|
76
|
+
def plants(self) -> PlantApi:
|
77
|
+
"""Get the Plant API."""
|
78
|
+
if self.__plant_api is None:
|
79
|
+
self.__plant_api = PlantApi(self._http_client)
|
80
|
+
return self.__plant_api
|
81
|
+
|
82
|
+
@property
|
83
|
+
def standards(self) -> StandardApi:
|
84
|
+
"""Get the Standard API."""
|
85
|
+
if self.__standard_api is None:
|
86
|
+
self.__standard_api = StandardApi(self._http_client)
|
87
|
+
return self.__standard_api
|
88
|
+
|
62
89
|
@property
|
63
90
|
def categories(self) -> CategoryApi:
|
64
91
|
"""Get the Category API."""
|
openepd/model/specs/enums.py
CHANGED
@@ -121,6 +121,27 @@ class ShotcreteRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
121
121
|
_EXT_VERSION = "1.0"
|
122
122
|
|
123
123
|
|
124
|
+
class OtherConcreteRangeV1(BaseOpenEpdHierarchicalSpec):
|
125
|
+
"""
|
126
|
+
Other Concrete.
|
127
|
+
|
128
|
+
Range version.
|
129
|
+
"""
|
130
|
+
|
131
|
+
_EXT_VERSION = "1.0"
|
132
|
+
|
133
|
+
|
134
|
+
class CellularConcreteRangeV1(BaseOpenEpdHierarchicalSpec):
|
135
|
+
"""
|
136
|
+
Cellular concrete is typically composed of cementitious material, water, and pre-formed foam with air entrainment.
|
137
|
+
|
138
|
+
Such a product is a homogeneous void or cell structure.
|
139
|
+
It is self-compacting and can be pumped over extensive heights and distances.
|
140
|
+
"""
|
141
|
+
|
142
|
+
_EXT_VERSION = "1.0"
|
143
|
+
|
144
|
+
|
124
145
|
class ConcreteRangeV1(BaseOpenEpdHierarchicalSpec):
|
125
146
|
"""
|
126
147
|
Concrete.
|
@@ -131,7 +152,7 @@ class ConcreteRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
131
152
|
Range version.
|
132
153
|
"""
|
133
154
|
|
134
|
-
_EXT_VERSION = "1.
|
155
|
+
_EXT_VERSION = "1.1"
|
135
156
|
|
136
157
|
lightweight: bool | None = pyd.Field(default=None, description="Product is lightweight")
|
137
158
|
strength_28d: AmountRangePressureMpa | None = pyd.Field(default=None, description="Concrete strength after 28 days")
|
@@ -177,3 +198,5 @@ class ConcreteRangeV1(BaseOpenEpdHierarchicalSpec):
|
|
177
198
|
OilPatch: OilPatchRangeV1 | None = None
|
178
199
|
ReadyMix: ReadyMixRangeV1 | None = None
|
179
200
|
Shotcrete: ShotcreteRangeV1 | None = None
|
201
|
+
OtherConcrete: OtherConcreteRangeV1 | None = None
|
202
|
+
CellularConcrete: CellularConcreteRangeV1 | None = None
|
@@ -99,6 +99,28 @@ class ShotcreteV1(BaseOpenEpdHierarchicalSpec):
|
|
99
99
|
_EXT_VERSION = "1.0"
|
100
100
|
|
101
101
|
|
102
|
+
class CellularConcreteV1(BaseOpenEpdHierarchicalSpec):
|
103
|
+
"""
|
104
|
+
Cellular concrete is typically composed of cementitious material, water, and pre-formed foam with air entrainment.
|
105
|
+
|
106
|
+
Such a product is a homogeneous void or cell structure.
|
107
|
+
It is self-compacting and can be pumped over extensive heights and distances.
|
108
|
+
"""
|
109
|
+
|
110
|
+
_EXT_VERSION = "1.0"
|
111
|
+
|
112
|
+
|
113
|
+
class OtherConcreteV1(BaseOpenEpdHierarchicalSpec):
|
114
|
+
"""
|
115
|
+
Other Concrete Products.
|
116
|
+
|
117
|
+
Other types of concrete products that are not captured by existing concrete categories.
|
118
|
+
Could include products such as patching concrete or additives
|
119
|
+
"""
|
120
|
+
|
121
|
+
_EXT_VERSION = "1.0"
|
122
|
+
|
123
|
+
|
102
124
|
class ConcreteV1(BaseOpenEpdHierarchicalSpec):
|
103
125
|
"""
|
104
126
|
Concrete.
|
@@ -107,7 +129,7 @@ class ConcreteV1(BaseOpenEpdHierarchicalSpec):
|
|
107
129
|
hardens over time.
|
108
130
|
"""
|
109
131
|
|
110
|
-
_EXT_VERSION = "1.
|
132
|
+
_EXT_VERSION = "1.1"
|
111
133
|
|
112
134
|
# Own fields:
|
113
135
|
lightweight: bool | None = pyd.Field(default=None, description="Product is lightweight", example=True)
|
@@ -173,6 +195,8 @@ class ConcreteV1(BaseOpenEpdHierarchicalSpec):
|
|
173
195
|
OilPatch: OilPatchV1 | None = None
|
174
196
|
ReadyMix: ReadyMixV1 | None = None
|
175
197
|
Shotcrete: ShotcreteV1 | None = None
|
198
|
+
OtherConcrete: OtherConcreteV1 | None = None
|
199
|
+
CellularConcrete: CellularConcreteV1 | None = None
|
176
200
|
|
177
201
|
_aci_exposure_classes_exclusive_groups_validator = pyd.validator("aci_exposure_classes", allow_reuse=True)(
|
178
202
|
exclusive_groups_validator_factory(AciExposureClass)
|
@@ -1,5 +1,5 @@
|
|
1
1
|
openepd/__init__.py,sha256=fhxfEyEurLvSfvQci-vb3njzl_lvhcLXiZrecCOaMU8,794
|
2
|
-
openepd/__version__.py,sha256=
|
2
|
+
openepd/__version__.py,sha256=qqFv4TdG_QezASXat2Iyq25c6fS3PUY0MuIdqETulzQ,639
|
3
3
|
openepd/api/__init__.py,sha256=9THJcV3LT7JDBOMz1px-QFf_sdJ0LOqJ5dmA9Dvvtd4,620
|
4
4
|
openepd/api/average_dataset/__init__.py,sha256=9THJcV3LT7JDBOMz1px-QFf_sdJ0LOqJ5dmA9Dvvtd4,620
|
5
5
|
openepd/api/average_dataset/generic_estimate_sync_api.py,sha256=_eZt_jGVL1a3p9cr-EF39Ve9Vl5sB8zwzTc_slnRL50,7975
|
@@ -19,9 +19,15 @@ openepd/api/epd/__init__.py,sha256=9THJcV3LT7JDBOMz1px-QFf_sdJ0LOqJ5dmA9Dvvtd4,6
|
|
19
19
|
openepd/api/epd/dto.py,sha256=MqhHjaNdtOc-KT2zNI88EB9-1d2a6CS2zzSus8HefBo,4874
|
20
20
|
openepd/api/epd/sync_api.py,sha256=kBsx43q0cBm51hl3HVvzMIDrMMRi8NMyudPmHYd0qqU,7342
|
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=VzOrd3eB1xPVLyrKlZl3OwXIQ5nT3808sA6N7MNBu7w,3167
|
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=JWiegxoSnD2JElYORp6QdkbO3jDNhrNKxJR6orsD1TI,2849
|
26
|
+
openepd/api/plant/__init__.py,sha256=9THJcV3LT7JDBOMz1px-QFf_sdJ0LOqJ5dmA9Dvvtd4,620
|
27
|
+
openepd/api/plant/sync_api.py,sha256=cryGfKojyXV78RxIPRTGscWuLnkdgTNJAw9RkxrbZWI,3121
|
28
|
+
openepd/api/standard/__init__.py,sha256=9THJcV3LT7JDBOMz1px-QFf_sdJ0LOqJ5dmA9Dvvtd4,620
|
29
|
+
openepd/api/standard/sync_api.py,sha256=Oj_Os3yBPk7y7hXDvQbzr-AyX-z2b82jzbN7AuiK3Go,3264
|
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
|
@@ -53,7 +59,7 @@ openepd/model/specs/__init__.py,sha256=toVWd8_jxmAf7gRwpoXQpLfZW6Cl-NwveoduMXhEC
|
|
53
59
|
openepd/model/specs/asphalt.py,sha256=eHhcITbBrNYR5N6x4Q2BxpsR64BR9OkjJ4bvPRYOqMg,3411
|
54
60
|
openepd/model/specs/base.py,sha256=10IDyRFKQgFnyIPSqpeayP8Og1BDgs1EepXX5dyCMM4,2674
|
55
61
|
openepd/model/specs/concrete.py,sha256=D9jbhZDtTXNBoAgljQBPxsmGsMvLSIAP5H53ZYiXcGI,5336
|
56
|
-
openepd/model/specs/enums.py,sha256=
|
62
|
+
openepd/model/specs/enums.py,sha256=6vNIDqt2kI-JKp9EBP9vhis935tfAS31znZ7v7LHb8s,63083
|
57
63
|
openepd/model/specs/range/__init__.py,sha256=nV5ODdlIF2o0JZzIkgmzjo5_B3GNqKYEL_FWjyFvM8Y,4536
|
58
64
|
openepd/model/specs/range/accessories.py,sha256=hZYz8mvAqrfLFiOIZ9qQZ59zmEiu0xE61Ko9cQ7NSKU,2498
|
59
65
|
openepd/model/specs/range/aggregates.py,sha256=udVbsYc1Lyrd6a4YZBGNDQ3sBi-L3WLub_e1ecq7U-Q,2549
|
@@ -63,7 +69,7 @@ openepd/model/specs/range/bulk_materials.py,sha256=SuKhmJXMa9jl0CrkYr3QVvPX_GDbr
|
|
63
69
|
openepd/model/specs/range/cast_decks_and_underlayment.py,sha256=37fx7jDRy6xryZTVweW_vu78h0kRs5vQurGS-Ypayog,1132
|
64
70
|
openepd/model/specs/range/cladding.py,sha256=r7M2lc77NR2GXBkgkqRzskQ6TdZeMd7pEEm8ecHb8rc,7236
|
65
71
|
openepd/model/specs/range/cmu.py,sha256=Sv4yw6121LSgYhW4J82xKsIi1KucaeDVF7xmpZtoCt8,1833
|
66
|
-
openepd/model/specs/range/concrete.py,sha256=
|
72
|
+
openepd/model/specs/range/concrete.py,sha256=CwRJ_0lJ6zRFwaiom3jrp50BSTiB9mIGL3ujcygZwfs,7528
|
67
73
|
openepd/model/specs/range/conveying_equipment.py,sha256=_rqJ9Y3kkP8E6-vkZb6Pih3JnR1nUESJoOLf-LT--sc,3176
|
68
74
|
openepd/model/specs/range/electrical.py,sha256=EI8pv9SN4lJbFNz1wlyMNAjkA0dsi84pc2J9YvtiwzY,11860
|
69
75
|
openepd/model/specs/range/electrical_transmission_and_distribution_equipment.py,sha256=xDdyLj6oJRmdybq7W91MtgE80FDpaG6ii5hE921aRGQ,2525
|
@@ -102,7 +108,7 @@ openepd/model/specs/singular/cast_decks_and_underlayment.py,sha256=HjIEKekxCAKx5
|
|
102
108
|
openepd/model/specs/singular/cladding.py,sha256=ywT6E8iv55khqbrkMRFOkm_PAWht3qt4ybNDNRa1wyw,6588
|
103
109
|
openepd/model/specs/singular/cmu.py,sha256=yexfb3REDGvVG3yD_1Yg1Zt-atBWLa8tv2lPmBPDWfw,1952
|
104
110
|
openepd/model/specs/singular/common.py,sha256=rPJTp2XuSa_dOXj6ZikzMv-lLbEwPLaP-XsXkjDB4uI,1048
|
105
|
-
openepd/model/specs/singular/concrete.py,sha256=
|
111
|
+
openepd/model/specs/singular/concrete.py,sha256=yDqNa5Ylv__ago6jeYUjBH2GNhMUlXjTHasl1Ing7tU,8467
|
106
112
|
openepd/model/specs/singular/conveying_equipment.py,sha256=AK_KdGyBDh0_Dl3YCkIyfHEfpiJmntdH-e9rFaIZv2s,3042
|
107
113
|
openepd/model/specs/singular/deprecated/__init__.py,sha256=f8I04fHO5QWpNtorrCgbUXz4r0B0zgsk8zDUfXu_i80,2635
|
108
114
|
openepd/model/specs/singular/deprecated/concrete.py,sha256=swSOfViIvy7z923C6uHBcIZrv_JRMv7wSJHpg9PGAJg,5265
|
@@ -144,7 +150,7 @@ openepd/model/validation/quantity.py,sha256=mP4gIkeOGZuHRhprsf_BX11Cic75NssYxOTk
|
|
144
150
|
openepd/model/versioning.py,sha256=wBZdOVL3ND9FMIRU9PS3vx9M_7MBiO70xYPQvPez6po,4522
|
145
151
|
openepd/patch_pydantic.py,sha256=bO7U5HqthFol0vfycb0a42UAGL3KOQ8-9MW4yCWOFP0,4150
|
146
152
|
openepd/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
147
|
-
openepd-6.
|
148
|
-
openepd-6.
|
149
|
-
openepd-6.
|
150
|
-
openepd-6.
|
153
|
+
openepd-6.20.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
154
|
+
openepd-6.20.0.dist-info/METADATA,sha256=J0jlBV5Gco4ONtZm_cOAEIAKc06-ChlLrK6TJ_tiAwc,9067
|
155
|
+
openepd-6.20.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
156
|
+
openepd-6.20.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|