follow the protocol

main
Florent Daigniere 2 years ago
parent 2e467092a2
commit 076d67b513

@ -33,6 +33,8 @@ class DictProtocol(asyncio.Protocol):
self.dict = None self.dict = None
# Dictionary of active transaction lists per transaction id # Dictionary of active transaction lists per transaction id
self.transactions = {} self.transactions = {}
# Dictionary of user per transaction id
self.transactions_user = {}
super(DictProtocol, self).__init__() super(DictProtocol, self).__init__()
def connection_made(self, transport): def connection_made(self, transport):
@ -83,7 +85,7 @@ class DictProtocol(asyncio.Protocol):
key_type, key = key.decode("utf8").split("/", 1) key_type, key = key.decode("utf8").split("/", 1)
try: try:
result = await self.dict.get( result = await self.dict.get(
key, ns=(self.user if key_type == "priv" else None) key, ns=((user if user else self.user) if key_type == "priv" else None)
) )
if type(result) is str: if type(result) is str:
response = result.encode("utf8") response = result.encode("utf8")
@ -99,6 +101,7 @@ class DictProtocol(asyncio.Protocol):
""" Process a dict begin message """ Process a dict begin message
""" """
self.transactions[transaction_id] = {} self.transactions[transaction_id] = {}
self.transactions_user[transaction_id] = user if user else self.user
def process_set(self, transaction_id, key, value): def process_set(self, transaction_id, key, value):
""" Process a dict set message """ Process a dict set message
@ -116,10 +119,11 @@ class DictProtocol(asyncio.Protocol):
key_type, key = key.decode("utf8").split("/", 1) key_type, key = key.decode("utf8").split("/", 1)
result = await self.dict.set( result = await self.dict.set(
key, json.loads(value), key, json.loads(value),
ns=(self.user if key_type == "priv" else None) ns=(self.transactions_user[transaction_id] if key_type == "priv" else None)
) )
# Remove stored transaction # Remove stored transaction
del self.transactions[transaction_id] del self.transactions[transaction_id]
del self.transactions_user[transaction_id]
return self.reply(b"O", transaction_id) return self.reply(b"O", transaction_id)
def reply(self, command, *args): def reply(self, command, *args):

Loading…
Cancel
Save