mirror of
https://github.com/GSA/notifications-api.git
synced 2025-12-24 01:11:38 -05:00
This commit adds a JSONSchema which can validate the fields in an API call to create a broadcast. It takes the CAP XML schema as a starting point.
45 lines
1.6 KiB
Python
45 lines
1.6 KiB
Python
from itertools import chain
|
||
from flask import jsonify, request
|
||
from app import authenticated_service, api_user
|
||
from app.dao.dao_utils import dao_save_object
|
||
from app.notifications.validators import check_service_has_permission
|
||
from app.models import BROADCAST_TYPE, BroadcastMessage, BroadcastStatusType
|
||
from app.schema_validation import validate
|
||
from app.v2.broadcast import v2_broadcast_blueprint
|
||
from app.v2.broadcast.broadcast_schemas import post_broadcast_schema
|
||
|
||
|
||
@v2_broadcast_blueprint.route("", methods=['POST'])
|
||
def create_broadcast():
|
||
|
||
check_service_has_permission(
|
||
BROADCAST_TYPE,
|
||
authenticated_service.permissions,
|
||
)
|
||
|
||
broadcast_json = validate(request.get_json(), post_broadcast_schema)
|
||
|
||
broadcast_message = BroadcastMessage(
|
||
service_id=authenticated_service.id,
|
||
content=broadcast_json['content'],
|
||
reference=broadcast_json['reference'],
|
||
areas={
|
||
'areas': [
|
||
area['name'] for area in broadcast_json['areas']
|
||
],
|
||
'simple_polygons': list(chain.from_iterable((
|
||
area['polygons'] for area in broadcast_json['areas']
|
||
)))
|
||
},
|
||
status=BroadcastStatusType.PENDING_APPROVAL,
|
||
api_key_id=api_user.id,
|
||
# The client may pass in broadcast_json['expires'] but it’s
|
||
# simpler for now to ignore it and have the rules around expiry
|
||
# for broadcasts created with the API match those created from
|
||
# the admin app
|
||
)
|
||
|
||
dao_save_object(broadcast_message)
|
||
|
||
return jsonify(broadcast_message.serialize()), 201
|