Ejemplo n.º 1
0
class DescriptionSchema(Schema):
    """Schema for the additional descriptions."""

    description = SanitizedHTML(required=True,
                                validate=validate.Length(min=3))
    type = fields.Nested(VocabularySchema, required=True)
    lang = fields.Nested(VocabularySchema)
Ejemplo n.º 2
0
    def sanitize_html_fields(self, data, **kwargs):
        """Sanitize fields that may contain user-input HTML strings."""
        if 'abstract' in data:
            for lang, val in data.get('abstract').items():
                raw = data['abstract'][lang]
                data['abstract'][lang] = SanitizedHTML()._deserialize(
                    raw, 'abstract', data)

        return data
Ejemplo n.º 3
0
class CommunityMetadataSchema(Schema):
    """Community metadata schema."""

    COMMUNITY_TYPES = [
        'organization',
        'event',
        'topic',
        'project',
    ]

    title = SanitizedUnicode(required=True, validate=_not_blank(max=250))
    description = SanitizedUnicode(validate=_not_blank(max=2000))

    curation_policy = SanitizedHTML(validate=_not_blank(max=2000))
    page = SanitizedHTML(validate=_not_blank(max=2000))

    # TODO: Use general small vocabularies
    type = SanitizedUnicode(validate=validate.OneOf(COMMUNITY_TYPES))
    website = fields.Url(validate=_not_blank())
    funding = fields.List(fields.Nested(FundingSchema))
    organizations = fields.List(fields.Nested(AffiliationSchema))
Ejemplo n.º 4
0
class UploadSchema(ModelSchema):
    attachment_count = fields.Method("get_attachement_count", dump_only=True)
    text_length = fields.Method("get_text_length", dump_only=True)

    email = fields.Email()
    phone = fields.String(validate=Regexp(r"^\+?[0-9]{6,13}$"))

    text = SanitizedHTML(validate=Length(max=(2 * 1024 * 1024)),
                         tags=[],
                         attrs=[])  # ~2MB (or a lot more bc UTF-8)
    address = SanitizedHTML(tags=[], attrs=[])
    name = SanitizedHTML(tags=[], attrs=[])

    files = fields.Nested('FileSchema', many=True, exclude=['upload'])

    def get_attachement_count(self, upload: Upload) -> int:
        return len(upload.files)  # backref

    def get_text_length(self, upload: Upload) -> int:
        return len(upload.text)

    class Meta:
        model = Upload
class DescriptionSchema(Schema):
    """Schema for the additional descriptions."""

    DESCRIPTION_TYPES = [
        "abstract", "methods", "seriesinformation", "tableofcontents",
        "technicalinfo", "other"
    ]
    description = SanitizedHTML(required=True, validate=validate.Length(min=3))
    type = SanitizedUnicode(
        required=True,
        validate=validate.OneOf(
            choices=DESCRIPTION_TYPES,
            error=_(
                'Invalid description type. {input} not one of {choices}.')))
    lang = fields.Nested(LanguageSchema)
Ejemplo n.º 6
0
class MetadataSchema(Schema):
    """Schema for the record metadata."""

    field_load_permissions = {
        # TODO: define "can_admin" action
    }

    field_dump_permissions = {
        # TODO: define "can_admin" action
    }

    class Meta:
        """Meta class to accept unknwon fields."""

        unknown = INCLUDE

    # Metadata fields
    resource_type = ResourceType(required=True)
    creators = fields.List(fields.Nested(CreatorSchema),
                           required=True,
                           validate=validate.Length(
                               min=1,
                               error=_("Missing data for required field.")))
    title = SanitizedUnicode(required=True, validate=validate.Length(min=3))
    additional_titles = fields.List(fields.Nested(TitleSchema))
    publisher = SanitizedUnicode()
    publication_date = EDTFDateString(required=True)
    subjects = fields.List(fields.Nested(SubjectSchema))
    contributors = fields.List(fields.Nested(ContributorSchema))
    dates = fields.List(fields.Nested(DateSchema))
    languages = fields.List(fields.Nested(LanguageSchema))
    # alternate identifiers
    identifiers = IdentifierSet(
        fields.Nested(partial(IdentifierSchema, allow_all=True)))
    related_identifiers = fields.List(fields.Nested(RelatedIdentifierSchema))
    sizes = fields.List(
        SanitizedUnicode(
            validate=_not_blank(_('Size cannot be a blank string.'))))
    formats = fields.List(
        SanitizedUnicode(
            validate=_not_blank(_('Format cannot be a blank string.'))))
    version = SanitizedUnicode()
    rights = fields.List(fields.Nested(RightsSchema))
    description = SanitizedHTML(validate=validate.Length(min=3))
    additional_descriptions = fields.List(fields.Nested(DescriptionSchema))
    locations = fields.List(fields.Nested(LocationSchema))
    funding = fields.List(fields.Nested(FundingSchema))
    references = fields.List(fields.Nested(ReferenceSchema))
Ejemplo n.º 7
0
class MetadataSchema(Schema):
    """Schema for the record metadata."""

    # Metadata fields
    resource_type = fields.Nested(VocabularySchema, required=True)
    creators = fields.List(fields.Nested(CreatorSchema),
                           required=True,
                           validate=validate.Length(
                               min=1,
                               error=_("Missing data for required field.")))
    title = SanitizedUnicode(required=True, validate=validate.Length(min=3))
    additional_titles = fields.List(fields.Nested(TitleSchema))
    publisher = SanitizedUnicode()
    publication_date = EDTFDateString(required=True)
    subjects = fields.List(fields.Nested(SubjectSchema))
    contributors = fields.List(fields.Nested(ContributorSchema))
    dates = fields.List(fields.Nested(DateSchema))
    languages = fields.List(fields.Nested(VocabularySchema))
    # alternate identifiers
    identifiers = IdentifierSet(
        fields.Nested(
            partial(IdentifierSchema,
                    allowed_schemes=record_identifiers_schemes)))
    related_identifiers = fields.List(fields.Nested(RelatedIdentifierSchema))
    sizes = fields.List(
        SanitizedUnicode(
            validate=_not_blank(_('Size cannot be a blank string.'))))
    formats = fields.List(
        SanitizedUnicode(
            validate=_not_blank(_('Format cannot be a blank string.'))))
    version = SanitizedUnicode()
    rights = fields.List(fields.Nested(RightsSchema))
    description = SanitizedHTML(validate=validate.Length(min=3))
    additional_descriptions = fields.List(fields.Nested(DescriptionSchema))
    locations = fields.Nested(FeatureSchema)
    funding = fields.List(fields.Nested(FundingSchema))
    references = fields.List(fields.Nested(ReferenceSchema))
Ejemplo n.º 8
0
class FileSchema(ModelSchema):
    original_filename = SanitizedHTML(tags=[], attrs=[])
    mime = fields.String(validate=validate_mimetype)

    class Meta:
        model = File