openepd 1.7.1__py3-none-any.whl → 1.8.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/dto/common.py +4 -1
- openepd/api/epd/dto.py +21 -7
- openepd/api/pcr/dto.py +2 -3
- openepd/model/epd.py +1 -1
- openepd/model/org.py +2 -2
- openepd/model/specs/concrete.py +111 -26
- openepd/model/versioning.py +2 -1
- {openepd-1.7.1.dist-info → openepd-1.8.0.dist-info}/METADATA +1 -1
- {openepd-1.7.1.dist-info → openepd-1.8.0.dist-info}/RECORD +12 -12
- {openepd-1.7.1.dist-info → openepd-1.8.0.dist-info}/LICENSE +0 -0
- {openepd-1.7.1.dist-info → openepd-1.8.0.dist-info}/WHEEL +0 -0
openepd/__version__.py
CHANGED
openepd/api/dto/common.py
CHANGED
@@ -111,4 +111,7 @@ class OpenEpdApiResponse(GenericModel, BaseOpenEpdApiModel, Generic[TPayload, TM
|
|
111
111
|
"""Standard DTO representing response from OpenEPD API server."""
|
112
112
|
|
113
113
|
payload: TPayload
|
114
|
-
|
114
|
+
# there is an issue with using covariant type variables as parameters when used for container mutable types,
|
115
|
+
# as described in https://github.com/python/mypy/issues/7049
|
116
|
+
# However, in our workflow TMeta is not a container type which is further returned back to caller.
|
117
|
+
meta: TMeta # type: ignore[misc]
|
openepd/api/epd/dto.py
CHANGED
@@ -37,20 +37,34 @@ class StatisticsDto(BaseOpenEpdApiModel):
|
|
37
37
|
"""
|
38
38
|
|
39
39
|
# percentiles
|
40
|
-
pct10_gwp: float = pyd.Field(
|
40
|
+
pct10_gwp: float = pyd.Field(
|
41
|
+
description="10th percentile GWP for this statistics measured in kgCO2e per declared unit"
|
42
|
+
)
|
41
43
|
achievable_target: float = pyd.Field(
|
42
44
|
description="Achievable target. 20th percentile of GWP measured in kgCO2e per declared unit", example=445.65
|
43
45
|
)
|
44
|
-
pct30_gwp: float = pyd.Field(
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
46
|
+
pct30_gwp: float = pyd.Field(
|
47
|
+
description="30th percentile GWP for this statistics measured in kgCO2e per declared unit"
|
48
|
+
)
|
49
|
+
pct40_gwp: float = pyd.Field(
|
50
|
+
description="40th percentile GWP for this statistics measured in kgCO2e per declared unit"
|
51
|
+
)
|
52
|
+
pct50_gwp: float = pyd.Field(
|
53
|
+
description="50th percentile GWP for this statistics measured in kgCO2e per declared unit"
|
54
|
+
)
|
55
|
+
pct60_gwp: float = pyd.Field(
|
56
|
+
description="60th percentile GWP for this statistics measured in kgCO2e per declared unit"
|
57
|
+
)
|
58
|
+
pct70_gwp: float = pyd.Field(
|
59
|
+
description="70th percentile GWP for this statistics measured in kgCO2e per declared unit"
|
60
|
+
)
|
49
61
|
conservative_estimate: float = pyd.Field(
|
50
62
|
description="Conservative estimate. 80th percentile of GWP per declared unit measured in kgCO2e",
|
51
63
|
example=640.778,
|
52
64
|
)
|
53
|
-
pct90_gwp: float = pyd.Field(
|
65
|
+
pct90_gwp: float = pyd.Field(
|
66
|
+
description="70th percentile GWP for this statistics measured in kgCO2e per declared unit"
|
67
|
+
)
|
54
68
|
|
55
69
|
# stats
|
56
70
|
average: float = pyd.Field(description="Average GWP in kgCO2e per declared unit", example=554.2)
|
openepd/api/pcr/dto.py
CHANGED
@@ -25,15 +25,14 @@ from openepd.api.dto.base import BaseOpenEpdApiModel
|
|
25
25
|
class PcrRef(BaseOpenEpdApiModel):
|
26
26
|
"""Reference to a PCR."""
|
27
27
|
|
28
|
-
id: str = pyd.Field(
|
28
|
+
id: str | None = pyd.Field(
|
29
29
|
description="The unique ID for this PCR. To ensure global uniqueness, should be registered "
|
30
30
|
"at open-xpd-uuid.cqd.io/register or a coordinating registry.",
|
31
31
|
example="ec3xpgq2",
|
32
32
|
default=None,
|
33
33
|
)
|
34
|
-
name: str = pyd.Field(
|
34
|
+
name: str | None = pyd.Field(
|
35
35
|
max_length=200,
|
36
|
-
default=None,
|
37
36
|
description="Full document name as listed in source document",
|
38
37
|
example="c-PCR-003 Concrete and concrete elements (EN 16757)",
|
39
38
|
)
|
openepd/model/epd.py
CHANGED
@@ -55,7 +55,7 @@ class EpdV0(WithAttachmentsMixin, WithAltIdsMixin, BaseEpd):
|
|
55
55
|
default=None,
|
56
56
|
)
|
57
57
|
product_name: str | None = pyd.Field(
|
58
|
-
max_length=200, description="The name of the product described by this EPD", example="Mix 12345AC"
|
58
|
+
max_length=200, description="The name of the product described by this EPD", example="Mix 12345AC", default=None
|
59
59
|
)
|
60
60
|
product_sku: str | None = pyd.Field(
|
61
61
|
max_length=200, description="Unique stock keeping identifier assigned by manufacturer"
|
openepd/model/org.py
CHANGED
@@ -29,8 +29,8 @@ from openepd.model.validation.common import ReferenceStr
|
|
29
29
|
class OrgRef(BaseOpenEpdSchema):
|
30
30
|
"""Represents Organisation with minimal data."""
|
31
31
|
|
32
|
-
web_domain: str = pyd.Field(
|
33
|
-
description="A web domain owned by organization. Typically is the org's home website address"
|
32
|
+
web_domain: str | None = pyd.Field(
|
33
|
+
description="A web domain owned by organization. Typically is the org's home website address", default=None
|
34
34
|
)
|
35
35
|
name: str | None = pyd.Field(
|
36
36
|
max_length=200,
|
openepd/model/specs/concrete.py
CHANGED
@@ -43,6 +43,13 @@ class AciExposureClass(StrEnum):
|
|
43
43
|
* `aci.S1` - Exposed to <1500 ppm of SO4 in water and <0.2% SO4 in soil
|
44
44
|
* `aci.S2` - Exposed to <10000 ppm of SO4 in water and <2% SO4 in soil
|
45
45
|
* `aci.S3` - Exposed to >10000 ppm of SO4 in water or >2% SO4 in soil
|
46
|
+
|
47
|
+
* `aci.C1` - Concrete in contact with moisture, but the external source of chloride does not reach it.
|
48
|
+
* `aci.C2` - Concrete subjected to moisture and an external source of chlorides such as deicing chemicals,
|
49
|
+
salt, brackish water, seawater, or spray from these sources.
|
50
|
+
* `aci.W0` - Concrete dry in service
|
51
|
+
* `aci.W1` - Concrete in contact with water, no requirement for low permeability
|
52
|
+
* `aci.W2` - Concrete in contact with water where low permeability is required
|
46
53
|
"""
|
47
54
|
|
48
55
|
F0 = "aci.F0"
|
@@ -53,6 +60,11 @@ class AciExposureClass(StrEnum):
|
|
53
60
|
S1 = "aci.S1"
|
54
61
|
S2 = "aci.S2"
|
55
62
|
S3 = "aci.S3"
|
63
|
+
C1 = "aci.C1"
|
64
|
+
C2 = "aci.C2"
|
65
|
+
W0 = "aci.W0"
|
66
|
+
W1 = "aci.W1"
|
67
|
+
W2 = "aci.W2"
|
56
68
|
|
57
69
|
|
58
70
|
class CsaExposureClass(StrEnum):
|
@@ -357,39 +369,69 @@ class ConcreteV1Options(BaseOpenEpdSchema):
|
|
357
369
|
fiber_reinforced: bool | None = pyd.Field(description="Fiber reinforced", default=None)
|
358
370
|
|
359
371
|
|
360
|
-
class
|
361
|
-
"""
|
372
|
+
class ReadyMixV1(BaseOpenEpdHierarchicalSpec):
|
373
|
+
"""Concretes to be mixed and then poured on-site."""
|
362
374
|
|
363
|
-
|
364
|
-
default=None, example="30 MPa", description="Concrete strength after 28 days"
|
365
|
-
)
|
366
|
-
w_c_ratio: RatioFloat | None = pyd.Field(description="Ratio of water to cement", example=0.3, default=None)
|
367
|
-
aci_exposure_classes: list[AciExposureClass] = pyd.Field(
|
368
|
-
description=(AciExposureClass.__doc__ or "").lstrip(), default=None
|
369
|
-
)
|
370
|
-
csa_exposure_classes: list[CsaExposureClass] = pyd.Field(
|
371
|
-
description=(CsaExposureClass.__doc__ or "").lstrip(), default=None
|
372
|
-
)
|
373
|
-
en_exposure_classes: list[EnExposureClass] = pyd.Field(
|
374
|
-
description=(EnExposureClass.__doc__ or "").lstrip(), default=None
|
375
|
-
)
|
376
|
-
cementitious: Cementitious | None = pyd.Field(
|
377
|
-
default=None,
|
378
|
-
description="List of cementitious materials, and proportion by mass. Each field is 0 to 1.",
|
379
|
-
)
|
380
|
-
application: TypicalApplication | None = pyd.Field(description="Typical Application", default=None)
|
381
|
-
options: ConcreteV1Options = pyd.Field(description="Concrete options", default=None)
|
375
|
+
pass
|
382
376
|
|
383
|
-
|
384
|
-
|
385
|
-
|
377
|
+
|
378
|
+
class FlowableFillV1(BaseOpenEpdHierarchicalSpec):
|
379
|
+
"""
|
380
|
+
Flowable fill is a slurry that is placed as a flowable liquid (high slump) and sets with no compaction.
|
381
|
+
|
382
|
+
It is often used in tight or restricted access areas where placing and compacting
|
383
|
+
fill is difficult. Applications include filling large voids such as abandoned underground storage
|
384
|
+
tanks, basements, tunnels, mines, and sewers. It can also be used as paving sub-base, bridge
|
385
|
+
abutment, and retaining wall backfill. Also called Controlled Density Fill (CDF) or Controlled
|
386
|
+
Low Strength Materials (CLSMs). These materials typically have compressive strengths
|
387
|
+
under 1200 psi.
|
388
|
+
"""
|
389
|
+
|
390
|
+
pass
|
391
|
+
|
392
|
+
|
393
|
+
class OilPatchV1(BaseOpenEpdHierarchicalSpec):
|
394
|
+
"""
|
395
|
+
Concretes for use in petroleum extraction wells and similar applications.
|
396
|
+
|
397
|
+
Includes foamed cement; often called cement in the drilling industry. Differs from
|
398
|
+
flowable fill and grout in that it contains no sand or other aggregates.
|
399
|
+
"""
|
400
|
+
|
401
|
+
pass
|
402
|
+
|
403
|
+
|
404
|
+
class ConcretePavingV1(BaseOpenEpdHierarchicalSpec):
|
405
|
+
"""Concrete paving."""
|
406
|
+
|
407
|
+
pass
|
386
408
|
|
387
409
|
|
388
|
-
class
|
410
|
+
class ShotcreteV1(BaseOpenEpdHierarchicalSpec):
|
411
|
+
"""Concretes sprayed on a target."""
|
412
|
+
|
413
|
+
pass
|
414
|
+
|
415
|
+
|
416
|
+
class CementGroutV1(BaseOpenEpdHierarchicalSpec):
|
417
|
+
"""
|
418
|
+
Cement grouting is a slurry that is placed as a flowable liquid.
|
419
|
+
|
420
|
+
It is an effective material for filling and
|
421
|
+
strengthening granular soils, voids in rocks, foundation underpinnings, and other underground voids. Also called
|
422
|
+
structural grout, these materials typically impart significant compressive strength to the system.
|
423
|
+
|
424
|
+
"""
|
425
|
+
|
426
|
+
|
427
|
+
class ConcreteV1(BaseOpenEpdHierarchicalSpec):
|
389
428
|
"""Concrete spec."""
|
390
429
|
|
391
430
|
_EXT_VERSION = "1.0"
|
392
431
|
|
432
|
+
strength_28d: PressureMPaStr | None = pyd.Field(
|
433
|
+
default=None, example="30 MPa", description="Concrete strength after 28 days"
|
434
|
+
)
|
393
435
|
strength_early: PressureMPaStr | None = pyd.Field(
|
394
436
|
default=None,
|
395
437
|
example="30 MPa",
|
@@ -405,7 +447,34 @@ class ConcreteV1(ConcreteV1Mixin, BaseOpenEpdHierarchicalSpec):
|
|
405
447
|
default=None, description="Test Day for the Late Strength"
|
406
448
|
)
|
407
449
|
slump: LengthMmStr | None = pyd.Field(description="Minimum test slump", example="40 mm", default=None)
|
450
|
+
w_c_ratio: RatioFloat | None = pyd.Field(description="Ratio of water to cement", example=0.3, default=None)
|
451
|
+
aci_exposure_classes: list[AciExposureClass] = pyd.Field(
|
452
|
+
description=(AciExposureClass.__doc__ or "").lstrip(), default_factory=list
|
453
|
+
)
|
454
|
+
csa_exposure_classes: list[CsaExposureClass] = pyd.Field(
|
455
|
+
description=(CsaExposureClass.__doc__ or "").lstrip(), default_factory=list
|
456
|
+
)
|
457
|
+
en_exposure_classes: list[EnExposureClass] = pyd.Field(
|
458
|
+
description=(EnExposureClass.__doc__ or "").lstrip(), default_factory=list
|
459
|
+
)
|
460
|
+
cementitious: Cementitious | None = pyd.Field(
|
461
|
+
default=None,
|
462
|
+
description="List of cementitious materials, and proportion by mass. Each field is 0 to 1.",
|
463
|
+
)
|
464
|
+
application: TypicalApplication | None = pyd.Field(description="Typical Application", default=None)
|
465
|
+
options: ConcreteV1Options | None = pyd.Field(description="Concrete options", default=None)
|
466
|
+
|
467
|
+
# Nested specs
|
468
|
+
ReadyMix: ReadyMixV1 | None = None
|
469
|
+
FlowableFill: FlowableFillV1 | None = None
|
470
|
+
OilPatch: OilPatchV1 | None = None
|
471
|
+
ConcretePaving: ConcretePavingV1 | None = None
|
472
|
+
Shotcrete: ShotcreteV1 | None = None
|
473
|
+
CementGrout: CementGroutV1 | None = None
|
408
474
|
|
475
|
+
_compressive_strength_unit_validator = pyd.validator("strength_28d", allow_reuse=True, check_fields=False)(
|
476
|
+
validate_unit_factory(OpenEPDUnit.MPa)
|
477
|
+
)
|
409
478
|
_strength_early_unit_validator = pyd.validator("strength_early", allow_reuse=True)(
|
410
479
|
validate_unit_factory(OpenEPDUnit.MPa)
|
411
480
|
)
|
@@ -424,10 +493,26 @@ class ConcreteV1(ConcreteV1Mixin, BaseOpenEpdHierarchicalSpec):
|
|
424
493
|
return values
|
425
494
|
|
426
495
|
|
427
|
-
class PrecastConcreteV1(
|
496
|
+
class PrecastConcreteV1(BaseOpenEpdHierarchicalSpec):
|
428
497
|
"""Precast Concrete spec."""
|
429
498
|
|
430
499
|
_EXT_VERSION = "1.0"
|
431
500
|
|
501
|
+
strength_28d: PressureMPaStr | None = pyd.Field(
|
502
|
+
default=None, example="30 MPa", description="Concrete strength after 28 days"
|
503
|
+
)
|
504
|
+
|
505
|
+
lightweight: bool | None = pyd.Field(description="Lightweight", default=None)
|
506
|
+
steel_mass_percentage: RatioFloat | None = pyd.Field(
|
507
|
+
default=None,
|
508
|
+
description="Percent of total mass that is steel reinforcement. Steel reinforcement "
|
509
|
+
"substantially changes functional performance and usually adds substantial GWP "
|
510
|
+
"per declared unit.",
|
511
|
+
)
|
512
|
+
|
432
513
|
insulated: bool | None = pyd.Field(description="Insulated", default=None)
|
433
514
|
gfrc: bool | None = pyd.Field(description="Glass Fiber Reinforced Concrete", default=None)
|
515
|
+
|
516
|
+
_compressive_strength_unit_validator = pyd.validator("strength_28d", allow_reuse=True)(
|
517
|
+
validate_unit_factory(OpenEPDUnit.MPa)
|
518
|
+
)
|
openepd/model/versioning.py
CHANGED
@@ -37,7 +37,8 @@ class WithExtVersionMixin(ABC, BaseModel):
|
|
37
37
|
if hasattr(cls, "_EXT_VERSION"):
|
38
38
|
cls.__fields__["ext_version"].default = cls._EXT_VERSION
|
39
39
|
|
40
|
-
|
40
|
+
# Note: default is set programmatically in __init_subclass__
|
41
|
+
ext_version: str | None = pyd.Field(description="Extension version", example="3.22", default=None)
|
41
42
|
|
42
43
|
|
43
44
|
class Version(NamedTuple):
|
@@ -1,5 +1,5 @@
|
|
1
1
|
openepd/__init__.py,sha256=rqQJWF5jpYAgRbbAycUfWMGsr5kGtfjmwzsTeqbElJw,837
|
2
|
-
openepd/__version__.py,sha256=
|
2
|
+
openepd/__version__.py,sha256=6YlL51CiEXjMXGC4aYqdXMGp923puMgij54LxJ2lhek,855
|
3
3
|
openepd/api/__init__.py,sha256=rqQJWF5jpYAgRbbAycUfWMGsr5kGtfjmwzsTeqbElJw,837
|
4
4
|
openepd/api/base_sync_client.py,sha256=JcNpWsGoIK_1Eg27CAQd7nIjbcfD56jQ1nS6B48Q0cI,21142
|
5
5
|
openepd/api/category/__init__.py,sha256=rqQJWF5jpYAgRbbAycUfWMGsr5kGtfjmwzsTeqbElJw,837
|
@@ -8,16 +8,16 @@ openepd/api/category/sync_api.py,sha256=QLEyga590UON9zv7864NjdSPkxSoeWObIOCUOLhD
|
|
8
8
|
openepd/api/common.py,sha256=rfxjaDd7gGoen85wSooHt0W9xHdUlSlkTlkr2CO1ccg,8681
|
9
9
|
openepd/api/dto/__init__.py,sha256=rqQJWF5jpYAgRbbAycUfWMGsr5kGtfjmwzsTeqbElJw,837
|
10
10
|
openepd/api/dto/base.py,sha256=r3vxG3CpSS2M_L6k5mHVA4_Khunxkmh4QxEPjLOwft8,1233
|
11
|
-
openepd/api/dto/common.py,sha256=
|
11
|
+
openepd/api/dto/common.py,sha256=u6N-MmKoS1SZ7-IdVLHU8PQYGxPKKV8-NcZassIaKzo,4692
|
12
12
|
openepd/api/dto/meta.py,sha256=_jrQuzmWhhitdB0_tREGLdzU2iGOZqYy84zsC3Hexhw,2361
|
13
13
|
openepd/api/dto/mf.py,sha256=4jqhXqSGtA_MRXvJJFXtj4xMhsT9rucveyVAxt8V-oc,2195
|
14
14
|
openepd/api/dto/params.py,sha256=rqQJWF5jpYAgRbbAycUfWMGsr5kGtfjmwzsTeqbElJw,837
|
15
15
|
openepd/api/epd/__init__.py,sha256=rqQJWF5jpYAgRbbAycUfWMGsr5kGtfjmwzsTeqbElJw,837
|
16
|
-
openepd/api/epd/dto.py,sha256
|
16
|
+
openepd/api/epd/dto.py,sha256=-uEQRi2DBUIrtulgZ8D_qNbptBNrA-vJA09JeeY114Q,5075
|
17
17
|
openepd/api/epd/sync_api.py,sha256=JEZR3WBZHqP4yOk1qkWsz0oKHMgegoZ7Pvoh6YTVefg,4391
|
18
18
|
openepd/api/errors.py,sha256=K6L_T91iJLFSl_7hVS6poV_BUjZJe3qJBUzp8mItm7g,2376
|
19
19
|
openepd/api/pcr/__init__.py,sha256=rqQJWF5jpYAgRbbAycUfWMGsr5kGtfjmwzsTeqbElJw,837
|
20
|
-
openepd/api/pcr/dto.py,sha256=
|
20
|
+
openepd/api/pcr/dto.py,sha256=CljjYK50Xz7wlIc0TfpTyyQLwdMao3SJW3hSHJpd8i4,1633
|
21
21
|
openepd/api/pcr/sync_api.py,sha256=j8g23-FuaN2JkROVRo32v77JWpTWDIOWnIyomBbqNd4,1805
|
22
22
|
openepd/api/sync_client.py,sha256=DBkoB8rH8OG1d1sJ77h2YvIP8aFQX5eCfaX4sTN0vEs,2504
|
23
23
|
openepd/api/test/__init__.py,sha256=rqQJWF5jpYAgRbbAycUfWMGsr5kGtfjmwzsTeqbElJw,837
|
@@ -30,17 +30,17 @@ openepd/model/__init__.py,sha256=rqQJWF5jpYAgRbbAycUfWMGsr5kGtfjmwzsTeqbElJw,837
|
|
30
30
|
openepd/model/base.py,sha256=R81hZd8EZBM2E9EhQbzNa9JLRzAjeNPPkZYEmoUM4v0,9132
|
31
31
|
openepd/model/category.py,sha256=_6yFyldaDrkZk2_9ZAO2oRTz7ocvkg4T-D_aw5ncgvo,1840
|
32
32
|
openepd/model/common.py,sha256=j-M_2T_Kl_Ea8l50pJT7LNatBW1fKrRcw4XNpeNvLU0,5635
|
33
|
-
openepd/model/epd.py,sha256=
|
33
|
+
openepd/model/epd.py,sha256=T935Aaz6jULmFQHasqfwzgfvHKJ6tSSkbWKWUQ_XPk0,14283
|
34
34
|
openepd/model/factory.py,sha256=qQZNb4yFN1EQWHHVS-fHnJ2gB-vsKz9hVmXXJE7YaRU,1918
|
35
35
|
openepd/model/lcia.py,sha256=4AffuUYDZISwhJFcUC_r3JJYq4zL_q0RwS6KatYotU0,17149
|
36
|
-
openepd/model/org.py,sha256=
|
36
|
+
openepd/model/org.py,sha256=xV3MQE6iMaXtQWHHwGnjlE5LAd0Joyt-JuvOIvOLQ_4,3997
|
37
37
|
openepd/model/pcr.py,sha256=t861yFntmy3ewrnGLP47cv3afV-aCCVRlrbpGeRh-7I,4604
|
38
38
|
openepd/model/specs/README.md,sha256=W5LSMpZuW5x36cKS4HRfeFsClsRf8J9yHMMICghdc0s,862
|
39
39
|
openepd/model/specs/__init__.py,sha256=nNs2nu1DIKyFC2A-Wc6Zk2VguSti3bC0gMpjop692z0,2299
|
40
40
|
openepd/model/specs/aluminium.py,sha256=UqTX1gigGNgR9jWi4TEM-bKVGlZ_MBkdsLx4H1-H7KA,2246
|
41
41
|
openepd/model/specs/asphalt.py,sha256=lBHTultMZqWXe9u-inGzcZRBkvW6axFZ10REZv-OBys,3533
|
42
42
|
openepd/model/specs/base.py,sha256=S2KmHpBjjZnJ67FS3VJBA3aQ0a440OmhFFTqM8ZEOMM,2681
|
43
|
-
openepd/model/specs/concrete.py,sha256=
|
43
|
+
openepd/model/specs/concrete.py,sha256=Hu6PxoyfRAeDGInMfHayOc8FZc8w5FS3tUCKxdBpOxM,23097
|
44
44
|
openepd/model/specs/glass.py,sha256=Zn8cKTGxhoQujtv4F7HtfMkZugV5DMt_HQ6dw0sUugs,14865
|
45
45
|
openepd/model/specs/steel.py,sha256=n9hnOwJ8ZixVdd9M-R_wHego35qWinGe8W184EwHASo,6334
|
46
46
|
openepd/model/specs/wood.py,sha256=ehKJqqW9VfNKgM1S3gazfNNL4Af4SKZBm7HttAjokZQ,5128
|
@@ -49,9 +49,9 @@ openepd/model/validation/__init__.py,sha256=rqQJWF5jpYAgRbbAycUfWMGsr5kGtfjmwzsT
|
|
49
49
|
openepd/model/validation/common.py,sha256=afJrWSvxMf8s9Y80-bG67Fp6W5siqtciMJ3Z6nUOPAI,2636
|
50
50
|
openepd/model/validation/numbers.py,sha256=60Z9hT8nQwJHvUL7k5nBZsHxxWhaIxNKVbW3BnHS8zM,1088
|
51
51
|
openepd/model/validation/quantity.py,sha256=-JGwdeSWuBSgtUizoSOg-6t3NFaGuumn5Ngd01rYxPs,2873
|
52
|
-
openepd/model/versioning.py,sha256=
|
52
|
+
openepd/model/versioning.py,sha256=fpj45RmphEI5u9fKZLI8FWa83cjH-wkeIU1RLLLwmX8,4700
|
53
53
|
openepd/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
54
|
-
openepd-1.
|
55
|
-
openepd-1.
|
56
|
-
openepd-1.
|
57
|
-
openepd-1.
|
54
|
+
openepd-1.8.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
55
|
+
openepd-1.8.0.dist-info/METADATA,sha256=r3C2sR1Zz5kmEkaZQbnYg6LKvXK3HFidysHpUOPepcU,7762
|
56
|
+
openepd-1.8.0.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
|
57
|
+
openepd-1.8.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|