openepd 4.9.0__tar.gz → 4.10.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.
Files changed (100) hide show
  1. {openepd-4.9.0 → openepd-4.10.0}/PKG-INFO +1 -1
  2. {openepd-4.9.0 → openepd-4.10.0}/pyproject.toml +1 -1
  3. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/__version__.py +1 -1
  4. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/base.py +1 -0
  5. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/declaration.py +80 -1
  6. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/epd.py +18 -30
  7. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/factory.py +2 -0
  8. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/generic_estimate.py +7 -31
  9. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/geography.py +273 -271
  10. openepd-4.10.0/src/openepd/model/industry_epd.py +98 -0
  11. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/electrical.py +3 -2
  12. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/enums.py +24 -0
  13. openepd-4.10.0/src/openepd/model/specs/generated/mixins/conduit_mixin.py +50 -0
  14. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/network_infrastructure.py +3 -2
  15. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/steel.py +4 -1
  16. openepd-4.10.0/src/openepd/model/validation/__init__.py +15 -0
  17. {openepd-4.9.0 → openepd-4.10.0}/LICENSE +0 -0
  18. {openepd-4.9.0 → openepd-4.10.0}/README.md +0 -0
  19. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/__init__.py +0 -0
  20. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/api/__init__.py +0 -0
  21. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/api/base_sync_client.py +0 -0
  22. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/api/category/__init__.py +0 -0
  23. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/api/category/dto.py +0 -0
  24. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/api/category/sync_api.py +0 -0
  25. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/api/common.py +0 -0
  26. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/api/dto/__init__.py +0 -0
  27. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/api/dto/base.py +0 -0
  28. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/api/dto/common.py +0 -0
  29. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/api/dto/meta.py +0 -0
  30. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/api/dto/mf.py +0 -0
  31. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/api/dto/params.py +0 -0
  32. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/api/epd/__init__.py +0 -0
  33. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/api/epd/dto.py +0 -0
  34. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/api/epd/sync_api.py +0 -0
  35. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/api/errors.py +0 -0
  36. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/api/pcr/__init__.py +0 -0
  37. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/api/pcr/sync_api.py +0 -0
  38. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/api/sync_client.py +0 -0
  39. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/api/test/__init__.py +0 -0
  40. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/api/utils.py +0 -0
  41. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/bundle/__init__.py +0 -0
  42. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/bundle/base.py +0 -0
  43. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/bundle/model.py +0 -0
  44. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/bundle/reader.py +0 -0
  45. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/bundle/writer.py +0 -0
  46. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/compat/__init__.py +0 -0
  47. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/compat/compat_functional_validators.py +0 -0
  48. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/compat/pydantic.py +0 -0
  49. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/__init__.py +0 -0
  50. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/category.py +0 -0
  51. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/common.py +0 -0
  52. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/lcia.py +0 -0
  53. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/org.py +0 -0
  54. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/pcr.py +0 -0
  55. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/README.md +0 -0
  56. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/__init__.py +0 -0
  57. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/asphalt.py +0 -0
  58. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/base.py +0 -0
  59. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/concrete.py +0 -0
  60. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/__init__.py +0 -0
  61. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/accessories.py +0 -0
  62. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/aggregates.py +0 -0
  63. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/aluminium.py +0 -0
  64. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/asphalt.py +0 -0
  65. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/bulk_materials.py +0 -0
  66. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/cast_decks_and_underlayment.py +0 -0
  67. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/cladding.py +0 -0
  68. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/cmu.py +0 -0
  69. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/common.py +0 -0
  70. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/concrete.py +0 -0
  71. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/conveying_equipment.py +0 -0
  72. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/electrical_transmission_and_distribution_equipment.py +0 -0
  73. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/electricity.py +0 -0
  74. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/finishes.py +0 -0
  75. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/fire_and_smoke_protection.py +0 -0
  76. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/furnishings.py +0 -0
  77. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/grouting.py +0 -0
  78. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/manufacturing_inputs.py +0 -0
  79. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/masonry.py +0 -0
  80. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/material_handling.py +0 -0
  81. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/mechanical.py +0 -0
  82. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/mechanical_insulation.py +0 -0
  83. {openepd-4.9.0/src/openepd/model/validation → openepd-4.10.0/src/openepd/model/specs/generated/mixins}/__init__.py +0 -0
  84. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/openings.py +0 -0
  85. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/other_electrical_equipment.py +0 -0
  86. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/other_materials.py +0 -0
  87. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/plumbing.py +0 -0
  88. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/precast_concrete.py +0 -0
  89. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/sheathing.py +0 -0
  90. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/thermal_moisture_protection.py +0 -0
  91. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/utility_piping.py +0 -0
  92. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/wood.py +0 -0
  93. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/specs/generated/wood_joists.py +0 -0
  94. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/standard.py +0 -0
  95. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/validation/common.py +0 -0
  96. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/validation/numbers.py +0 -0
  97. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/validation/quantity.py +0 -0
  98. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/model/versioning.py +0 -0
  99. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/patch_pydantic.py +0 -0
  100. {openepd-4.9.0 → openepd-4.10.0}/src/openepd/py.typed +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: openepd
