From f388e0f70b823ce10d5459f411847243d6e1aa22 Mon Sep 17 00:00:00 2001 From: timotheyca Date: Thu, 6 Aug 2020 16:43:56 +0300 Subject: [PATCH] Flags engine --- v25/messaging/flags.py | 22 ++++++++++++++++++++++ v25/messaging/message.py | 5 +++-- v25/storage/dbstorage.py | 3 +++ 3 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 v25/messaging/flags.py diff --git a/v25/messaging/flags.py b/v25/messaging/flags.py new file mode 100644 index 0000000..53a110d --- /dev/null +++ b/v25/messaging/flags.py @@ -0,0 +1,22 @@ +__all__ = ('Flags',) + +Q_FLAG = '' + + +class Flags: + default: str + + def __init__(self, flags: str): + self.flags: str = flags + + def quable(self) -> bool: + return Q_FLAG in self.flags + + def deq(self) -> str: + return self.flags.replace(Q_FLAG, '') + + def enq(self) -> str: + return self.deq() + Q_FLAG + + +Flags.default = Flags('').enq() diff --git a/v25/messaging/message.py b/v25/messaging/message.py index 6c54723..e06a0aa 100644 --- a/v25/messaging/message.py +++ b/v25/messaging/message.py @@ -9,6 +9,7 @@ import nacl.signing import nacl.utils from v25.messaging.encoding import Encoding +from v25.messaging.flags import Flags from v25.messaging.subject import Subject, PrivateSubject KEY_SIZE = 80 @@ -33,7 +34,7 @@ class Message: def send(cls, sfrom: PrivateSubject, sto: Subject, pcontent: bytes): return cls(sfrom, sto, Encoding.nonce(), time(), Encoding.nonce(), pcontent, None, - '').sealed() + Flags.default).sealed() @classmethod def loads(cls, s: str): @@ -94,7 +95,7 @@ class Message: def edit(self, pcontent: bytes) -> 'Message': return Message(self.sfrom, self.sto, self.idnonce, None, Encoding.nonce(), pcontent, None, - self.flags.replace('', '')).sealed() + Flags(self.flags.replace('', '')).enq()).sealed() def edited(self, other: 'Message'): return self.pair == other.pair and self.idnonce == other.idnonce diff --git a/v25/storage/dbstorage.py b/v25/storage/dbstorage.py index ccfc4e6..3fbf738 100644 --- a/v25/storage/dbstorage.py +++ b/v25/storage/dbstorage.py @@ -8,6 +8,7 @@ from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker, Query from v25.messaging.encoding import NONCE_SIZE, Encoding +from v25.messaging.flags import Flags from v25.messaging.message import Message from v25.messaging.subject import Subject from v25.storage.storage import AbstractStorage @@ -162,6 +163,8 @@ class DBStorage(AbstractStorage): session = self.Session() msg: Msg = self.one_alike(session, m) assert msg.en == m.editnonce + assert Flags(msg.flags).quable() + assert not Flags(flags).quable() msg.flags = flags session.commit() session.close()