import uuid import time import pickle class RESIZE: def __init__(self,nx=250,ny=32,error_message='not an image'): (self.nx,self.ny,self.error_message)=(nx,ny,error_message) def __call__(self,value): import google.appengine.api as api import cStringIO try: avatar = api.images.resize(value.file.read(), self.nx) value.file = cStringIO.StringIO(avatar) return (value,None) except: return (value,self.error_message) if request.env.web2py_runtime_gae: db = DAL('gae') session.connect(request,response,db=db) else:db = DAL("sqlite://storage.db") db.define_table('upload_key', Field('upload_key', length=64, default=uuid.uuid4()), Field('user')) db.define_table('image', Field('file', 'upload', requires=[IS_NOT_EMPTY(error_message="Please select a file to upload"), IS_UPLOAD_FILENAME(extension='ta', error_message="Must be a Turtle Art file")]), Field('title', requires=[IS_NOT_EMPTY(error_message="You must include a title")]), Field('image_id'), Field('creator', requires=IS_NOT_EMPTY(error_message="You must include your name")), Field('description', 'text'), Field('views',default = 0), Field('newimage', 'upload', requires=[IS_NOT_EMPTY(error_message="Please select a image to upload"), IS_UPLOAD_FILENAME(extension='png', error_message="Must be a PNG image")]), Field('avatar',default = None), Field('small_image','upload',requires=RESIZE()), Field('favorite_users','text',default=pickle.dumps([]), writable=False, readable=False), Field('upload_key', requires= [IS_NOT_IN_DB(db, 'image.upload_key'), IS_IN_DB(db, 'upload_key.upload_key', error_message="key not in database")]), Field('Submit_Time', default = time.time())) db.define_table('comment', Field('image_id', db.image), Field('author'), Field('body', 'text')) from gluon.tools import Auth auth = Auth(globals(),db) auth_table = db.define_table( auth.settings.table_user_name, Field('username', length=128, default="", unique = True), Field('email', length=128, default="", unique=True), Field('password', 'password', length=256, readable=False, label='Password'), Field('registration_key', length=128, default= "", writable=False, readable=False), Field('favorites','text',default=pickle.dumps([]), writable=False, readable=False), Field('requests','text',default=pickle.dumps([]), writable=False, readable=False), Field('friends','text',default=pickle.dumps([]), writable=False, readable=False), Field('avatar', default = None,writable=False,readable=False), Field('reset_password_key', length=128, default="",readable=False, writable=False)) db.comment.image_id.requires = IS_IN_DB(db, db.image.image_id, '%(title)s') db.comment.author.requires = IS_NOT_EMPTY() db.comment.body.requires = IS_NOT_EMPTY() auth_table.username.requires = [IS_EXPR('str(value).count(" ") == 0', error_message='Username must be one word'), IS_NOT_IN_DB(db, auth_table.username)] auth_table.password.requires = [CRYPT()] auth_table.email.requires = [ IS_EMAIL(error_message=auth.messages.invalid_email), IS_NOT_IN_DB(db, auth_table.email)] auth.settings.table_user = auth_table auth.define_tables() from gluon.tools import Mail mail = Mail() mail.settings.server = 'gae' mail.settings.sender = 'turtlesite.authentication@gmail.com' mail.settings.login = None auth.settings.mailer = mail