from .decorators import *
class Sessions(base.Object):
- def __iter__(self):
- query = "SELECT * FROM sessions WHERE valid_until >= NOW() \
- ORDER BY valid_until DESC"
+ def _get_session(self, query, *args):
+ res = self.db.get(query, *args)
+
+ if res:
+ return Session(self.backend, res.id, data=res)
+
+ def _get_sessions(self, query, *args):
+ res = self.db.query(query, *args)
- sessions = []
- for row in self.db.query(query):
- session = Session(self.backend, row.id, data=row)
- sessions.append(session)
+ for row in res:
+ yield Session(self.backend, row.id, data=row)
- # Sort
- sessions.sort()
+ def __iter__(self):
+ sessions = self._get_sessions("SELECT * FROM sessions \
+ WHERE valid_until >= NOW() ORDER BY valid_until DESC")
return iter(sessions)
"""
session_id = users.generate_random_string(48)
- res = self.db.get("INSERT INTO sessions(session_id, user_id, address, user_agent) \
+ return self._get_session("INSERT INTO sessions(session_id, user_id, address, user_agent) \
VALUES(%s, %s, %s, %s) RETURNING *", session_id, user.id, address, user_agent)
- return Session(self.backend, res.id, data=res)
-
def get_by_session_id(self, session_id):
- res = self.db.get("SELECT * FROM sessions \
+ return self._get_session("SELECT * FROM sessions \
WHERE session_id = %s AND valid_until >= NOW()", session_id)
- if res:
- return Session(self.backend, res.id, data=res)
-
# Alias function
get = get_by_session_id
def __repr__(self):
return "<%s %s>" % (self.__class__.__name__, self.realname)
+ def __hash__(self):
+ return hash(self.id)
+
def __eq__(self, other):
if isinstance(other, self.__class__):
return self.id == other.id
# All others must be checked individually.
return self.perms.get(perm, False) == True
+ @property
+ def sessions(self):
+ return self.backend.sessions._get_sessions("SELECT * FROM sessions \
+ WHERE user_id = %s AND valid_until >= NOW() ORDER BY created_at")
+
class UserEmail(base.DataObject):
table = "users_emails"