chainsyncer

Blockchain syncer driver
Log | Files | Refs | LICENSE

commit 63993cc223a0071616681efa352db4274cda66f4
parent 186f28a020862e461459b2504b54711ffb8a492d
Author: lash <dev@holbrook.no>
Date:   Sun,  6 Aug 2023 19:25:55 +0100

Add context field in filter invocations

Diffstat:
MCHANGELOG | 2++
Mchainsyncer/driver/base.py | 12+++++++-----
Mchainsyncer/session.py | 9+++++++--
Mchainsyncer/unittest/base.py | 2+-
Msetup.cfg | 2+-
5 files changed, 18 insertions(+), 9 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG @@ -1,3 +1,5 @@ +* 0.8.1 + - Add context field to receive key-value collections from calling agent * 0.8.0 - Enable batch rpc retrievals of receipts * 0.7.1 diff --git a/chainsyncer/driver/base.py b/chainsyncer/driver/base.py @@ -40,6 +40,7 @@ class SyncDriver: self.clock_id = time.CLOCK_MONOTONIC_RAW self.store.connect() self.store.start(offset=offset, target=target) + self.item = None if not SyncDriver.signal_set: for sig in SyncDriver.signal_request: signal.signal(sig, self.__sig_terminate) @@ -57,17 +58,18 @@ class SyncDriver: logg.info('termination requested!') SyncDriver.running_global = False self.running = False + self.session.stop(self.item) - def run(self, conn, interval=1): + def run(self, conn, interval=1, ctx=None): while self.running_global: - self.session = SyncSession(self.store) - item = self.session.start() - if item == None: + self.session = SyncSession(self.store, ctx=ctx) + self.item = self.session.start() + if self.item == None: self.running = False self.running_global = False break - self.loop(conn, item, interval=interval) + self.loop(conn, self.item, interval=interval) def idle(self, interval): diff --git a/chainsyncer/session.py b/chainsyncer/session.py @@ -10,12 +10,13 @@ logg = logging.getLogger(__name__) class SyncSession: - def __init__(self, session_store): + def __init__(self, session_store, ctx=None): self.session_store = session_store self.started = self.session_store.started self.next = self.session_store.next_item self.item = None self.filters = self.session_store.filters + self.ctx = ctx def get(self, k): @@ -30,6 +31,10 @@ class SyncSession: def stop(self, item): self.session_store.stop(item) + for fltr in self.filters: + stopper = getattr(fltr, 'stop', None) + if stopper != None: + stopper() def filter(self, conn, block, tx): @@ -37,7 +42,7 @@ class SyncSession: for fltr in self.filters: logg.debug('executing filter {}'.format(fltr)) self.item.advance() - interrupt = fltr.filter(conn, block, tx) + interrupt = fltr.filter(conn, block, tx, ctx=self.ctx) if not self.item.release(interrupt=interrupt): break self.item.reset() diff --git a/chainsyncer/unittest/base.py b/chainsyncer/unittest/base.py @@ -157,7 +157,7 @@ class MockFilter: return self.name - def filter(self, conn, block, tx): + def filter(self, conn, block, tx, ctx=None): r = False if self.brk_hard != None: r = True diff --git a/setup.cfg b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = chainsyncer -version = 0.8.0 +version = 0.8.1 description = Generic blockchain syncer driver author = Louis Holbrook author_email = dev@holbrook.no