From 09e3eea7a72e9e2300b639f0356100c7b83b5dfb Mon Sep 17 00:00:00 2001 From: James Boisture Date: Thu, 29 Jul 2010 18:05:01 +0000 Subject: made a lot of major changes because it has been a long time since I commited last. There are many new features. Also added app.yaml file which should be placed in the web2py directly in order for the URL to work properly. --- diff --git a/app.yaml b/app.yaml new file mode 100644 index 0000000..a4ce4ee --- /dev/null +++ b/app.yaml @@ -0,0 +1,47 @@ +application: turtleartsite +version: 1 +api_version: 1 +runtime: python + +handlers: + +#- url: /(?P.+?)/static/(?P.+) +# static_files: applications/\1/static/\2 +# upload: applications/(.+?)/static/(.+) +# secure: optional + +- url: /static/(?P.+) + static_files: applications/turtlesite/static/\1 + upload: applications/turtlesite/static/(.+) + secure: optional + +- url: /admin-gae/.* + script: $PYTHON_LIB/google/appengine/ext/admin + login: admin + +- url: /_ah/queue/default + script: gaehandler.py + login: admin + +- url: .* + script: gaehandler.py + secure: optional + +skip_files: | + ^(.*/)?( + (app\.yaml)| + (app\.yml)| + (index\.yaml)| + (index\.yml)| + (#.*#)| + (.*~)| + (.*\.py[co])| + (.*/RCS/.*)| + (\..*)| + ((admin|examples|welcome)\.tar)| + (applications/(admin|examples)/.*)| + (applications/.*?/databases/.*) | + (applications/.*?/errors/.*)| + (applications/.*?/cache/.*)| + (applications/.*?/sessions/.*)| + )$ diff --git a/controllers/default.py b/controllers/default.py index d9f9a6d..21cf579 100644 --- a/controllers/default.py +++ b/controllers/default.py @@ -1,12 +1,69 @@ import os +import pickle +from gluon.tools import Service +service=Service(globals()) -def sort_by_views(L): - if len(L) <= 1: return L - return sort_by_views( [ lt for lt in L[1:] if lt.views < L[0].views ] ) + [ L[0] ] + sort_by_views( [ ge for ge in L[1:] if ge.views >= L[0].views ] ) +def get_requests(): + if auth.is_logged_in(): + users = db().select(db.auth_user.ALL) + for user in users: + if auth.user.username == user.username: + return len(pickle.loads(user.requests)) + else: return None + +@auth.requires_membership('admin') +def admin(): + if "page" in request.vars.keys(): page = int(request.vars["page"])-1 + else: page = 0 + users = db().select(db.auth_user.ALL) + users_list=[] + for user in users: + users_list.append(user) + users_list.sort(cmp=lambda x,y:cmp(x.username.lower(),y.username.lower())) + users_on_page = users_list[page*10:(page+1)*10] + pages = len(users_list) / 10 + if len(users_list)%10 > 0: pages += 1 + return dict(users = users_on_page, page=page+1,pages=pages, num_requests = get_requests()) + +@auth.requires_membership('admin') +def make_admin(): + if "page" in request.vars.keys(): page = int(request.vars["page"]) + else: page = 1 + if "user" in request.vars.keys(): user = request.vars["user"] + else: redirect(URL(r=request, f="admin?page="+str(page))) + auth.add_membership('admin',user) + redirect(URL(r=request, f="admin?page="+str(page))) + +@auth.requires_membership('admin') +def remove_admin(): + if "page" in request.vars.keys(): page = int(request.vars["page"]) + else: page = 1 + if "user" in request.vars.keys(): user = request.vars["user"] + else: redirect(URL(r=request, f="admin?page="+str(page))) + auth.del_membership(auth.id_group('admin'),user) + redirect(URL(r=request, f="admin?page="+str(page))) + +@auth.requires_membership('admin') +def delete_user(): + if "page" in request.vars.keys(): page = int(request.vars["page"]) + else: page = 1 + if "user" in request.vars.keys(): user_to_delete = request.vars["user"] + else: redirect(URL(r=request, f="admin?page="+str(page))) + query=(db.auth_user.username==user_to_delete) + db(query).delete() + images = db().select(db.image.ALL) + for image in images: + if image.creator == user_to_delete: + query=(db.image.id==image.id) + db(query).delete() + comments = db().select(db.comment.ALL) + for comment in comments: + if comment.author == user_to_delete: + query=(db.comment.id==comment.id) + db(query).delete() + redirect(URL(r=request, f="admin?page="+str(page))) + -def sort_by_id(L): - if len(L) <= 1: return L - return sort_by_id( [ lt for lt in L[1:] if lt.id < L[0].id ] ) + [ L[0] ] + sort_by_id( [ ge for ge in L[1:] if ge.id >= L[0].id ] ) def index(): sorts = ["newest", "views"] @@ -18,22 +75,37 @@ def index(): sort = "newest" if "profile" in request.vars.keys(): profile = request.vars["profile"] else: profile = None + if "favorites" in request.vars.keys(): show_favorites = bool(request.vars["favorites"]) + else: show_favorites = False + profile_user = None + favorites = None + if profile != None: + users = db().select(db.auth_user.ALL) + for user in users: + if user.username == profile: + profile_user = user + favorites = pickle.loads(profile_user.favorites) table = [] raw_images = db().select(db.image.ALL) i = 0 row = [] count = 0 images = [] + c = 1 for image in raw_images: if profile != None: - if image.creator == profile: - images.append(image) + if show_favorites: + if image.id in favorites: + images.append(image) + if not show_favorites: + if image.creator == profile: + images.append(image) else: images.append(image) if sort == 'views': - #images = sort_by_views(images) + images.sort(cmp=lambda x,y:cmp(float(x.views),float(y.views))) images.reverse() if sort == 'newest': - images.sort(cmp=lambda x,y:cmp(x.id,y.id)) + images.sort(cmp=lambda x,y:cmp(float(x.Submit_Time),float(y.Submit_Time))) images.reverse() for image in images: if count >= page * 12 and page*12+12 > count: @@ -48,28 +120,253 @@ def index(): pages = count / 12 if count%12 > 0: pages += 1 page += 1 - return dict(images=table, pages=pages, page=page, sort=sort, profile=profile) + return dict(images=table, pages=pages, page=page, sort=sort, profile=profile_user, show_favorites=show_favorites,num_requests = get_requests()) + + +def profile(): + if "profile" in request.vars.keys(): profile = request.vars["profile"] + else: redirect(URL(r=request,f='index')) + users = db().select(db.auth_user.ALL) + for user in users: + if user.username == profile: + profile_user = user + favorite_ids = pickle.loads(profile_user.favorites) + friends = pickle.loads(profile_user.friends) + requests = pickle.loads(profile_user.requests) + raw_images = db().select(db.image.ALL) + images = [] + favorites = [] + avatar = None + for image in raw_images: + #if image.id == int(profile_user.avatar): + # avatar = image + if image.creator == profile: + images.append(image) + if image.id in favorite_ids: + favorites.append(image) + images.sort(cmp=lambda x,y:cmp(float(x.Submit_Time),float(y.Submit_Time))) + images.reverse() + favorite_ids.reverse() + favorites_table = [] + favs_sorted = [] + i = 0 + row = [] + for f_id in favorite_ids: + if i < 8: + for fav in favorites: + if fav.id == f_id: + favs_sorted.append(fav) + if len(favs_sorted) < 4: + favorites_table.append(favs_sorted) + if len(favs_sorted) == 4 or len(favs_sorted)>4: + favorites_table.append(favs_sorted[:4]) + if len(favs_sorted) > 4 and len(favs_sorted) < 8: + favorites_table.append(favs_sorted[4:]) + if len(favs_sorted) > 4 and len(favs_sorted) >= 8: + favorites_table.append(favs_sorted[4:8]) + + images_table = [] + row = [] + c = 0 + i = 0 + for image in images: + if c < 2: + row.append(image) + i += 1 + if i == 4: + images_table.append(row) + c += 1 + i = 0 + row = [] + if len(images) < 8 and len(images)%4 != 0: + images_table.append(row) + return dict(profile = profile_user, images = images_table, favorites = favorites_table,requests = requests,friends=friends,avatar=avatar, num_requests = get_requests()) + +def friends(): + if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1 + else: page = 0 + if "user" in request.vars.keys(): username = request.vars["user"] + else: redirect(URL(r=request,f='index')) + users = db().select(db.auth_user.ALL) + for user in users: + if user.username == username: + friends = pickle.loads(user.friends) + friends_list=[] + for user in users: + if user.username in friends: + friends_list.append(user) + friends_list.sort(cmp=lambda x,y:cmp(x.username.lower(),y.username.lower())) + friends_on_page = friends_list[page*10:(page+1)*10] + pages = len(friends_list) / 10 + if len(friends_list)%10 > 0: pages += 1 + return dict(username = username, friends = friends_on_page,page=page+1,pages=pages, num_requests = get_requests()) + +def respond_to_request(): + if "user" in request.vars.keys() and auth.is_logged_in(): username = request.vars["user"] + else: redirect(URL(r=request,f='index')) + if "response" in request.vars.keys(): response = bool(request.vars["user"]) + else: redirect(URL(r=request,f='index')) + users = db().select(db.auth_user.ALL) + current_user = None + user_to_add = None + for user in users: + if user.username == auth.user.username: + current_user = user + if user.username == username: + user_to_add = user + if user_to_add == None or current_user == None: + redirect(URL(r=request,f='index')) + requests = pickle.loads(current_user.requests) + real_request = None + for r in requests: + if r[1] == user_to_add.username: + real_request = r + if real_request == None:redirect(URL(r=request,f='index')) + requests.remove(real_request) + db(db.auth_user.username==current_user.username).update(requests = pickle.dumps(requests)) + if response: + friends = pickle.loads(current_user.friends) + friends.append(user_to_add.username) + db(db.auth_user.username==current_user.username).update(friends = pickle.dumps(friends)) + friends = pickle.loads(user_to_add.friends) + friends.append(current_user.username) + db(db.auth_user.username==user_to_add.username).update(friends = pickle.dumps(friends)) + redirect(URL(r=request,f='requests')) + +def remove_friends(): + if "user" in request.vars.keys() and auth.is_logged_in(): username = request.vars["user"] + else: redirect(URL(r=request,f='index')) + users = db().select(db.auth_user.ALL) + current_user = None + user_to_remove = None + for user in users: + if user.username == auth.user.username: + current_user = user + if user.username == username: + user_to_remove = user + if user_to_remove == None or current_user == None: + redirect(URL(r=request,f='index')) + friends = pickle.loads(current_user.friends) + if user_to_remove.username in friends: + friends.remove(user_to_remove.username) + db(db.auth_user.username==current_user.username).update(friends = pickle.dumps(friends)) + friends = pickle.loads(user_to_remove.friends) + if current_user.username in friends: + friends.remove(current_user.username) + db(db.auth_user.username==user_to_remove.username).update(friends = pickle.dumps(friends)) + redirect(URL(r=request,f='friends?user='+current_user.username)) + +def add_as_friend(): + if "user" in request.vars.keys() and auth.is_logged_in(): username = request.vars["user"] + else: redirect(URL(r=request,f='index')) + users = db().select(db.auth_user.ALL) + for user in users: + if user.username == username: + user_to_add = user + requests = pickle.loads(user_to_add.requests) + requests.append(('friend', auth.user.username)) + db(db.auth_user.username==user_to_add.username).update(requests = pickle.dumps(requests)) + redirect(URL(r=request,f='profile?profile='+username)) + + +def requests(): + if not auth.is_logged_in(): redirect(URL(r=request,f='index')) + users = db().select(db.auth_user.ALL) + for user in users: + if user.username == auth.user.username: + current_user = user + requests = pickle.loads(current_user.requests) + return dict(requests = requests, num_requests = get_requests()) + def upload(): - form = SQLFORM(db.image, fields = ['title', 'file', 'newimage', 'description']) - if form.accepts(request.vars, session): - session.new_image_title = form.vars.title - db(db.image.title==session.new_image_title).update(creator = auth.user.username) - db(db.image.title==session.new_image_title).update(views = 0) - redirect(URL(r=request, f='index')) + upload_key = request.vars["upload_key"] + title = request.vars["title"] + form = SQLFORM(db.image, fields = ['title', 'file', 'newimage','small_image', 'description','upload_key']) + if form.accepts(request.vars): + keys = db().select(db.upload_key.ALL) + for key in keys: + if key.upload_key == upload_key: + user = key.user + db(db.image.upload_key==upload_key).update(creator = user) + query=(db.upload_key.upload_key==upload_key) + db(query).delete() + images = db().select(db.image.ALL) + for image in images: + if image.id == form.vars.id: + real_image = image + images = db().select(db.image.ALL) + for image in images: + if image.creator == user and image.title.lower() == form.vars.title.lower() and image.upload_key != upload_key: + db(db.image.upload_key==upload_key).update(views = image.views) + query=(db.image.id==image.id) + db(query).delete() + else: + import logging + logging.error("form not accepted") + raise HTTP(400,"failed to upload") return dict(form=form) -"""@service.xmlrpc -def upload_remote(username,password,image,ta_file,title,description): + +@service.xmlrpc +def login_remote(username,password): logged_in = auth.login_bare(username,password) if logged_in: - db.image.insert(file=ta_file, - image=image, - title=title, - description=description, - creator=auth.user.username, - views=0)""" - + db.upload_key.insert(user=username) + keys = db().select(db.upload_key.ALL) + for key in keys: + if key.user == username: + return str(key.upload_key) + return False + else: return False + + +def remove_as_favorite(): + if "id" in request.vars.keys(): image_id = int(request.vars["id"]) + else: redirect(URL(r=request,f='index')) + if auth.is_logged_in(): + images = db().select(db.image.ALL) + for image in images: + if image.id == image_id: + favorite_users = pickle.loads(image.favorite_users) + if auth.user.username in favorite_users: + favorite_users.remove(auth.user.username) + db(db.image.id==image_id).update(favorite_users = pickle.dumps(favorite_users)) + users = db().select(db.auth_user.ALL) + for user in users: + if user.username == auth.user.username: + favorites = pickle.loads(user.favorites) + if image_id in favorites: + favorites.remove(image_id) + db(db.auth_user.username==auth.user.username).update(favorites = pickle.dumps(favorites)) + redirect(URL(r=request, f='image?image='+str(image_id))) + +def make_avatar(): + if "image" in request.vars.keys() and auth.is_logged_in(): image_id = int(request.vars["image"]) + else: redirect(URL(r=request,f='index')) + db(db.auth_user.username==auth.user.username).update(avatar = image_id) + redirect(URL(r=request,f='image?image='+str(image_id))) + + +def add_as_favorite(): + if "id" in request.vars.keys(): image_id = int(request.vars["id"]) + else: redirect(URL(r=request,f='index')) + if auth.is_logged_in(): + images = db().select(db.image.ALL) + for image in images: + if image.id == image_id: + favorite_users = pickle.loads(image.favorite_users) + if auth.user.username not in favorite_users: + favorite_users.append(auth.user.username) + db(db.image.id==image_id).update(favorite_users = pickle.dumps(favorite_users)) + users = db().select(db.auth_user.ALL) + for user in users: + if user.username == auth.user.username: + favorites = pickle.loads(user.favorites) + if image_id not in favorites: + favorites.append(image_id) + db(db.auth_user.username==auth.user.username).update(favorites = pickle.dumps(favorites)) + redirect(URL(r=request, f='image?image='+str(image_id))) def image(): @@ -83,8 +380,12 @@ def image(): redirect(URL(r=request, f='index')) if auth.is_logged_in(): if auth.user.username != real_image.creator: - views = int(real_image.views) + 1 + try: + views = int(real_image.views) + 1 + except: views = 1 db(db.image.title==real_image.title).update(views = views) + users = db().select(db.auth_user.ALL) + favorite_users = pickle.loads(real_image.favorite_users) form = SQLFORM(db.comment, fields = ['body']) if form.accepts(request.vars, session): db(db.comment.id==form.vars.id).update(author = auth.user.username) @@ -94,27 +395,57 @@ def image(): for comment in comments: if comment.image_id == real_image.id: image_comments.append(comment) - return dict(image = real_image, form= form,comments=image_comments) - + return dict(image = real_image, form= form,comments=image_comments,favorites = favorite_users,num_requests = get_requests()) + def testimage(): return db(db.image.title=="hellotest") + def user(): return dict(form=auth()) -def delete(): +@auth.requires_membership('admin') +def delete_comment(): + comment_id = int(request.vars["id"]) + if "image" in request.vars.keys(): + image_id = request.vars["image"] + else:image_id = None + if auth.is_logged_in(): + if auth.has_membership('admin'): + query=(db.comment.id==comment_id) + db(query).delete() + if image_id != None: + redirect(URL(r=request, f='image?image='+image_id)) + else: + redirect(URL(r=request, f='index')) + +def delete_image_confirmation(): images = db().select(db.image.ALL) image_id = int(request.vars["id"]) for image in images: if image.id == image_id: real_image = image if auth.is_logged_in(): - if auth.user.username == real_image.creator: + if auth.user.username == real_image.creator or auth.has_membership('admin'): + return dict(image = real_image,num_requests = get_requests()) + else: redirect(URL(r=request, f='index')) + +def delete_image(): + images = db().select(db.image.ALL) + image_id = int(request.vars["id"]) + for image in images: + if image.id == image_id: + real_image = image + if auth.is_logged_in(): + if auth.user.username == real_image.creator or auth.has_membership('admin'): query=(db.image.id==real_image.id) db(query).delete() redirect(URL(r=request, f='index')) - - + + def download(): return response.download(request, db) + + +def call(): return service() diff --git a/errors/127.0.0.1.2010-07-22.17-24-28.38ccea81-882e-4042-938b-efa671e3c7c8 b/errors/127.0.0.1.2010-07-22.17-24-28.38ccea81-882e-4042-938b-efa671e3c7c8 new file mode 100644 index 0000000..46f3b0b --- /dev/null +++ b/errors/127.0.0.1.2010-07-22.17-24-28.38ccea81-882e-4042-938b-efa671e3c7c8 @@ -0,0 +1,17 @@ +(dp1 +S'output' +p2 +S'' +sS'layer' +p3 +S'/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py' +p4 +sS'code' +p5 +S'import os\nfrom gluon.tools import Service\nservice=Service(globals())\n\ndef sort_by_views(L):\n if len(L) <= 1: return L\n return sort_by_views( [ lt for lt in L[1:] if lt.views < L[0].views ] ) + [ L[0] ] + sort_by_views( [ ge for ge in L[1:] if ge.views >= L[0].views ] )\n\ndef sort_by_id(L):\n if len(L) <= 1: return L\n return sort_by_id( [ lt for lt in L[1:] if lt.id < L[0].id ] ) + [ L[0] ] + sort_by_id( [ ge for ge in L[1:] if ge.id >= L[0].id ] )\n\n\ndef admin():\n import pdb\n pdb.set_trace()\n\ndef index():\n sorts = ["newest", "views"]\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n if "sort" in request.vars.keys(): sort = request.vars["sort"]\n else: sort = \'newest\'\n if sort not in sorts:\n sort = "newest"\n if "profile" in request.vars.keys(): profile = request.vars["profile"]\n else: profile = None\n table = []\n raw_images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n images = []\n c = 1\n for image in raw_images:\n if profile != None:\n if image.creator == profile:\n images.append(image)\n else: images.append(image)\n if sort == \'views\':\n images = sort_by_views(images)\n images.reverse()\n if sort == \'newest\':\n images.sort(cmp=lambda x,y:cmp(x.id,y.id))\n images.reverse()\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, sort=sort, profile=profile)\n\n\ndef upload():\n upload_key = request.vars["upload_key"]\n title = request.vars["title"]\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\',\'upload_key\'])\n if form.accepts(request.vars):\n keys = db().select(db.upload_key.ALL)\n for key in keys:\n if key.upload_key == upload_key:\n db(db.image.upload_key==upload_key).update(creator = key.user)\n query=(db.upload_key.upload_key==upload_key)\n db(query).delete()\n else:\n import logging\n logging.error("form not accepted")\n raise HTTP(400,"failed to upload")\n return dict(form=form)\n\n\n@service.xmlrpc\ndef login_remote(username,password):\n logged_in = auth.login_bare(username,password)\n if logged_in:\n db.upload_key.insert(user=username)\n keys = db().select(db.upload_key.ALL)\n for key in keys:\n if key.user == username:\n return str(key.upload_key)\n return False\n else: return False\n\n\ndef image():\n images = db().select(db.image.ALL)\n image_id = int(request.vars["image"])\n for image in images:\n if image.id == image_id:\n real_image = image\n title=real_image.title\n if real_image == None:\n redirect(URL(r=request, f=\'index\'))\n if auth.is_logged_in():\n if auth.user.username != real_image.creator:\n try:\n views = int(real_image.views) + 1\n except: views = 1\n db(db.image.title==real_image.title).update(views = views)\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.id==form.vars.id).update(author = auth.user.username)\n db(db.comment.id==form.vars.id).update(image_id = real_image.id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.id:\n image_comments.append(comment)\n return dict(image = real_image, form= form,comments=image_comments)\n\n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\n\ndef user(): \n return dict(form=auth())\n\n\ndef delete():\n images = db().select(db.image.ALL)\n image_id = int(request.vars["id"])\n for image in images:\n if image.id == image_id:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n\n\ndef download():\n return response.download(request, db)\n\n\ndef call(): return service()\n\nresponse._vars=response._caller(admin)\n' +p6 +sS'traceback' +p7 +S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py", line 147, in \n def call(): return service()\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/globals.py", line 96, in \n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py", line 16, in admin\n for user in users:\n File "/usr/lib/python2.6/bdb.py", line 50, in trace_dispatch\n return self.dispatch_return(frame, arg)\n File "/usr/lib/python2.6/bdb.py", line 84, in dispatch_return\n if self.quitting: raise BdbQuit\nBdbQuit\n' +p8 +s. \ No newline at end of file diff --git a/errors/127.0.0.1.2010-07-22.17-39-28.15a9379c-ac34-44ab-bc1e-364cd903b02a b/errors/127.0.0.1.2010-07-22.17-39-28.15a9379c-ac34-44ab-bc1e-364cd903b02a new file mode 100644 index 0000000..c391636 --- /dev/null +++ b/errors/127.0.0.1.2010-07-22.17-39-28.15a9379c-ac34-44ab-bc1e-364cd903b02a @@ -0,0 +1,17 @@ +(dp1 +S'output' +p2 +S'' +sS'layer' +p3 +S'/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py' +p4 +sS'code' +p5 +S'import os\nfrom gluon.tools import Service\nservice=Service(globals())\n\ndef sort_by_views(L):\n if len(L) <= 1: return L\n return sort_by_views( [ lt for lt in L[1:] if lt.views < L[0].views ] ) + [ L[0] ] + sort_by_views( [ ge for ge in L[1:] if ge.views >= L[0].views ] )\n\ndef sort_by_id(L):\n if len(L) <= 1: return L\n return sort_by_id( [ lt for lt in L[1:] if lt.id < L[0].id ] ) + [ L[0] ] + sort_by_id( [ ge for ge in L[1:] if ge.id >= L[0].id ] )\n\n\ndef admin():\n if "page" in request.vars.keys(): = page = int(request.vars["page"])-1\n else: page = 0\n users = db().select(db.auth_user.ALL)\n users_list=[]\n for user in users: users_list.append(users)\n users_on_page = users_list[page*20,(page+1)*20]\n return dict(users = users_on_page, page=page+1)\n\n\ndef index():\n sorts = ["newest", "views"]\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n if "sort" in request.vars.keys(): sort = request.vars["sort"]\n else: sort = \'newest\'\n if sort not in sorts:\n sort = "newest"\n if "profile" in request.vars.keys(): profile = request.vars["profile"]\n else: profile = None\n table = []\n raw_images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n images = []\n c = 1\n for image in raw_images:\n if profile != None:\n if image.creator == profile:\n images.append(image)\n else: images.append(image)\n if sort == \'views\':\n images = sort_by_views(images)\n images.reverse()\n if sort == \'newest\':\n images.sort(cmp=lambda x,y:cmp(x.id,y.id))\n images.reverse()\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, sort=sort, profile=profile)\n\n\ndef upload():\n upload_key = request.vars["upload_key"]\n title = request.vars["title"]\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\',\'upload_key\'])\n if form.accepts(request.vars):\n keys = db().select(db.upload_key.ALL)\n for key in keys:\n if key.upload_key == upload_key:\n db(db.image.upload_key==upload_key).update(creator = key.user)\n query=(db.upload_key.upload_key==upload_key)\n db(query).delete()\n else:\n import logging\n logging.error("form not accepted")\n raise HTTP(400,"failed to upload")\n return dict(form=form)\n\n\n@service.xmlrpc\ndef login_remote(username,password):\n logged_in = auth.login_bare(username,password)\n if logged_in:\n db.upload_key.insert(user=username)\n keys = db().select(db.upload_key.ALL)\n for key in keys:\n if key.user == username:\n return str(key.upload_key)\n return False\n else: return False\n\n\ndef image():\n images = db().select(db.image.ALL)\n image_id = int(request.vars["image"])\n for image in images:\n if image.id == image_id:\n real_image = image\n title=real_image.title\n if real_image == None:\n redirect(URL(r=request, f=\'index\'))\n if auth.is_logged_in():\n if auth.user.username != real_image.creator:\n try:\n views = int(real_image.views) + 1\n except: views = 1\n db(db.image.title==real_image.title).update(views = views)\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.id==form.vars.id).update(author = auth.user.username)\n db(db.comment.id==form.vars.id).update(image_id = real_image.id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.id:\n image_comments.append(comment)\n return dict(image = real_image, form= form,comments=image_comments)\n\n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\n\ndef user(): \n return dict(form=auth())\n\n\ndef delete():\n images = db().select(db.image.ALL)\n image_id = int(request.vars["id"])\n for image in images:\n if image.id == image_id:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n\n\ndef download():\n return response.download(request, db)\n\n\ndef call(): return service()\n\nresponse._vars=response._caller(admin)\n' +p6 +sS'traceback' +p7 +S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py", line 15\n if "page" in request.vars.keys(): = page = int(request.vars["page"])-1\n ^\nSyntaxError: invalid syntax\n' +p8 +s. \ No newline at end of file diff --git a/errors/127.0.0.1.2010-07-22.17-39-33.02930942-2e25-4966-a9e0-c6435a26a7b2 b/errors/127.0.0.1.2010-07-22.17-39-33.02930942-2e25-4966-a9e0-c6435a26a7b2 new file mode 100644 index 0000000..c391636 --- /dev/null +++ b/errors/127.0.0.1.2010-07-22.17-39-33.02930942-2e25-4966-a9e0-c6435a26a7b2 @@ -0,0 +1,17 @@ +(dp1 +S'output' +p2 +S'' +sS'layer' +p3 +S'/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py' +p4 +sS'code' +p5 +S'import os\nfrom gluon.tools import Service\nservice=Service(globals())\n\ndef sort_by_views(L):\n if len(L) <= 1: return L\n return sort_by_views( [ lt for lt in L[1:] if lt.views < L[0].views ] ) + [ L[0] ] + sort_by_views( [ ge for ge in L[1:] if ge.views >= L[0].views ] )\n\ndef sort_by_id(L):\n if len(L) <= 1: return L\n return sort_by_id( [ lt for lt in L[1:] if lt.id < L[0].id ] ) + [ L[0] ] + sort_by_id( [ ge for ge in L[1:] if ge.id >= L[0].id ] )\n\n\ndef admin():\n if "page" in request.vars.keys(): = page = int(request.vars["page"])-1\n else: page = 0\n users = db().select(db.auth_user.ALL)\n users_list=[]\n for user in users: users_list.append(users)\n users_on_page = users_list[page*20,(page+1)*20]\n return dict(users = users_on_page, page=page+1)\n\n\ndef index():\n sorts = ["newest", "views"]\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n if "sort" in request.vars.keys(): sort = request.vars["sort"]\n else: sort = \'newest\'\n if sort not in sorts:\n sort = "newest"\n if "profile" in request.vars.keys(): profile = request.vars["profile"]\n else: profile = None\n table = []\n raw_images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n images = []\n c = 1\n for image in raw_images:\n if profile != None:\n if image.creator == profile:\n images.append(image)\n else: images.append(image)\n if sort == \'views\':\n images = sort_by_views(images)\n images.reverse()\n if sort == \'newest\':\n images.sort(cmp=lambda x,y:cmp(x.id,y.id))\n images.reverse()\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, sort=sort, profile=profile)\n\n\ndef upload():\n upload_key = request.vars["upload_key"]\n title = request.vars["title"]\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\',\'upload_key\'])\n if form.accepts(request.vars):\n keys = db().select(db.upload_key.ALL)\n for key in keys:\n if key.upload_key == upload_key:\n db(db.image.upload_key==upload_key).update(creator = key.user)\n query=(db.upload_key.upload_key==upload_key)\n db(query).delete()\n else:\n import logging\n logging.error("form not accepted")\n raise HTTP(400,"failed to upload")\n return dict(form=form)\n\n\n@service.xmlrpc\ndef login_remote(username,password):\n logged_in = auth.login_bare(username,password)\n if logged_in:\n db.upload_key.insert(user=username)\n keys = db().select(db.upload_key.ALL)\n for key in keys:\n if key.user == username:\n return str(key.upload_key)\n return False\n else: return False\n\n\ndef image():\n images = db().select(db.image.ALL)\n image_id = int(request.vars["image"])\n for image in images:\n if image.id == image_id:\n real_image = image\n title=real_image.title\n if real_image == None:\n redirect(URL(r=request, f=\'index\'))\n if auth.is_logged_in():\n if auth.user.username != real_image.creator:\n try:\n views = int(real_image.views) + 1\n except: views = 1\n db(db.image.title==real_image.title).update(views = views)\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.id==form.vars.id).update(author = auth.user.username)\n db(db.comment.id==form.vars.id).update(image_id = real_image.id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.id:\n image_comments.append(comment)\n return dict(image = real_image, form= form,comments=image_comments)\n\n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\n\ndef user(): \n return dict(form=auth())\n\n\ndef delete():\n images = db().select(db.image.ALL)\n image_id = int(request.vars["id"])\n for image in images:\n if image.id == image_id:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n\n\ndef download():\n return response.download(request, db)\n\n\ndef call(): return service()\n\nresponse._vars=response._caller(admin)\n' +p6 +sS'traceback' +p7 +S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py", line 15\n if "page" in request.vars.keys(): = page = int(request.vars["page"])-1\n ^\nSyntaxError: invalid syntax\n' +p8 +s. \ No newline at end of file diff --git a/errors/127.0.0.1.2010-07-22.17-39-34.a6cec48e-f59f-4387-bd36-6748e816b769 b/errors/127.0.0.1.2010-07-22.17-39-34.a6cec48e-f59f-4387-bd36-6748e816b769 new file mode 100644 index 0000000..c391636 --- /dev/null +++ b/errors/127.0.0.1.2010-07-22.17-39-34.a6cec48e-f59f-4387-bd36-6748e816b769 @@ -0,0 +1,17 @@ +(dp1 +S'output' +p2 +S'' +sS'layer' +p3 +S'/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py' +p4 +sS'code' +p5 +S'import os\nfrom gluon.tools import Service\nservice=Service(globals())\n\ndef sort_by_views(L):\n if len(L) <= 1: return L\n return sort_by_views( [ lt for lt in L[1:] if lt.views < L[0].views ] ) + [ L[0] ] + sort_by_views( [ ge for ge in L[1:] if ge.views >= L[0].views ] )\n\ndef sort_by_id(L):\n if len(L) <= 1: return L\n return sort_by_id( [ lt for lt in L[1:] if lt.id < L[0].id ] ) + [ L[0] ] + sort_by_id( [ ge for ge in L[1:] if ge.id >= L[0].id ] )\n\n\ndef admin():\n if "page" in request.vars.keys(): = page = int(request.vars["page"])-1\n else: page = 0\n users = db().select(db.auth_user.ALL)\n users_list=[]\n for user in users: users_list.append(users)\n users_on_page = users_list[page*20,(page+1)*20]\n return dict(users = users_on_page, page=page+1)\n\n\ndef index():\n sorts = ["newest", "views"]\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n if "sort" in request.vars.keys(): sort = request.vars["sort"]\n else: sort = \'newest\'\n if sort not in sorts:\n sort = "newest"\n if "profile" in request.vars.keys(): profile = request.vars["profile"]\n else: profile = None\n table = []\n raw_images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n images = []\n c = 1\n for image in raw_images:\n if profile != None:\n if image.creator == profile:\n images.append(image)\n else: images.append(image)\n if sort == \'views\':\n images = sort_by_views(images)\n images.reverse()\n if sort == \'newest\':\n images.sort(cmp=lambda x,y:cmp(x.id,y.id))\n images.reverse()\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, sort=sort, profile=profile)\n\n\ndef upload():\n upload_key = request.vars["upload_key"]\n title = request.vars["title"]\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\',\'upload_key\'])\n if form.accepts(request.vars):\n keys = db().select(db.upload_key.ALL)\n for key in keys:\n if key.upload_key == upload_key:\n db(db.image.upload_key==upload_key).update(creator = key.user)\n query=(db.upload_key.upload_key==upload_key)\n db(query).delete()\n else:\n import logging\n logging.error("form not accepted")\n raise HTTP(400,"failed to upload")\n return dict(form=form)\n\n\n@service.xmlrpc\ndef login_remote(username,password):\n logged_in = auth.login_bare(username,password)\n if logged_in:\n db.upload_key.insert(user=username)\n keys = db().select(db.upload_key.ALL)\n for key in keys:\n if key.user == username:\n return str(key.upload_key)\n return False\n else: return False\n\n\ndef image():\n images = db().select(db.image.ALL)\n image_id = int(request.vars["image"])\n for image in images:\n if image.id == image_id:\n real_image = image\n title=real_image.title\n if real_image == None:\n redirect(URL(r=request, f=\'index\'))\n if auth.is_logged_in():\n if auth.user.username != real_image.creator:\n try:\n views = int(real_image.views) + 1\n except: views = 1\n db(db.image.title==real_image.title).update(views = views)\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.id==form.vars.id).update(author = auth.user.username)\n db(db.comment.id==form.vars.id).update(image_id = real_image.id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.id:\n image_comments.append(comment)\n return dict(image = real_image, form= form,comments=image_comments)\n\n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\n\ndef user(): \n return dict(form=auth())\n\n\ndef delete():\n images = db().select(db.image.ALL)\n image_id = int(request.vars["id"])\n for image in images:\n if image.id == image_id:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n\n\ndef download():\n return response.download(request, db)\n\n\ndef call(): return service()\n\nresponse._vars=response._caller(admin)\n' +p6 +sS'traceback' +p7 +S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py", line 15\n if "page" in request.vars.keys(): = page = int(request.vars["page"])-1\n ^\nSyntaxError: invalid syntax\n' +p8 +s. \ No newline at end of file diff --git a/errors/127.0.0.1.2010-07-22.17-39-51.fafceef8-b7b5-4510-ad5e-f08f67eca4ed b/errors/127.0.0.1.2010-07-22.17-39-51.fafceef8-b7b5-4510-ad5e-f08f67eca4ed new file mode 100644 index 0000000..c391636 --- /dev/null +++ b/errors/127.0.0.1.2010-07-22.17-39-51.fafceef8-b7b5-4510-ad5e-f08f67eca4ed @@ -0,0 +1,17 @@ +(dp1 +S'output' +p2 +S'' +sS'layer' +p3 +S'/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py' +p4 +sS'code' +p5 +S'import os\nfrom gluon.tools import Service\nservice=Service(globals())\n\ndef sort_by_views(L):\n if len(L) <= 1: return L\n return sort_by_views( [ lt for lt in L[1:] if lt.views < L[0].views ] ) + [ L[0] ] + sort_by_views( [ ge for ge in L[1:] if ge.views >= L[0].views ] )\n\ndef sort_by_id(L):\n if len(L) <= 1: return L\n return sort_by_id( [ lt for lt in L[1:] if lt.id < L[0].id ] ) + [ L[0] ] + sort_by_id( [ ge for ge in L[1:] if ge.id >= L[0].id ] )\n\n\ndef admin():\n if "page" in request.vars.keys(): = page = int(request.vars["page"])-1\n else: page = 0\n users = db().select(db.auth_user.ALL)\n users_list=[]\n for user in users: users_list.append(users)\n users_on_page = users_list[page*20,(page+1)*20]\n return dict(users = users_on_page, page=page+1)\n\n\ndef index():\n sorts = ["newest", "views"]\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n if "sort" in request.vars.keys(): sort = request.vars["sort"]\n else: sort = \'newest\'\n if sort not in sorts:\n sort = "newest"\n if "profile" in request.vars.keys(): profile = request.vars["profile"]\n else: profile = None\n table = []\n raw_images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n images = []\n c = 1\n for image in raw_images:\n if profile != None:\n if image.creator == profile:\n images.append(image)\n else: images.append(image)\n if sort == \'views\':\n images = sort_by_views(images)\n images.reverse()\n if sort == \'newest\':\n images.sort(cmp=lambda x,y:cmp(x.id,y.id))\n images.reverse()\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, sort=sort, profile=profile)\n\n\ndef upload():\n upload_key = request.vars["upload_key"]\n title = request.vars["title"]\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\',\'upload_key\'])\n if form.accepts(request.vars):\n keys = db().select(db.upload_key.ALL)\n for key in keys:\n if key.upload_key == upload_key:\n db(db.image.upload_key==upload_key).update(creator = key.user)\n query=(db.upload_key.upload_key==upload_key)\n db(query).delete()\n else:\n import logging\n logging.error("form not accepted")\n raise HTTP(400,"failed to upload")\n return dict(form=form)\n\n\n@service.xmlrpc\ndef login_remote(username,password):\n logged_in = auth.login_bare(username,password)\n if logged_in:\n db.upload_key.insert(user=username)\n keys = db().select(db.upload_key.ALL)\n for key in keys:\n if key.user == username:\n return str(key.upload_key)\n return False\n else: return False\n\n\ndef image():\n images = db().select(db.image.ALL)\n image_id = int(request.vars["image"])\n for image in images:\n if image.id == image_id:\n real_image = image\n title=real_image.title\n if real_image == None:\n redirect(URL(r=request, f=\'index\'))\n if auth.is_logged_in():\n if auth.user.username != real_image.creator:\n try:\n views = int(real_image.views) + 1\n except: views = 1\n db(db.image.title==real_image.title).update(views = views)\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.id==form.vars.id).update(author = auth.user.username)\n db(db.comment.id==form.vars.id).update(image_id = real_image.id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.id:\n image_comments.append(comment)\n return dict(image = real_image, form= form,comments=image_comments)\n\n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\n\ndef user(): \n return dict(form=auth())\n\n\ndef delete():\n images = db().select(db.image.ALL)\n image_id = int(request.vars["id"])\n for image in images:\n if image.id == image_id:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator:\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n\n\ndef download():\n return response.download(request, db)\n\n\ndef call(): return service()\n\nresponse._vars=response._caller(admin)\n' +p6 +sS'traceback' +p7 +S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/restricted.py", line 176, in restricted\n ccode = compile2(code,layer)\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/restricted.py", line 163, in compile2\n return compile(code.rstrip().replace(\'\\r\\n\',\'\\n\')+\'\\n\', layer, \'exec\')\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py", line 15\n if "page" in request.vars.keys(): = page = int(request.vars["page"])-1\n ^\nSyntaxError: invalid syntax\n' +p8 +s. \ No newline at end of file diff --git a/errors/127.0.0.1.2010-07-26.20-48-09.a4d32305-5768-49d6-8707-d1030c2cbcfb b/errors/127.0.0.1.2010-07-26.20-48-09.a4d32305-5768-49d6-8707-d1030c2cbcfb new file mode 100644 index 0000000..843af4b --- /dev/null +++ b/errors/127.0.0.1.2010-07-26.20-48-09.a4d32305-5768-49d6-8707-d1030c2cbcfb @@ -0,0 +1,17 @@ +(dp1 +S'output' +p2 +S'' +sS'layer' +p3 +S'/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py' +p4 +sS'code' +p5 +S'import os\nimport pickle\nfrom gluon.tools import Service\nservice=Service(globals())\n\n@auth.requires_membership(\'admin\')\ndef admin():\n if "page" in request.vars.keys(): page = int(request.vars["page"])-1\n else: page = 0\n users = db().select(db.auth_user.ALL)\n users_list=[]\n for user in users:\n users_list.append(user)\n users_list.sort(cmp=lambda x,y:cmp(x.username.lower(),y.username.lower()))\n users_on_page = users_list[page*10:(page+1)*10]\n pages = len(users_list) / 10\n if len(users_list)%10 > 0: pages += 1\n return dict(users = users_on_page, page=page+1,pages=pages)\n\n@auth.requires_membership(\'admin\')\ndef make_admin():\n if "page" in request.vars.keys(): page = int(request.vars["page"])\n else: page = 1\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f="admin?page="+str(page)))\n auth.add_membership(\'admin\',user)\n redirect(URL(r=request, f="admin?page="+str(page)))\n\n@auth.requires_membership(\'admin\')\ndef remove_admin():\n if "page" in request.vars.keys(): page = int(request.vars["page"])\n else: page = 1\n if "user" in request.vars.keys(): user = request.vars["user"]\n else: redirect(URL(r=request, f="admin?page="+str(page)))\n auth.del_membership(auth.id_group(\'admin\'),user)\n redirect(URL(r=request, f="admin?page="+str(page)))\n\n@auth.requires_membership(\'admin\')\ndef delete_user():\n if "page" in request.vars.keys(): page = int(request.vars["page"])\n else: page = 1\n if "user" in request.vars.keys(): user_to_delete = request.vars["user"]\n else: redirect(URL(r=request, f="admin?page="+str(page)))\n query=(db.auth_user.username==user_to_delete)\n db(query).delete()\n images = db().select(db.image.ALL)\n for image in images:\n if image.creator == user_to_delete:\n query=(db.image.id==image.id)\n db(query).delete()\n comments = db().select(db.comment.ALL)\n for comment in comments:\n if comment.author == user_to_delete:\n query=(db.comment.id==comment.id)\n db(query).delete()\n redirect(URL(r=request, f="admin?page="+str(page))) \n \n\n\ndef index():\n import pdb\n pdb.set_trace()\n sorts = ["newest", "views"]\n if "page" in request.vars.keys(): page = int(request.vars["page"]) - 1\n else: page = 0\n if "sort" in request.vars.keys(): sort = request.vars["sort"]\n else: sort = \'newest\'\n if sort not in sorts:\n sort = "newest"\n if "profile" in request.vars.keys(): profile = request.vars["profile"]\n else: profile = None\n if "favorites" in request.vars.keys(): show_favorites = bool(request.vars["favorites"])\n else: show_favorites = False\n profile_user = None\n favorites = None\n if profile != None:\n users = db().select(db.auth_user.ALL)\n for user in users:\n if user.username == profile:\n profile_user = user\n favorites = pickle.loads(profile_user.favorites)\n table = []\n raw_images = db().select(db.image.ALL)\n i = 0\n row = []\n count = 0\n images = []\n c = 1\n for image in raw_images:\n if profile != None:\n if show_favorites:\n if image.id in favorites:\n images.append(image)\n if not show_favorites:\n if image.creator == profile:\n images.append(image)\n else: images.append(image)\n if sort == \'views\':\n images.sort(cmp=lambda x,y:cmp(float(x.views),float(y.views)))\n images.reverse()\n if sort == \'newest\':\n images.sort(cmp=lambda x,y:cmp(float(x.id),float(y.id)))\n images.reverse()\n for image in images:\n if count >= page * 12 and page*12+12 > count:\n if i == 4:\n table.append(row)\n row = []\n i = 0\n i += 1\n row.append(image)\n count += 1\n table.append(row)\n pages = count / 12\n if count%12 > 0: pages += 1\n page += 1\n return dict(images=table, pages=pages, page=page, sort=sort, profile=profile_user, show_favorites=show_favorites)\n\n\ndef profile():\n if "profile" in request.vars.keys(): profile = request.vars["profile"]\n else: redirect(URL(r=request,f=\'index\'))\n users = db().select(db.auth_user.ALL)\n for user in users:\n if user.username == profile:\n profile_user = user\n favorite_ids = pickle.loads(profile_user.favorites)\n raw_images = db().select(db.image.ALL)\n images = []\n favorites = []\n for image in raw_images:\n if image.creator == profile:\n images.append(image)\n if image.id in favorite_ids:\n favorites.append(image)\n favorites_table = []\n images_table = []\n row = []\n c = 0\n i = 0\n for image in images:\n if c < 2:\n row.append(image)\n i += 1\n if i == 4:\n images_table.append(row)\n c += 1\n i = 0\n row = []\n if len(images) < 8 and len(images)%4 != 0:\n images_table.append(row)\n row = []\n c = 0\n i = 0\n for image in favorites:\n if c < 2:\n row.append(image)\n i += 1\n if i == 4:\n favorites_table.append(row)\n c += 1\n i = 0\n row = []\n if len(favorites) < 8 and len(favorites)%4 != 0:\n favorites_table.append(row)\n return dict(profile = profile_user, images = images_table, favorites = favorites_table)\n\ndef respond_to_request():\n if "user" in request.vars.keys() and auth.is_logged_in(): username = request.vars["user"]\n else: redirect(URL(r=request,f=\'index\'))\n if "response" in request.vars.keys(): response = bool(request.vars["user"])\n else: redirect(URL(r=request,f=\'index\'))\n users = db().select(db.auth_user.ALL)\n current_user = None\n user_to_add = None\n for user in users:\n if user.username == auth.user.username:\n current_user = user\n if user.username == username:\n user_to_add = user\n if user_to_add == None or current_user == None:\n redirect(URL(r=request,f=\'index\'))\n requests = pickle.loads(current_user.requests)\n real_request = None\n for r in requests:\n if r[1] == user_to_add.username:\n real_request = r\n if real_request == None:redirect(URL(r=request,f=\'index\'))\n requests.remove(real_request)\n db(db.auth_user.username==current_user.username).update(requests = pickle.dumps(requests))\n if response:\n friends = pickle.loads(current_user.friends)\n friends.append(user_to_add.username)\n db(db.auth_user.username==current_user.username).update(friends = pickle.dumps(friends))\n friends = pickle.loads(user_to_add.friends)\n friends.append(current_user.username)\n db(db.auth_user.username==user_to_add.username).update(friends = pickle.dumps(friends))\n redirect(URL(r=request,f=\'requests\'))\n \n \n \n \ndef add_as_friend():\n if "user" in request.vars.keys() and auth.is_logged_in(): username = request.vars["user"]\n else: redirect(URL(r=request,f=\'index\'))\n users = db().select(db.auth_user.ALL)\n for user in users:\n if user.username == username:\n user_to_add = user\n requests = pickle.loads(user_to_add.requests)\n requests.append((\'friend\', auth.user.username))\n db(db.auth_user.username==user_to_add.username).update(requests = pickle.dumps(requests))\n redirect(URL(r=request,f=\'profile?profile=\'+username))\n\n\ndef requests():\n if auth.is_logged_in(): user = auth.user\n else: redirect(URL(r=request,f=\'index\'))\n users = db().select(db.auth_user.ALL)\n for user in users:\n if user.username == auth.user.username:\n current_user = user\n requests = pickle.loads(current_user.requests)\n return dict(requests = requests)\n\n\ndef upload():\n upload_key = request.vars["upload_key"]\n title = request.vars["title"]\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\',\'small_image\', \'description\',\'upload_key\'])\n if form.accepts(request.vars):\n keys = db().select(db.upload_key.ALL)\n for key in keys:\n if key.upload_key == upload_key:\n user = key.user\n db(db.image.upload_key==upload_key).update(creator = user)\n query=(db.upload_key.upload_key==upload_key)\n db(query).delete()\n images = db().select(db.image.ALL)\n for image in images:\n if image.id == form.vars.id:\n real_image = image\n images = db().select(db.image.ALL)\n for image in images:\n if image.creator == user and image.title.lower() == form.vars.title.lower() and image.upload_key != upload_key:\n db(db.image.upload_key==upload_key).update(views = image.views)\n query=(db.image.id==image.id)\n db(query).delete()\n else:\n import logging\n logging.error("form not accepted")\n raise HTTP(400,"failed to upload")\n return dict(form=form)\n\n\n@service.xmlrpc\ndef login_remote(username,password):\n logged_in = auth.login_bare(username,password)\n if logged_in:\n db.upload_key.insert(user=username)\n keys = db().select(db.upload_key.ALL)\n for key in keys:\n if key.user == username:\n return str(key.upload_key)\n return False\n else: return False\n\n"""def upload():\n upload_key = request.vars["upload_key"]\n title = request.vars["title"]\n form = SQLFORM(db.image, fields = [\'title\', \'file\', \'newimage\', \'description\',\'upload_key\'])\n if form.accepts(request.vars):\n keys = db().select(db.upload_key.ALL)\n for key in keys:\n if key.upload_key == upload_key:\n db(db.image.upload_key==upload_key).update(creator = key.user)\n query=(db.upload_key.upload_key==upload_key)\n db(query).delete()\n else:\n import logging\n logging.error("form not accepted")\n raise HTTP(400,"failed to upload")\n return dict(form=form)\n\n\n@service.xmlrpc\ndef login_remote(username,password):\n logged_in = auth.login_bare(username,password)\n if logged_in:\n db.upload_key.insert(user=username)\n keys = db().select(db.upload_key.ALL)\n for key in keys:\n if key.user == username:\n return str(key.upload_key)\n return False\n else: return False"""\n\n\ndef remove_as_favorite():\n if "id" in request.vars.keys(): image_id = int(request.vars["id"])\n else: redirect(URL(r=request,f=\'index\'))\n if auth.is_logged_in():\n images = db().select(db.image.ALL)\n for image in images:\n if image.id == image_id:\n favorite_users = pickle.loads(image.favorite_users)\n if auth.user.username in favorite_users:\n favorite_users.remove(auth.user.username)\n db(db.image.id==image_id).update(favorite_users = pickle.dumps(favorite_users))\n users = db().select(db.auth_user.ALL)\n for user in users:\n if user.username == auth.user.username:\n favorites = pickle.loads(user.favorites)\n if image_id in favorites:\n favorites.remove(image_id)\n db(db.auth_user.username==auth.user.username).update(favorites = pickle.dumps(favorites))\n redirect(URL(r=request, f=\'image?image=\'+str(image_id)))\n\n\ndef add_as_favorite():\n if "id" in request.vars.keys(): image_id = int(request.vars["id"])\n else: redirect(URL(r=request,f=\'index\'))\n if auth.is_logged_in():\n images = db().select(db.image.ALL)\n for image in images:\n if image.id == image_id:\n favorite_users = pickle.loads(image.favorite_users)\n if auth.user.username not in favorite_users:\n favorite_users.append(auth.user.username)\n db(db.image.id==image_id).update(favorite_users = pickle.dumps(favorite_users))\n users = db().select(db.auth_user.ALL)\n for user in users:\n if user.username == auth.user.username:\n favorites = pickle.loads(user.favorites)\n if image_id not in favorites:\n favorites.append(image_id)\n db(db.auth_user.username==auth.user.username).update(favorites = pickle.dumps(favorites))\n redirect(URL(r=request, f=\'image?image=\'+str(image_id)))\n\n\ndef image():\n images = db().select(db.image.ALL)\n image_id = int(request.vars["image"])\n for image in images:\n if image.id == image_id:\n real_image = image\n title=real_image.title\n if real_image == None:\n redirect(URL(r=request, f=\'index\'))\n if auth.is_logged_in():\n if auth.user.username != real_image.creator:\n try:\n views = int(real_image.views) + 1\n except: views = 1\n db(db.image.title==real_image.title).update(views = views)\n users = db().select(db.auth_user.ALL)\n favorite_users = pickle.loads(real_image.favorite_users)\n form = SQLFORM(db.comment, fields = [\'body\'])\n if form.accepts(request.vars, session):\n db(db.comment.id==form.vars.id).update(author = auth.user.username)\n db(db.comment.id==form.vars.id).update(image_id = real_image.id)\n comments=db().select(db.comment.ALL)\n image_comments = []\n for comment in comments:\n if comment.image_id == real_image.id:\n image_comments.append(comment)\n return dict(image = real_image, form= form,comments=image_comments,favorites = favorite_users)\n\n \ndef testimage():\n\treturn db(db.image.title=="hellotest")\n\n\ndef user(): \n return dict(form=auth())\n\n@auth.requires_membership(\'admin\')\ndef delete_comment():\n comment_id = int(request.vars["id"])\n if "image" in request.vars.keys():\n image_id = request.vars["image"]\n else:image_id = None\n if auth.is_logged_in():\n if auth.has_membership(\'admin\'):\n query=(db.comment.id==comment_id)\n db(query).delete()\n if image_id != None:\n redirect(URL(r=request, f=\'image?image=\'+image_id))\n else:\n redirect(URL(r=request, f=\'index\'))\n\ndef delete_image():\n images = db().select(db.image.ALL)\n image_id = int(request.vars["id"])\n for image in images:\n if image.id == image_id:\n real_image = image\n if auth.is_logged_in():\n if auth.user.username == real_image.creator or auth.has_membership(\'admin\'):\n query=(db.image.id==real_image.id)\n db(query).delete()\n redirect(URL(r=request, f=\'index\')) \n\n\ndef download():\n return response.download(request, db)\n\n\ndef call(): return service()\n\nresponse._vars=response._caller(index)\n' +p6 +sS'traceback' +p7 +S'Traceback (most recent call last):\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/restricted.py", line 178, in restricted\n exec ccode in environment\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py", line 411, in \n if image_id != None:\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/gluon/globals.py", line 96, in \n self._caller = lambda f: f()\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py", line 63, in index\n else: page = 0\n File "/home/jboisture/Desktop/google_appengine/turtleartsite/applications/turtlesite/controllers/default.py", line 63, in index\n else: page = 0\n File "/usr/lib/python2.6/bdb.py", line 46, in trace_dispatch\n return self.dispatch_line(frame)\n File "/usr/lib/python2.6/bdb.py", line 65, in dispatch_line\n if self.quitting: raise BdbQuit\nBdbQuit\n' +p8 +s. \ No newline at end of file diff --git a/models/db.py b/models/db.py index 6ce4922..a7c7732 100644 --- a/models/db.py +++ b/models/db.py @@ -1,22 +1,53 @@ +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"), IS_NOT_IN_DB(db, 'image.title', error_message="Title is already taken")]), + 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'), - 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('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( @@ -27,7 +58,11 @@ auth_table = db.define_table( readable=False, label='Password'), Field('registration_key', length=128, default= "", writable=False, readable=False), - Field('reset_password_key', length=128, default="",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() diff --git a/sessions/127-0-0-1-540fd07d-c80c-470e-908f-a8669bd5cee9 b/sessions/127-0-0-1-540fd07d-c80c-470e-908f-a8669bd5cee9 new file mode 100644 index 0000000..b3d9e6e --- /dev/null +++ b/sessions/127-0-0-1-540fd07d-c80c-470e-908f-a8669bd5cee9 @@ -0,0 +1,4 @@ +(dp1 +S'auth' +p2 +Ns. \ No newline at end of file diff --git a/sessions/127-0-0-1-e7f60399-646e-42e9-a642-b5332e33f7e1 b/sessions/127-0-0-1-e7f60399-646e-42e9-a642-b5332e33f7e1 new file mode 100644 index 0000000..44e977f --- /dev/null +++ b/sessions/127-0-0-1-e7f60399-646e-42e9-a642-b5332e33f7e1 @@ -0,0 +1,85 @@ +(dp1 +S'flash' +p2 +NsS'auth' +p3 +ccopy_reg +_reconstructor +p4 +(cgluon.storage +Storage +p5 +c__builtin__ +dict +p6 +(dp7 +S'expiration' +p8 +I3600 +sS'last_visit' +p9 +cdatetime +datetime +p10 +(S'\x07\xda\x07\x16\x11\x19\x08\x068\xa1' +tRp11 +sS'user' +p12 +g4 +(g5 +g6 +(dp13 +S'username' +p14 +S'jboisture' +p15 +sS'reset_password_key' +p16 +S'' +sS'registration_key' +p17 +S'' +sS'password' +p18 +S'098f6bcd4621d373cade4e832627b4f6' +p19 +sS'email' +p20 +S'jamieboisture@gmail.com' +p21 +sS'id' +p22 +I1 +stRp23 +(dp24 +g14 +g15 +sg16 +S'' +sg17 +S'' +sg18 +g19 +sg20 +g21 +sg22 +I1 +sbstRp25 +(dp26 +g8 +I3600 +sg9 +g11 +sg12 +g23 +sbsS'_formkey[login]' +p27 +S'5bd430d4-6c03-4f06-a920-ac3b3d2e814e' +p28 +sS'_formkey[register]' +p29 +S'fe152f9b-2d6d-440a-a46e-e97683d1a1f4' +p30 +s.7683d1a1f4' +p31 +s. \ No newline at end of file diff --git a/views/default/_base.html b/views/default/_base.html index a277d77..061186f 100644 --- a/views/default/_base.html +++ b/views/default/_base.html @@ -7,10 +7,16 @@