Flags engine
This commit is contained in:
parent
0f9f331754
commit
f388e0f70b
22
v25/messaging/flags.py
Normal file
22
v25/messaging/flags.py
Normal 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()
|
@ -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
|
||||
|
@ -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()
|
||||
|
Loading…
Reference in New Issue
Block a user