3
- Version: 4.9.0
3
+ Version: 4.10.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 = "4.9.0"
3
+ version = "4.10.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>"]
@@ -13,4 +13,4 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
  #
16
- VERSION = "4.9.0"
16
+ VERSION = "4.10.0"
@@ -37,6 +37,7 @@ class OpenEpdDoctypes(StrEnum):
37
37
 
38
38
  Epd = "openEPD"
39
39
  GenericEstimate = "openGenericEstimate"
40
+ IndustryEpd = "openIndustryEpd"
40
41
 
41
42
 
42
43
  def modify_pydantic_schema(schema_dict: dict, cls: type) -> dict:
@@ -17,10 +17,17 @@ import abc
17
17
  import datetime
18
18
 
19
19
  from openepd.compat.pydantic import pyd
20
- from openepd.model.base import RootDocument
20
+ from openepd.model.base import BaseOpenEpdSchema, RootDocument
21
21
  from openepd.model.common import Amount
22
+ from openepd.model.geography import Geography
23
+ from openepd.model.org import Org
22
24
  from openepd.model.pcr import Pcr
23
25
  from openepd.model.standard import Standard
26
+ from openepd.model.validation.common import ReferenceStr
27
+
28
+ DEVELOPER_DESCRIPTION = "The organization responsible for the underlying LCA (and subsequent summarization as EPD)."
29
+ PROGRAM_OPERATOR_DESCRIPTION = "JSON object for program operator Org"
30
+ THIRD_PARTY_VERIFIER_DESCRIPTION = "JSON object for Org that performed a critical review of the EPD data"
24
31
 
25
32
 
26
33
  class BaseDeclaration(RootDocument, abc.ABC):
@@ -111,3 +118,75 @@ class BaseDeclaration(RootDocument, abc.ABC):
111
118
  In the absence of primary data, cleaning assumptions shall be documented.
