Added block type iteration generator
This commit is contained in:
parent
844723cea9
commit
ff9eb13579
16
src/blockdb/__init__.py
Normal file
16
src/blockdb/__init__.py
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
from typing import Generator
|
||||||
|
|
||||||
|
from onionrblocks import Block
|
||||||
|
|
||||||
|
import db
|
||||||
|
from .. import identifyhome
|
||||||
|
|
||||||
|
block_db_path = identifyhome.identify_home() + 'blocks.db'
|
||||||
|
|
||||||
|
|
||||||
|
def get_blocks_by_type(block_type) -> Generator[Block]:
|
||||||
|
block_db = db.get_db_obj(block_db_path, 'u')
|
||||||
|
for block_hash in db.list_keys(block_db_path):
|
||||||
|
block = Block(block_hash, block_db[block_hash], auto_verify=False)
|
||||||
|
if block.type == block_type:
|
||||||
|
yield block
|
@ -23,6 +23,7 @@ def _do_timeout(func, *args):
|
|||||||
|
|
||||||
|
|
||||||
def set(db_path, key, value):
|
def set(db_path, key, value):
|
||||||
|
"""Set a value in the db, open+timeout so not good for rapid use"""
|
||||||
def _set(key, value):
|
def _set(key, value):
|
||||||
with dbm.open(db_path, "c") as my_db:
|
with dbm.open(db_path, "c") as my_db:
|
||||||
my_db[key] = value
|
my_db[key] = value
|
||||||
@ -30,8 +31,38 @@ def set(db_path, key, value):
|
|||||||
|
|
||||||
|
|
||||||
def get(db_path, key):
|
def get(db_path, key):
|
||||||
|
"""Get a value in the db, open+timeout so not good for rapid use"""
|
||||||
def _get(key):
|
def _get(key):
|
||||||
with dbm.open(db_path, "c") as my_db:
|
with dbm.open(db_path, "cu") as my_db:
|
||||||
return my_db[key]
|
return my_db[key]
|
||||||
return _do_timeout(_get, key)
|
return _do_timeout(_get, key)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def get_db_obj(db_path, extra_flag=''):
|
||||||
|
"""For when you should keep a db obj open"""
|
||||||
|
def _get_db():
|
||||||
|
return dbm.open(db_path, "c" + extra_flag)
|
||||||
|
return _do_timeout(_get_db, db_path)
|
||||||
|
|
||||||
|
|
||||||
|
def list_keys(db_path):
|
||||||
|
"""Generator of all keys in the db.
|
||||||
|
|
||||||
|
Uses a lot of mem if no firstkey supported"""
|
||||||
|
db_obj = _do_timeout(dbm.open, db_path, "cu")
|
||||||
|
if not hasattr(db_obj, "firstkey"):
|
||||||
|
for i in db_obj.keys():
|
||||||
|
yield i
|
||||||
|
db_obj.close()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
def _list_keys(db_obj):
|
||||||
|
with db_obj as my_db:
|
||||||
|
k = my_db.firstkey()
|
||||||
|
while k is not None:
|
||||||
|
yield k
|
||||||
|
k = my_db.nextkey(k)
|
||||||
|
yield from _list_keys(db_obj)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user