示例#1
0
class Page(db.Document):  # type: ignore[name-defined]
    ''' Page ODM '''

    # Document Fields
    name = db.StringField(required=True, unique=True)
    filepath = db.StringField(unique=True)
    status = db.EnumField(PageStatus, default=PageStatus.NULL)

    # metadata
    title = db.StringField()
    description = db.StringField()
    keywords = db.ListField(db.StringField())
    author = db.StringField(default="Tom Hall")
    slug = db.StringField()
    link = db.StringField()
    header_image = db.ReferenceField(Image)
    layout = db.StringField(default="default")
    date_created = db.DateTimeField(default=date.today)
    date_published = db.DateTimeField()

    # content: define last to leave out of fields property
    content = db.StringField()

    meta = {'indexes': ['name']}

    # Derived data
    def get_slug(self):
        if slug := self.slug:
            return slugify(slug)
        elif title := self.title:
            return slugify(title)
示例#2
0
    class Format(db.EmbeddedDocument):  # type: ignore[name-defined]
        ''' Image format subdocument '''

        format = db.StringField()
        quality = db.IntField(min_value=0, max_value=100, default=55)
        processing = db.DictField()
        outputs = db.ListField(db.StringField())

        def __str__(self):
            return self.format

        def __repr__(self):
            return f"<Format(format={self.format}), {len(self.outputs)} files>"
示例#3
0
class Post(db.DynamicDocument):
    created_at = db.DateTimeField(default=datetime.datetime.now, required=True)
    title = db.StringField(max_length=255, required=True)
    slug = db.StringField(max_length=255, required=True)
    comments = db.ListField(db.EmbeddedDocumentField('Comment'))

    def get_absolute_url(self):
        return url_for('post', kwargs={"slug": self.slug})

    def __unicode__(self):
        return self.title

    @property
    def post_type(self):
        return self.__class__.__name__

    meta = {
        'allow_inheritance': True,
        'indexes': ['-created_at', 'slug'],
        'ordering': ['-created_at']
    }
示例#4
0
class Exhibition(Post):
    exhibition_name = db.StringField(verbose_name="Exhibition Name",
                                     required=True,
                                     max_length=255)
    exhibition_artist = db.StringField(verbose_name="Artist Name",
                                       required=True,
                                       max_length=255)
    exhibition_artist = db.StringField(verbose_name="Additionnal Artist name",
                                       required=False,
                                       max_length=255)
    exhibition_artist = db.StringField(verbose_name="Additionnal Artist name",
                                       required=False,
                                       max_length=255)
    exhibition_key_image_url = db.StringField(
        verbose_name="Key exhibition image", required=False, max_length=255)
    body = db.StringField(required=False)
示例#5
0
class Image(db.Document):  # type: ignore[name-defined]
    ''' Image ODM '''
    class Format(db.EmbeddedDocument):  # type: ignore[name-defined]
        ''' Image format subdocument '''

        format = db.StringField()
        quality = db.IntField(min_value=0, max_value=100, default=55)
        processing = db.DictField()
        outputs = db.ListField(db.StringField())

        def __str__(self):
            return self.format

        def __repr__(self):
            return f"<Format(format={self.format}), {len(self.outputs)} files>"

    name = db.StringField(required=True, unique=True)
    source_format = db.StringField(required=True)
    filepath = db.StringField(required=True)
    desc = db.StringField()
    status = db.EnumField(ImgStatus, default=ImgStatus.NEW)
    width = db.IntField()
    height = db.IntField()
    thumbnail_widths = db.ListField(db.IntField())
    formats = db.EmbeddedDocumentListField(Format)

    meta = {'indexes': ['name', 'filepath']}

    def __str__(self):
        return self.name

    def __repr__(self):
        return f"<Image(name='{self.name}'), {self.status.name}>"

    @property
    def path(self) -> Path:
        return Path(self.filepath)

    def check_outputs(self) -> bool:
        """ verify that listed output files in database match filesystem """
        outputs = (Path(path) for format in self.formats
                   for path in format.outputs)

        # 1 check all listed files exist
        return all(path.exists for path in outputs)

    def set_format(self, format: str, quality: int, **params) -> None:
        try:
            format_info = self.formats.get(format=format)
        except DoesNotExist:
            format_info = self.formats.create(format=format,
                                              quality=quality,
                                              processing=params)
        else:
            format_info.quality = quality
            format_info.processing = params
        finally:
            self.save()

    def delete_format(self, format: str) -> int:
        return self.formats.filter(format=format).delete()
示例#6
0
class Comment(db.EmbeddedDocument):
    created_at = db.DateTimeField(default=datetime.datetime.now, required=True)
    body = db.StringField(verbose_name="Comment", required=True)
    author = db.StringField(verbose_name="Name", max_length=255, required=True)
示例#7
0
class Quote(Post):
    body = db.StringField(required=True)
    author = db.StringField(verbose_name="Author Name",
                            required=True,
                            max_length=255)
示例#8
0
class Image(Post):
    image_url = db.StringField(required=True, max_length=255)
示例#9
0
class Video(Post):
    embed_code = db.StringField(required=True)
示例#10
0
class BlogPost(Post):
    body = db.StringField(required=True)