From c677a37f76896bc3a185d635e040e5f0579d34cc Mon Sep 17 00:00:00 2001 From: camille-bouvy-frequenz Date: Tue, 8 Oct 2024 18:29:38 +0200 Subject: [PATCH 1/2] Replace Energy with Power for the quantity representation Signed-off-by: camille-bouvy-frequenz --- pyproject.toml | 6 +- .../client/electricity_trading/__init__.py | 4 +- .../client/electricity_trading/_client.py | 20 +++--- .../client/electricity_trading/_types.py | 64 +++++++++---------- tests/test_client.py | 28 ++++---- tests/test_types.py | 40 ++++++------ 6 files changed, 80 insertions(+), 82 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index d80fa91..318c42c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,13 +27,13 @@ classifiers = [ requires-python = ">= 3.11, < 4" # TODO(cookiecutter): Remove and add more dependencies if appropriate dependencies = [ - "frequenz-api-common >= 0.6.2, < 0.7.0", + "frequenz-api-common >= 0.6.3, < 0.7.0", "grpcio >= 1.66.2, < 2", "frequenz-channels >= 1.0.0, < 2", "frequenz-client-base >= 0.6.1, < 0.7.0", "frequenz-client-common >= 0.1.0, < 0.3.0", - "frequenz-api-electricity-trading >= 0.2.3, < 1", - "protobuf >= 5.27.2, < 6", + "frequenz-api-electricity-trading >= 0.2.4, < 1", + "protobuf >= 5.28.0, < 6", ] dynamic = ["version"] diff --git a/src/frequenz/client/electricity_trading/__init__.py b/src/frequenz/client/electricity_trading/__init__.py index 762eab0..e1ae89b 100644 --- a/src/frequenz/client/electricity_trading/__init__.py +++ b/src/frequenz/client/electricity_trading/__init__.py @@ -165,7 +165,6 @@ DeliveryArea, DeliveryDuration, DeliveryPeriod, - Energy, EnergyMarketCodeType, GridpoolOrderFilter, GridpoolTradeFilter, @@ -176,6 +175,7 @@ OrderExecutionOption, OrderState, OrderType, + Power, Price, PublicTrade, PublicTradeFilter, @@ -192,7 +192,6 @@ "DeliveryArea", "DeliveryDuration", "DeliveryPeriod", - "Energy", "EnergyMarketCodeType", "GridpoolOrderFilter", "GridpoolTradeFilter", @@ -203,6 +202,7 @@ "OrderExecutionOption", "OrderState", "OrderType", + "Power", "Price", "PublicTrade", "PublicTradeFilter", diff --git a/src/frequenz/client/electricity_trading/_client.py b/src/frequenz/client/electricity_trading/_client.py index ec1d04a..ec4976e 100644 --- a/src/frequenz/client/electricity_trading/_client.py +++ b/src/frequenz/client/electricity_trading/_client.py @@ -24,7 +24,6 @@ from ._types import ( DeliveryArea, DeliveryPeriod, - Energy, GridpoolOrderFilter, GridpoolTradeFilter, MarketSide, @@ -33,6 +32,7 @@ OrderExecutionOption, OrderState, OrderType, + Power, Price, PublicTrade, PublicTradeFilter, @@ -321,10 +321,10 @@ def validate_params( # pylint: disable=too-many-arguments, too-many-positional-arguments, too-many-branches self, price: Price | None | _Sentinel = NO_VALUE, - quantity: Energy | None | _Sentinel = NO_VALUE, + quantity: Power | None | _Sentinel = NO_VALUE, stop_price: Price | None | _Sentinel = NO_VALUE, peak_price_delta: Price | None | _Sentinel = NO_VALUE, - display_quantity: Energy | None | _Sentinel = NO_VALUE, + display_quantity: Power | None | _Sentinel = NO_VALUE, delivery_period: DeliveryPeriod | None = None, valid_until: datetime | None | _Sentinel = NO_VALUE, execution_option: OrderExecutionOption | None | _Sentinel = NO_VALUE, @@ -355,9 +355,7 @@ def validate_params( if not isinstance(price, _Sentinel) and price is not None: validate_decimal_places(price.amount, PRECISION_DECIMAL_PRICE, "price") if not isinstance(quantity, _Sentinel) and quantity is not None: - validate_decimal_places( - quantity.mwh, PRECISION_DECIMAL_QUANTITY, "quantity" - ) + validate_decimal_places(quantity.mw, PRECISION_DECIMAL_QUANTITY, "quantity") if not isinstance(stop_price, _Sentinel) and stop_price is not None: raise NotImplementedError( "STOP_LIMIT orders are not supported yet, so stop_price cannot be set." @@ -402,10 +400,10 @@ async def create_gridpool_order( order_type: OrderType, side: MarketSide, price: Price, - quantity: Energy, + quantity: Power, stop_price: Price | None = None, peak_price_delta: Price | None = None, - display_quantity: Energy | None = None, + display_quantity: Power | None = None, execution_option: OrderExecutionOption | None = None, valid_until: datetime | None = None, payload: dict[str, struct_pb2.Value] | None = None, @@ -486,10 +484,10 @@ async def update_gridpool_order( gridpool_id: int, order_id: int, price: Price | None | _Sentinel = NO_VALUE, - quantity: Energy | None | _Sentinel = NO_VALUE, + quantity: Power | None | _Sentinel = NO_VALUE, stop_price: Price | None | _Sentinel = NO_VALUE, peak_price_delta: Price | None | _Sentinel = NO_VALUE, - display_quantity: Energy | None | _Sentinel = NO_VALUE, + display_quantity: Power | None | _Sentinel = NO_VALUE, execution_option: OrderExecutionOption | None | _Sentinel = NO_VALUE, valid_until: datetime | None | _Sentinel = NO_VALUE, payload: dict[str, struct_pb2.Value] | None | _Sentinel = NO_VALUE, @@ -503,7 +501,7 @@ async def update_gridpool_order( order_id: Order ID. price: The updated limit price at which the contract is to be traded. This is the maximum price for a BUY order or the minimum price for a SELL order. - quantity: The updated quantity of the contract being traded, specified in MWh. + quantity: The updated quantity of the contract being traded, specified in MW. stop_price: Applicable for STOP_LIMIT orders. This is the updated stop price that triggers the limit order. peak_price_delta: Applicable for ICEBERG orders. This is the updated price difference diff --git a/src/frequenz/client/electricity_trading/_types.py b/src/frequenz/client/electricity_trading/_types.py index d0a36ac..95cd2a6 100644 --- a/src/frequenz/client/electricity_trading/_types.py +++ b/src/frequenz/client/electricity_trading/_types.py @@ -16,7 +16,7 @@ # pylint: disable=no-member from frequenz.api.common.v1.grid import delivery_area_pb2, delivery_duration_pb2 -from frequenz.api.common.v1.market import energy_pb2, price_pb2 +from frequenz.api.common.v1.market import power_pb2, price_pb2 from frequenz.api.common.v1.types import decimal_pb2 from frequenz.api.electricity_trading.v1 import electricity_trading_pb2 from google.protobuf import json_format, struct_pb2, timestamp_pb2 @@ -117,32 +117,32 @@ def to_pb(self) -> price_pb2.Price: @dataclass(frozen=True) -class Energy: - """Represents energy unit in Megawatthours (MWh).""" +class Power: + """Represents power unit in Megawatthours (MW).""" - mwh: Decimal + mw: Decimal @classmethod - def from_pb(cls, energy: energy_pb2.Energy) -> Self: - """Convert a protobuf Energy to Energy object. + def from_pb(cls, power: power_pb2.Power) -> Self: + """Convert a protobuf Power to Power object. Args: - energy: Energy to convert. + power: Power to convert. Returns: - Energy object corresponding to the protobuf message. + Power object corresponding to the protobuf message. """ - return cls(mwh=Decimal(energy.mwh.value)) + return cls(mw=Decimal(power.mw.value)) - def to_pb(self) -> energy_pb2.Energy: - """Convert a Energy object to protobuf Energy. + def to_pb(self) -> power_pb2.Power: + """Convert a Power object to protobuf Power. Returns: - Protobuf message corresponding to the Energy object. + Protobuf message corresponding to the Power object. """ - decimal_mwh = decimal_pb2.Decimal() - decimal_mwh.value = str(self.mwh) - return energy_pb2.Energy(mwh=decimal_mwh) + decimal_mw = decimal_pb2.Decimal() + decimal_mw.value = str(self.mw) + return power_pb2.Power(mw=decimal_mw) class EnergyMarketCodeType(enum.Enum): @@ -872,7 +872,7 @@ class Order: # pylint: disable=too-many-instance-attributes price: Price """The limit price at which the contract is to be traded.""" - quantity: Energy + quantity: Power """The quantity of the contract being traded.""" stop_price: Price | None = None @@ -882,7 +882,7 @@ class Order: # pylint: disable=too-many-instance-attributes """Applicable for ICEBERG orders. The price difference between the peak price and the limit price.""" - display_quantity: Energy | None = None + display_quantity: Power | None = None """Applicable for ICEBERG orders. The quantity of the order to be displayed in the order book.""" @@ -924,7 +924,7 @@ def from_pb(cls, order: electricity_trading_pb2.Order) -> Self: type=OrderType.from_pb(order.type), side=MarketSide.from_pb(order.side), price=Price.from_pb(order.price), - quantity=Energy.from_pb(order.quantity), + quantity=Power.from_pb(order.quantity), stop_price=( Price.from_pb(order.stop_price) if order.HasField("stop_price") @@ -936,7 +936,7 @@ def from_pb(cls, order: electricity_trading_pb2.Order) -> Self: else None ), display_quantity=( - Energy.from_pb(order.display_quantity) + Power.from_pb(order.display_quantity) if order.HasField("display_quantity") else None ), @@ -1019,7 +1019,7 @@ class Trade: # pylint: disable=too-many-instance-attributes price: Price """The price at which the trade was executed.""" - quantity: Energy + quantity: Power """The executed quantity of the trade.""" state: TradeState @@ -1051,7 +1051,7 @@ def from_pb(cls, trade: electricity_trading_pb2.Trade) -> Self: delivery_period=DeliveryPeriod.from_pb(trade.delivery_period), execution_time=trade.execution_time.ToDatetime(tzinfo=timezone.utc), price=Price.from_pb(trade.price), - quantity=Energy.from_pb(trade.quantity), + quantity=Power.from_pb(trade.quantity), state=TradeState.from_pb(trade.state), ) @@ -1143,8 +1143,8 @@ class OrderDetail: order_id: int order: Order state_detail: StateDetail - open_quantity: Energy - filled_quantity: Energy + open_quantity: Power + filled_quantity: Power create_time: datetime modification_time: datetime @@ -1184,8 +1184,8 @@ def from_pb(cls, order_detail: electricity_trading_pb2.OrderDetail) -> Self: order_id=order_detail.order_id, order=Order.from_pb(order_detail.order), state_detail=StateDetail.from_pb(order_detail.state_detail), - open_quantity=Energy.from_pb(order_detail.open_quantity), - filled_quantity=Energy.from_pb(order_detail.filled_quantity), + open_quantity=Power.from_pb(order_detail.open_quantity), + filled_quantity=Power.from_pb(order_detail.filled_quantity), create_time=order_detail.create_time.ToDatetime(tzinfo=timezone.utc), modification_time=order_detail.modification_time.ToDatetime( tzinfo=timezone.utc @@ -1236,7 +1236,7 @@ class PublicTrade: # pylint: disable=too-many-instance-attributes price: Price """The limit price at which the contract is to be traded.""" - quantity: Energy + quantity: Power """The quantity of the contract being traded.""" state: TradeState @@ -1267,7 +1267,7 @@ def from_pb(cls, public_trade: electricity_trading_pb2.PublicTrade) -> Self: delivery_period=DeliveryPeriod.from_pb(public_trade.delivery_period), execution_time=public_trade.execution_time.ToDatetime(tzinfo=timezone.utc), price=Price.from_pb(public_trade.price), - quantity=Energy.from_pb(public_trade.quantity), + quantity=Power.from_pb(public_trade.quantity), state=TradeState.from_pb(public_trade.state), ) @@ -1659,8 +1659,8 @@ class UpdateOrder: # pylint: disable=too-many-instance-attributes """The updated limit price at which the contract is to be traded. This is the maximum price for a BUY order or the minimum price for a SELL order.""" - quantity: Energy | None = None - """The updated quantity of the contract being traded, specified in MWh.""" + quantity: Power | None = None + """The updated quantity of the contract being traded, specified in MW.""" stop_price: Price | None = None """Applicable for STOP_LIMIT orders. This is the updated stop price that triggers @@ -1670,7 +1670,7 @@ class UpdateOrder: # pylint: disable=too-many-instance-attributes """Applicable for ICEBERG orders. This is the updated price difference between the peak price and the limit price.""" - display_quantity: Energy | None = None + display_quantity: Power | None = None """Applicable for ICEBERG orders. This is the updated quantity of the order to be displayed in the order book.""" @@ -1717,7 +1717,7 @@ def from_pb( else None ), quantity=( - Energy.from_pb(update_order.quantity) + Power.from_pb(update_order.quantity) if update_order.HasField("quantity") else None ), @@ -1732,7 +1732,7 @@ def from_pb( else None ), display_quantity=( - Energy.from_pb(update_order.display_quantity) + Power.from_pb(update_order.display_quantity) if update_order.HasField("display_quantity") else None ), diff --git a/tests/test_client.py b/tests/test_client.py index 4320d81..dbfff79 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -19,7 +19,6 @@ Currency, DeliveryArea, DeliveryPeriod, - Energy, EnergyMarketCodeType, MarketActor, MarketSide, @@ -28,6 +27,7 @@ OrderExecutionOption, OrderState, OrderType, + Power, Price, StateDetail, StateReason, @@ -61,7 +61,7 @@ def set_up() -> Generator[Any, Any, Any]: order_type = OrderType.LIMIT side = MarketSide.BUY price = Price(amount=Decimal("50"), currency=Currency.EUR) - quantity = Energy(mwh=Decimal("0.1")) + quantity = Power(mw=Decimal("0.1")) order_execution_option = OrderExecutionOption.AON valid_until = delivery_start + timedelta(hours=3) @@ -105,8 +105,8 @@ def set_up_order_detail_response( state_reason=StateReason.ADD, market_actor=MarketActor.USER, ), - open_quantity=Energy(mwh=Decimal("5.00")), - filled_quantity=Energy(mwh=Decimal("0.00")), + open_quantity=Power(mw=Decimal("5.00")), + filled_quantity=Power(mw=Decimal("0.00")), create_time=set_up["delivery_period"].start - timedelta(hours=2), modification_time=set_up["delivery_period"].start - timedelta(hours=1), ).to_pb() @@ -314,7 +314,7 @@ def test_list_gridpool_orders( # Invalid price: too many decimal places ( Price(amount=Decimal("50.123"), currency=Currency.EUR), - Energy(mwh=Decimal("0.1")), + Power(mw=Decimal("0.1")), DeliveryPeriod( start=(datetime.now(timezone.utc) + timedelta(days=1)), duration=timedelta(hours=1), @@ -326,7 +326,7 @@ def test_list_gridpool_orders( # Invalid quantity: too many decimal places ( Price(amount=Decimal("50"), currency=Currency.EUR), - Energy(mwh=Decimal("0.1234")), + Power(mw=Decimal("0.1234")), DeliveryPeriod( start=(datetime.now(timezone.utc) + timedelta(days=1)), duration=timedelta(hours=1), @@ -338,7 +338,7 @@ def test_list_gridpool_orders( # Invalid delivery period: start time in the past ( Price(amount=Decimal("50"), currency=Currency.EUR), - Energy(mwh=Decimal("0.1")), + Power(mw=Decimal("0.1")), DeliveryPeriod( start=(datetime.now(timezone.utc) - timedelta(days=1)), duration=timedelta(hours=1), @@ -350,7 +350,7 @@ def test_list_gridpool_orders( # Invalid valid_until: time in the past ( Price(amount=Decimal("50"), currency=Currency.EUR), - Energy(mwh=Decimal("0.1")), + Power(mw=Decimal("0.1")), DeliveryPeriod( start=(datetime.now(timezone.utc) + timedelta(days=1)), duration=timedelta(hours=1), @@ -362,7 +362,7 @@ def test_list_gridpool_orders( # AON execution option with valid_until set (not allowed) ( Price(amount=Decimal("50"), currency=Currency.EUR), - Energy(mwh=Decimal("0.1")), + Power(mw=Decimal("0.1")), DeliveryPeriod( start=(datetime.now(timezone.utc) + timedelta(days=1)), duration=timedelta(hours=1), @@ -377,7 +377,7 @@ def test_create_gridpool_order_with_invalid_params( # pylint: disable=too-many-arguments, too-many-positional-arguments set_up: dict[str, Any], price: Price, - quantity: Energy, + quantity: Power, delivery_period: DeliveryPeriod, valid_until: datetime, execution_option: OrderExecutionOption, @@ -406,21 +406,21 @@ def test_create_gridpool_order_with_invalid_params( # Invalid price: too many decimal places ( Price(amount=Decimal("50.123"), currency=Currency.EUR), - Energy(mwh=Decimal("0.1")), + Power(mw=Decimal("0.1")), None, ValueError, ), # Invalid quantity: too many decimal places ( Price(amount=Decimal("50"), currency=Currency.EUR), - Energy(mwh=Decimal("0.1234")), + Power(mw=Decimal("0.1234")), None, ValueError, ), # Invalid valid_until: time in the past ( Price(amount=Decimal("50"), currency=Currency.EUR), - Energy(mwh=Decimal("0.1")), + Power(mw=Decimal("0.1")), datetime.now(timezone.utc) - timedelta(hours=1), ValueError, ), @@ -429,7 +429,7 @@ def test_create_gridpool_order_with_invalid_params( def test_update_gridpool_order_with_invalid_params( # pylint: disable=too-many-arguments set_up: dict[str, Any], price: Price, - quantity: Energy, + quantity: Power, valid_until: datetime, expected_exception: type[BaseException], ) -> None: diff --git a/tests/test_types.py b/tests/test_types.py index 976cdb1..5230cc4 100644 --- a/tests/test_types.py +++ b/tests/test_types.py @@ -12,7 +12,7 @@ # pylint: disable=no-member from frequenz.api.common.v1.grid import delivery_area_pb2, delivery_duration_pb2 -from frequenz.api.common.v1.market import energy_pb2, price_pb2 +from frequenz.api.common.v1.market import power_pb2, price_pb2 from frequenz.api.common.v1.types import decimal_pb2 from frequenz.api.electricity_trading.v1 import electricity_trading_pb2 from google.protobuf import timestamp_pb2 @@ -22,7 +22,6 @@ DeliveryArea, DeliveryDuration, DeliveryPeriod, - Energy, EnergyMarketCodeType, GridpoolOrderFilter, MarketActor, @@ -31,6 +30,7 @@ OrderDetail, OrderState, OrderType, + Power, Price, PublicTrade, PublicTradeFilter, @@ -58,7 +58,7 @@ type=OrderType.LIMIT, side=MarketSide.BUY, price=Price(amount=Decimal("100.00"), currency=Currency.USD), - quantity=Energy(mwh=Decimal("5.00")), + quantity=Power(mw=Decimal("5.00")), ) ORDER_PB = electricity_trading_pb2.Order( delivery_area=delivery_area_pb2.DeliveryArea( @@ -75,7 +75,7 @@ amount=decimal_pb2.Decimal(value="100.00"), currency=price_pb2.Price.Currency.CURRENCY_USD, ), - quantity=energy_pb2.Energy(mwh=decimal_pb2.Decimal(value="5.00")), + quantity=power_pb2.Power(mw=decimal_pb2.Decimal(value="5.00")), ) TRADE = Trade( id=1, @@ -85,7 +85,7 @@ delivery_area=DeliveryArea(code="XYZ", code_type=EnergyMarketCodeType.EUROPE_EIC), delivery_period=DeliveryPeriod(START_TIME, duration=timedelta(minutes=15)), price=Price(amount=Decimal("100.00"), currency=Currency.USD), - quantity=Energy(mwh=Decimal("5.00")), + quantity=Power(mw=Decimal("5.00")), state=TradeState.ACTIVE, ) @@ -106,7 +106,7 @@ amount=decimal_pb2.Decimal(value="100.00"), currency=price_pb2.Price.Currency.CURRENCY_USD, ), - quantity=energy_pb2.Energy(mwh=decimal_pb2.Decimal(value="5.00")), + quantity=power_pb2.Power(mw=decimal_pb2.Decimal(value="5.00")), state=electricity_trading_pb2.TradeState.TRADE_STATE_ACTIVE, ) @@ -118,8 +118,8 @@ state_reason=StateReason.ADD, market_actor=MarketActor.USER, ), - open_quantity=Energy(mwh=Decimal("5.00")), - filled_quantity=Energy(mwh=Decimal("0.00")), + open_quantity=Power(mw=Decimal("5.00")), + filled_quantity=Power(mw=Decimal("0.00")), create_time=CREATE_TIME, modification_time=MODIFICATION_TIME, ) @@ -131,8 +131,8 @@ state_reason=electricity_trading_pb2.OrderDetail.StateDetail.StateReason.STATE_REASON_ADD, market_actor=electricity_trading_pb2.OrderDetail.StateDetail.MarketActor.MARKET_ACTOR_USER, ), - open_quantity=energy_pb2.Energy(mwh=decimal_pb2.Decimal(value="5.00")), - filled_quantity=energy_pb2.Energy(mwh=decimal_pb2.Decimal(value="0.00")), + open_quantity=power_pb2.Power(mw=decimal_pb2.Decimal(value="5.00")), + filled_quantity=power_pb2.Power(mw=decimal_pb2.Decimal(value="0.00")), create_time=CREATE_TIME_PB, modification_time=MODIFICATION_TIME_PB, ) @@ -147,7 +147,7 @@ delivery_period=DeliveryPeriod(start=START_TIME, duration=timedelta(minutes=15)), execution_time=EXECUTION_TIME, price=Price(amount=Decimal("100.00"), currency=Currency.USD), - quantity=Energy(mwh=Decimal("5.00")), + quantity=Power(mw=Decimal("5.00")), state=TradeState.ACTIVE, ) PUBLIC_TRADE_PB = electricity_trading_pb2.PublicTrade( @@ -169,7 +169,7 @@ amount=decimal_pb2.Decimal(value="100.00"), currency=price_pb2.Price.Currency.CURRENCY_USD, ), - quantity=energy_pb2.Energy(mwh=decimal_pb2.Decimal(value="5.00")), + quantity=power_pb2.Power(mw=decimal_pb2.Decimal(value="5.00")), state=electricity_trading_pb2.TradeState.TRADE_STATE_ACTIVE, ) @@ -318,8 +318,8 @@ def test_price_from_pb() -> None: def test_energy_to_pb() -> None: """Test the client energy type conversions to protobuf.""" assert_conversion_to_pb( - original=Energy(mwh=Decimal("5")), - expected_pb=energy_pb2.Energy(mwh=decimal_pb2.Decimal(value="5")), + original=Power(mw=Decimal("5")), + expected_pb=power_pb2.Power(mw=decimal_pb2.Decimal(value="5")), assert_func=assert_equal, ) @@ -327,8 +327,8 @@ def test_energy_to_pb() -> None: def test_energy_from_pb() -> None: """Test the client energy type conversions from protobuf.""" assert_conversion_from_pb( - original_pb=energy_pb2.Energy(mwh=decimal_pb2.Decimal(value="5")), - expected=Energy(mwh=Decimal("5")), + original_pb=power_pb2.Power(mw=decimal_pb2.Decimal(value="5")), + expected=Power(mw=Decimal("5")), assert_func=assert_equal, ) @@ -485,8 +485,8 @@ def test_order_detail_no_timezone_error() -> None: state_reason=StateReason.ADD, market_actor=MarketActor.USER, ), - open_quantity=Energy(mwh=Decimal("5.00")), - filled_quantity=Energy(mwh=Decimal("0.00")), + open_quantity=Power(mw=Decimal("5.00")), + filled_quantity=Power(mw=Decimal("0.00")), create_time=datetime.now(), modification_time=datetime.now(), ) @@ -503,8 +503,8 @@ def test_order_detail_timezone_converted_to_utc() -> None: state_reason=StateReason.ADD, market_actor=MarketActor.USER, ), - open_quantity=Energy(mwh=Decimal("5.00")), - filled_quantity=Energy(mwh=Decimal("0.00")), + open_quantity=Power(mw=Decimal("5.00")), + filled_quantity=Power(mw=Decimal("0.00")), create_time=start, modification_time=start, ) From 60c7e1d5bf27dd9da05726196f8d4a6d561ad9e2 Mon Sep 17 00:00:00 2001 From: camille-bouvy-frequenz Date: Tue, 8 Oct 2024 18:30:05 +0200 Subject: [PATCH 2/2] Update Release Notes Signed-off-by: camille-bouvy-frequenz --- RELEASE_NOTES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index aa3ba91..f34d80b 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -15,6 +15,7 @@ * Move documentation and code examples to the documentation website * Replace the local `PaginationParams` type with the `frequenz-client-common` one * Remove dependency to `googleapis-common-protos` +* Replace `Energy` with `Power` for the `quantity` representation ## Bug Fixes