|
|
@ -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):
|
|
|
|