summaryrefslogtreecommitdiff
path: root/autoimport.py
diff options
context:
space:
mode:
Diffstat (limited to 'autoimport.py')
-rwxr-xr-xautoimport.py34
1 files changed, 19 insertions, 15 deletions
diff --git a/autoimport.py b/autoimport.py
index d44c012..8c61a18 100755
--- a/autoimport.py
+++ b/autoimport.py
@@ -9,7 +9,6 @@ import io
import multiprocessing
import optparse
import os
-import sqlite3
import subprocess
import tempfile
import urllib
@@ -17,6 +16,9 @@ import urllib
import concurrent.futures
from debian import deb822
from debian.debian_support import version_compare
+import sqlalchemy
+
+from dedup.utils import enable_sqlite_foreign_keys
from readyaml import readyaml
@@ -84,13 +86,12 @@ def main():
parser.add_option("-p", "--prune", action="store_true",
help="prune packages old packages")
parser.add_option("-d", "--database", action="store",
- default="test.sqlite3",
- help="path to the sqlite3 database file")
+ default="sqlite:///test.sqlite3",
+ help="location of the database")
options, args = parser.parse_args()
tmpdir = tempfile.mkdtemp(prefix=b"debian-dedup")
- db = sqlite3.connect(options.database)
- cur = db.cursor()
- cur.execute("PRAGMA foreign_keys = ON;")
+ db = sqlalchemy.create_engine("sqlite:///test.sqlite3")
+ enable_sqlite_foreign_keys(db)
e = concurrent.futures.ThreadPoolExecutor(multiprocessing.cpu_count())
pkgs = {}
for d in args:
@@ -103,8 +104,9 @@ def main():
process_file(pkgs, d)
print("reading database")
- cur.execute("SELECT name, version FROM package;")
- knownpkgs = dict((row[0], row[1]) for row in cur.fetchall())
+ with db.begin() as conn:
+ cur = conn.execute("SELECT name, version FROM package;")
+ knownpkgs = dict((row[0], row[1]) for row in cur.fetchall())
distpkgs = set(pkgs.keys())
if options.new:
for name in distpkgs:
@@ -128,7 +130,8 @@ def main():
print("sqlimporting %s" % name)
with open(inf) as inp:
try:
- readyaml(db, inp)
+ with db.begin() as conn:
+ readyaml(conn, inp)
except Exception as exc:
print("%s failed sql with exception %r" % (name, exc))
else:
@@ -136,12 +139,13 @@ def main():
if options.prune:
delpkgs = knownpkgs - distpkgs
- print("clearing packages %s" % " ".join(delpkgs))
- cur.executemany("DELETE FROM package WHERE name = ?;",
- ((pkg,) for pkg in delpkgs))
- # Tables content, dependency and sharing will also be pruned
- # due to ON DELETE CASCADE clauses.
- db.commit()
+ if delpkgs:
+ print("clearing packages %s" % " ".join(delpkgs))
+ with db.begin() as conn:
+ conn.execute(sqlalchemy.text("DELETE FROM package WHERE name = :name;"),
+ [dict(name=pkg) for pkg in delpkgs])
+ # Tables content, dependency and sharing will also be pruned
+ # due to ON DELETE CASCADE clauses.
try:
os.rmdir(tmpdir)
except OSError as err: