diff --git a/VERSION b/VERSION index c59e127a..7186441f 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -Version 1.99.7 (2012-05-10 16:30:33) dev +Version 1.99.7 (2012-05-10 18:02:10) dev diff --git a/gluon/contrib/imageutils.py b/gluon/contrib/imageutils.py new file mode 100644 index 00000000..96facc08 --- /dev/null +++ b/gluon/contrib/imageutils.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- + +####################################################################### +# +# Put this file in yourapp/modules/images.py +# +# Given the model +# +# db.define_table("table_name", Field("picture", "upload"), Field("thumbnail", "upload")) +# +# # to resize the picture on upload +# +# from images import RESIZE +# +# db.table_name.picture.requires = RESIZE(200, 200) +# +# # to store original image in picture and create a thumbnail in 'thumbnail' field +# +# from images import THUMB +# db.table_name.thumbnail.compute = lambda row: THUMB(row.picture, 200, 200) + +######################################################################### +from gluon import current + +class RESIZE(object): + def __init__(self, nx=160, ny=80, error_message=' image resize'): + (self.nx, self.ny, self.error_message) = (nx, ny, error_message) + + def __call__(self, value): + if isinstance(value, str) and len(value) == 0: + return (value, None) + from PIL import Image + import cStringIO + try: + img = Image.open(value.file) + img.thumbnail((self.nx, self.ny), Image.ANTIALIAS) + s = cStringIO.StringIO() + img.save(s, 'JPEG', quality=100) + s.seek(0) + value.file = s + except: + return (value, self.error_message) + else: + return (value, None) + +def THUMB(image, nx=120, ny=120, gae=False, name='thumb'): + if image: + if not gae: + request = current.request + from PIL import Image + import os + img = Image.open(request.folder + 'uploads/' + image) + img.thumbnail((nx, ny), Image.ANTIALIAS) + root, ext = os.path.splitext(image) + thumb = '%s_%s%s' % (root, name, ext) + img.save(request.folder + 'uploads/' + thumb) + return thumb + else: + return image diff --git a/gluon/dal.py b/gluon/dal.py index 5ec76281..cd8bfd1d 100644 --- a/gluon/dal.py +++ b/gluon/dal.py @@ -4661,7 +4661,7 @@ class MongoDBAdapter(NoSQLAdapter): # need to define all the 'sql' methods gt,lt etc.... def select(self,query,fields,attributes,count=False,snapshot=False): - tablename, mongoqry_dict, mongofields_dict, + tablename, mongoqry_dict, mongofields_dict, \ mongosort_list, limitby_limit, limitby_skip = \ self._select(query,fields,attributes) ctable = self.connection[tablename]