Skip to content

Commit 8fc7c68

Browse files
committed
Remove ComponentStatus and Component.status
These were removed from the microgrid API v0.18. Signed-off-by: Leandro Lucarella <[email protected]>
1 parent 8918467 commit 8fc7c68

21 files changed

+31
-251
lines changed

src/frequenz/client/microgrid/component/__init__.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@
5151
)
5252
from ._relay import Relay
5353
from ._state_sample import ComponentErrorCode, ComponentStateCode, ComponentStateSample
54-
from ._status import ComponentStatus
5554
from ._types import (
5655
ComponentTypes,
5756
ProblematicComponentTypes,
@@ -74,7 +73,6 @@
7473
"ComponentErrorCode",
7574
"ComponentStateCode",
7675
"ComponentStateSample",
77-
"ComponentStatus",
7876
"ComponentTypes",
7977
"Converter",
8078
"CryptoMiner",

src/frequenz/client/microgrid/component/_component.py

Lines changed: 8 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
"""Base component from which all other components inherit."""
55

66
import dataclasses
7-
import logging
87
from collections.abc import Mapping
98
from datetime import datetime, timezone
109
from typing import Any, Self
@@ -16,9 +15,6 @@
1615
from ..metrics._bounds import Bounds
1716
from ..metrics._metric import Metric
1817
from ._category import ComponentCategory
19-
from ._status import ComponentStatus
20-
21-
_logger = logging.getLogger(__name__)
2218

2319

2420
@dataclasses.dataclass(frozen=True, kw_only=True)
@@ -44,17 +40,6 @@ class Component: # pylint: disable=too-many-instance-attributes
4440
and in case some low level code needs to know the category of a component.
4541
"""
4642

47-
status: ComponentStatus | int = ComponentStatus.UNSPECIFIED
48-
"""The status of this component.
49-
50-
Tip:
51-
You can also use
52-
[`is_active_now()`][frequenz.client.microgrid.component.Component.is_active_now]
53-
or
54-
[`is_active_at()`][frequenz.client.microgrid.component.Component.is_active_at],
55-
which also checks if the component is operational.
56-
"""
57-
5843
name: str | None = None
5944
"""The name of this component."""
6045

@@ -100,48 +85,24 @@ def __new__(cls, *_: Any, **__: Any) -> Self:
10085
raise TypeError(f"Cannot instantiate {cls.__name__} directly")
10186
return super().__new__(cls)
10287

103-
def is_active_at(self, timestamp: datetime) -> bool:
104-
"""Check whether this component is active at a specific timestamp.
105-
106-
A component is considered active if it is in the active state and is
107-
operational at the given timestamp. The operational lifetime is used to
108-
determine whether the component is operational at the given timestamp.
109-
110-
If a component has an unspecified status, it is assumed to be active
111-
and a warning is logged.
88+
def is_operational_at(self, timestamp: datetime) -> bool:
89+
"""Check whether this component is operational at a specific timestamp.
11290
11391
Args:
11492
timestamp: The timestamp to check.
11593
11694
Returns:
117-
Whether this component is active at the given timestamp.
95+
Whether this component is operational at the given timestamp.
11896
"""
119-
if self.status is ComponentStatus.UNSPECIFIED:
120-
_logger.warning(
121-
"Component %s has an unspecified status. Assuming it is active.",
122-
self,
123-
)
124-
return self.operational_lifetime.is_operational_at(timestamp)
125-
126-
return (
127-
self.status is ComponentStatus.ACTIVE
128-
and self.operational_lifetime.is_operational_at(timestamp)
129-
)
130-
131-
def is_active_now(self) -> bool:
132-
"""Check whether this component is currently active.
133-
134-
A component is considered active if it is in the active state and is
135-
operational at the current time. The operational lifetime is used to
136-
determine whether the component is operational at the current time.
97+
return self.operational_lifetime.is_operational_at(timestamp)
13798

138-
If a component has an unspecified status, it is assumed to be active
139-
and a warning is logged.
99+
def is_operational_now(self) -> bool:
100+
"""Check whether this component is currently operational.
140101
141102
Returns:
142-
Whether this component is active at the current time.
103+
Whether this component is operational at the current time.
143104
"""
144-
return self.is_active_at(datetime.now(timezone.utc))
105+
return self.is_operational_at(datetime.now(timezone.utc))
145106

146107
@property
147108
def identity(self) -> tuple[ComponentId, MicrogridId]:

src/frequenz/client/microgrid/component/_component_proto.py

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@
5656
UnspecifiedComponent,
5757
)
5858
from ._relay import Relay
59-
from ._status import ComponentStatus
6059
from ._types import ComponentTypes
6160
from ._voltage_transformer import VoltageTransformer
6261

@@ -109,7 +108,6 @@ class ComponentBaseData(NamedTuple):
109108
manufacturer: str | None
110109
model_name: str | None
111110
category: ComponentCategory | int
112-
status: ComponentStatus | int
113111
lifetime: Lifetime
114112
rated_bounds: dict[Metric | int, Bounds]
115113
category_specific_metadata: dict[str, Any]
@@ -147,12 +145,6 @@ def component_base_from_proto_with_issues(
147145
if model_name is None:
148146
minor_issues.append("model_name is empty")
149147

150-
status = enum_from_proto(message.status, ComponentStatus)
151-
if status is ComponentStatus.UNSPECIFIED:
152-
major_issues.append("status is unspecified")
153-
elif isinstance(status, int):
154-
major_issues.append("status is unrecognized")
155-
156148
lifetime = _get_operational_lifetime_from_proto(
157149
message, major_issues=major_issues, minor_issues=minor_issues
158150
)
@@ -193,7 +185,6 @@ def component_base_from_proto_with_issues(
193185
manufacturer,
194186
model_name,
195187
category,
196-
status,
197188
lifetime,
198189
rated_bounds,
199190
category_specific_metadata,
@@ -229,7 +220,6 @@ def component_from_proto_with_issues(
229220
name=base_data.name,
230221
manufacturer=base_data.manufacturer,
231222
model_name=base_data.model_name,
232-
status=base_data.status,
233223
category=base_data.category,
234224
operational_lifetime=base_data.lifetime,
235225
category_specific_metadata=base_data.category_specific_metadata,
@@ -244,7 +234,6 @@ def component_from_proto_with_issues(
244234
name=base_data.name,
245235
manufacturer=base_data.manufacturer,
246236
model_name=base_data.model_name,
247-
status=base_data.status,
248237
category=base_data.category,
249238
operational_lifetime=base_data.lifetime,
250239
rated_bounds=base_data.rated_bounds,
@@ -266,7 +255,6 @@ def component_from_proto_with_issues(
266255
name=base_data.name,
267256
manufacturer=base_data.manufacturer,
268257
model_name=base_data.model_name,
269-
status=base_data.status,
270258
operational_lifetime=base_data.lifetime,
271259
rated_bounds=base_data.rated_bounds,
272260
)
@@ -291,7 +279,6 @@ def component_from_proto_with_issues(
291279
name=base_data.name,
292280
manufacturer=base_data.manufacturer,
293281
model_name=base_data.model_name,
294-
status=base_data.status,
295282
operational_lifetime=base_data.lifetime,
296283
rated_bounds=base_data.rated_bounds,
297284
)
@@ -303,7 +290,6 @@ def component_from_proto_with_issues(
303290
name=base_data.name,
304291
manufacturer=base_data.manufacturer,
305292
model_name=base_data.model_name,
306-
status=base_data.status,
307293
operational_lifetime=base_data.lifetime,
308294
rated_bounds=base_data.rated_bounds,
309295
type=battery_type,
@@ -340,7 +326,6 @@ def component_from_proto_with_issues(
340326
name=base_data.name,
341327
manufacturer=base_data.manufacturer,
342328
model_name=base_data.model_name,
343-
status=base_data.status,
344329
operational_lifetime=base_data.lifetime,
345330
rated_bounds=base_data.rated_bounds,
346331
)
@@ -354,7 +339,6 @@ def component_from_proto_with_issues(
354339
name=base_data.name,
355340
manufacturer=base_data.manufacturer,
356341
model_name=base_data.model_name,
357-
status=base_data.status,
358342
operational_lifetime=base_data.lifetime,
359343
rated_bounds=base_data.rated_bounds,
360344
type=ev_charger_type,
@@ -370,7 +354,6 @@ def component_from_proto_with_issues(
370354
name=base_data.name,
371355
manufacturer=base_data.manufacturer,
372356
model_name=base_data.model_name,
373-
status=base_data.status,
374357
operational_lifetime=base_data.lifetime,
375358
rated_bounds=base_data.rated_bounds,
376359
rated_fuse_current=rated_fuse_current,
@@ -408,7 +391,6 @@ def component_from_proto_with_issues(
408391
name=base_data.name,
409392
manufacturer=base_data.manufacturer,
410393
model_name=base_data.model_name,
411-
status=base_data.status,
412394
operational_lifetime=base_data.lifetime,
413395
rated_bounds=base_data.rated_bounds,
414396
)
@@ -422,7 +404,6 @@ def component_from_proto_with_issues(
422404
name=base_data.name,
423405
manufacturer=base_data.manufacturer,
424406
model_name=base_data.model_name,
425-
status=base_data.status,
426407
operational_lifetime=base_data.lifetime,
427408
rated_bounds=base_data.rated_bounds,
428409
type=inverter_type,
@@ -436,7 +417,6 @@ def component_from_proto_with_issues(
436417
name=base_data.name,
437418
manufacturer=base_data.manufacturer,
438419
model_name=base_data.model_name,
439-
status=base_data.status,
440420
operational_lifetime=base_data.lifetime,
441421
rated_bounds=base_data.rated_bounds,
442422
primary_voltage=message.category_type.voltage_transformer.primary,

src/frequenz/client/microgrid/component/_status.py

Lines changed: 0 additions & 22 deletions
This file was deleted.

tests/component/component_proto/conftest.py

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,7 @@
1515
from google.protobuf.timestamp_pb2 import Timestamp
1616

1717
from frequenz.client.microgrid import Lifetime
18-
from frequenz.client.microgrid.component import (
19-
Component,
20-
ComponentCategory,
21-
ComponentStatus,
22-
)
18+
from frequenz.client.microgrid.component import Component, ComponentCategory
2319
from frequenz.client.microgrid.component._component_proto import ComponentBaseData
2420
from frequenz.client.microgrid.metrics import Bounds, Metric
2521

@@ -58,7 +54,6 @@ def default_component_base_data(
5854
manufacturer=DEFAULT_MANUFACTURER,
5955
model_name=DEFAULT_MODEL_NAME,
6056
category=ComponentCategory.UNSPECIFIED,
61-
status=ComponentStatus.ACTIVE,
6257
lifetime=DEFAULT_LIFETIME,
6358
rated_bounds={Metric.AC_ACTIVE_ENERGY: Bounds(lower=0, upper=100)},
6459
category_specific_metadata={},
@@ -74,7 +69,6 @@ def assert_base_data(base_data: ComponentBaseData, other: Component) -> None:
7469
assert base_data.manufacturer == other.manufacturer
7570
assert base_data.model_name == other.model_name
7671
assert base_data.category == other.category
77-
assert base_data.status == other.status
7872
assert base_data.lifetime == other.operational_lifetime
7973
assert base_data.rated_bounds == other.rated_bounds
8074
assert base_data.category_specific_metadata == other.category_specific_metadata
@@ -88,11 +82,6 @@ def base_data_as_proto(base_data: ComponentBaseData) -> components_pb2.Component
8882
name=base_data.name or "",
8983
manufacturer=base_data.manufacturer or "",
9084
model_name=base_data.model_name or "",
91-
status=(
92-
base_data.status
93-
if isinstance(base_data.status, int)
94-
else int(base_data.status.value) # type: ignore[arg-type]
95-
),
9685
category=(
9786
base_data.category
9887
if isinstance(base_data.category, int)

tests/component/component_proto/test_base.py

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,11 @@
44
"""Tests for protobuf conversion of the base/common part of Component objects."""
55

66

7-
import pytest
87
from frequenz.api.common.v1.microgrid.components import battery_pb2
98
from google.protobuf.timestamp_pb2 import Timestamp
109

1110
from frequenz.client.microgrid import Lifetime
12-
from frequenz.client.microgrid.component import ComponentCategory, ComponentStatus
11+
from frequenz.client.microgrid.component import ComponentCategory
1312
from frequenz.client.microgrid.component._component_proto import (
1413
ComponentBaseData,
1514
component_base_from_proto_with_issues,
@@ -35,9 +34,8 @@ def test_complete(default_component_base_data: ComponentBaseData) -> None:
3534
assert parsed == base_data
3635

3736

38-
@pytest.mark.parametrize("status", [ComponentStatus.UNSPECIFIED, 999])
39-
def test_missing_metadata(
40-
default_component_base_data: ComponentBaseData, status: ComponentStatus | int
37+
def test_missing_category_specific_info(
38+
default_component_base_data: ComponentBaseData,
4139
) -> None:
4240
"""Test parsing with missing optional metadata."""
4341
major_issues: list[str] = []
@@ -47,7 +45,6 @@ def test_missing_metadata(
4745
manufacturer=None,
4846
model_name=None,
4947
category=ComponentCategory.UNSPECIFIED,
50-
status=status,
5148
lifetime=Lifetime(),
5249
rated_bounds={},
5350
category_specific_metadata={},
@@ -60,12 +57,7 @@ def test_missing_metadata(
6057
proto, major_issues=major_issues, minor_issues=minor_issues
6158
)
6259

63-
expected_major_issues = ["category is unspecified"]
64-
if status == ComponentStatus.UNSPECIFIED:
65-
expected_major_issues.append("status is unspecified")
66-
else:
67-
expected_major_issues.append("status is unrecognized")
68-
assert sorted(major_issues) == sorted(expected_major_issues)
60+
assert sorted(major_issues) == sorted(["category is unspecified"])
6961
assert sorted(minor_issues) == sorted(
7062
[
7163
"name is empty",

tests/component/test_battery.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
Battery,
1414
BatteryType,
1515
ComponentCategory,
16-
ComponentStatus,
1716
LiIonBattery,
1817
NaIonBattery,
1918
UnrecognizedBattery,
@@ -53,7 +52,6 @@ def test_abstract_battery_cannot_be_instantiated(
5352
name="test_battery",
5453
manufacturer="test_manufacturer",
5554
model_name="test_model",
56-
status=ComponentStatus.ACTIVE,
5755
type=BatteryType.LI_ION,
5856
)
5957

@@ -85,15 +83,13 @@ def test_recognized_battery_types(
8583
name=case.name,
8684
manufacturer="test_manufacturer",
8785
model_name="test_model",
88-
status=ComponentStatus.ACTIVE,
8986
)
9087

9188
assert battery.id == component_id
9289
assert battery.microgrid_id == microgrid_id
9390
assert battery.name == case.name
9491
assert battery.manufacturer == "test_manufacturer"
9592
assert battery.model_name == "test_model"
96-
assert battery.status == ComponentStatus.ACTIVE
9793
assert battery.category == ComponentCategory.BATTERY
9894
assert battery.type == case.expected_type
9995

@@ -108,7 +104,6 @@ def test_unrecognized_battery_type(
108104
name="unrecognized_battery",
109105
manufacturer="test_manufacturer",
110106
model_name="test_model",
111-
status=ComponentStatus.ACTIVE,
112107
type=999,
113108
)
114109

@@ -117,6 +112,5 @@ def test_unrecognized_battery_type(
117112
assert battery.name == "unrecognized_battery"
118113
assert battery.manufacturer == "test_manufacturer"
119114
assert battery.model_name == "test_model"
120-
assert battery.status == ComponentStatus.ACTIVE
121115
assert battery.category == ComponentCategory.BATTERY
122116
assert battery.type == 999

0 commit comments

Comments
 (0)