mirror of
https://github.com/LBRYFoundation/LBRY-Vault.git
synced 2025-08-28 07:51:27 +00:00
assert datadir available
This commit is contained in:
parent
cbf1b5d9d5
commit
c8bed8791a
4 changed files with 42 additions and 14 deletions
|
@ -200,8 +200,10 @@ class Blockchain(util.PrintError):
|
|||
parent_id = self.parent_id
|
||||
checkpoint = self.checkpoint
|
||||
parent = self.parent()
|
||||
self.assert_headers_file_available(self.path())
|
||||
with open(self.path(), 'rb') as f:
|
||||
my_data = f.read()
|
||||
self.assert_headers_file_available(parent.path())
|
||||
with open(parent.path(), 'rb') as f:
|
||||
f.seek((checkpoint - parent.checkpoint)*80)
|
||||
parent_data = f.read(parent_branch_size*80)
|
||||
|
@ -224,9 +226,18 @@ class Blockchain(util.PrintError):
|
|||
blockchains[self.checkpoint] = self
|
||||
blockchains[parent.checkpoint] = parent
|
||||
|
||||
def assert_headers_file_available(self, path):
|
||||
if os.path.exists(path):
|
||||
return
|
||||
elif not os.path.exists(util.get_headers_dir(self.config)):
|
||||
raise FileNotFoundError('Electrum headers_dir does not exist. Was it deleted while running?')
|
||||
else:
|
||||
raise FileNotFoundError('Cannot find headers file but headers_dir is there. Should be at {}'.format(path))
|
||||
|
||||
def write(self, data, offset, truncate=True):
|
||||
filename = self.path()
|
||||
with self.lock:
|
||||
self.assert_headers_file_available(filename)
|
||||
with open(filename, 'rb+') as f:
|
||||
if truncate and offset != self._size*80:
|
||||
f.seek(offset)
|
||||
|
@ -255,16 +266,12 @@ class Blockchain(util.PrintError):
|
|||
return
|
||||
delta = height - self.checkpoint
|
||||
name = self.path()
|
||||
if os.path.exists(name):
|
||||
with open(name, 'rb') as f:
|
||||
f.seek(delta * 80)
|
||||
h = f.read(80)
|
||||
if len(h) < 80:
|
||||
raise Exception('Expected to read a full header. This was only {} bytes'.format(len(h)))
|
||||
elif not os.path.exists(util.get_headers_dir(self.config)):
|
||||
raise Exception('Electrum datadir does not exist. Was it deleted while running?')
|
||||
else:
|
||||
raise Exception('Cannot find headers file but datadir is there. Should be at {}'.format(name))
|
||||
self.assert_headers_file_available(name)
|
||||
with open(name, 'rb') as f:
|
||||
f.seek(delta * 80)
|
||||
h = f.read(80)
|
||||
if len(h) < 80:
|
||||
raise Exception('Expected to read a full header. This was only {} bytes'.format(len(h)))
|
||||
if h == bytes([0])*80:
|
||||
return None
|
||||
return deserialize_header(h, height)
|
||||
|
|
|
@ -172,6 +172,7 @@ class TcpConnection(threading.Thread, util.PrintError):
|
|||
# workaround android bug
|
||||
cert = re.sub("([^\n])-----END CERTIFICATE-----","\\1\n-----END CERTIFICATE-----",cert)
|
||||
temporary_path = cert_path + '.temp'
|
||||
util.assert_datadir_available(self.config_path)
|
||||
with open(temporary_path, "w", encoding='utf-8') as f:
|
||||
f.write(cert)
|
||||
f.flush()
|
||||
|
@ -201,6 +202,7 @@ class TcpConnection(threading.Thread, util.PrintError):
|
|||
os.unlink(rej)
|
||||
os.rename(temporary_path, rej)
|
||||
else:
|
||||
util.assert_datadir_available(self.config_path)
|
||||
with open(cert_path, encoding='utf-8') as f:
|
||||
cert = f.read()
|
||||
try:
|
||||
|
|
|
@ -6,6 +6,7 @@ import stat
|
|||
|
||||
from copy import deepcopy
|
||||
|
||||
from . import util
|
||||
from .util import (user_dir, print_error, PrintError,
|
||||
NoDynamicFeeEstimates, format_fee_satoshis)
|
||||
from .i18n import _
|
||||
|
@ -236,10 +237,7 @@ class SimpleConfig(PrintError):
|
|||
return path
|
||||
|
||||
# default path
|
||||
if not os.path.exists(self.path):
|
||||
raise FileNotFoundError(
|
||||
_('Electrum datadir does not exist. Was it deleted while running?') + '\n' +
|
||||
_('Should be at {}').format(self.path))
|
||||
util.assert_datadir_available(self.path)
|
||||
dirpath = os.path.join(self.path, "wallets")
|
||||
if not os.path.exists(dirpath):
|
||||
if os.path.islink(dirpath):
|
||||
|
|
21
lib/util.py
21
lib/util.py
|
@ -326,10 +326,31 @@ def android_check_data_dir():
|
|||
shutil.move(old_electrum_dir, data_dir)
|
||||
return data_dir
|
||||
|
||||
|
||||
def get_headers_dir(config):
|
||||
return android_headers_dir() if 'ANDROID_DATA' in os.environ else config.path
|
||||
|
||||
|
||||
def assert_datadir_available(config_path):
|
||||
path = config_path
|
||||
if os.path.exists(path):
|
||||
return
|
||||
else:
|
||||
raise FileNotFoundError(
|
||||
'Electrum datadir does not exist. Was it deleted while running?' + '\n' +
|
||||
'Should be at {}'.format(path))
|
||||
|
||||
|
||||
def assert_file_in_datadir_available(path, config_path):
|
||||
if os.path.exists(path):
|
||||
return
|
||||
else:
|
||||
assert_datadir_available(config_path)
|
||||
raise FileNotFoundError(
|
||||
'Cannot find file but datadir is there.' + '\n' +
|
||||
'Should be at {}'.format(path))
|
||||
|
||||
|
||||
def assert_bytes(*args):
|
||||
"""
|
||||
porting helper, assert args type
|
||||
|
|
Loading…
Add table
Reference in a new issue