mirror of
https://github.com/GSA/notifications-api.git
synced 2026-08-17 04:58:50 -04:00
Merge branch 'master' into rate-limit-api-calls
This commit is contained in:
@@ -90,6 +90,7 @@ def register_blueprint(application):
|
||||
from app.provider_details.rest import provider_details as provider_details_blueprint
|
||||
from app.spec.rest import spec as spec_blueprint
|
||||
from app.organisation.rest import organisation_blueprint
|
||||
from app.dvla_organisation.rest import dvla_organisation_blueprint
|
||||
from app.delivery.rest import delivery_blueprint
|
||||
from app.notifications.receive_notifications import receive_notifications_blueprint
|
||||
from app.notifications.notifications_ses_callback import ses_callback_blueprint
|
||||
@@ -148,6 +149,9 @@ def register_blueprint(application):
|
||||
organisation_blueprint.before_request(requires_admin_auth)
|
||||
application.register_blueprint(organisation_blueprint, url_prefix='/organisation')
|
||||
|
||||
dvla_organisation_blueprint.before_request(requires_admin_auth)
|
||||
application.register_blueprint(dvla_organisation_blueprint, url_prefix='/dvla_organisations')
|
||||
|
||||
letter_job.before_request(requires_admin_auth)
|
||||
application.register_blueprint(letter_job)
|
||||
|
||||
@@ -211,7 +215,7 @@ def create_uuid():
|
||||
|
||||
|
||||
def create_random_identifier():
|
||||
return ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(16))
|
||||
return ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(16))
|
||||
|
||||
|
||||
def process_user_agent(user_agent_string):
|
||||
|
||||
@@ -321,7 +321,8 @@ def create_dvla_file_contents(job_id):
|
||||
notification.template.__dict__,
|
||||
notification.personalisation,
|
||||
notification_reference=notification.reference,
|
||||
contact_block=notification.service.letter_contact_block
|
||||
contact_block=notification.service.letter_contact_block,
|
||||
org_id=notification.service.dvla_organisation.id,
|
||||
))
|
||||
for notification in dao_get_all_notifications_for_job(job_id)
|
||||
)
|
||||
|
||||
5
app/dao/dvla_organisation_dao.py
Normal file
5
app/dao/dvla_organisation_dao.py
Normal file
@@ -0,0 +1,5 @@
|
||||
from app.models import DVLAOrganisation
|
||||
|
||||
|
||||
def dao_get_dvla_organisations():
|
||||
return DVLAOrganisation.query.all()
|
||||
@@ -36,7 +36,8 @@ def get_alternative_sms_provider(identifier):
|
||||
|
||||
def get_current_provider(notification_type):
|
||||
return ProviderDetails.query.filter_by(
|
||||
notification_type=notification_type
|
||||
notification_type=notification_type,
|
||||
active=True
|
||||
).order_by(
|
||||
asc(ProviderDetails.priority)
|
||||
).first()
|
||||
|
||||
11
app/dao/rates_dao.py
Normal file
11
app/dao/rates_dao.py
Normal file
@@ -0,0 +1,11 @@
|
||||
from sqlalchemy import desc
|
||||
|
||||
from app import db
|
||||
from app.models import Rate
|
||||
|
||||
|
||||
def get_rate_for_type_and_date(notification_type, date_sent):
|
||||
return db.session.query(Rate).filter(Rate.notification_type == notification_type,
|
||||
Rate.valid_from <= date_sent
|
||||
).order_by(Rate.valid_from.desc()
|
||||
).limit(1).first()
|
||||
0
app/dvla_organisation/__init__.py
Normal file
0
app/dvla_organisation/__init__.py
Normal file
14
app/dvla_organisation/rest.py
Normal file
14
app/dvla_organisation/rest.py
Normal file
@@ -0,0 +1,14 @@
|
||||
from flask import Blueprint, jsonify
|
||||
|
||||
from app.dao.dvla_organisation_dao import dao_get_dvla_organisations
|
||||
from app.errors import register_errors
|
||||
|
||||
dvla_organisation_blueprint = Blueprint('dvla_organisation', __name__)
|
||||
register_errors(dvla_organisation_blueprint)
|
||||
|
||||
|
||||
@dvla_organisation_blueprint.route('', methods=['GET'])
|
||||
def get_dvla_organisations():
|
||||
return jsonify({
|
||||
org.id: org.name for org in dao_get_dvla_organisations()
|
||||
})
|
||||
@@ -115,6 +115,16 @@ class Organisation(db.Model):
|
||||
name = db.Column(db.String(255), nullable=True)
|
||||
|
||||
|
||||
DVLA_ORG_HM_GOVERNMENT = '001'
|
||||
DVLA_ORG_LAND_REGISTRY = '500'
|
||||
|
||||
|
||||
class DVLAOrganisation(db.Model):
|
||||
__tablename__ = 'dvla_organisation'
|
||||
id = db.Column(db.String, primary_key=True)
|
||||
name = db.Column(db.String(255), nullable=True)
|
||||
|
||||
|
||||
class Service(db.Model, Versioned):
|
||||
__tablename__ = 'services'
|
||||
|
||||
@@ -141,6 +151,7 @@ class Service(db.Model, Versioned):
|
||||
restricted = db.Column(db.Boolean, index=False, unique=False, nullable=False)
|
||||
research_mode = db.Column(db.Boolean, index=False, unique=False, nullable=False, default=False)
|
||||
can_send_letters = db.Column(db.Boolean, nullable=False, default=False)
|
||||
can_send_international_sms = db.Column(db.Boolean, nullable=False, default=False)
|
||||
email_from = db.Column(db.Text, index=False, unique=True, nullable=False)
|
||||
created_by = db.relationship('User')
|
||||
created_by_id = db.Column(UUID(as_uuid=True), db.ForeignKey('users.id'), index=True, nullable=False)
|
||||
@@ -149,6 +160,14 @@ class Service(db.Model, Versioned):
|
||||
sms_sender = db.Column(db.String(11), nullable=True)
|
||||
organisation_id = db.Column(UUID(as_uuid=True), db.ForeignKey('organisation.id'), index=True, nullable=True)
|
||||
organisation = db.relationship('Organisation')
|
||||
dvla_organisation_id = db.Column(
|
||||
db.String,
|
||||
db.ForeignKey('dvla_organisation.id'),
|
||||
index=True,
|
||||
nullable=False,
|
||||
default=DVLA_ORG_HM_GOVERNMENT
|
||||
)
|
||||
dvla_organisation = db.relationship('DVLAOrganisation')
|
||||
branding = db.Column(
|
||||
db.String(255),
|
||||
db.ForeignKey('branding_type.name'),
|
||||
@@ -926,3 +945,12 @@ class Event(db.Model):
|
||||
nullable=False,
|
||||
default=datetime.datetime.utcnow)
|
||||
data = db.Column(JSON, nullable=False)
|
||||
|
||||
|
||||
class Rate(db.Model):
|
||||
__tablename__ = 'rates'
|
||||
|
||||
id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
||||
valid_from = db.Column(db.DateTime, nullable=False)
|
||||
rate = db.Column(db.Numeric(), nullable=False)
|
||||
notification_type = db.Column(notification_types, index=True, nullable=False)
|
||||
|
||||
@@ -177,6 +177,7 @@ class ServiceSchema(BaseSchema):
|
||||
created_by = field_for(models.Service, 'created_by', required=True)
|
||||
organisation = field_for(models.Service, 'organisation')
|
||||
branding = field_for(models.Service, 'branding')
|
||||
dvla_organisation = field_for(models.Service, 'dvla_organisation')
|
||||
|
||||
class Meta:
|
||||
model = models.Service
|
||||
|
||||
Reference in New Issue
Block a user