Merge branch 'master' into rate-limit-api-calls

This commit is contained in:
Martyn Inglis
2017-04-25 14:27:05 +01:00
21 changed files with 344 additions and 84 deletions

View File

@@ -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):

View File

@@ -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)
)

View File

@@ -0,0 +1,5 @@
from app.models import DVLAOrganisation
def dao_get_dvla_organisations():
return DVLAOrganisation.query.all()

View File

@@ -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
View 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()

View File

View 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()
})

View File

@@ -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)

View File

@@ -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