From: Tony Mack Date: Thu, 10 May 2007 18:03:56 +0000 (+0000) Subject: - updated Sessions query logic X-Git-Tag: PLCAPI-4.2-0~131 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=096106a9c8c48cdcd423ec6887b48a201777d357;hp=a622e069c2b6bd699883c9c853fbeb4ba285606e;p=plcapi.git - updated Sessions query logic --- diff --git a/PLC/Sessions.py b/PLC/Sessions.py index 3c1543e..b470c96 100644 --- a/PLC/Sessions.py +++ b/PLC/Sessions.py @@ -1,9 +1,12 @@ +from types import StringTypes import random import base64 import time from PLC.Faults import * from PLC.Parameter import Parameter +from PLC.Filter import Filter +from PLC.Debug import profile from PLC.Table import Row, Table from PLC.Persons import Person, Persons from PLC.Nodes import Node, Nodes @@ -61,14 +64,22 @@ class Sessions(Table): Representation of row(s) from the session table in the database. """ - def __init__(self, api, session_ids = None, expires = int(time.time())): + def __init__(self, api, session_filter = None, expires = int(time.time())): Table.__init__(self, api, Session) sql = "SELECT %s FROM view_sessions WHERE True" % \ ", ".join(Session.fields) - if session_ids: - sql += " AND session_id IN (%s)" % ", ".join(map(api.db.quote, session_ids)) + if session_filter is not None: + if isinstance(session_filter, (list, tuple, set)): + # Separate the list into integers and strings + ints = filter(lambda x: isinstance(x, (int, long)), session_filter) + strs = filter(lambda x: isinstance(x, StringTypes), session_filter) + session_filter = Filter(Session.fields, {'person_id': ints, 'session_id': strs}) + sql += " AND (%s)" % session_filter.sql(api, "OR") + elif isinstance(session_filter, dict): + session_filter = Filter(Session.fields, session_filter) + sql += " AND (%s)" % session_filter.sql(api, "AND") if expires is not None: if expires >= 0: