Flags engine

This commit is contained in:
AF 2020-08-06 16:43:56 +03:00
parent 0f9f331754
commit f388e0f70b
3 changed files with 28 additions and 2 deletions

22
v25/messaging/flags.py Normal file
View File

@ -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('<unedited>').enq()

View File

@ -9,6 +9,7 @@ import nacl.signing
import nacl.utils import nacl.utils
from v25.messaging.encoding import Encoding from v25.messaging.encoding import Encoding
from v25.messaging.flags import Flags
from v25.messaging.subject import Subject, PrivateSubject from v25.messaging.subject import Subject, PrivateSubject
KEY_SIZE = 80 KEY_SIZE = 80
@ -33,7 +34,7 @@ class Message:
def send(cls, sfrom: PrivateSubject, sto: Subject, pcontent: bytes): def send(cls, sfrom: PrivateSubject, sto: Subject, pcontent: bytes):
return cls(sfrom, sto, Encoding.nonce(), time(), return cls(sfrom, sto, Encoding.nonce(), time(),
Encoding.nonce(), pcontent, None, Encoding.nonce(), pcontent, None,
'<unread><unedited>').sealed() Flags.default).sealed()
@classmethod @classmethod
def loads(cls, s: str): def loads(cls, s: str):
@ -94,7 +95,7 @@ class Message:
def edit(self, pcontent: bytes) -> 'Message': def edit(self, pcontent: bytes) -> 'Message':
return Message(self.sfrom, self.sto, self.idnonce, None, return Message(self.sfrom, self.sto, self.idnonce, None,
Encoding.nonce(), pcontent, None, Encoding.nonce(), pcontent, None,
self.flags.replace('<unedited>', '<edited>')).sealed() Flags(self.flags.replace('<unedited>', '<edited>')).enq()).sealed()
def edited(self, other: 'Message'): def edited(self, other: 'Message'):
return self.pair == other.pair and self.idnonce == other.idnonce return self.pair == other.pair and self.idnonce == other.idnonce

View File

@ -8,6 +8,7 @@ from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, Query from sqlalchemy.orm import sessionmaker, Query
from v25.messaging.encoding import NONCE_SIZE, Encoding from v25.messaging.encoding import NONCE_SIZE, Encoding
from v25.messaging.flags import Flags
from v25.messaging.message import Message from v25.messaging.message import Message
from v25.messaging.subject import Subject from v25.messaging.subject import Subject
from v25.storage.storage import AbstractStorage from v25.storage.storage import AbstractStorage
@ -162,6 +163,8 @@ class DBStorage(AbstractStorage):
session = self.Session() session = self.Session()
msg: Msg = self.one_alike(session, m) msg: Msg = self.one_alike(session, m)
assert msg.en == m.editnonce assert msg.en == m.editnonce
assert Flags(msg.flags).quable()
assert not Flags(flags).quable()
msg.flags = flags msg.flags = flags
session.commit() session.commit()
session.close() session.close()