Make hash and size a lazy property (#1837)

* use inspect data for hash and file size
* make hash and cached_size lazy properties
* move hash property near size
pull/1870/head
Forest Gregg 2022-10-27 16:51:20 -04:00 zatwierdzone przez GitHub
rodzic d2ca13b699
commit b912d92b65
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
1 zmienionych plików z 24 dodań i 12 usunięć

Wyświetl plik

@ -39,7 +39,7 @@ class Database:
self.memory_name = memory_name
if memory_name is not None:
self.is_memory = True
self.hash = None
self.cached_hash = None
self.cached_size = None
self._cached_table_counts = None
self._write_thread = None
@ -47,14 +47,6 @@ class Database:
# These are used when in non-threaded mode:
self._read_connection = None
self._write_connection = None
if not self.is_mutable and not self.is_memory:
if self.ds.inspect_data and self.ds.inspect_data.get(self.name):
self.hash = self.ds.inspect_data[self.name]["hash"]
self.cached_size = self.ds.inspect_data[self.name]["size"]
else:
p = Path(path)
self.hash = inspect_hash(p)
self.cached_size = p.stat().st_size
@property
def cached_table_counts(self):
@ -266,14 +258,34 @@ class Database:
results = await self.execute_fn(sql_operation_in_thread)
return results
@property
def hash(self):
if self.cached_hash is not None:
return self.cached_hash
elif self.is_mutable or self.is_memory:
return None
elif self.ds.inspect_data and self.ds.inspect_data.get(self.name):
self.cached_hash = self.ds.inspect_data[self.name]["hash"]
return self.cached_hash
else:
p = Path(self.path)
self.cached_hash = inspect_hash(p)
return self.cached_hash
@property
def size(self):
if self.is_memory:
return 0
if self.cached_size is not None:
return self.cached_size
else:
elif self.is_memory:
return 0
elif self.is_mutable:
return Path(self.path).stat().st_size
elif self.ds.inspect_data and self.ds.inspect_data.get(self.name):
self.cached_size = self.ds.inspect_data[self.name]["size"]
return self.cached_size
else:
self.cached_size = Path(self.path).stat().st_size
return self.cached_size
async def table_counts(self, limit=10):
if not self.is_mutable and self.cached_table_counts is not None: