diff options
Diffstat (limited to 'quarg/database')
-rw-r--r-- | quarg/database/__init__.py | 0 | ||||
-rw-r--r-- | quarg/database/filters.py | 48 | ||||
-rw-r--r-- | quarg/database/tables.py | 68 |
3 files changed, 116 insertions, 0 deletions
diff --git a/quarg/database/__init__.py b/quarg/database/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/quarg/database/__init__.py 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]) diff --git a/quarg/database/tables.py b/quarg/database/tables.py new file mode 100644 index 0000000..ea82f52 --- /dev/null +++ b/quarg/database/tables.py @@ -0,0 +1,68 @@ +from sqlalchemy.schema import Column, ForeignKey +from sqlalchemy.types import BigInteger, Boolean, DateTime, Integer, Text +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import relationship + +# pylint: disable=too-few-public-methods + +Base = declarative_base() + +# Note: To keep SQLAlchemy from selecting columns that we will never end up +# using, we have commented out unused ones + +class Backlog(Base): + __tablename__ = 'backlog' + messageid = Column(BigInteger, primary_key=True) + time = Column(DateTime) + bufferid = Column(Integer, ForeignKey('buffer.bufferid')) + type = Column(Integer) + flags = Column(Integer) + senderid = Column(BigInteger, ForeignKey('sender.senderid')) + senderprefixes = Column(Text) + message = Column(Text) + + buffer = relationship('Buffer') + sender = relationship('Sender') + +class Sender(Base): + __tablename__ = 'sender' + senderid = Column(BigInteger, primary_key=True) + sender = Column(Text) + # realname = Column(Text) + # avatarurl = Column(Text) + +class Buffer(Base): + __tablename__ = 'buffer' + bufferid = Column(Integer, primary_key=True) + userid = Column(Integer, ForeignKey('user.userid')) + groupid = Column(Integer) + networkid = Column(Integer, ForeignKey('network.networkid')) + buffername = Column(Text) + buffercname = Column(Text) + buffertype = Column(Integer) + # lastmsgid = Column(BigInteger) + # lastseenmsgid = Column(BigInteger) + # markerlinemsgid = Column(BigInteger) + # bufferactivity = Column(Integer) + # highlightcount = Column(Integer) + # key = Column(Text) + joined = Column(Boolean) + # cipher = Column(Text) + + network = relationship('Network') + +class QuasselUser(Base): + __tablename__ = 'quasseluser' + userid = Column(Integer, primary_key=True) + username = Column(Text) + # password = Column(Text) + # hashversion = Column(Integer) + # authenticator = Column(Text) + +class Network(Base): + __tablename__ = 'network' + networkid = Column(Integer, primary_key=True) + userid = Column(Integer, ForeignKey('quasseluser.userid')) + networkname = Column(Text) + + user = relationship('QuasselUser') |