diff --git a/.gitignore b/.gitignore index 3bec50f..8263b7a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,6 @@ *.pyc ajax/dojo/* +.project +.pydevproject +.settings + diff --git a/composer/schema/field.py b/composer/schema/field.py index e4ae831..6b1517c 100644 --- a/composer/schema/field.py +++ b/composer/schema/field.py @@ -344,7 +344,7 @@ class EmailFieldInstance(FieldInstance): class BooleanFieldInstance(FieldInstance): def marshall(self, value): - return value + return bool(value) def display(self, value): #return value and _(u'Yes') or _(u'No') diff --git a/composer/schema/instance.py b/composer/schema/instance.py index 11d2718..f95cc62 100644 --- a/composer/schema/instance.py +++ b/composer/schema/instance.py @@ -53,7 +53,7 @@ class Instance(BaseInstance): fi = f.getFieldInstance(self, context=kw.get('context'), request=kw.get('request')) name = f.name - value = getattr(self.context, name) or fi.default + value = getattr(self.context, name, fi.default) if mode in ('view', 'preview'): value = fi.display(value) else: diff --git a/media/asset.py b/media/asset.py index ed3e3db..5af5514 100644 --- a/media/asset.py +++ b/media/asset.py @@ -29,11 +29,9 @@ from logging import getLogger import mimetypes import os, re, sys -from zope import component from zope.interface import implements -from cybertools.media.interfaces import IMediaAsset, IFileTransform +from cybertools.media.interfaces import IMediaAsset from cybertools.media.piltransform import PILTransform -from cybertools.storage.filesystem import FileSystemStorage TRANSFORM_STATEMENT = re.compile(r"\s*(\+?)([\w]+[\w\d]*)\(([^\)]*)\)\s*") @@ -41,13 +39,16 @@ DEFAULT_FORMATS = { "image": "image/jpeg" } + def parseTransformStatements(txStr): """ Parse statements in transform chain strings.""" statements = TRANSFORM_STATEMENT.findall(txStr) return statements + def getMimeBasetype(mimetype): - return mimetype.split("/",1)[0] + return mimetype.split("/", 1)[0] + def getMimetypeExt(mimetype): exts = mimetypes.guess_all_extensions(mimetype) @@ -74,9 +75,9 @@ class MediaAssetFile(object): getLogger('cybertools.media.asset.MediaAssetFile').warn( 'Media asset directory %r not found.' % path) self.transform() - #return self.getOriginalData() + # return self.getOriginalData() f = open(path, 'rb') - data =f.read() + data = f.read() f.close() return data diff --git a/media/piltransform.py b/media/piltransform.py index df43893..d154bf3 100644 --- a/media/piltransform.py +++ b/media/piltransform.py @@ -92,7 +92,7 @@ class PILTransform(object): box = (left, upper, right, lower) self.im = self.im.crop(box) - def resize(self, width, height=None): + def resize(self, width, height=None, fill=False): if self.im is None: return if not height: @@ -100,11 +100,15 @@ class PILTransform(object): ratio = float(ow) / float(oh) height = int(round(float(width) / ratio)) dims = (width, height) - try: - self.im.thumbnail(dims, Image.ANTIALIAS) - except IOError, e: - logger.warn(e) - + if fill: + image = self.im + image.thumbnail(dims, Image.ANTIALIAS) + new = Image.new('RGBA', dims, (255, 255, 255, 0)) #with alpha + new.paste(image,((dims[0] - image.size[0]) / 2, + (dims[1] - image.size[1]) / 2)) + self.im = new + return new + return self.im.thumbnail(dims, Image.ANTIALIAS) def save(self, path, mimetype): if self.im is None: diff --git a/util/date.py b/util/date.py index fd495b0..a325799 100644 --- a/util/date.py +++ b/util/date.py @@ -71,7 +71,6 @@ def year(d=None): d = datetime.today() return d.year - def toLocalTime(d): if pytz is None or not d: return d @@ -82,3 +81,13 @@ def toLocalTime(d): return d.astimezone(cet) except ValueError: return d + +def month(d=None): + if d is None: + d = datetime.today() + return d.month + +def day(d=None): + if d is None: + d = datetime.today() + return d.day