Merge branch 'master' into python3
authorFredrik Tolf <fredrik@dolda2000.com>
Sun, 1 Jan 2012 21:42:41 +0000 (22:42 +0100)
committerFredrik Tolf <fredrik@dolda2000.com>
Sun, 1 Jan 2012 21:42:41 +0000 (22:42 +0100)
Conflicts:
wrw/session.py

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

diff --combined wrw/session.py
@@@ -1,5 -1,5 +1,5 @@@
  import threading, time, pickle, random, os
 -import cookie
 +from . import cookie
  
  __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
  
@@@ -71,19 -71,20 +71,20 @@@ class session(object)
          self.lock = threading.Lock()
  
  class db(object):
-     def __init__(self, cookiename = "wrwsess", path = "/"):
+     def __init__(self, backdb = None, cookiename = "wrwsess", path = "/"):
          self.live = {}
          self.cookiename = cookiename
          self.path = path
          self.lock = threading.Lock()
          self.cthread = None
          self.freezetime = 3600
+         self.backdb = backdb
  
      def clean(self):
          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():
          return sess
  
      def thaw(self, sessid):
-         raise KeyError()
-     def freeze(self, sess):
-         raise TypeError()
-     def get(self, req):
-         return req.item(self.fetch)
- class backeddb(db):
-     def __init__(self, backdb, *args, **kw):
-         super().__init__(*args, **kw)
-         self.backdb = backdb
-     def thaw(self, sessid):
+         if self.backdb is None:
+             raise KeyError()
          data = self.backdb[sessid]
          try:
              return pickle.loads(data)
 -        except Exception, e:
 +        except:
              raise KeyError()
  
      def freeze(self, sess):
-         self.backdb[sess.id] = pickle.dumps(sess)
+         if self.backdb is None:
+             raise TypeError()
+         self.backdb[sess.id] = pickle.dumps(sess, -1)
          sess.frozen()
  
+     def get(self, req):
+         return req.item(self.fetch)
  class dirback(object):
      def __init__(self, path):
          self.path = path
          with open(os.path.join(self.path, key), "w") as out:
              out.write(value)
  
- default = backeddb(dirback(os.path.join("/tmp", "wrwsess-" + str(os.getuid()))))
+ default = db(backdb = dirback(os.path.join("/tmp", "wrwsess-" + str(os.getuid()))))
  
  def get(req):
      return default.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):
@@@ -36,12 -36,14 +36,14 @@@ def persession(data = None)
  
  class sessiondata(object):
      @classmethod
-     def get(cls, req):
+     def get(cls, req, create = True):
          sess = cls.sessdb().get(req)
          with sess.lock:
              try:
                  return sess[cls]
              except KeyError:
+                 if not create:
+                     return None
                  ret = cls(req)
                  sess[cls] = ret
                  return ret
@@@ -53,7 -55,7 +55,7 @@@
  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):