From 090529c4d7409faeb7271ff910efcc495d3d1cc4 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Thu, 17 Sep 2009 00:25:53 +0900 Subject: [PATCH] add option to initialize via apsw --- anki/deck.py | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/anki/deck.py b/anki/deck.py index 6a91e546c..6d59b4e6b 100644 --- a/anki/deck.py +++ b/anki/deck.py @@ -2664,7 +2664,7 @@ backupDir = os.path.expanduser("~/.anki/backups") class DeckStorage(object): - def Deck(path=None, backup=True, lock=True): + def Deck(path=None, backup=True, lock=True, apsw=False): "Create a new deck or attach to an existing one." create = True if path is None: @@ -2677,7 +2677,7 @@ class DeckStorage(object): # sqlite needs utf8 sqlpath = path.encode("utf-8") try: - (engine, session) = DeckStorage._attach(sqlpath, create) + (engine, session) = DeckStorage._attach(sqlpath, create, apsw) s = session() metadata.create_all(engine) if create: @@ -2791,15 +2791,23 @@ class DeckStorage(object): return deck Deck = staticmethod(Deck) - def _attach(path, create): + def _attach(path, create, apsw=False): "Attach to a file, initializing DB" - if path is None: - path = "sqlite://" + if apsw: + import apsw + acon = apsw.Connection(path) + def connect(): + pycon = sqlite.connect(acon) + return pycon + engine = create_engine('sqlite:///', creator=connect) else: - path = "sqlite:///" + path - engine = create_engine(path, - strategy='threadlocal', - connect_args={'timeout': 0}) + if path is None: + path = "sqlite://" + else: + path = "sqlite:///" + path + engine = create_engine(path, + strategy='threadlocal', + connect_args={'timeout': 2}) session = sessionmaker(bind=engine, autoflush=False, autocommit=True)