Skip to content

Commit f61186f

Browse files
committed
Download ticket from pretix
1 parent 068e82d commit f61186f

File tree

3 files changed

+29
-31
lines changed

3 files changed

+29
-31
lines changed

backend/association_membership/handlers/pretix/api.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,22 @@ def for_conference(cls, conference: Conference):
2424
event=conference.pretix_event_id,
2525
)
2626

27-
def _request(
28-
self, endpoint: str, *, method: METHODS = "get", qs: dict[str, str] = None
27+
def run_request(
28+
self, url: str, *, method: METHODS = "get", qs: dict[str, str] = None
2929
):
30-
url = f"{self.base_url}/{endpoint}/"
3130
headers = {"Authorization": f"Token {str(settings.PRETIX_API_TOKEN)}"}
3231

3332
if qs:
3433
url = f"{url}?" + "&".join([f"{key}={value}" for key, value in qs.items()])
3534

3635
response = getattr(requests, method)(url, headers=headers)
37-
3836
response.raise_for_status()
3937
return response
4038

39+
def _request(self, endpoint: str, **kwargs):
40+
url = f"{self.base_url}/{endpoint}/"
41+
return self.run_request(url, **kwargs)
42+
4143
def get_order_data(self, order_code: str) -> dict:
4244
response = self._request(f"orders/{order_code}")
4345
return response.json()

backend/visa/tasks.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import requests
1+
import time
22
from django.template import Template, Context
33

44
import io
@@ -48,8 +48,8 @@ def process_invitation_letter_request(*, invitation_letter_request_id: int):
4848
if not invitation_letter_request:
4949
return
5050

51-
# invitation_letter_request.status = InvitationLetterRequestStatus.PROCESSING
52-
# invitation_letter_request.save(update_fields=['status'])
51+
invitation_letter_request.status = InvitationLetterRequestStatus.PROCESSING
52+
invitation_letter_request.save(update_fields=["status"])
5353

5454
config = invitation_letter_request.get_config()
5555

@@ -86,6 +86,9 @@ def process_invitation_letter_request(*, invitation_letter_request_id: int):
8686
)
8787
invitation_letter_request.save()
8888

89+
invitation_letter_request.status = InvitationLetterRequestStatus.PROCESSED
90+
invitation_letter_request.save(update_fields=["status", "invitation_letter"])
91+
8992

9093
def render_dynamic_document(dynamic_document, invitation_letter_request, config):
9194
# strip is needed to convert from SafeString to str
@@ -144,6 +147,14 @@ def download_pretix_ticket(invitation_letter_request):
144147

145148
ticket_url = attendee_ticket["downloads"][0]["url"]
146149

147-
response = requests.get(ticket_url)
148-
response.raise_for_status()
149-
return response.content
150+
attempts = 0
151+
while attempts < 3:
152+
attempts += 1
153+
154+
response = pretix_api.run_request(ticket_url)
155+
if response.status_code == 409:
156+
time.sleep(2 * attempts)
157+
else:
158+
response.raise_for_status()
159+
160+
return io.BytesIO(response.content)

docker-compose.yml

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ x-defaults:
55
ENV: "local"
66
CONFERENCE_CODE: ${CONFERENCE_CODE:-pycon2023}
77
PRETIX_API: https://tickets.pycon.it/api/v1/
8-
PRETIX_API_TOKEN: None # ask for a token
98
PLAIN_API: https://core-api.uk.plain.com/graphql/v1
109
SECRET_KEY: secret-key
1110
API_URL: /graphql
@@ -15,38 +14,18 @@ x-defaults:
1514
# URLs
1615
ASSOCIATION_FRONTEND_URL: http://localhost:3020
1716
# stripe
18-
STRIPE_SECRET_API_KEY: ${STRIPE_SECRET_API_KEY}
19-
STRIPE_WEBHOOK_SIGNATURE_SECRET: ${STRIPE_WEBHOOK_SIGNATURE_SECRET}
2017
PRETIX_WEBHOOK_SECRET: "secret"
2118
pycon_backend_envs: &pycon_backend_envs
2219
<<: *enviroment_defaults
2320
CACHE_URL: redis://redis:6379/0
2421
DATABASE_URL: psql://pycon:pycon@backend-db/pycon
2522
ALLOWED_HOSTS: "*"
26-
PRETIX_API_TOKEN: ${PRETIX_API_TOKEN}
27-
MAILCHIMP_SECRET_KEY: ${MAILCHIMP_SECRET_KEY}
28-
MAILCHIMP_DC: ${MAILCHIMP_DC}
29-
MAILCHIMP_LIST_ID: ${MAILCHIMP_LIST_ID}
3023
MEDIA_FILES_STORAGE_BACKEND: ${MEDIA_FILES_STORAGE_BACKEND:-pycon.storages.CustomFileSystemStorage}
3124
MEDIA_FILES_PRIVATE_STORAGE_BACKEND: ${MEDIA_FILES_PRIVATE_STORAGE_BACKEND:-pycon.storages.CustomFileSystemStorage}
32-
OAUTHLIB_INSECURE_TRANSPORT: ${OAUTHLIB_INSECURE_TRANSPORT}
33-
OPENAI_API_KEY: ${OPENAI_API_KEY:-}
34-
FLODESK_API_KEY: ${FLODESK_API_KEY}
35-
SENTRY_DSN: ${SENTRY_DSN:-}
36-
FLODESK_SEGMENT_ID: ${FLODESK_SEGMENT_ID}
3725
CELERY_BROKER_URL: redis://redis:6379/9
3826
CELERY_RESULT_BACKEND: redis://redis:6379/10
39-
PLAIN_API_TOKEN: ${PLAIN_API_TOKEN}
40-
PLAIN_INTEGRATION_TOKEN: ${PLAIN_INTEGRATION_TOKEN}
41-
HASHID_DEFAULT_SECRET_SALT: ${HASHID_DEFAULT_SECRET_SALT:-}
42-
AWS_MEDIA_BUCKET: ${AWS_MEDIA_BUCKET}
43-
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
44-
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
4527
CLAMAV_HOST: clamav
4628
CLAMAV_PORT: 3310
47-
AWS_REGION_NAME: ${AWS_REGION_NAME}
48-
ECS_NETWORK_CONFIG: ${ECS_NETWORK_CONFIG:-}
49-
SNS_WEBHOOK_SECRET: ${SNS_WEBHOOK_SECRET:-}
5029

5130
services:
5231
backend:
@@ -75,6 +54,8 @@ services:
7554
- /.venv/
7655
environment:
7756
<<: *pycon_backend_envs
57+
env_file:
58+
- .env
7859
healthcheck:
7960
test: ["CMD-SHELL", "test -f /.ready"]
8061
interval: 10s
@@ -96,6 +77,8 @@ services:
9677
environment:
9778
<<: *enviroment_defaults
9879
ADMIN_GRAPHQL_URL: http://backend:8000/admin/graphql
80+
env_file:
81+
- .env
9982
tty: true
10083
stdin_open: true
10184
ports:
@@ -146,6 +129,8 @@ services:
146129
<<: *enviroment_defaults
147130
CMS_HOSTNAME: localhost:3000
148131
CMS_ADMIN_HOST: localhost:8000
132+
env_file:
133+
- .env
149134
tty: true
150135
stdin_open: true
151136
ports:

0 commit comments

Comments
 (0)