Merge branch 'master' into python3
authorFredrik Tolf <fredrik@dolda2000.com>
Sun, 5 Feb 2012 16:00:30 +0000 (17:00 +0100)
committerFredrik Tolf <fredrik@dolda2000.com>
Sun, 5 Feb 2012 16:00:30 +0000 (17:00 +0100)
Conflicts:
wrw/resp.py
wrw/session.py

1  2 
wrw/dispatch.py
wrw/resp.py
wrw/session.py
wrw/util.py

diff --combined wrw/dispatch.py
@@@ -1,3 -1,6 +1,6 @@@
 -import env
+ import sys, traceback
++from . import env
  __all__ = ["restart"]
  
  class restart(Exception):
@@@ -20,17 -23,17 +23,17 @@@ class iterproxy(object)
          self.bk = real
          self.bki = iter(real)
          self._next = [None]
 -        self.next()
 +        self.__next__()
  
      def __iter__(self):
          return self
  
 -    def next(self):
 +    def __next__(self):
          if self._next is None:
              raise StopIteration()
          ret = self._next[0]
          try:
 -            self._next[:] = [self.bki.next()]
 +            self._next[:] = [self.bki.__next__()]
          except StopIteration:
              self._next = None
          return ret
          if hasattr(self.bk, "close"):
              self.bk.close()
  
 -    import resp
+ def defaulterror(req, excinfo):
++    from . import resp
+     traceback.print_exception(*excinfo)
+     raise resp.httperror(500)
+ def wraphandler(handler, excinfo):
+     def wrapped(req):
+         return handler(req, excinfo)
+     return wrapped
+ errorhandler = env.var(defaulterror)
  def handle(req, startreq, handler):
+     eh = errorhandler.val
      try:
          resp = [""]
          while True:
              try:
                  resp = iterproxy(handler(req))
                  break
 -            except restart, i:
 +            except restart as i:
                  handler = i.handle
 -            except Exception, i:
++            except Exception as i:
+                 if eh is None:
+                     raise
+                 handler = wraphandler(eh, sys.exc_info())
+                 eh = None
          req.commit(startreq)
          return resp
      finally:
diff --combined wrw/resp.py
@@@ -1,4 -1,4 +1,4 @@@
- from . import dispatch, proto
 -import dispatch, proto, env
++from . import dispatch, proto, env
  
  __all__ = ["skeleton", "skelfor", "setskel", "usererror"]
  
@@@ -27,10 -27,10 +27,10 @@@ class skeleton(object)
      def message(self, message, detail):
          return self.page(message, """<h1>%s</h1>\n<p>%s</p>\n""" % (message, detail))
  
- defskel = skeleton()
+ defskel = env.var(skeleton())
  
  def getskel(req):
-     return [defskel]
+     return [defskel.val]
  def skelfor(req):
      return req.item(getskel)[0]
  def setskel(req, skel):
@@@ -38,7 -38,7 +38,7 @@@
  
  class usererror(dispatch.restart):
      def __init__(self, message, detail):
 -        super(usererror, self).__init__()
 +        super().__init__()
          self.message = message
          self.detail = detail
  
@@@ -46,9 -46,9 +46,9 @@@
          return [skelfor(req).error(self.message, self.detail)]
  
  class message(dispatch.restart):
 -    def __init__(self, msg, detail):
 -        super(message, self).__init__()
 -        self.message = msg
 +    def __init__(self, message, detail):
 +        super().__init__()
 +        self.message = message
          self.detail = detail
  
      def handle(self, req):
@@@ -60,20 -60,20 +60,20 @@@ class httperror(usererror)
              message = proto.statusinfo[status][0]
          if detail is None:
              detail = proto.statusinfo[status][1]
 -        super(httperror, self).__init__(message, detail)
 +        super().__init__(message, detail)
          self.status = status
  
      def handle(self, req):
          req.status(self.status, self.message)
 -        return super(httperror, self).handle(req)
 +        return super().handle(req)
  
  class notfound(httperror):
      def __init__(self):
 -        return super(notfound, self).__init__(404)
 +        return super().__init__(404)
  
  class redirect(dispatch.restart):
      def __init__(self, url, status = 303):
 -        super(redirect, self).__init__()
 +        super().__init__()
          self.url = url
          self.status = status
  
diff --combined wrw/session.py
@@@ -1,5 -1,5 +1,5 @@@
  import threading, time, pickle, random, os
- from . import cookie
 -import cookie, env
++from . import cookie, env
  
  __all__ = ["db", "get"]
  
@@@ -11,7 -11,7 +11,7 @@@ def hexencode(str)
  
  def gennonce(length):
      nonce = ""
 -    for i in xrange(length):
 +    for i in range(length):
          nonce += chr(random.randint(0, 255))
      return nonce
  
@@@ -84,7 -84,7 +84,7 @@@ class db(object)
          now = int(time.time())
          with self.lock:
              dlist = []
 -            for sess in self.live.itervalues():
 +            for sess in self.live.values():
                  if sess.atime + self.freezetime < now:
                      try:
                          if sess.dirty():
          data = self.backdb[sessid]
          try:
              return pickle.loads(data)
 -        except Exception, e:
 +        except:
              raise KeyError()
  
      def freeze(self, sess):
@@@ -180,7 -180,7 +180,7 @@@ class dirback(object)
          with open(os.path.join(self.path, key), "w") as out:
              out.write(value)
  
- default = db(backdb = dirback(os.path.join("/tmp", "wrwsess-" + str(os.getuid()))))
+ default = env.var(db(backdb = dirback(os.path.join("/tmp", "wrwsess-" + str(os.getuid())))))
  
  def get(req):
-     return default.get(req)
+     return default.val.get(req)
diff --combined wrw/util.py
@@@ -1,5 -1,5 +1,5 @@@
  import inspect
 -import req, dispatch, session, form
 +from . import req, dispatch, session, form
  
  def wsgiwrap(callable):
      def wrapper(env, startreq):
@@@ -50,12 -50,12 +50,12 @@@ class sessiondata(object)
  
      @classmethod
      def sessdb(cls):
-         return session.default
+         return session.default.val
  
  class autodirty(sessiondata):
      @classmethod
      def get(cls, req):
 -        ret = super(autodirty, cls).get(req)
 +        ret = super().get(req)
          if "_is_dirty" not in ret.__dict__:
              ret.__dict__["_is_dirty"] = False
          return ret
          return self._is_dirty
  
      def __setattr__(self, name, value):
 -        super(autodirty, self).__setattr__(name, value)
 +        super().__setattr__(name, value)
          if "_is_dirty" in self.__dict__:
              self.__dict__["_is_dirty"] = True
  
      def __delattr__(self, name):
 -        super(autodirty, self).__delattr__(name, value)
 +        super().__delattr__(name, value)
          if "_is_dirty" in self.__dict__:
              self.__dict__["_is_dirty"] = True
  
  class manudirty(object):
      def __init__(self, *args, **kwargs):
 -        super(manudirty, self).__init__(*args, **kwargs)
 +        super().__init__(*args, **kwargs)
          self.__dirty = False
  
      def sessfrozen(self):