aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/quarg/database/filters.py
diff options
context:
space:
mode:
Diffstat (limited to 'quarg/database/filters.py')
-rw-r--r--quarg/database/filters.py48
1 files changed, 48 insertions, 0 deletions
diff --git a/quarg/database/filters.py b/quarg/database/filters.py
new file mode 100644
index 0000000..ee2b3fb
--- /dev/null
+++ b/quarg/database/filters.py
@@ -0,0 +1,48 @@
+from sqlalchemy.sql.expression import or_, between
+from quarg.database.tables import Backlog, Buffer, Network, QuasselUser, Sender
+
+def msg_like(query):
+ return Backlog.message.like(query, escape='\\')
+
+def msg_contains(query):
+ return Backlog.message.contains(query, autoescape=True)
+
+def buffer(name):
+ return Buffer.buffername == name
+
+def nick(nickname):
+ return or_(Sender.sender.like(nickname + "!%"), Sender.sender == nickname)
+
+def prefix(pref):
+ return Backlog.senderprefixes.contains(pref)
+
+def buftype(btype):
+ return Buffer.buffertype == btype.value
+
+def msgflag(flag):
+ return Backlog.flags == flag.value
+
+def msgtype(mtype):
+ return Backlog.type == mtype.value
+
+def user(name):
+ return QuasselUser.username == name
+
+def network(name):
+ return Network.networkname == name
+
+def time_around(datetuple):
+ start, end = datetuple
+ return between(Backlog.time, start, end)
+
+def time_from(start):
+ return Backlog.time >= start
+
+def time_to(end):
+ return Backlog.time <= end
+
+def joined(boolean):
+ return Buffer.joined == boolean
+
+def any_filter(fun, items):
+ return or_(*[fun(item) for item in items])