Update CoderDojo CSV script

This commit is contained in:
Yannik Rödel 2023-06-21 08:31:52 +02:00
parent d6a67cce91
commit 06ce52968b
2 changed files with 15 additions and 13 deletions

2
.gitignore vendored
View file

@ -20,5 +20,5 @@ _site/
# Private environments in the HTTP playground folder # Private environments in the HTTP playground folder
/playground/*.private.env.json /playground/*.private.env.json
coderdojo.csv /playground/*.csv
/httpd.dev.conf /httpd.dev.conf

View file

@ -10,13 +10,15 @@ BASE_URL = "https://ticket.z31.it/api/v1"
session = requests.Session() session = requests.Session()
session.headers.update({ session.headers.update({
"Authorization": f"Token token={getpass.getpass(prompt='Zammad-Token eingeben: ')}" "Authorization": f"Token token={getpass.getpass(prompt='Zammad-Token: ')}"
}) })
if __name__ == "__main__": if __name__ == "__main__":
ticket_ids = [] tickets = []
print("Suche nach aktuellen CoderDojo-Anmeldungen…", file=sys.stderr) print("Formular [CoderDojo-Anmeldung]: ", file=sys.stderr, end="", flush=True)
form_name = input() or "CoderDojo-Anmeldung"
print("Suche nach aktuellen Einträgen…", file=sys.stderr)
has_more = True has_more = True
page = 1 page = 1
page_size = 50 page_size = 50
@ -24,7 +26,7 @@ if __name__ == "__main__":
response = session.get( response = session.get(
f"{BASE_URL}/tickets/search", f"{BASE_URL}/tickets/search",
params={ params={
"query": 'tags:"Kontaktformular CoderDojo-Anmeldung"', "query": f'tags:"Kontaktformular {form_name}"',
"page": str(page), "page": str(page),
"per_page": page_size, "per_page": page_size,
} }
@ -37,7 +39,7 @@ if __name__ == "__main__":
continue continue
assert isinstance(ticket["title"], str) assert isinstance(ticket["title"], str)
if not ticket["title"].endswith(" CoderDojo-Anmeldung"): if not ticket["title"].endswith(f" {form_name}"):
continue continue
assert isinstance(ticket["article_ids"], list) assert isinstance(ticket["article_ids"], list)
@ -45,27 +47,27 @@ if __name__ == "__main__":
continue continue
assert isinstance(ticket["id"], int) assert isinstance(ticket["id"], int)
ticket_ids.append(ticket["id"]) tickets.append((ticket["id"], ticket["created_at"]))
page += 1 page += 1
has_more = len(ticket_dict) == page_size has_more = len(ticket_dict) == page_size
print(f"{len(ticket_ids)} Anmeldung(en) gefunden. Hole jetzt die Details…", file=sys.stderr) print(f"{len(tickets)} Element(e) gefunden. Hole jetzt die Details…", file=sys.stderr)
fieldnames = [] fieldnames = ["Zeitstempel"]
rows = [] rows = []
for ticket_id in ticket_ids: for ticket_id, ticket_timestamp in tickets:
row = {} row = {"Zeitstempel": ticket_timestamp}
response = session.get(f"{BASE_URL}/ticket_articles/by_ticket/{ticket_id}") response = session.get(f"{BASE_URL}/ticket_articles/by_ticket/{ticket_id}")
response.raise_for_status() response.raise_for_status()
articles = response.json() articles = response.json()
assert len(articles) >= 2 assert len(articles) >= 2
row.update({"Nachricht": articles[0].get("body", "")}) row.update({"Nachricht": articles[0].get("body", "").replace("\r", "").replace("\n", " ")})
for line in articles[1].get("body", "").split("\n"): for line in articles[1].get("body", "").split("\n"):
key, value = line.split(": ", 1) key, value = line.split(": ", 1)
row.update({key: value}) row.update({key: value.replace("\r", "").replace("\n", " ")})
if key not in fieldnames: if key not in fieldnames:
fieldnames.append(key) fieldnames.append(key)