Skip to content

Commit adf2fca

Browse files
committed
CLI: Support delivery time filter on gridpool trade 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 9a39d7c commit adf2fca

2 files changed

Lines changed: 25 additions & 23 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
@@ -105,18 +105,21 @@ def receive_public_orders( # pylint: disable=too-many-arguments
105105
)
106106

107107

108+
# pylint: disable=too-many-arguments
108109
@cli.command()
109110
@click.option("--url", required=True, type=str)
110111
@click.option("--auth_key", required=True, type=str)
111112
@click.option("--gid", required=True, type=int)
112-
@click.option("--start", default=None, type=iso)
113+
@click.option("--delivery-from", default=None, type=iso)
114+
@click.option("--delivery-to", default=None, type=iso)
113115
@click.option("--sign_secret", default=None, type=str)
114116
def receive_gridpool_trades(
115117
url: str,
116118
auth_key: str,
117119
gid: int,
118120
*,
119-
start: datetime,
121+
delivery_from: datetime | None,
122+
delivery_to: datetime | None,
120123
sign_secret: str | None = None,
121124
) -> None:
122125
"""List and/or stream gridpool trades."""
@@ -125,7 +128,8 @@ def receive_gridpool_trades(
125128
url=url,
126129
auth_key=auth_key,
127130
gid=gid,
128-
delivery_start=start,
131+
delivery_from=delivery_from,
132+
delivery_to=delivery_to,
129133
sign_secret=sign_secret,
130134
)
131135
)

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

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -125,51 +125,49 @@ async def receive_public_orders( # pylint: disable=too-many-arguments
125125
print_public_order(order)
126126

127127

128+
# pylint: disable=too-many-arguments
128129
async def list_gridpool_trades(
129130
url: str,
130131
auth_key: str,
131132
gid: int,
132133
*,
133-
delivery_start: datetime,
134+
delivery_from: datetime | None,
135+
delivery_to: datetime | None,
134136
sign_secret: str | None = None,
135137
) -> None:
136138
"""List gridpool trades and stream new gridpool trades.
137139
138-
Optionally a delivery_start can be provided to filter the trades by delivery period.
140+
Optionally trades can be filtered by delivery period.
139141
140142
Args:
141143
url: URL of the trading API.
142144
auth_key: API key.
143145
gid: Gridpool ID.
144-
delivery_start: Start of the delivery period or None.
146+
delivery_from: Start of the delivery period or None.
147+
delivery_to: End of the delivery period or None.
145148
sign_secret: The cryptographic secret to use for HMAC generation.
146149
"""
147150
client = Client(server_url=url, auth_key=auth_key, sign_secret=sign_secret)
148151

149152
print_trade_header()
150153

151-
delivery_time_filter = None
152-
# If delivery period is selected, list historical trades also
153-
if delivery_start is not None:
154-
check_delivery_start(delivery_start)
155-
delivery_time_filter = DeliveryTimeFilter(
156-
time_interval=Interval(
157-
start_time=delivery_start,
158-
end_time=delivery_start + timedelta(minutes=15),
159-
),
160-
duration_filters=[],
161-
)
162-
lst = client.list_gridpool_trades(gid, delivery_time_filter=delivery_time_filter)
154+
delivery_time_filter = DeliveryTimeFilter(Interval(delivery_from, delivery_to))
155+
lst = client.list_gridpool_trades(
156+
gid,
157+
delivery_time_filter=delivery_time_filter,
158+
)
159+
160+
# Initialize the stream before printing to minimize the gap between the two
161+
stream = client.gridpool_trades_stream(
162+
gid,
163+
delivery_time_filter=delivery_time_filter,
164+
).new_receiver()
163165

164166
async for trade in lst:
165167
print_trade(trade, gid)
166168

167-
if delivery_start and delivery_start <= datetime.now(timezone.utc):
168-
return
169+
print("---- Start streaming -----")
169170

170-
stream = client.gridpool_trades_stream(
171-
gid, delivery_time_filter=delivery_time_filter
172-
).new_receiver()
173171
async for trade in stream:
174172
print_trade(trade, gid)
175173

0 commit comments

Comments
 (0)