From: Michael Tremer Date: Tue, 24 Oct 2017 20:47:06 +0000 (+0100) Subject: sessions: Use the same design pattern as anything else X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b0315eb44d1783a4faa688b44609ff618b5746a9;p=pbs.git sessions: Use the same design pattern as anything else Signed-off-by: Michael Tremer --- diff --git a/src/buildservice/sessions.py b/src/buildservice/sessions.py index 18f8e4d2..c6214898 100644 --- a/src/buildservice/sessions.py +++ b/src/buildservice/sessions.py @@ -6,17 +6,21 @@ from . import users 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) @@ -29,18 +33,13 @@ class Sessions(base.Object): """ 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 diff --git a/src/buildservice/users.py b/src/buildservice/users.py index 4b0269f7..8d731d8e 100644 --- a/src/buildservice/users.py +++ b/src/buildservice/users.py @@ -246,6 +246,9 @@ class User(base.DataObject): 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 @@ -446,6 +449,11 @@ class User(base.DataObject): # 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" diff --git a/src/web/handlers.py b/src/web/handlers.py index a92ab0bb..b6313dd6 100644 --- a/src/web/handlers.py +++ b/src/web/handlers.py @@ -111,6 +111,7 @@ class SessionsHandler(BaseHandler): users = {} for s in self.backend.sessions: + print s.user, s.user in users try: users[s.user].append(s) except KeyError: