mirror of
https://github.com/mikf/gallery-dl.git
synced 2024-11-22 10:42:34 +01:00
[archive] implement DownloadArchiveMemory class (#5255)
keeps archive IDs in memory and only writes them to disk in a 'finalize' step
This commit is contained in:
parent
88f94190f4
commit
215abbc3e4
@ -54,3 +54,45 @@ class DownloadArchive():
|
|||||||
self.cursor.execute(
|
self.cursor.execute(
|
||||||
"SELECT 1 FROM archive WHERE entry=? LIMIT 1", (key,))
|
"SELECT 1 FROM archive WHERE entry=? LIMIT 1", (key,))
|
||||||
return self.cursor.fetchone()
|
return self.cursor.fetchone()
|
||||||
|
|
||||||
|
def finalize(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class DownloadArchiveMemory(DownloadArchive):
|
||||||
|
|
||||||
|
def __init__(self, path, format_string, pragma=None,
|
||||||
|
cache_key="_archive_key"):
|
||||||
|
DownloadArchive.__init__(self, path, format_string, pragma, cache_key)
|
||||||
|
self.keys = set()
|
||||||
|
|
||||||
|
def add(self, kwdict):
|
||||||
|
self.keys.add(
|
||||||
|
kwdict.get(self._cache_key) or
|
||||||
|
self.keygen(kwdict))
|
||||||
|
|
||||||
|
def check(self, kwdict):
|
||||||
|
key = kwdict[self._cache_key] = self.keygen(kwdict)
|
||||||
|
if key in self.keys:
|
||||||
|
return True
|
||||||
|
self.cursor.execute(
|
||||||
|
"SELECT 1 FROM archive WHERE entry=? LIMIT 1", (key,))
|
||||||
|
return self.cursor.fetchone()
|
||||||
|
|
||||||
|
def finalize(self):
|
||||||
|
if not self.keys:
|
||||||
|
return
|
||||||
|
|
||||||
|
cursor = self.cursor
|
||||||
|
with self.connection:
|
||||||
|
try:
|
||||||
|
cursor.execute("BEGIN")
|
||||||
|
except sqlite3.OperationalError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
stmt = "INSERT OR IGNORE INTO archive (entry) VALUES (?)"
|
||||||
|
if len(self.keys) < 100:
|
||||||
|
for key in self.keys:
|
||||||
|
cursor.execute(stmt, (key,))
|
||||||
|
else:
|
||||||
|
cursor.executemany(stmt, ((key,) for key in self.keys))
|
||||||
|
Loading…
Reference in New Issue
Block a user