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:
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)