Skip to content

Commit 5c97615

Browse files
committed
Add pagination support for pretix source
- add pagination support for the pretix address source - add script get_addresses to output a list of active customer email addresses from the address source in the MAILBOT_ADDRESS_SOURCE environment variable
1 parent 7f7b81c commit 5c97615

5 files changed

Lines changed: 39 additions & 19 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@
33
/.env
44
/.idea/
55
/.venv/
6+
__pycache__/

devday_mailbot.py

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -64,16 +64,20 @@ def __init__(self, token, netloc, path):
6464
self.token, self.netloc, self.organizer = token, netloc, path[1:]
6565

6666
def get_addresses(self) -> list[str]:
67-
r = get(
68-
f"https://{self.netloc}/api/v1/organizers/{self.organizer}/customers/",
69-
headers={"Authorization": f"Token {self.token}"},
70-
)
71-
r.raise_for_status()
72-
return [
73-
c["email"].lower()
74-
for c in r.json()["results"]
75-
if c["is_active"] and c["is_verified"]
76-
]
67+
addresses = []
68+
url = f"https://{self.netloc}/api/v1/organizers/{self.organizer}/customers/"
69+
while True:
70+
r = get(url, headers={"Authorization": f"Token {self.token}"})
71+
r.raise_for_status()
72+
addresses.extend([
73+
c["email"].lower()
74+
for c in r.json()["results"]
75+
if c["is_active"] and c["is_verified"]
76+
])
77+
if not r.json()["next"]:
78+
break
79+
url = r.json()["next"]
80+
return addresses
7781

7882

7983
def determine_address_source(src_url: str) -> AddressSource:
@@ -89,13 +93,13 @@ def determine_address_source(src_url: str) -> AddressSource:
8993

9094

9195
def process_mail(
92-
smtp_conn: SMTP,
93-
address_source: AddressSource,
94-
sender_address: str,
95-
default_to: str,
96-
default_reply_to: str,
97-
valid_sender_patterns: list[str],
98-
mail: bytes,
96+
smtp_conn: SMTP,
97+
address_source: AddressSource,
98+
sender_address: str,
99+
default_to: str,
100+
default_reply_to: str,
101+
valid_sender_patterns: list[str],
102+
mail: bytes,
99103
):
100104
email_parser = BytesParser()
101105
mail_data = email_parser.parsebytes(mail)

get_addresses.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#!/usr/bin/env python3
2+
import os
3+
4+
from devday_mailbot import determine_address_source
5+
6+
if __name__ == "__main__":
7+
address_source_url = os.getenv("MAILBOT_ADDRESS_SOURCE")
8+
if not address_source_url:
9+
print("set MAILBOT_ADDRESS_SOURCE environment variable")
10+
exit(1)
11+
12+
source = determine_address_source(address_source_url)
13+
14+
for address in source.get_addresses():
15+
print(address)

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "devday-mailbot"
3-
version = "0.1.1"
3+
version = "0.1.2"
44
description = "Dev Day Mail bot"
55
readme = "README.md"
66
requires-python = ">=3.11"

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)