112
119
  """,
113
120
  )
121
+
122
+
123
+ class AverageDatasetMixin(pyd.BaseModel, title="Average Dataset"):
124
+ """Fields common for average dataset (Industry-wide EPDs, Generic Estimates)."""
125
+
126
+ description: str | None = pyd.Field(
127
+ max_length=2000,
128
+ description="1-paragraph description of the average dataset. Supports plain text or github flavored markdown.",
129
+ )
130
+
131
+ geography: list[Geography] | None = pyd.Field(
132
+ "Jurisdiction(s) in which the LCA result is applicable. An empty array, or absent properties, implies global applicability."
133
+ )
134
+
135
+
136
+ class WithProgramOperatorMixin(pyd.BaseModel):
137
+ """Object which has a connection to ProgramOperator."""
138
+
139
+ program_operator: Org | None = pyd.Field(description=PROGRAM_OPERATOR_DESCRIPTION)
140
+ program_operator_doc_id: str | None = pyd.Field(
141
+ max_length=200, description="Document identifier from Program Operator.", example="123-456.789/b"
142
+ )
143
+ program_operator_version: str | None = pyd.Field(
144
+ max_length=200, description="Document version number from Program Operator.", example="4.3.0"
145
+ )
146
+
147
+
148
+ class WithVerifierMixin(pyd.BaseModel):
149
+ """Set of fields related to verifier."""
150
+
151
+ third_party_verifier: Org | None = pyd.Field(description=THIRD_PARTY_VERIFIER_DESCRIPTION)
152
+ third_party_verification_url: pyd.AnyUrl | None = pyd.Field(
153
+ description="Optional link to a verification statement.",
154
+ example="https://we-verify-epds.com/en/letters/123-456.789b.pdf",
155
+ )
156
+ third_party_verifier_email: pyd.EmailStr | None = pyd.Field(
157
+ description="Email address of the third party verifier", example="john.doe@example.com", default=None
158
+ )
159
+
160
+
161
+ class WithEpdDeveloperMixin(pyd.BaseModel):
162
+ """Set of fields related to EPD Developer."""
163
+
164
+ epd_developer: Org | None = pyd.Field(
165
+ description=DEVELOPER_DESCRIPTION,
166
+ default=None,
167
+ )
168
+ epd_developer_email: pyd.EmailStr | None = pyd.Field(
169
+ default=None,
170
+ example="john.doe@we-do-lca.com",
171
+ description="Email contact for inquiries about development of this EPD. "
172
+ "This must be an email which can be publicly shared.",
173
+ )
174
+
175
+
176
+ class RefBase(BaseOpenEpdSchema, title="Ref Object"):
177
+ """Base class for reference-style objects."""
178
+
179
+ id: str | None = pyd.Field(
180
+ description="The unique ID for this object. To ensure global uniqueness, should be registered at "
181
+ "open-xpd-uuid.cqd.io/register or a coordinating registry.",
182
+ example="1u7zsed8",
183
+ default=None,
184
+ )
185
+
186
+ name: str | None = pyd.Field(max_length=200, description="Name of the object", default=None)
187
+
188
+ ref: ReferenceStr | None = pyd.Field(
189
+ default=None,
190
+ example="https://openepd.buildingtransparency.org/api/generic_estimates/EC300001",
191
+ description="Reference to this JSON object",
192
+ )
@@ -18,7 +18,15 @@ from typing import Annotated
18
18
  from openepd.compat.pydantic import pyd
19
19
  from openepd.model.base import BaseDocumentFactory, OpenEpdDoctypes
20
20
  from openepd.model.common import Amount, Ingredient, WithAltIdsMixin, WithAttachmentsMixin
21
- from openepd.model.declaration import BaseDeclaration
21
+ from openepd.model.declaration import (
22
+ DEVELOPER_DESCRIPTION,
23
+ PROGRAM_OPERATOR_DESCRIPTION,
24
+ THIRD_PARTY_VERIFIER_DESCRIPTION,
25
+ BaseDeclaration,
26
+ WithEpdDeveloperMixin,
27
+ WithProgramOperatorMixin,
28
+ WithVerifierMixin,
29
+ )
22
30
  from openepd.model.lcia import WithLciaMixin
23
31
  from openepd.model.org import Org, Plant
24
32
  from openepd.model.specs import Specs
@@ -27,12 +35,17 @@ from openepd.model.versioning import OpenEpdVersions, Version
27
35
  MANUFACTURER_DESCRIPTION = (
28
36
  'JSON object for declaring Org. Sometimes called the "Declaration Holder" or "Declaration Owner".'
29
37
  )
30
- DEVELOPER_DESCRIPTION = "The organization responsible for the underlying LCA (and subsequent summarization as EPD)."
31
- PROGRAM_OPERATOR_DESCRIPTION = "JSON object for program operator Org"
32
- THIRD_PARTY_VERIFIER_DESCRIPTION = "JSON object for Org that performed a critical review of the EPD data"
33
38
 
34
39
 
35
- class EpdPreviewV0(WithAttachmentsMixin, WithAltIdsMixin, BaseDeclaration, title="EPD (Preview)"):
40
+ class EpdPreviewV0(
41
+ WithAttachmentsMixin,
42
+ WithProgramOperatorMixin,
43
+ WithEpdDeveloperMixin,
44
+ WithVerifierMixin,
45
+ WithAltIdsMixin,
46
+ BaseDeclaration,
47
+ title="EPD (Preview)",
48
+ ):
36
49
  """
