openepd 0.2.0__tar.gz → 0.3.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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: openepd
3
- Version: 0.2.0
3
+ Version: 0.3.0
4
4
  Summary: Python library to work with OpenEPD format
5
5
  Home-page: https://github.com/cchangelabs/openepd
6
6
  License: Apache-2.0
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "openepd"
3
- version = "0.2.0"
3
+ version = "0.3.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>"]
@@ -56,7 +56,7 @@ types-deprecated = ">=1.2.9"
56
56
 
57
57
 
58
58
  [tool.commitizen]
59
- version = "0.2.0"
59
+ version = "0.3.0"
60
60
  bump_version = "bump: version $current_version → $new_version"
61
61
  update_changelog_on_bump = true
62
62
  pre_bump_hooks = []
@@ -17,4 +17,4 @@
17
17
  # Charles Pankow Foundation, Microsoft Sustainability Fund, Interface, MKA Foundation, and others.
18
18
  # Find out more at www.BuildingTransparency.org
19
19
  #
20
- VERSION = "0.2.0"
20
+ VERSION = "0.3.0"
@@ -26,11 +26,13 @@ AnySerializable = int | str | bool | float | list | dict | pydantic.BaseModel |
26
26
  class BaseOpenEpdSchema(pydantic.BaseModel):
27
27
  """Base class for all OpenEPD models."""
28
28
 
29
- extensions: dict[str, AnySerializable] | None = pydantic.Field(alias="ext", default=None)
29
+ ext: dict[str, AnySerializable] | None = pydantic.Field(alias="ext", default=None)
30
30
 
31
31
  class Config:
32
32
  allow_mutation = True
33
33
  validate_assignment = False
34
+ allow_population_by_field_name = True
35
+ use_enum_values = True
34
36
 
35
37
  def has_values(self) -> bool:
36
38
  """Return True if the model has any values."""
@@ -56,3 +58,9 @@ class BaseOpenEpdGenericSchema(GenericModel, BaseOpenEpdSchema):
56
58
  """Base class for all OpenEPD generic models."""
57
59
 
58
60
  pass
61
+
62
+
63
+ class BaseOpenEpdSpec(BaseOpenEpdSchema):
64
+ """Base class for all OpenEPD specs."""
65
+
66
+ pass
@@ -24,8 +24,10 @@ import pydantic as pyd
24
24
 
25
25
  from openepd.model.base import BaseOpenEpdSchema
26
26
  from openepd.model.common import Amount
27
- from openepd.model.lcia import ImpactSet, OutputFlowSet, ResourceUseSet, Standard
27
+ from openepd.model.lcia import ImpactSet, OutputFlowSet, ResourceUseSet
28
28
  from openepd.model.org import Org, Plant
29
+ from openepd.model.specs import Specs
30
+ from openepd.model.standard import Standard
29
31
 
30
32
 
31
33
  class Epd(BaseOpenEpdSchema):
@@ -123,3 +125,34 @@ class Epd(BaseOpenEpdSchema):
123
125
  compliance: list[Standard] = pyd.Field(
124
126
  description="Standard(s) to which this declaration is compliant.", default_factory=list
125
127
  )
128
+ specs: Specs = pyd.Field(
129
+ default_factory=Specs,
130
+ description="Data structure(s) describing performance specs of product. Unique for each material type.",
131
+ )
132
+ lca_discussion: str | None = pyd.Field(
133
+ max_length=20000,
134
+ description="""A rich text description containing information for experts reviewing the EPD contents.
135
+ Text descriptions required by ISO 14025, ISO 21930, EN 15804,, relevant PCRs, or program instructions and which do not
136
+ have specific openEPD fields should be entered here. This field may be large, and may contain multiple sections
137
+ separated by github flavored markdown formatting.""",
138
+ example="""# Packaging
139
+
140
+ Information on product-specific packaging: type, composition and possible reuse of packaging materials (paper,
141
+ strapping, pallets, foils, drums, etc.) shall be included in this Section. The EPD shall describe specific packaging
142
+ scenario assumptions, including disposition pathways for each packaging material by reuse, recycling, or landfill
143
+ disposal based on packaging type.*
144
+
145
+ # Product Installation
146
+
147
+ A description of the type of processing, machinery, tools, dust extraction equipment, auxiliary materials, etc.
148
+ to be used during installation shall be included. Information on industrial and environmental protection may be
149
+ included in this section. Any waste treatment included within the system boundary of installation waste should be
150
+ specified.
151
+
152
+ # Use Conditions
153
+
154
+ Use-stage environmental impacts of flooring products during building operations depend on product cleaning assumptions.
155
+ Information on cleaning frequency and cleaning products shall be provided based on the manufacturer’s recommendations.
156
+ In the absence of primary data, cleaning assumptions shall be documented.
157
+ """,
158
+ )
@@ -21,7 +21,6 @@ import pydantic as pyd
21
21
 
22
22
  from openepd.model.base import BaseOpenEpdSchema
23
23
  from openepd.model.common import Measurement
24
- from openepd.model.org import Org
25
24
 
26
25
 
27
26
  class EolScenario(BaseOpenEpdSchema):
@@ -168,14 +167,3 @@ class OutputFlowSet(BaseOpenEpdSchema):
168
167
  """A set of output flows, such as waste, emissions, etc."""
169
168
 
170
169
  hwd: ScopeSet | None = pyd.Field(description="Hazardous waste disposed")
