AlterEgo
old web2py blog
Useful Links
List all entries
Book
Interactive Examples
F.A.Q.
Free Applications
Plugins
Recipes
Demo of Admin Interface
Semantic web extension
Some of the information here may be outdated, please check the book instead
Edit page
Title:
Security Code:
Body:
(use
this
wiki markup)
web2py runs without tweaks on the Google App Engine, including most of the ORM API, but there are a few observations. ##How to run *** get the version in trunk *** There is already an app.yaml, you just need to edit it to change the name of the app which defaults to web2py Instead of db=SQLDB(....) you need to use from gluon.contrib.gq import GQLDB db=GQLDB() session.connect(request,response,db=db) the first two lines tell web2py use bigtable and the last line tells web2py to store sessions in there. You can use the native google API for use authentication but we suggest that use do something like try: from google.appengine.api import users except: # user some other form of authentication and store the user's email in # session.user_email and name in session.user_name # for example use http://mdp.cti.depaul.edu/cas else: user = users.get_current_user() if user: session.user_email,session.user_name=user.email(),user.nickname() else: session.user_email,session.user_name=None,None and you only use session.user_email and session.user_name in the rest of the code. This will ensure portability outside GAE. In order to insure portability, db.UserProperty is not supported in web2py. It would make your web2py not portable to systems other than the GAE. What you should do is make a SQLField('user',requires=IS_EMAIL()) instead. This would make your model portable. Moreover the value of the field would be clearly represented as an email. You can then use these API [](http://code.google.com/appengine/docs/users/userobjects.html) to convert back and forth between the email representation and the Google User object. ##What does not work? Complex queries do not work, including all type of JOINs, NOT, OR, IN (belongs) and LIKE. `IS_NOT_IN_DB` does not work `IS_IN_DB` may or may not work depending on the complexity of the arguments File upload does not work because needs a file buffer to allow streaming in. Normally web2py executes each request in its own transaction, commits on response or rolls back on exception. This transaction safety is supported on the GAE. To quote their docs "The datastore imposes several restrictions on what can be done inside a single transaction". In fact they provide transactions only on a single object so we did not bother to support it. `cache.ram` works only within the same request `cache.disk` does not work because GAE does not support writing on the filesystem. Tickets are not saved for the same reason above but they should be logged by the GAE. ##About admin If you create admin/models/0.py and write in it: from gluon.contrib.gq import GQLDB db=GQLDB() session.connect(request,response,db=db) then admin will work on the GAE but in read only mode because the GAE does now allow writing on the filesystem.
© 2008-2010 by Massimo Di Pierro - All rights reserved - Powered by
web2py
- design derived from a theme by
the earlybird
The content of this book is released under the
Artistic License 2.0
- Modified content cannot be reproduced.