Changeset 7:9bf3828266dd in livinglogic.python.nightshade

Show
Ignore:
Timestamp:
05/08/06 16:35:14 (13 years ago)
Author:
Walter Doerwald <walter@…>
Branch:
default
Message:

Add an expires decorator.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • nightshade.py

    r6 r7  
    132132    wrapper.__dict__.update(func.__dict__) 
    133133    return wrapper 
     134 
     135 
     136def expires(timedelta=None, **timedeltaargs): 
     137    """ 
     138    <function>expires</function> can be used as a decorator with arguments for 
     139    CherryPy functions. The returned wrapper function will add an <z>Expires</z> 
     140    header to the response. You can pass the timespan either via <arg>timedelta</arg> 
     141    (which must be a <class>datetime.timedelta</class> object), or via 
     142    <arg>timedeltaargs</arg> (which will be used as keyword arguments for creating 
     143    a <class>datetime.timedelta</class> object). 
     144    """ 
     145    if timedelta is None: 
     146        timedelta = datetime.timedelta(**timedeltaargs) 
     147    def decorator(func): 
     148        cache = {} 
     149        def wrapper(*args, **kwargs): 
     150            # Don't cache error responses and POST request 
     151            if cherrypy.request.method != "GET" or (cherrypy.response.status is not None and cherrypy.response.status != 200): 
     152                return func(*args, **kwargs) 
     153            expires = datetime.datetime.utcnow() + timedelta 
     154            cherrypy.response.headers["Expires"] = httpdate(expires) 
     155            return func(*args, **kwargs) 
     156        wrapper.__name__ = func.__name__ 
     157        wrapper.__doc__ = func.__doc__ 
     158        wrapper.__dict__.update(func.__dict__) 
     159        return wrapper 
     160    return decorator 
    134161 
    135162