chainsyncer/chainsyncer/store/fs.py

77 lines
2.4 KiB
Python
Raw Normal View History

2022-03-17 15:54:34 +01:00
# standard imports
import uuid
import os
import logging
# external imports
from shep.store.file import SimpleFileStoreFactory
2022-03-17 20:36:27 +01:00
# local imports
2022-04-26 09:56:04 +02:00
from chainsyncer.store import SyncStore
2022-03-17 15:54:34 +01:00
2022-04-20 13:59:12 +02:00
logg = logging.getLogger(__name__)
2022-03-17 15:54:34 +01:00
2022-04-20 13:59:12 +02:00
class SyncFsStore(SyncStore):
2022-03-17 15:54:34 +01:00
def __init__(self, base_path, session_id=None, state_event_callback=None, filter_state_event_callback=None):
2022-04-20 16:27:59 +02:00
super(SyncFsStore, self).__init__(base_path, session_id=session_id)
2022-03-17 15:54:34 +01:00
create_path = False
try:
os.stat(self.session_path)
except FileNotFoundError:
create_path = True
if create_path:
2022-04-20 16:27:59 +02:00
self.__create_path(base_path, self.default_path, session_id=session_id)
2022-03-17 15:54:34 +01:00
2022-04-20 16:27:59 +02:00
self.session_id = os.path.basename(self.session_path)
2022-03-17 15:54:34 +01:00
logg.info('session id {} resolved {} path {}'.format(session_id, self.session_id, self.session_path))
2022-04-20 14:31:32 +02:00
base_sync_path = os.path.join(self.session_path, 'sync')
factory = SimpleFileStoreFactory(base_sync_path, binary=True)
self.setup_sync_state(factory, state_event_callback)
2022-03-17 15:54:34 +01:00
2022-04-27 11:43:42 +02:00
self.setup_filter_state(callback=filter_state_event_callback)
def setup_filter_state(self, callback=None):
2022-03-17 20:36:27 +01:00
base_filter_path = os.path.join(self.session_path, 'filter')
factory = SimpleFileStoreFactory(base_filter_path, binary=True)
2022-04-27 11:43:42 +02:00
super(SyncFsStore, self).setup_filter_state(factory, callback)
2022-04-20 14:31:32 +02:00
2022-03-17 15:54:34 +01:00
def __create_path(self, base_path, default_path, session_id=None):
logg.debug('fs store path {} does not exist, creating'.format(self.session_path))
if session_id == None:
session_id = str(uuid.uuid4())
self.session_path = os.path.join(base_path, session_id)
os.makedirs(self.session_path)
if self.is_default:
try:
os.symlink(self.session_path, default_path)
except FileExistsError:
pass
2022-04-20 14:55:43 +02:00
def get_target(self):
2022-03-19 02:13:37 +01:00
fp = os.path.join(self.session_path, 'target')
try:
f = open(fp, 'r')
v = f.read()
2022-03-17 15:54:34 +01:00
f.close()
self.target = int(v)
except FileNotFoundError as e:
2022-04-20 14:55:43 +02:00
logg.debug('cant find target {} {}'.format(fp, e))
pass
2022-03-17 15:54:34 +01:00
2022-04-20 14:55:43 +02:00
def set_target(self, v):
fp = os.path.join(self.session_path, 'target')
f = open(fp, 'w')
f.write(str(v))
f.close()
self.target = v