Skip to content

Commit 3cd1c12

Browse files
authored
Merge branch 'stage' into 52-betechtix-add-multi-usage-discount-codes-feature
2 parents 7fc95c3 + eedd048 commit 3cd1c12

File tree

18 files changed

+4844
-4499
lines changed

18 files changed

+4844
-4499
lines changed

backend/constants/common_constants.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ class CommonConstants:
3030
REGISTRATION_ID = 'registrationId'
3131
PREREGISTRATION_ID = 'preRegistrationId'
3232

33+
OBJECT_KEY = 'objectKey'
34+
3335
# Exclude to Comparison Keys
3436
EXCLUDE_COMPARISON_KEYS = [
3537
CLS,

backend/controller/event_router.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from model.common import Message
88
from model.events.event import EventAdminOut, EventIn, EventOut
99
from model.events.events_constants import EventUploadType
10-
from model.file_uploads.file_upload import FileUploadIn, FileUploadOut
10+
from model.file_uploads.file_upload import FileDownloadOut, FileUploadIn, FileUploadOut
1111
from model.file_uploads.file_upload_constants import FileUploadConstants
1212
from usecase.event_usecase import EventUsecase
1313
from usecase.file_s3_usecase import FileS3Usecase
@@ -298,3 +298,32 @@ def get_presigned_url(
298298
"""
299299
file_s3_uc = FileS3Usecase()
300300
return file_s3_uc.create_presigned_url(f'events/{entry_id}/{upload_type.value}/{upload_in.fileName}')
301+
302+
303+
@event_router.get(
304+
'/{entryId}/download',
305+
response_model=FileDownloadOut,
306+
responses={500: {'model': Message, 'description': 'Interal server error'}},
307+
summary='Get download URL',
308+
)
309+
@event_router.get(
310+
'/{entryId}/download/',
311+
response_model=FileDownloadOut,
312+
response_model_exclude_none=True,
313+
response_model_exclude_unset=True,
314+
include_in_schema=False,
315+
)
316+
def get_download_url(
317+
object_key: str = Query(..., title='Object key', alias=CommonConstants.OBJECT_KEY),
318+
):
319+
"""Get download URL
320+
321+
:param object_key: The key of the object. Defaults to Query(None, title='Object key', alias=CommonConstants.OBJECT_KEY).
322+
:type admin_id: str
323+
324+
:return: FileDownloadOut object.
325+
:rtype: FileDownloadOut
326+
327+
"""
328+
file_s3_uc = FileS3Usecase()
329+
return file_s3_uc.create_download_url(object_key=object_key)

backend/model/pycon_registrations/pycon_registration.py

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,7 @@
11
from enum import Enum
22
from typing import Optional
33

4-
from pydantic import (
5-
BaseModel,
6-
EmailStr,
7-
Field,
8-
HttpUrl,
9-
field_validator,
10-
model_validator,
11-
)
4+
from pydantic import BaseModel, EmailStr, Field, HttpUrl, root_validator, validator
125

136

147
class SocialMedia(BaseModel):
@@ -78,15 +71,15 @@ class PyconRegistration(BaseModel):
7871
)
7972
imageId: Optional[str] = Field(None, title='Image ID Object Key')
8073

81-
@field_validator('firstName', 'lastName', 'nickname')
82-
@classmethod
74+
75+
@validator('firstName', 'lastName', 'nickname')
8376
def normalize_names(cls, v: str) -> str:
8477
if not v.strip():
8578
raise ValueError('Name fields cannot be empty')
8679
return ' '.join(word.capitalize() for word in v.split())
8780

88-
@model_validator(mode='after')
89-
def check_shirt_availability(self):
90-
if self.availTShirt and (self.shirtType is None or self.shirtSize is None):
81+
@root_validator(pre='false')
82+
def check_shirt_availability(cls, values):
83+
if values.get('availTShirt') and (values.get('shirtType') is None or values.get('shirtSize') is None):
9184
raise ValueError('If availTShirt is True, then shirtType and shirtSize must be provided.')
92-
return self
85+
return values

backend/usecase/file_s3_usecase.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import os
2+
from http import HTTPStatus
23
from typing import Tuple
34

45
from boto3 import client as boto3_client
@@ -65,7 +66,9 @@ def create_download_url(self, object_key) -> FileDownloadOut:
6566
return FileDownloadOut(**url_data)
6667
except ClientError as e:
6768
logger.error('Error creating presigned url: %s', e)
68-
return None
69+
return JSONResponse(
70+
status_code=HTTPStatus.INTERNAL_SERVER_ERROR, content={'message': 'Error fetching download url'}
71+
)
6972

7073
def upload_file(self, file_name: str, object_name: str = None, verbose: bool = True) -> bool:
7174
# If S3 object_name was not specified, use file_name

0 commit comments

Comments
 (0)