Skip to content

Commit 1be3233

Browse files
feat: add CO2 and energy measure unit enums for improved type safety
Signed-off-by: Wiebe Vandendriessche <wiebe.vandendriessche@gmail.com>
1 parent 3c2f2c2 commit 1be3233

1 file changed

Lines changed: 18 additions & 8 deletions

File tree

cyclonedx/model/model_card.py

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,18 @@
4242
from .contact import OrganizationalEntity
4343

4444

45+
@serializable.serializable_enum
46+
class Co2MeasureUnit(str, Enum):
47+
"""Unit of CO2. Currently only tCO2eq is defined by CycloneDX 1.6+."""
48+
TCO2EQ = 'tCO2eq'
49+
50+
51+
@serializable.serializable_enum
52+
class EnergyMeasureUnit(str, Enum):
53+
"""Unit of energy. Currently only kWh is defined by CycloneDX 1.6+."""
54+
KWH = 'kWh'
55+
56+
4557
@serializable.serializable_enum
4658
class MachineLearningApproach(str, Enum):
4759
"""Enumeration for `machineLearningApproachType`.
@@ -942,7 +954,7 @@ class EnergyActivity(str, Enum):
942954
class EnergyMeasure:
943955
"""A measure of energy. Schema `energyMeasure` (1.6+): value + unit (kWh)."""
944956

945-
def __init__(self, *, value: float, unit: str = 'kWh') -> None:
957+
def __init__(self, *, value: float, unit: EnergyMeasureUnit = EnergyMeasureUnit.KWH) -> None:
946958
self.value = value
947959
self.unit = unit
948960

@@ -961,12 +973,11 @@ def value(self, value: float) -> None:
961973
@serializable.view(SchemaVersion1Dot6)
962974
@serializable.view(SchemaVersion1Dot7)
963975
@serializable.xml_sequence(2)
964-
@serializable.xml_string(serializable.XmlStringSerializationType.NORMALIZED_STRING)
965-
def unit(self) -> str:
976+
def unit(self) -> EnergyMeasureUnit:
966977
return self._unit
967978

968979
@unit.setter
969-
def unit(self, unit: str) -> None:
980+
def unit(self, unit: EnergyMeasureUnit) -> None:
970981
self._unit = unit
971982

972983
def __comparable_tuple(self) -> _ComparableTuple:
@@ -1003,7 +1014,7 @@ def __repr__(self) -> str:
10031014
class Co2Measure:
10041015
"""A measure of CO2. Schema `co2Measure` (1.6+): value + unit (tCO2eq)."""
10051016

1006-
def __init__(self, *, value: float, unit: str = 'tCO2eq') -> None:
1017+
def __init__(self, *, value: float, unit: Co2MeasureUnit = Co2MeasureUnit.TCO2EQ) -> None:
10071018
self.value = value
10081019
self.unit = unit
10091020

@@ -1022,12 +1033,11 @@ def value(self, value: float) -> None:
10221033
@serializable.view(SchemaVersion1Dot6)
10231034
@serializable.view(SchemaVersion1Dot7)
10241035
@serializable.xml_sequence(2)
1025-
@serializable.xml_string(serializable.XmlStringSerializationType.NORMALIZED_STRING)
1026-
def unit(self) -> str:
1036+
def unit(self) -> Co2MeasureUnit:
10271037
return self._unit
10281038

10291039
@unit.setter
1030-
def unit(self, unit: str) -> None:
1040+
def unit(self, unit: Co2MeasureUnit) -> None:
10311041
self._unit = unit
10321042

10331043
def __comparable_tuple(self) -> _ComparableTuple:

0 commit comments

Comments
 (0)