Example #1
0
 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
Example #2
0
    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())