Skip to content

Commit 120d121

Browse files
feat: Add speaker custom form logic and validation (#7107)
1 parent d266d1b commit 120d121

File tree

8 files changed

+492
-9
lines changed

8 files changed

+492
-9
lines changed

app/api/attendees.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from app.api.bootstrap import api
88
from app.api.helpers.custom_forms import validate_custom_form_constraints_request
9-
from app.api.helpers.db import safe_query, safe_query_kwargs, safe_query_by_id
9+
from app.api.helpers.db import safe_query, safe_query_by_id, safe_query_kwargs
1010
from app.api.helpers.errors import ForbiddenError, UnprocessableEntityError
1111
from app.api.helpers.permission_manager import has_access
1212
from app.api.helpers.permissions import jwt_required

app/api/helpers/speaker.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ def can_edit_after_cfs_ends(event_id):
1010
Method to check that user has permission to edit the speaker or session
1111
after the CFS ends
1212
"""
13-
speakers_call = SpeakersCall.query.filter_by(event_id=event_id, deleted_at=None).one()
13+
speakers_call = SpeakersCall.query.filter_by(
14+
event_id=event_id, deleted_at=None
15+
).one_or_none()
1416
if speakers_call:
1517
speakers_call_tz = speakers_call.ends_at.tzinfo
1618
return not (

app/api/speakers.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
from flask import request
2-
from flask_login import current_user
2+
from flask_jwt_extended import current_user
33
from flask_rest_jsonapi import ResourceDetail, ResourceList, ResourceRelationship
44
from flask_rest_jsonapi.exceptions import ObjectNotFound
55

66
from app.api.bootstrap import api
7+
from app.api.helpers.custom_forms import validate_custom_form_constraints_request
78
from app.api.helpers.db import get_count, safe_query_kwargs, save_to_db
89
from app.api.helpers.errors import ForbiddenError
910
from app.api.helpers.permission_manager import has_access
11+
from app.api.helpers.permissions import jwt_required
1012
from app.api.helpers.query import event_query
1113
from app.api.helpers.speaker import can_edit_after_cfs_ends
1214
from app.api.helpers.utilities import require_relationship
@@ -32,14 +34,15 @@ def before_post(self, args, kwargs, data=None):
3234
:param data:
3335
:return:
3436
"""
37+
data['user'] = current_user.id
3538
require_relationship(['event', 'user'], data)
3639

3740
if not has_access('is_coorganizer', event_id=data['event']):
3841
event = db.session.query(Event).filter_by(id=data['event']).one()
3942
if event.state == "draft":
4043
raise ObjectNotFound(
4144
{'parameter': 'event_id'},
42-
"Event: {} not found".format(data['event_id']),
45+
"Event: {} not found".format(data['event']),
4346
)
4447

4548
if (
@@ -88,6 +91,10 @@ def before_post(self, args, kwargs, data=None):
8891
"Session: {} not found".format(session_id),
8992
)
9093

94+
data['complex_field_values'] = validate_custom_form_constraints_request(
95+
'speaker', SpeakerSchema, Speaker(event_id=data['event']), data
96+
)
97+
9198
def after_create_object(self, speaker, data, view_kwargs):
9299
"""
93100
after create method to save resized images for speaker
@@ -101,6 +108,7 @@ def after_create_object(self, speaker, data, view_kwargs):
101108
start_image_resizing_tasks(speaker, data['photo_url'])
102109

103110
schema = SpeakerSchema
111+
decorators = (jwt_required,)
104112
methods = [
105113
'POST',
106114
]
@@ -186,6 +194,10 @@ def before_update_object(self, speaker, data, view_kwargs):
186194
):
187195
data['email'] = current_user.email
188196

197+
data['complex_field_values'] = validate_custom_form_constraints_request(
198+
'speaker', self.resource.schema, speaker, data
199+
)
200+
189201
def after_patch(self, result):
190202
"""
191203
method to create session speaker link

app/models/custom_form.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ def identifier(self):
162162
return to_snake_case(self.field_identifier)
163163

164164
def __repr__(self):
165-
return '<CustomForm %r>' % self.id
165+
return '<CustomForm %r %r>' % (self.id, self.identifier)
166166

167167

168168
def get_set_field_name(target: CustomForms) -> str:

tests/all/integration/api/speaker/__init__.py

Whitespace-only changes.

0 commit comments

Comments
 (0)