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
|
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
|
||||||
|
@ -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()
|
||||||
|
Loading…
Reference in New Issue
Block a user