Hello everyone,

First of all, thank you Massimo and all the contributors for this
great framework and all the documentation and support.
I am kind of new on web2py and i am trying to use cache on Google App
Engine.

Thanks to Robin's contribution (gae_memcache.py), i can use cache.ram
on GAE but keep on using the same syntax cache.ram).
Yet, i tried to cache some database request and to clear cache when
the user updated the database with new or edited record.

Here is the code i used (as i am quite also new to Python, let me know
if some part of my code is not "Pythonic" or "Web2py-ic").

Caching the request (i call the same function for 3 databases):

def getdata(database, bHidden = False):
    """ General query for getting records in a database """
    #check if hidden records are wanted
    if bHidden:
        query = (db[database].id>0)&(db[database].hidden==False)
    else:
        query = (db[database].id>0)
    #query data and returns a dict
    records = db(query).select(orderby=db[database].position,
cache=(cache.ram,3600))
    return dict([(row.id, row) for row in records])

When user adds a new record (for example), i want to clear the cache :

def new_record():
    """ Ajax call for creating a record and returning the new id """
    #Get the parameters posted by the script
    database = request.vars.db
    #Update database
    id = db[database].insert()
    #Clear cache
    cache.ram.clear(db._uri + '.*FROM ' + database + ' WHERE.*')
    return int(id)

This works well with sqlite database but doesn't work with GAE.
(of course, because, there is no "clear" method in gae_memcache.py)
Actually, there is no 'storage' attribute when using memcache on GAE.

Here are my questions :
1. Is there any method or attribute similar to 'storage' for memcache
on GAE ? And could it be implemented in gae_memcache.py ?
2. Am i doing this all wrong ? Should i better cache each dict
individually with memcache ?
3. Should i handle this in a completely different way ?

Let me know i am not clear enough,
Thanks for your help,

Regards,

--
Jérémie

Reply via email to