feat: delete command — batch delete from CSV with confirmation
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
39
src/order_bak/delete.py
Normal file
39
src/order_bak/delete.py
Normal file
@@ -0,0 +1,39 @@
|
||||
import csv
|
||||
import time
|
||||
from collections import defaultdict
|
||||
from itertools import islice
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def _chunked(iterable, size):
|
||||
it = iter(iterable)
|
||||
while chunk := list(islice(it, size)):
|
||||
yield chunk
|
||||
|
||||
|
||||
def delete_orders(
|
||||
table_client,
|
||||
csv_path: Path,
|
||||
batch_size: int,
|
||||
delay_ms: int,
|
||||
) -> int:
|
||||
by_partition: dict[str, list[dict]] = defaultdict(list)
|
||||
|
||||
with open(csv_path, newline="") as f:
|
||||
reader = csv.DictReader(f)
|
||||
for row in reader:
|
||||
pk = row["PartitionKey"]
|
||||
rk = row["RowKey"]
|
||||
by_partition[pk].append({"PartitionKey": pk, "RowKey": rk})
|
||||
|
||||
total_deleted = 0
|
||||
for pk, entities in by_partition.items():
|
||||
for batch in _chunked(entities, batch_size):
|
||||
operations = [("delete", e) for e in batch]
|
||||
table_client.submit_transaction(operations)
|
||||
total_deleted += len(batch)
|
||||
if delay_ms > 0:
|
||||
time.sleep(delay_ms / 1000.0)
|
||||
|
||||
print(f"Deleted {total_deleted} orders across {len(by_partition)} partitions")
|
||||
return total_deleted
|
||||
Reference in New Issue
Block a user