Merge branch 'master' into move-sms-notifications-into-celery

Conflicts:
	app/__init__.py
	tests/conftest.py
This commit is contained in:
Martyn Inglis
2016-02-17 09:14:37 +00:00
15 changed files with 76 additions and 126 deletions

View File

@@ -8,7 +8,6 @@ from flask import Flask, _request_ctx_stack
from flask.ext.sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow
from werkzeug.local import LocalProxy
from config import configs
from utils import logging
from notify_client import NotifyAPIClient
from app.celery.celery import NotifyCelery
@@ -25,15 +24,15 @@ encryption = Encryption()
api_user = LocalProxy(lambda: _request_ctx_stack.top.api_user)
def create_app(config_name, config_overrides=None):
def create_app():
application = Flask(__name__)
application.config['NOTIFY_API_ENVIRONMENT'] = config_name
application.config.from_object(configs[config_name])
application.config.from_object(os.environ['NOTIFY_API_ENVIRONMENT'])
init_app(application, config_overrides)
init_app(application)
db.init_app(application)
ma.init_app(application)
init_app(application)
logging.init_app(application)
twilio_client.init_app(application)
notify_celery.init_app(application)
@@ -56,16 +55,7 @@ def create_app(config_name, config_overrides=None):
return application
def init_app(app, config_overrides):
for key, value in app.config.items():
if key in os.environ:
app.config[key] = convert_to_boolean(os.environ[key])
if config_overrides:
for key in app.config.keys():
if key in config_overrides:
app.config[key] = config_overrides[key]
def init_app(app):
@app.before_request
def required_authentication():
if request.path != url_for('status.show_status'):
@@ -82,51 +72,6 @@ def init_app(app, config_overrides):
return response
def convert_to_boolean(value):
"""Turn strings to bools if they look like them
Truthy things should be True
>>> for truthy in ['true', 'on', 'yes', '1']:
... assert convert_to_boolean(truthy) == True
Falsey things should be False
>>> for falsey in ['false', 'off', 'no', '0']:
... assert convert_to_boolean(falsey) == False
Other things should be unchanged
>>> for value in ['falsey', 'other', True, 0]:
... assert convert_to_boolean(value) == value
"""
if isinstance(value, string_types):
if value.lower() in ['t', 'true', 'on', 'yes', '1']:
return True
elif value.lower() in ['f', 'false', 'off', 'no', '0']:
return False
return value
def convert_to_number(value):
"""Turns numeric looking things into floats or ints
Integery things should be integers
>>> for inty in ['0', '1', '2', '99999']:
... assert isinstance(convert_to_number(inty), int)
Floaty things should be floats
>>> for floaty in ['0.99', '1.1', '1000.0000001']:
... assert isinstance(convert_to_number(floaty), float)
Other things should be unchanged
>>> for value in [0, 'other', True, 123]:
... assert convert_to_number(value) == value
"""
try:
return float(value) if "." in value else int(value)
except (TypeError, ValueError):
return value
def get_api_version():
build = 'n/a'
build_time = "n/a"

View File

@@ -115,7 +115,9 @@ class SmsTemplateNotificationSchema(SmsNotificationSchema):
raise ValidationError('Invalid phone number for restricted service', 'restricted')
# Assert the template is valid for the service which made the request.
service = api_user['client']
if (service != current_app.config.get('ADMIN_CLIENT_USER_NAME') and
admin_users = [current_app.config.get('ADMIN_CLIENT_USER_NAME'),
current_app.config.get('DELIVERY_CLIENT_USER_NAME')]
if (service not in admin_users and
template.service != models.Service.query.filter_by(id=service).first()):
raise ValidationError('Invalid template', 'restricted')

View File

@@ -1,5 +1,5 @@
from datetime import datetime
from flask import (jsonify, request, abort, Blueprint)
from flask import (jsonify, request, abort, Blueprint, current_app)
from sqlalchemy.exc import DataError
from sqlalchemy.orm.exc import NoResultFound
from app.dao.services_dao import get_model_services
@@ -141,7 +141,7 @@ def send_user_code(user_id):
email = user.email_address if verify_code.get('to', None) is None else verify_code.get('to')
notification = {
'to_address': email,
'from_address': 'notify@digital.cabinet-office.gov.uk',
'from_address': current_app.config['VERIFY_CODE_FROM_EMAIL_ADDRESS'],
'subject': 'Verification code',
'body': secret_code}
add_notification_to_queue(api_user['client'], 'admin', 'email', notification)