Update created_by to work like other relationship fields.

This commit is contained in:
Nicholas Staples
2016-04-29 12:24:43 +01:00
parent 87a02cba14
commit 09d3ae27b6

View File

@@ -7,9 +7,7 @@ from marshmallow import (
validates_schema,
pre_load
)
from sqlalchemy.dialects.postgresql import UUID
from marshmallow_sqlalchemy import field_for
from marshmallow_sqlalchemy.convert import ModelConverter
from notifications_utils.recipients import (
validate_email_address,
@@ -48,25 +46,6 @@ class BaseSchema(ma.ModelSchema):
return super(BaseSchema, self).make_instance(data)
class CreatedBySchema(ma.Schema):
created_by = fields.Str(required=True, load_only=True)
@validates_schema
def validates_created_by(self, data):
try:
if not isinstance(data.get('created_by'), models.User):
created_by = models.User.query.filter_by(id=data.get('created_by')).one()
except:
raise ValidationError('Invalid created_by: {}'.format(data))
@post_load
def format_created_by(self, item):
if not isinstance(item.get('created_by'), models.User):
item['created_by'] = models.User.query.filter_by(id=item.get('created_by')).one()
return item
class UserSchema(BaseSchema):
permissions = fields.Method("user_permissions", dump_only=True)
@@ -89,7 +68,10 @@ class UserSchema(BaseSchema):
"_password", "verify_codes")
class ServiceSchema(BaseSchema, CreatedBySchema):
class ServiceSchema(BaseSchema):
created_by = field_for(models.Service, 'created_by', required=True)
class Meta:
model = models.Service
exclude = ("updated_at", "created_at", "api_keys", "templates", "jobs", 'old_id')
@@ -107,7 +89,9 @@ class BaseTemplateSchema(BaseSchema):
exclude = ("updated_at", "created_at", "service_id", "jobs")
class TemplateSchema(BaseTemplateSchema, CreatedBySchema):
class TemplateSchema(BaseTemplateSchema):
created_by = field_for(models.Template, 'created_by', required=True)
@validates_schema
def validate_type(self, data):
@@ -123,7 +107,10 @@ class NotificationsStatisticsSchema(BaseSchema):
model = models.NotificationStatistics
class ApiKeySchema(BaseSchema, CreatedBySchema):
class ApiKeySchema(BaseSchema):
created_by = field_for(models.ApiKey, 'created_by', required=True)
class Meta:
model = models.ApiKey
exclude = ("service", "secret")