1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
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
|