Skip to content

Commit cdf4013

Browse files
committed
CLI: Support delivery time filter on gridpool order stream
Replaces the delivery period filter to support full delivery period start intervals. Using to/from arguments to avoid ambiguity with delivery start. Signed-off-by: cwasicki <126617870+cwasicki@users.noreply.github.com>
1 parent 98c3731 commit cdf4013

2 files changed

Lines changed: 25 additions & 27 deletions

File tree

src/frequenz/client/electricity_trading/cli/__main__.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,17 +135,20 @@ def receive_gridpool_trades(
135135
)
136136

137137

138+
# pylint: disable=too-many-arguments
138139
@cli.command()
139140
@click.option("--url", required=True, type=str)
140141
@click.option("--auth_key", required=True, type=str)
141-
@click.option("--start", default=None, type=iso)
142+
@click.option("--delivery-from", default=None, type=iso)
143+
@click.option("--delivery-to", default=None, type=iso)
142144
@click.option("--gid", required=True, type=int)
143145
@click.option("--sign_secret", default=None, type=str)
144146
def receive_gridpool_orders(
145147
url: str,
146148
auth_key: str,
147149
*,
148-
start: datetime,
150+
delivery_from: datetime | None,
151+
delivery_to: datetime | None,
149152
gid: int,
150153
sign_secret: str | None = None,
151154
) -> None:
@@ -154,7 +157,8 @@ def receive_gridpool_orders(
154157
run_list_gridpool_orders(
155158
url=url,
156159
auth_key=auth_key,
157-
delivery_start=start,
160+
delivery_from=delivery_from,
161+
delivery_to=delivery_to,
158162
gid=gid,
159163
sign_secret=sign_secret,
160164
)

src/frequenz/client/electricity_trading/cli/etrading.py

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"""CLI tool to interact with the trading API."""
55

66
from collections import deque
7-
from datetime import datetime, timedelta, timezone
7+
from datetime import datetime, timedelta
88
from decimal import Decimal
99
from enum import Enum
1010
from typing import AsyncIterator
@@ -170,56 +170,50 @@ async def list_gridpool_trades(
170170
print_trade(trade, gid)
171171

172172

173+
# pylint: disable=too-many-arguments
173174
async def list_gridpool_orders(
174175
url: str,
175176
auth_key: str,
176177
*,
177-
delivery_start: datetime,
178+
delivery_from: datetime | None,
179+
delivery_to: datetime | None,
178180
gid: int,
179181
sign_secret: str | None = None,
180182
) -> None:
181183
"""List orders and stream new gridpool orders.
182184
183-
If delivery_start is provided, list historical orders and stream new orders
184-
for the 15 minute delivery period starting at delivery_start.
185-
If no delivery_start is provided, stream new orders for any delivery period.
185+
Optionally orders can be filtered by delivery period.
186186
187187
Note that retrieved sort order for listed orders (starting from the newest)
188188
is reversed in chunks trying to bring more recent orders to the bottom.
189189
190190
Args:
191191
url: URL of the trading API.
192192
auth_key: API key.
193-
delivery_start: Start of the delivery period or None.
193+
delivery_from: Start timestamp (inclusive) to filter delivery start times or None.
194+
delivery_to: End timestamp (exclusive) to filter delivery start times or None.
194195
gid: Gridpool ID.
195196
sign_secret: The cryptographic secret to use for HMAC generation.
196197
"""
197198
client = Client(server_url=url, auth_key=auth_key, sign_secret=sign_secret)
198199

199200
print_order_header()
200201

201-
delivery_time_filter = None
202-
# If delivery period is selected, list historical orders also
203-
if delivery_start is not None:
204-
check_delivery_start(delivery_start)
205-
delivery_time_filter = DeliveryTimeFilter(
206-
time_interval=Interval(
207-
start_time=delivery_start,
208-
end_time=delivery_start + timedelta(minutes=15),
209-
),
210-
duration_filters=[],
211-
)
212-
lst = client.list_gridpool_orders(gid, delivery_time_filter=delivery_time_filter)
213-
214-
async for order in reverse_iterator(lst):
215-
print_order(order, gid)
202+
delivery_time_filter = DeliveryTimeFilter(Interval(delivery_from, delivery_to))
216203

217-
if delivery_start and delivery_start <= datetime.now(timezone.utc):
218-
return
204+
lst = client.list_gridpool_orders(
205+
gid,
206+
delivery_time_filter=delivery_time_filter,
207+
)
219208

220209
stream = client.gridpool_orders_stream(
221-
gid, delivery_time_filter=delivery_time_filter
210+
gid,
211+
delivery_time_filter=delivery_time_filter,
222212
).new_receiver()
213+
214+
async for order in reverse_iterator(lst):
215+
print_order(order, gid)
216+
223217
async for order in stream:
224218
print_order(order, gid)
225219

0 commit comments

Comments
 (0)