def _generate_session_id(self): while True: rand = os.urandom(16) now = time.time() secret_key = self._config.secret_key session_id = sha1("%s%s%s%s" %(rand, now, utils.safestr(http.request.ip), secret_key)) session_id = session_id.hexdigest() if session_id not in self.store: break return session_id
def wsgifunc(self, *middleware): """Returns a WSGI-compatible function for this application.""" def peep(iterator): try: firstchunk = iterator.next() except StopIteration: firstchunk = '' return itertools.chain([firstchunk], iterator) def is_generator(x): return x and hasattr(x, 'next') def wsgi(env, start_resp): # clear threadlocal to avoid inteference of previous requests self._cleanup() self.load(env) try: # allow uppercase methods only if http.request.method.upper() != http.request.method: raise http.nomethod() result = self.handle_with_processors() if isinstance(result, tuple) and len(result)==2: content_type, result = result[0], [result[1]] http.header("Content-type", content_type, unique=True) elif is_generator(result): result = peep(result) else: result = [result] except http.HTTPError, e: result = [e.data] result = utils.safestr(iter(result)) status, headers = http.request.status, http.request.headers start_resp(status, headers) def cleanup(): self._cleanup() yield '' # force this function to be a generator return itertools.chain(result, cleanup())