Template history endpoint added. All tests passing.

Code quality fix.
This commit is contained in:
Nicholas Staples
2016-05-06 15:42:43 +01:00
parent e10728ccae
commit 9b3d4a6087
6 changed files with 117 additions and 15 deletions

View File

@@ -22,11 +22,20 @@ def dao_update_template(template):
db.session.add(template)
def dao_get_template_by_id_and_service_id(template_id, service_id):
def dao_get_template_by_id_and_service_id(template_id, service_id, version=None):
if version is not None:
return Template.get_history_model().query.filter_by(
id=template_id,
service_id=service_id,
version=version).one()
return Template.query.filter_by(id=template_id, service_id=service_id).one()
def dao_get_template_by_id(template_id):
def dao_get_template_by_id(template_id, version=None):
if version is not None:
return Template.get_history_model().query.filter_by(
id=template_id,
version=version).one()
return Template.query.filter_by(id=template_id).one()

View File

@@ -1,5 +1,6 @@
from datetime import date
from flask_marshmallow.fields import fields
from sqlalchemy.orm import load_only
from marshmallow import (
post_load,
@@ -93,6 +94,11 @@ class BaseTemplateSchema(BaseSchema):
class TemplateSchema(BaseTemplateSchema):
created_by = field_for(models.Template, 'created_by', required=True)
versions = fields.Method("template_versions", dump_only=True)
def template_versions(self, template):
return [x.version for x in models.Template.get_history_model().query.filter_by(
id=template.id).options(load_only("version"))]
@validates_schema
def validate_type(self, data):
@@ -103,6 +109,11 @@ class TemplateSchema(BaseTemplateSchema):
raise ValidationError('Invalid template subject', 'subject')
class TemplateHistorySchema(BaseTemplateSchema):
created_by = field_for(models.Template, 'created_by', required=True)
class NotificationsStatisticsSchema(BaseSchema):
class Meta:
model = models.NotificationStatistics
@@ -302,18 +313,6 @@ class ApiKeyHistorySchema(ma.Schema):
created_by_id = fields.UUID()
class TemplateHistorySchema(ma.Schema):
id = fields.UUID()
name = fields.String()
template_type = fields.String()
created_at = fields.DateTime()
updated_at = fields.DateTime()
content = fields.String()
service_id = fields.UUID()
subject = fields.String()
created_by_id = fields.UUID()
class EventSchema(BaseSchema):
class Meta:
model = models.Event

View File

@@ -15,7 +15,7 @@ from app.dao.templates_dao import (
)
from notifications_utils.template import Template
from app.dao.services_dao import dao_fetch_service_by_id
from app.schemas import template_schema
from app.schemas import (template_schema, template_history_schema)
template = Blueprint('template', __name__, url_prefix='/service/<uuid:service_id>/template')
@@ -96,5 +96,18 @@ def get_template_by_id_and_service_id(service_id, template_id):
return jsonify(data=data)
@template.route('/<uuid:template_id>/version/<int:version>')
def get_template_version(service_id, template_id, version):
fetched_template = dao_get_template_by_id_and_service_id(
template_id=template_id,
service_id=service_id,
version=version
)
data, errors = template_history_schema.dump(fetched_template)
if errors:
return json_resp(result=error, message=errors), 400
return jsonify(data=data)
def _strip_html(content):
return bleach.clean(content, tags=[], strip=True)