Source code for waeup.kofa.image.schema
## $Id: schema.py 7819 2012-03-08 22:28:46Z henrik $
##
## Copyright (C) 2011 Uli Fouquet & Henrik Bettermann
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##
"""Image file schemas.
"""
from zope.interface import implements
from zope.schema import MinMaxLen
from zope.schema.interfaces import TooBig, TooSmall
from hurry.file.schema import File
from waeup.kofa.image.interfaces import IImageFile
from waeup.kofa.image.image import KofaImageFile
[docs]class MinMaxSize(object):
"""Expresses constraints on the size of an object.
The 'size' of an object is determined by its `size` method or
attribute. If an object has no such 'size' then it cannot be
validated by this mixin.
Please do not confuse `MinMaxSize` with `MinMaxLen`, for instance
supported by ordinary text fields. These test on ``len(obj)``
which is not necessary possible for file-like objects.
Therefore we distinguish 'size' from 'len' here.
"""
min_size = None
max_size = None
[docs] def __init__(self, min_size=None, max_size=None, **kw):
self.min_size = min_size
self.max_size = max_size
super(MinMaxSize, self).__init__(**kw)
[docs] def _validate(self, value):
super(MinMaxSize, self)._validate(value)
if self.max_size is not None and value.size > self.max_size:
raise TooBig(
value.filename,
"%s bytes (max: %s bytes)" % (value.size, self.max_size))
if self.min_size is not None and value.size < self.min_size:
raise TooSmall(
value.filename,
"%s bytes (min: %s bytes)" % (value.size, self.min_size))
[docs]class ImageFile(MinMaxSize, File):
"""An image file field.
Suitable for interfaces that wish to store image files in an
attribute.
This field type supports `MinMaxSize` so that you can set
`min_size` or `max_size` for all `ImageFile` fields in your
interfaces like this:
class MyInterface(Interface):
image = ImageFile(
title = u'The image',
description = u'The nice image',
max_size = 1024 * 10,
)
to restrict the file size of stored images to 10 KBytes.
By default no such restriction is set.
"""
implements(IImageFile)
_type = KofaImageFile