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
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,
'<unread><unedited>').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('<unedited>', '<edited>')).sealed()
Flags(self.flags.replace('<unedited>', '<edited>')).enq()).sealed()
def edited(self, other: 'Message'):
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 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()