class CreateBookSchema(ma.Schema): title = ma.Str(required=True, validate=Length(max=30)) description = ma.Str(required=True, validate=Length(max=120)) authors = ma.List(ma.Integer, required=True) class Meta: model = Book
class ContentSchema(Schema): class Meta: unknown = EXCLUDE id = ma.Int( required=True, error_messages={"invalid": "Missing ID number"}, ) content = ma.Str( required=True, validate=validate.Length(min=1, error='Missing Content'), ) group = ma.Int( required=True, error_messages={"invalid": "Missing group number"}, ) question = ma.Str( required=True, validate=validate.Length(min=1, error='Missing Content'), ) image = ma.Str(required=True) @validates("image") def validate_quantity(self, value): if (not os.path.isfile('resources/master/images/' + value)): raise ValidationError("Missing file: " + value)
class LoginSchema(ma.Schema): username = ma.Str() email = ma.Str() password = ma.Str() @validates_schema() def check_password_provided(self, data): password = data.get('password', None) if password is None or password.strip() == '': raise ValidationError('Password is required', field_names=['password']) @validates_schema() def check_username_or_email_provided(self, data): username = data.get('username', None) email = data.get('email', None) if username is None or username.strip() == '': if email is None or email.strip() == '': raise ValidationError('Username or Email is required', field_names=['username_email']) elif not is_valid_email(email.strip()): raise ValidationError('Not a valid email address', field_names=['email']) @post_load def strip_data(self, data): for field, value in data.items(): data[field] = value.strip()
class PostGalleryValidateSchema(ma.Schema): name = ma.Str(required=True, validate=Length(max=30, min=1), allow_none=False) explain = ma.Str(required=True, validate=Length(max=255, min=0)) gallery_id = ma.Str(required=True, validate=Length(max=30, min=1)) gallery_type = ma.Integer( required=True, allow_none=False, validate=Range(min=0, max=2), )
class PostTokenValidateSchema(ma.Schema): @staticmethod def check_is_school_email(email): email_domain = email.rsplit("@")[-1] if not email_domain == "dsm.hs.kr": raise ValidationError("Email is not email of DSM.") password = ma.Str(required=True, validate=validate.Length(min=8)) email = ma.Str( required=True, validate=[validate.Email(), check_is_school_email.__func__], )
class AccountChangePasswordInputSchema(ma.Schema): password = ma.Str( required=True, validate=validate.Regexp( re.compile( r"^(?=.*\d)(?=.*[a-zA-Z])[0-9a-zA-Z*.!@$%^&(){}\[\]:;<>,.?/~_+-=|\\]{8,36}$" )), ) new_password = ma.Str( required=True, validate=validate.Regexp( re.compile( r"^(?=.*\d)(?=.*[a-zA-Z])[0-9a-zA-Z*.!@$%^&(){}\[\]:;<>,.?/~_+-=|\\]{8,36}$" )), )
class GetCommentParameterSchema(ma.Schema): post_id = ma.Integer(data_key="post-id", required=False) username = ma.Str(required=False) page = ma.Integer(required=False, validate=Range(min=0)) per_page = ma.Integer(data_key="per-page", required=False, validate=Range(min=1))
class ReportCommentInputSchema(ma.Schema): reason = ma.Integer(required=True, validate=Range(min=1, max=10)) detail_reason = ma.Str(required=True, validate=Length(max=500)) reported_content_type = ma.Integer( required=True, validate=Range(min=1, max=2) ) post_id = ma.Integer(required=False, allow_none=True) comment_id = ma.Integer(required=True)
class MessageSchema(ma.ModelSchema): class Meta: fields = ('msg', 'author', 'created_at', 'photos') photos = ma.Raw() msg = ma.Str() created_at = ma.Date() author = ma.Nested(UserSchemaWithoutRooms)
class PostGetQueryParameterValidateSchema(ma.Schema): page = ma.Integer(required=False, validate=Range(min=1)) per_page = ma.Integer(required=False, validate=Range(min=1), data_key="per-page") username = ma.Str(required=False, validate=Length(min=2, max=20)) gallery_id = ma.String(required=False, validate=Length(min=1, max=30), data_key="gallery-id")
class UserSchema(ma.Schema): username = ma.Str(required=True) email = ma.Email(required=True) class Meta: fields = ('username', 'email') @post_load def make_user(self, data, **kwargs): return User(**data)
class CreateUserSchema(ma.Schema): username = LowerCased(required=True, validate=Length(max=30)) email = ma.Str(required=True, validate=Length(max=120)) first_name = ma.Str(required=True, validate=Length(max=30)) last_name = ma.Str(required=True, validate=Length(max=30)) password = ma.Str(required=True, validate=Length(min=8)) active = ma.Str(missing=True) roles = ma.List(ma.Str(validate=Length(max=30)), missing=['user']) @validates('email') def is_valid_email(self, value): regex = '^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$' if not re.search(regex, value): raise ValidationError("Email must be in valid format!") @validates('password') def is_valid_password(self, value): ''' Should have at least one number. Should have at least one uppercase and one lowercase character. Should have at least one special symbol. Should be at least 8 characters long. ''' regex = '^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!#%*?&]{8,}$' pat = re.compile(regex) mat = re.search(pat, value) if not mat: raise ValidationError("Password invalid!") class Meta: model = User
class AccountRegisterSchema(ma.Schema): email = ma.Str( required=True, validate=[ validate.Email(error="Email parameter is not email"), validate.Regexp(".*@dsm.hs.kr", error="Email is not of dsm"), ], ) username = ma.Str( required=True, validate=[ validate.Length(min=2, max=20), validate.Regexp(re.compile(r"^[가-힣\w]+$")), ], ) password = ma.Str( required=True, validate=validate.Regexp( re.compile( r"^(?=.*\d)(?=.*[a-zA-Z])[0-9a-zA-Z*.!@$%^&(){}\[\]:;<>,.?/~_+-=|\\]{8,36}$" )) # 비밀번호 8자리 이상 36자리 이하 숫자, 알파벳 1개씩 포함 )
class AccountLoginInputSchema(ma.Schema): password = ma.Str(required=True, validate=validate.Length(min=8)) email = ma.Str(required=True, validate=validate.Email())
class FakeUserSchema(ma.ModelSchema): user_id = ma.Int() username = ma.Str()
class CreateAuthorSchema(ma.Schema): first_name = ma.Str(required=True, validate=Length(max=100)) middle_name = ma.Str(validate=Length(max=100), missing=None) last_name = ma.Str(validate=Length(max=100), missing=None) bio = ma.Str(validate=Length(max=100000), missing=None) books = ma.List(ma.Integer, missing=[])
class CommentInputSchema(ma.Schema): content = ma.Str(required=True, validate=Length(min=1, max=100)) upper_comment_id = ma.Integer(required=False, allow_none=True) is_anonymous = ma.Boolean(required=True)
class CommentPatchInputSchema(ma.Schema): content = ma.Str(required=False, validate=Length(min=1, max=100))
class GetEmailDuplicationSchema(ma.Schema): email = ma.Str(required=True, validate=validate.Email())
class RatingsSchema(ma.Schema): rating = ma.Str() notes = ma.Str() book = ma.Nested(BookSchema)
class DeleteUserSchema(ma.Schema): password = ma.Str(required=True, validate=validate.Length(min=8))
class PostPatchInputValidateSchema(ma.Schema): content = ma.Str(required=False, validate=Length(min=1)) title = ma.Str(required=False, validate=Length(min=1, max=30)) images = ma.List(ma.String(validate=Length(max=100)), required=False)
class PostPostInputValidateSchema(ma.Schema): content = ma.Str(required=True, validate=Length(min=1)) title = ma.Str(required=True, validate=Length(min=1, max=30)) images = ma.List(ma.String(validate=Length(max=100), required=True)) is_anonymous = ma.Boolean(required=True)
class CompanySchema(ma.Schema): company_name = ma.Str() company_url = ma.Str() company_street_address = ma.Str() country = ma.Str() company_description = ma.Str() categories = ma.List(ma.Str(), attribute="category") businesses = ma.List(ma.Str(), attribute="business") company_phone_number = ma.Str() company_website = ma.Str() company_email = ma.Str() contacts = ma.List(ma.Str())
class EmailVerificationCodePostSchema(ma.Schema): verification_code = ma.Str(data_key="verification-code", required=True)
class LoginSchema(ma.Schema): username = ma.Str(required=True, validate=Length(max=30)) password = ma.Str(required=True, validate=Length(min=8))
class GetUsernameDuplicationSchema(ma.Schema): username = ma.Str(required=True, validate=validate.Length(min=2, max=20))
class TokenSchema(Schema): class Meta: unknown = INCLUDE token = ma.Str(required=True)
class UserPutInputSchema(ma.Schema): username = ma.Str(required=True, validate=validate.Length(min=2, max=20)) user_explain = ma.Str(required=True, validate=validate.Length(max=400)) profile_image = ma.String(required=False, allow_null=True, validate=validate.Length(max=100))
class UpdateAuthorSchema(ma.Schema): first_name = ma.Str(required=True, validate=Length(max=100)) middle_name = ma.Str(validate=Length(max=100), missing=None) last_name = ma.Str(validate=Length(max=100), missing=None) bio = ma.Str(validate=Length(max=100000), missing=None) approved = ma.Boolean(missing=False)