171
-
172
-
173
- class Standard(BaseOpenEpdSchema):
174
- """A standard, such as EN 15804, ISO 14044, ISO 14024:2018, etc."""
175
-
176
- short_name: str = pyd.Field(description="Short-form of name of standard. Must be unique. Case-insensitive")
177
- name: str | None = pyd.Field(description="Full document name. Must be unique. Case-insensitive", default=None)
178
- link: pyd.AnyUrl | None = pyd.Field(
179
- description="Link to the exact standard (including version) referred to", default=None
180
- )
181
- issuer: Org | None = pyd.Field(description="Org that issued this standard", default=None)
@@ -0,0 +1,29 @@
1
+ #
2
+ # Copyright 2023 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
+ # This software was developed with support from the Skanska USA,
17
+ # Charles Pankow Foundation, Microsoft Sustainability Fund, Interface, MKA Foundation, and others.
18
+ # Find out more at www.BuildingTransparency.org
19
+ #
20
+ import pydantic as pyd
21
+
22
+ from openepd.model.base import BaseOpenEpdSchema
23
+ from openepd.model.specs.concrete import CmuSpec
24
+
25
+
26
+ class Specs(BaseOpenEpdSchema):
27
+ """Material specific specs."""
28
+
29
+ cmu: CmuSpec | None = pyd.Field(default=None, description="Concrete Masonry Unit-specific (CMU) specs")
@@ -0,0 +1,83 @@
1
+ #
2
+ # Copyright 2023 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
+ # This software was developed with support from the Skanska USA,
17
+ # Charles Pankow Foundation, Microsoft Sustainability Fund, Interface, MKA Foundation, and others.
18
+ # Find out more at www.BuildingTransparency.org
19
+ #
20
+ from enum import StrEnum
21
+
22
+ import pydantic as pyd
23
+
24
+ from openepd.model.base import BaseOpenEpdSpec
25
+
26
+
27
+ class CmuWeightClassification(StrEnum):
28
+ """Concrete Masonry Unit weight classification."""
29
+
30
+ Normal = "Normal"
31
+ """Normal weight CMU has a density of 125 lbs/cu. ft."""
32
+ Medium = "Medium"
33
+ """Medium weight CMU has a density of 105-125 lbs/cu. ft."""
34
+ Light = "Light"
35
+ """Lightweight CMU has a density less than 105 lbs/cu. ft."""
36
+
37
+
38
+ class CmuOptions(BaseOpenEpdSpec):
39
+ """Concrete Masonry Unit options."""
40
+
41
+ load_bearing: bool | None = pyd.Field(
42
+ description="Load-Bearing. CMUs intended to be loadbearing, rather than simply cosmetic",
43
+ example=True,
44
+ default=None,
45
+ )
46
+ aerated_concrete: bool | None = pyd.Field(
47
+ description="AAC Aerated Concrete. Aerated Autoclaved Concrete, a foam concrete.", example=True, default=None
48
+ )
49
+ insulated: bool | None = pyd.Field(
50
+ description="Insulated. CMUs with integral insulation", example=True, default=None
51
+ )
52
+ sound_absorbing: bool | None = pyd.Field(
53
+ description="Sound Absorbing. CMUs structured for sound absorbtion", example=True, default=None
54
+ )
55
+ white: bool | None = pyd.Field(
56
+ description="White. CMU using white cement and light-colored aggregate", example=True, default=None
57
+ )
58
+ recycled_aggregate: bool | None = pyd.Field(
59
+ description="Recycled aggregate. CMU using primarily reycled aggregates", example=True, default=None
60
+ )
61
+ groundface: bool | None = pyd.Field(
62
+ description="Ground Face. Ground or Honed facing, typically for improved appearance", example=True, default=None
63
+ )
64
+ splitface: bool | None = pyd.Field(
65
+ description="Splitface. Rough surface texture via splitting; aggregate can be seen", example=True, default=None
66
+ )
67
+ smoothface: bool | None = pyd.Field(
68
+ description="Smooth Face. Standard smooth-faced blocks", example=True, default=None
69
+ )
70
+ slumpstone: bool | None = pyd.Field(
71
+ description="Slumpstone. A slightly rounded, random distortion with the look of rustic adobe.",
72
+ example=True,
73
+ default=None,
74
+ )
75
+
76
+
77
+ class CmuSpec(BaseOpenEpdSpec):
78
+ """Standardized Concrete Masonry Unit-specific extension for OpenEPD."""
79
+
80
+ strength: str = pyd.Field(description="Compressive strength", example="4000 psi")
81
+ options: CmuOptions = pyd.Field(
82
+ description="Options for CMU. List of true/false properties", default_factory=CmuOptions
83
+ )
@@ -0,0 +1,34 @@
1
+ #
2
+ # Copyright 2023 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
+ # This software was developed with support from the Skanska USA,
17
+ # Charles Pankow Foundation, Microsoft Sustainability Fund, Interface, MKA Foundation, and others.
18
+ # Find out more at www.BuildingTransparency.org
19
+ #
20
+ import pydantic as pyd
21
+
22
+ from openepd.model.base import BaseOpenEpdSchema
23
+ from openepd.model.org import Org
24
+
25
+
26
+ class Standard(BaseOpenEpdSchema):
27
+ """A standard, such as EN 15804, ISO 14044, ISO 14024:2018, etc."""
28
+
29
+ short_name: str = pyd.Field(description="Short-form of name of standard. Must be unique. Case-insensitive")
30
+ name: str | None = pyd.Field(description="Full document name. Must be unique. Case-insensitive", default=None)
31
+ link: pyd.AnyUrl | None = pyd.Field(
32
+ description="Link to the exact standard (including version) referred to", default=None
33
+ )
34
+ issuer: Org | None = pyd.Field(description="Org that issued this standard", default=None)
File without changes
File without changes
File without changes
File without changes