2022-03-16 19:44:13 +01:00
|
|
|
# standard imports
|
|
|
|
import uuid
|
2022-04-25 08:28:42 +02:00
|
|
|
import logging
|
2022-03-16 19:44:13 +01:00
|
|
|
|
2022-03-18 00:48:23 +01:00
|
|
|
# local imports
|
|
|
|
from chainsyncer.error import FilterDone
|
|
|
|
|
2022-04-25 08:28:42 +02:00
|
|
|
logg = logging.getLogger(__name__)
|
|
|
|
|
2022-03-16 19:44:13 +01:00
|
|
|
|
|
|
|
class SyncSession:
|
|
|
|
|
2022-03-17 20:36:27 +01:00
|
|
|
def __init__(self, session_store):
|
2022-03-17 11:09:12 +01:00
|
|
|
self.session_store = session_store
|
2022-03-17 23:07:19 +01:00
|
|
|
self.started = self.session_store.started
|
2022-03-18 00:48:23 +01:00
|
|
|
self.get = self.session_store.get
|
|
|
|
self.next = self.session_store.next_item
|
|
|
|
self.item = None
|
2022-03-18 01:02:18 +01:00
|
|
|
self.filters = self.session_store.filters
|
2022-03-16 19:44:13 +01:00
|
|
|
|
2022-03-18 00:48:23 +01:00
|
|
|
|
|
|
|
def start(self, offset=0, target=-1):
|
|
|
|
self.session_store.start(offset=offset, target=target)
|
|
|
|
self.item = self.session_store.next_item()
|
2022-03-18 02:11:30 +01:00
|
|
|
return self.item
|
2022-03-18 00:48:23 +01:00
|
|
|
|
2022-03-16 19:44:13 +01:00
|
|
|
|
2022-03-19 01:52:47 +01:00
|
|
|
def stop(self, item):
|
|
|
|
self.session_store.stop(item)
|
|
|
|
|
|
|
|
|
2022-03-17 11:09:12 +01:00
|
|
|
def filter(self, conn, block, tx):
|
2022-03-18 00:48:23 +01:00
|
|
|
self.session_store.connect()
|
|
|
|
for fltr in self.filters:
|
2022-04-25 08:28:42 +02:00
|
|
|
logg.debug('executing filter {}'.format(fltr))
|
2022-03-18 00:48:23 +01:00
|
|
|
self.item.advance()
|
2022-03-18 20:12:07 +01:00
|
|
|
interrupt = fltr.filter(conn, block, tx)
|
|
|
|
if not self.item.release(interrupt=interrupt):
|
|
|
|
break
|
|
|
|
self.item.reset()
|
2022-03-18 02:11:30 +01:00
|
|
|
self.next()
|
2022-03-18 00:48:23 +01:00
|
|
|
self.session_store.disconnect()
|