37
50
  EPD preview, used in API list responses and where there is no need for a full object.
38
51
 
@@ -67,36 +80,11 @@ class EpdPreviewV0(WithAttachmentsMixin, WithAltIdsMixin, BaseDeclaration, title
67
80
  example="https://epd-online.com/EmbeddedEpdList/Download/6029",
68
81
  )
69
82
  manufacturer: Org | None = pyd.Field(description=MANUFACTURER_DESCRIPTION)
70
- epd_developer: Org | None = pyd.Field(
71
- description=DEVELOPER_DESCRIPTION,
72
- default=None,
73
- )
74
- epd_developer_email: pyd.EmailStr | None = pyd.Field(
75
- default=None,
76
- example="john.doe@we-do-lca.com",
77
- description="Email contact for inquiries about development of this EPD. "
78
- "This must be an email which can be publicly shared.",
79
- )
80
83
  plants: list[Plant] = pyd.Field(
81
84
  max_items=32,
82
85
  description="List of object(s) for one or more plant(s) that this declaration applies to.",
83
86
  default_factory=list,
84
87
  )
85
- program_operator: Org | None = pyd.Field(description=PROGRAM_OPERATOR_DESCRIPTION)
86
- program_operator_doc_id: str | None = pyd.Field(
87
- max_length=200, description="Document identifier from Program Operator.", example="123-456.789/b"
88
- )
89
- program_operator_version: str | None = pyd.Field(
90
- max_length=200, description="Document version number from Program Operator.", example="4.3.0"
91
- )
92
- third_party_verifier: Org | None = pyd.Field(description=THIRD_PARTY_VERIFIER_DESCRIPTION)
93
- third_party_verification_url: pyd.AnyUrl | None = pyd.Field(
94
- description="Optional link to a verification statement.",
95
- example="https://we-verify-epds.com/en/letters/123-456.789b.pdf",
96
- )
97
- third_party_verifier_email: pyd.EmailStr | None = pyd.Field(
98
- description="Email address of the third party verifier", example="john.doe@example.com", default=None
99
- )
100
88
  kg_C_per_declared_unit: Amount | None = pyd.Field(
101
89
  default=None,
102
90
  description="Mass of elemental carbon, per declared unit, contained in the product itself at the manufacturing "
@@ -16,6 +16,7 @@
16
16
  from openepd.model.base import BaseDocumentFactory, OpenEpdDoctypes, RootDocument
17
17
  from openepd.model.epd import EpdFactory
18
18
  from openepd.model.generic_estimate import GenericEstimateFactory
19
+ from openepd.model.industry_epd import IndustryEpdFactory
19
20
 
20
21
 
21
22
  class DocumentFactory:
@@ -24,6 +25,7 @@ class DocumentFactory:
24
25
  DOCTYPE_TO_FACTORY: dict[OpenEpdDoctypes, type[BaseDocumentFactory]] = {
25
26
  OpenEpdDoctypes.Epd: EpdFactory,
26
27
  OpenEpdDoctypes.GenericEstimate: GenericEstimateFactory,
28
+ OpenEpdDoctypes.IndustryEpd: IndustryEpdFactory,
27
29
  }
28
30
 
29
31
  @classmethod
@@ -16,13 +16,11 @@
16
16
  from enum import StrEnum
17
17
 
18
18
  from openepd.compat.pydantic import pyd
19
- from openepd.model.base import BaseDocumentFactory, BaseOpenEpdSchema, OpenEpdDoctypes
19
+ from openepd.model.base import BaseDocumentFactory, OpenEpdDoctypes
20
20
  from openepd.model.common import WithAltIdsMixin, WithAttachmentsMixin
21
- from openepd.model.declaration import BaseDeclaration
22
- from openepd.model.geography import Geography
21
+ from openepd.model.declaration import AverageDatasetMixin, BaseDeclaration, RefBase
23
22
  from openepd.model.lcia import WithLciaMixin
24
23
  from openepd.model.org import Org
25
- from openepd.model.validation.common import ReferenceStr
26
24
  from openepd.model.versioning import OpenEpdVersions, Version
27
25
 
28
26
 
@@ -47,27 +45,12 @@ class LicenseTerms(StrEnum):
47
45
  """
48
46
 
49
47
 
50
- class GenericEstimateRef(BaseOpenEpdSchema, title="Generic Estimate (Ref)"):
48
+ class GenericEstimateRef(RefBase, title="Generic Estimate (Ref)"):
51
49
  """Reference (short) version of Generic Estimate object."""
52
50
 
53
- id: str | None = pyd.Field(
54
- description="The unique ID for this document. To ensure global uniqueness, should be registered at "
55
- "open-xpd-uuid.cqd.io/register or a coordinating registry.",
56
- example="1u7zsed8",
57
- default=None,
58
- )
59
-
60
- name: str | None = pyd.Field(max_length=200, description="Name of the generic estimate", default=None)
61
-
62
- ref: ReferenceStr | None = pyd.Field(
63
- default=None,
64
- example="https://openepd.buildingtransparency.org/api/generic_estimates/EC300001",
65
- description="Reference to this GenericEstimate JSON object",
66
- )
67
-
68
51
 
69
52
  class GenericEstimatePreviewV0(
70
- WithAttachmentsMixin, GenericEstimateRef, BaseDeclaration, title="Generic Estimate (preview)"
53
+ WithAttachmentsMixin, AverageDatasetMixin, GenericEstimateRef, BaseDeclaration, title="Generic Estimate (preview)"
71
54
  ):
72
55
  """
73
56
  Generic Estimate preview, used in API list responses and where there is no need for a full object.
@@ -80,20 +63,13 @@ class GenericEstimatePreviewV0(
80
63
  default="openGenericEstimate",
81
64
  )
82
65
 
83
- description: str | None = pyd.Field(
84
- max_length=2000,
85
- description="1-paragraph description of the Generic Estimate. Supports plain text or github flavored markdown.",
86
- )
87
-
88
66
  publisher: Org | None = pyd.Field(description="Organization that published the LCA results.")
67
+ reviewer: Org | None = pyd.Field(description="Org that performed a critical review of the LCA.")
89
68
  reviewer_email: pyd.EmailStr | None = pyd.Field(
90
69
  description="Email address of the third party verifier", example="john.doe@example.com", default=None
91
70
  )
92
- reviewer: Org | None = pyd.Field(description="Org that performed a critical review of the LCA.")
71
+
93
72
  license_terms: LicenseTerms | None = pyd.Field(description="The license terms for use of the data.")
94
- geography: list[Geography] | None = pyd.Field(
95
- "Jurisdiction(s) in which the LCA result is applicable. An empty array, or absent properties, implies global applicability."
96
- )
97
73
  model_repository: pyd.AnyUrl | None = pyd.Field(
98
74
  default=None, description="A link to the shared git repository containing the LCA model used for this estimate."
99
75
  )
@@ -104,7 +80,7 @@ GenericEstimatePreview = GenericEstimatePreviewV0
104
80
 
105
81
  class GenericEstimateV0(GenericEstimatePreviewV0, WithLciaMixin, WithAltIdsMixin, title="Generic Estimate (Full)"):
106
82
  """
107
- Represent a full Generic Estimate object.
83
+ Full Generic Estimate object.
108
84
 
109
85
  This is considered the most complete valid openEPD object for GenericEstimate. In addition to it, several related
110
86
  models are defined, either with fewer fields (to be used in APIs for list requests) or with more relaxed structure