eth-cache

Ethereum chain data caching tools
Log | Files | Refs | LICENSE

commit 1c6276f1f6f410c315a88f9a09e4b46e586ad3d9
parent 18384d95b35b66f064306f8075048b7acfb79bd8
Author: lash <dev@holbrook.no>
Date:   Sun, 16 Jun 2024 23:16:06 +0100

Factor out common fs code for store

Diffstat:
Aeth_cache/store/base.py | 5+++++
Meth_cache/store/file.py | 26++++++--------------------
Aeth_cache/store/fs.py | 31+++++++++++++++++++++++++++++++
Meth_cache/store/lmdb.py | 28+++++-----------------------
4 files changed, 47 insertions(+), 43 deletions(-)

diff --git a/eth_cache/store/base.py b/eth_cache/store/base.py @@ -0,0 +1,5 @@ +class Store: + + def __init__(self, chain_spec, cache_root, address_rules=None): + self.chain_spec = chain_spec + self.address_rules = address_rules diff --git a/eth_cache/store/file.py b/eth_cache/store/file.py @@ -12,17 +12,14 @@ from chainlib.eth.tx import ( from leveldir.numeric import NumDir from leveldir.hex import HexDir -logg = logging.getLogger(__name__) - -default_base_dir = '/var/lib' +# local imports +from eth_cache.store.fs import FsStore +logg = logging.getLogger(__name__) -def chain_dir_for(chain_spec, base_dir=default_base_dir): - chain_dir = os.path.join(base_dir, str(chain_spec).replace(':', '/')) - return os.path.join(chain_dir, 'eth_cache') -class FileStore: +class FileStore(FsStore): def put_tx(self, tx, include_data=False): raw = pack(tx.src, self.chain_spec) @@ -124,27 +121,16 @@ class FileStore: return tx_hashes - def __init__(self, chain_spec, cache_root=default_base_dir, address_rules=None): - self.chain_dir = chain_dir_for(chain_spec, cache_root) - self.cache_dir = self.chain_dir - self.block_src_path = os.path.join(self.cache_dir, 'block', 'src') + def __init__(self, chain_spec, cache_root=None, address_rules=None): + super(FileStore, self).__init__(chain_spec, cache_root=cache_root, address_rules=address_rules) self.block_src_dir = HexDir(self.block_src_path, 32, levels=2) - self.block_num_path = os.path.join(self.cache_dir, 'block', 'num') self.block_num_dir = NumDir(self.block_num_path, [100000, 1000]) - self.block_hash_path = os.path.join(self.cache_dir, 'block', 'hash') self.block_hash_dir = HexDir(self.block_hash_path, 32, levels=2) - self.tx_path = os.path.join(self.cache_dir, 'tx', 'src') - self.tx_raw_path = os.path.join(self.cache_dir, 'tx', 'raw') self.tx_dir = HexDir(self.tx_path, 32, levels=2) self.tx_raw_dir = HexDir(self.tx_raw_path, 32, levels=2) - self.rcpt_path = os.path.join(self.cache_dir, 'rcpt', 'src') - self.rcpt_raw_path = os.path.join(self.cache_dir, 'rcpt', 'raw') self.rcpt_dir = HexDir(self.rcpt_path, 32, levels=2) self.rcpt_raw_dir = HexDir(self.rcpt_raw_path, 32, levels=2) - self.address_path = os.path.join(self.cache_dir, 'address') self.address_dir = HexDir(self.address_path, 20, levels=2) - self.chain_spec = chain_spec - self.address_rules = address_rules def __str__(self): diff --git a/eth_cache/store/fs.py b/eth_cache/store/fs.py @@ -0,0 +1,31 @@ +# standard imports +import os + +# local imports +from eth_cache.store.base import Store + + +default_base_dir = '/var/lib' + +def chain_dir_for(chain_spec, base_dir=default_base_dir): + chain_dir = os.path.join(base_dir, str(chain_spec).replace(':', '/')) + return os.path.join(chain_dir, 'eth_cache') + +class FsStore(Store): + + def __init__(self, chain_spec, cache_root=None, address_rules=None): + if cache_root == None: + cache_root = default_base_dir + super(FsStore, self).__init__(chain_spec, cache_root=cache_root, address_rules=address_rules) + self.chain_dir = chain_dir_for(chain_spec, cache_root) + self.cache_dir = self.chain_dir + os.makedirs(self.cache_dir, exist_ok=True) + self.block_src_path = os.path.join(self.cache_dir, 'block', 'src') + self.block_num_path = os.path.join(self.cache_dir, 'block', 'num') + self.block_hash_path = os.path.join(self.cache_dir, 'block', 'hash') + self.tx_path = os.path.join(self.cache_dir, 'tx', 'src') + self.tx_raw_path = os.path.join(self.cache_dir, 'tx', 'raw') + self.rcpt_path = os.path.join(self.cache_dir, 'rcpt', 'src') + self.rcpt_raw_path = os.path.join(self.cache_dir, 'rcpt', 'raw') + self.address_path = os.path.join(self.cache_dir, 'address') + diff --git a/eth_cache/store/lmdb.py b/eth_cache/store/lmdb.py @@ -11,35 +11,17 @@ from chainlib.eth.tx import ( pack, ) +# local imports +from eth_cache.store.fs import FsStore logg = logging.getLogger(__name__) -default_base_dir = '/var/lib' -def chain_dir_for(chain_spec, base_dir=default_base_dir): - chain_dir = os.path.join(base_dir, str(chain_spec).replace(':', '/')) - return os.path.join(chain_dir, 'eth_cache') +class LmdbStore(FsStore): - -class LmdbStore: - - def __init__(self, chain_spec, cache_root=default_base_dir, address_rules=None): - # TODO: perhaps common for all - self.chain_spec = chain_spec - self.address_rules = address_rules - # TODO: perhaps common for all fs - self.chain_dir = chain_dir_for(chain_spec, cache_root) - self.cache_dir = self.chain_dir - os.makedirs(self.cache_dir, exist_ok=True) - self.block_src_path = os.path.join(self.cache_dir, 'block', 'src') - self.block_num_path = os.path.join(self.cache_dir, 'block', 'num') - self.block_hash_path = os.path.join(self.cache_dir, 'block', 'hash') - self.tx_path = os.path.join(self.cache_dir, 'tx', 'src') - self.tx_raw_path = os.path.join(self.cache_dir, 'tx', 'raw') - self.rcpt_path = os.path.join(self.cache_dir, 'rcpt', 'src') - self.rcpt_raw_path = os.path.join(self.cache_dir, 'rcpt', 'raw') - self.address_path = os.path.join(self.cache_dir, 'address') + def __init__(self, chain_spec, cache_root=None, address_rules=None): + super(LmdbStore, self).__init__(chain_spec, cache_root=cache_root, address_rules=address_rules) self.db = lmdb.open(self.cache_dir, create=True)