X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=PLC%2FSessions.py;fp=PLC%2FSessions.py;h=b470c9637df50d97591c2be1db21b7ca815c62b2;hb=5d80c8d9c8016143aaf74dfd3a7e0561f7538aad;hp=3c1543ea72549b60935126db9ae6267904c572cc;hpb=76bdf368d0d8dcd046476abe04392a73a0eaa6e0;p=plcapi.git 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: