mirror of
https://github.com/GSA/notifications-api.git
synced 2025-12-24 01:11:38 -05:00
Update created_by to work like other relationship fields.
This commit is contained in:
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user