Skip to content

Commit 94eb4b4

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.
1 parent adf2fca commit 94eb4b4

2 files changed

Lines changed: 26 additions & 26 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: 19 additions & 23 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
@@ -172,56 +172,52 @@ async def list_gridpool_trades(
172172
print_trade(trade, gid)
173173

174174

175+
# pylint: disable=too-many-arguments
175176
async def list_gridpool_orders(
176177
url: str,
177178
auth_key: str,
178179
*,
179-
delivery_start: datetime,
180+
delivery_from: datetime | None,
181+
delivery_to: datetime | None,
180182
gid: int,
181183
sign_secret: str | None = None,
182184
) -> None:
183185
"""List orders and stream new gridpool orders.
184186
185-
If delivery_start is provided, list historical orders and stream new orders
186-
for the 15 minute delivery period starting at delivery_start.
187-
If no delivery_start is provided, stream new orders for any delivery period.
187+
Optionally trades can be filtered by delivery period.
188188
189189
Note that retrieved sort order for listed orders (starting from the newest)
190190
is reversed in chunks trying to bring more recent orders to the bottom.
191191
192192
Args:
193193
url: URL of the trading API.
194194
auth_key: API key.
195-
delivery_start: Start of the delivery period or None.
195+
delivery_from: Start of the delivery period or None.
196+
delivery_to: End of the delivery period or None.
196197
gid: Gridpool ID.
197198
sign_secret: The cryptographic secret to use for HMAC generation.
198199
"""
199200
client = Client(server_url=url, auth_key=auth_key, sign_secret=sign_secret)
200201

201202
print_order_header()
202203

203-
delivery_time_filter = None
204-
# If delivery period is selected, list historical orders also
205-
if delivery_start is not None:
206-
check_delivery_start(delivery_start)
207-
delivery_time_filter = DeliveryTimeFilter(
208-
time_interval=Interval(
209-
start_time=delivery_start,
210-
end_time=delivery_start + timedelta(minutes=15),
211-
),
212-
duration_filters=[],
213-
)
214-
lst = client.list_gridpool_orders(gid, delivery_time_filter=delivery_time_filter)
204+
delivery_time_filter = DeliveryTimeFilter(Interval(delivery_from, delivery_to))
205+
206+
lst = client.list_gridpool_orders(
207+
gid,
208+
delivery_time_filter=delivery_time_filter,
209+
)
210+
211+
stream = client.gridpool_orders_stream(
212+
gid,
213+
delivery_time_filter=delivery_time_filter,
214+
).new_receiver()
215215

216216
async for order in reverse_iterator(lst):
217217
print_order(order, gid)
218218

219-
if delivery_start and delivery_start <= datetime.now(timezone.utc):
220-
return
219+
print("---- Start streaming -----")
221220

222-
stream = client.gridpool_orders_stream(
223-
gid, delivery_time_filter=delivery_time_filter
224-
).new_receiver()
225221
async for order in stream:
226222
print_order(order, gid)
227223

0 commit comments

Comments
 (0)