feat: Working server/comment routes

This commit is contained in:
IAmTomahawkx
2025-07-22 03:27:05 -07:00
committed by Angelo
parent 4fd71c98d6
commit 73ce052e1a
70 changed files with 1846 additions and 414 deletions

View File

@@ -0,0 +1,52 @@
# requires httpx off pypi
import httpx
import math
from os import getenv
import asyncio
URL = getenv("ZAMMAD_URL")
TOKEN = getenv("ZAMMAD_TOKEN")
EMAIL_FILE = getenv("EMAILS_FILE")
PAYLOAD_TEMPLATE = getenv("PAYLOAD_FILE")
assert URL and TOKEN and EMAIL_FILE and PAYLOAD_TEMPLATE, ValueError("Expected env variables EMAIL_FILE, PAYLOAD_FILE, ZAMMAD_URL and ZAMMAD_TOKEN.")
URL = URL.strip("/") + "/api/v1/tickets"
async def worker(payload: dict, emails: list[str]) -> None:
async with httpx.AsyncClient(headers={"Authorization": f"Token token={TOKEN}"}) as client:
assert URL # redundant but makes pyright happy
for email in emails:
payload["customer_id"] = f"guess:{email}"
payload["article"]["to"] = email
print(email)
resp = await client.post(URL, json=payload)
if resp.status_code > 300:
raise RuntimeError(f"Failed to create ticket: {resp.status_code}\n{resp.read()}")
async def main():
assert EMAIL_FILE and PAYLOAD_TEMPLATE # pyright happy time
with open(EMAIL_FILE) as f:
emails = [x.strip() for x in f.read().split("\n")]
with open(PAYLOAD_TEMPLATE) as f:
p = {}
exec(f.read(), p)
payload = p["PAYLOAD"]
# WORKER_COUNT = min(max(round(len(emails) / 10), 1), 10)
# EMAILS_PER = math.ceil(len(emails) / WORKER_COUNT)
# print(WORKER_COUNT, EMAILS_PER)
# tasks = []
# for worker_id in range(WORKER_COUNT):
# worker_emails = emails[EMAILS_PER * worker_id:EMAILS_PER * worker_id + 1]
# tasks.append(asyncio.create_task(worker(payload, worker_emails)))
# await asyncio.gather(*tasks)
await worker(payload, emails)
asyncio.run(main())