mirror of
https://github.com/markqvist/rnsh.git
synced 2024-10-01 01:15:37 -04:00
Upgrade rns and remove hacks for previous version
This commit is contained in:
parent
1f31307307
commit
acc217df90
@ -9,7 +9,7 @@ readme = "README.md"
|
||||
[tool.poetry.dependencies]
|
||||
python = "^3.9"
|
||||
docopt = "^0.6.2"
|
||||
rns = "^0.4.8"
|
||||
rns = "^0.4.9"
|
||||
tomli = "^2.0.1"
|
||||
|
||||
[tool.poetry.scripts]
|
||||
|
@ -1,67 +0,0 @@
|
||||
import asyncio
|
||||
import threading
|
||||
import RNS
|
||||
import logging
|
||||
module_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class SelfPruningAssociation:
|
||||
def __init__(self, ttl: float, loop: asyncio.AbstractEventLoop):
|
||||
self._log = module_logger.getChild(self.__class__.__name__)
|
||||
self._ttl = ttl
|
||||
self._associations = list()
|
||||
self._lock = threading.RLock()
|
||||
self._loop = loop
|
||||
# self._log.debug("__init__")
|
||||
|
||||
def _schedule_prune(self, pair):
|
||||
# self._log.debug(f"schedule prune {pair}")
|
||||
|
||||
def schedule_prune_inner(p):
|
||||
# self._log.debug(f"schedule inner {p}")
|
||||
self._loop.call_later(self._ttl, self._prune, p)
|
||||
|
||||
self._loop.call_soon_threadsafe(schedule_prune_inner, pair)
|
||||
|
||||
def _prune(self, pair: any):
|
||||
# self._log.debug(f"prune {pair}")
|
||||
with self._lock:
|
||||
self._associations.remove(pair)
|
||||
|
||||
def get(self, key: any) -> any:
|
||||
# self._log.debug(f"get {key}")
|
||||
with self._lock:
|
||||
pair = next(filter(lambda x: x[0] == key, self._associations), None)
|
||||
if not pair:
|
||||
return None
|
||||
return pair[1]
|
||||
|
||||
def put(self, key: any, value: any):
|
||||
# self._log.debug(f"put {key},{value}")
|
||||
with self._lock:
|
||||
pair = (key, value)
|
||||
self._associations.append(pair)
|
||||
self._schedule_prune(pair)
|
||||
|
||||
|
||||
_request_to_link: SelfPruningAssociation = None
|
||||
_link_handle_request_orig = RNS.Link.handle_request
|
||||
|
||||
|
||||
def _link_handle_request(self, request_id, unpacked_request):
|
||||
global _request_to_link
|
||||
_request_to_link.put(request_id, self.link_id)
|
||||
_link_handle_request_orig(self, request_id, unpacked_request)
|
||||
|
||||
|
||||
def request_request_id_hack(new_api_reponse_generator, loop):
|
||||
global _request_to_link
|
||||
if _request_to_link is None:
|
||||
RNS.Link.handle_request = _link_handle_request
|
||||
_request_to_link = SelfPruningAssociation(1.0, loop)
|
||||
|
||||
def listen_request(path, data, request_id, remote_identity, requested_at):
|
||||
link_id = _request_to_link.get(request_id)
|
||||
return new_api_reponse_generator(path, data, request_id, link_id, remote_identity, requested_at)
|
||||
|
||||
return listen_request
|
@ -45,7 +45,6 @@ import rnsh.exception as exception
|
||||
import rnsh.process as process
|
||||
import rnsh.retry as retry
|
||||
import rnsh.rnslogging as rnslogging
|
||||
import rnsh.hacks as hacks
|
||||
import rnsh.session as session
|
||||
import re
|
||||
import contextlib
|
||||
|
@ -1,44 +0,0 @@
|
||||
import asyncio
|
||||
|
||||
import rnsh.hacks as hacks
|
||||
import pytest
|
||||
import time
|
||||
import logging
|
||||
logging.getLogger().setLevel(logging.DEBUG)
|
||||
|
||||
|
||||
class FakeLink:
|
||||
def __init__(self, link_id):
|
||||
self.link_id = link_id
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_pruning():
|
||||
def listen_request(path, data, request_id, link_id, remote_identity, requested_at):
|
||||
assert path == 1
|
||||
assert data == 2
|
||||
assert request_id == 3
|
||||
assert remote_identity == 4
|
||||
assert requested_at == 5
|
||||
assert link_id == 6
|
||||
return 7
|
||||
|
||||
lhr_called = 0
|
||||
link = FakeLink(6)
|
||||
|
||||
def link_handle_request(self, request_id, unpacked_request):
|
||||
nonlocal lhr_called
|
||||
lhr_called += 1
|
||||
|
||||
old_func = hacks.request_request_id_hack(listen_request, asyncio.get_running_loop())
|
||||
hacks._link_handle_request_orig = link_handle_request
|
||||
hacks._link_handle_request(link, 3, None)
|
||||
link_id = hacks._request_to_link.get(3)
|
||||
assert link_id == link.link_id
|
||||
result = old_func(1, 2, 3, 4, 5)
|
||||
assert result == 7
|
||||
link_id = hacks._request_to_link.get(3)
|
||||
assert link_id == 6
|
||||
await asyncio.sleep(1.5)
|
||||
link_id = hacks._request_to_link.get(3)
|
||||
assert link_id is None
|
Loading…
Reference in New Issue
Block a user