def Collection(path, lock=True, server=False, sync=True): "Open a new or existing collection. Path must be unicode." assert path.endswith(".anki2") path = os.path.abspath(path) create = not os.path.exists(path) if create: base = os.path.basename(path) for c in ("/", ":", "\\"): assert c not in base # connect db = DB(path) if create: ver = _createDB(db) else: ver = _upgradeSchema(db) db.execute("pragma temp_store = memory") if sync: db.execute("pragma cache_size = 10000") db.execute("pragma journal_mode = wal") else: db.execute("pragma synchronous = off") # add db to col and do any remaining upgrades col = _Collection(db, server) if ver < SCHEMA_VERSION: _upgrade(col, ver) elif create: # add in reverse order so basic is default addClozeModel(col) addBasicModel(col) col.save() if lock: col.lock() return col
def Collection(path, lock=True, server=False, sync=True): "Open a new or existing collection. Path must be unicode." assert path.endswith(".anki2") path = os.path.abspath(path) create = not os.path.exists(path) if create: base = os.path.basename(path) for c in ("/", ":", "\\"): assert c not in base # connect db = DB(path) if create: ver = _createDB(db) else: ver = _upgradeSchema(db) db.execute("pragma temp_store = memory") if sync: db.execute("pragma cache_size = 10000") db.execute("pragma journal_mode = wal") else: db.execute("pragma synchronous = off") # add db to col and do any remaining upgrades col = _Collection(db, server) if ver < SCHEMA_VERSION: _upgrade(col, ver) elif create: # add in reverse order so basic is default addClozeModel(col) addForwardOptionalReverse(col) addForwardReverse(col) addBasicModel(col) col.save() if lock: col.lock() return col
def Collection( path: str, backend: Optional[RustBackend] = None, server: bool = False, log: bool = False, ) -> _Collection: "Open a new or existing collection. Path must be unicode." assert path.endswith(".anki2") if backend is None: backend = RustBackend(server=server) (media_dir, media_db) = media_paths_from_col_path(path) log_path = "" should_log = not server and log if should_log: log_path = path.replace(".anki2", "2.log") path = os.path.abspath(path) # connect backend.open_collection(path, media_dir, media_db, log_path) db = DBProxy(weakref.proxy(backend), path) # add db to col and do any remaining upgrades col = _Collection(db, backend=backend, server=server) db.begin() return col
def upgrade(self): assert self.tmppath self.db = DB(self.tmppath) self._upgradeSchema() self.col = _Collection(self.db) self._upgradeRest() self.tmppath = None return self.col
def Collection(path: str, lock: bool = True, server: Optional[ServerData] = None, log: bool = False) -> _Collection: "Open a new or existing collection. Path must be unicode." assert path.endswith(".anki2") (media_dir, media_db) = media_paths_from_col_path(path) log_path = "" if not server: log_path = path.replace(".anki2", "2.log") backend = RustBackend(path, media_dir, media_db, log_path) path = os.path.abspath(path) create = not os.path.exists(path) if create: base = os.path.basename(path) for c in ("/", ":", "\\"): assert c not in base # connect db = DB(path) db.setAutocommit(True) if create: ver = _createDB(db) else: ver = _upgradeSchema(db) db.execute("pragma temp_store = memory") db.execute("pragma cache_size = 10000") if not isWin: db.execute("pragma journal_mode = wal") db.setAutocommit(False) # add db to col and do any remaining upgrades col = _Collection(db, backend=backend, server=server, log=log) if ver < SCHEMA_VERSION: _upgrade(col, ver) elif ver > SCHEMA_VERSION: raise Exception("This file requires a newer version of Anki.") elif create: # add in reverse order so basic is default addClozeModel(col) addBasicTypingModel(col) addForwardOptionalReverse(col) addForwardReverse(col) addBasicModel(col) col.save() if lock: try: col.lock() except: col.db.close() raise return col
def Collection(path: str, lock: bool = True, server: Optional[ServerData] = None, log: bool = False) -> _Collection: "Open a new or existing collection. Path must be unicode." backend = Backend(path) # fixme: this call is temporarily here to ensure the brige is working # on all platforms, and should be removed in a future beta assert backend.plus_one(5) == 6 assert path.endswith(".anki2") path = os.path.abspath(path) create = not os.path.exists(path) if create: base = os.path.basename(path) for c in ("/", ":", "\\"): assert c not in base # connect db = DB(path) db.setAutocommit(True) if create: ver = _createDB(db) else: ver = _upgradeSchema(db) db.execute("pragma temp_store = memory") db.execute("pragma cache_size = 10000") if not isWin: db.execute("pragma journal_mode = wal") db.setAutocommit(False) # add db to col and do any remaining upgrades col = _Collection(db, backend=backend, server=server, log=log) if ver < SCHEMA_VERSION: _upgrade(col, ver) elif ver > SCHEMA_VERSION: raise Exception("This file requires a newer version of Anki.") elif create: # add in reverse order so basic is default addClozeModel(col) addBasicTypingModel(col) addForwardOptionalReverse(col) addForwardReverse(col) addBasicModel(col) col.save() if lock: try: col.lock() except: col.db.close() raise return col
def Collection(path, lock=True, server=False, log=False): """Open a new or existing collection. Path must be unicode. server -- always False in anki without add-on. log -- Boolean stating whether log must be made in the file, with same name than the collection, but ending in .log. """ assert path.endswith(".anki2") path = os.path.abspath(path) create = not os.path.exists(path) if create: base = os.path.basename(path) for c in ("/", ":", "\\"): assert c not in base # connect db = DB(path) db.setAutocommit(True) if create: ver = _createDB(db) else: ver = _upgradeSchema(db) db.execute("pragma temp_store = memory") db.execute("pragma cache_size = 10000") if not isWin: db.execute("pragma journal_mode = wal") db.setAutocommit(False) # add db to col and do any remaining upgrades col = _Collection(db, server, log) if ver < SCHEMA_VERSION: _upgrade(col, ver) elif ver > SCHEMA_VERSION: raise Exception("This file requires a newer version of Anki.") elif create: # add in reverse order so basic is default addClozeModel(col) addBasicTypingModel(col) addForwardOptionalReverse(col) addForwardReverse(col) addBasicModel(col) col.save() if lock: col.lock() return col
def Collection( path: str, backend: Optional[RustBackend] = None, server: Optional[ServerData] = None, log: bool = False, ) -> _Collection: "Open a new or existing collection. Path must be unicode." assert path.endswith(".anki2") if backend is None: backend = RustBackend(server=server is not None) (media_dir, media_db) = media_paths_from_col_path(path) log_path = "" should_log = not server and log if should_log: log_path = path.replace(".anki2", "2.log") path = os.path.abspath(path) # connect backend.open_collection(path, media_dir, media_db, log_path) db = DBProxy(weakref.proxy(backend), path) # initial setup required? create = db.scalar("select models = '{}' from col") if create: initial_db_setup(db) # add db to col and do any remaining upgrades col = _Collection(db, backend=backend, server=server, log=should_log) if create: # add in reverse order so basic is default addClozeModel(col) addBasicTypingModel(col) addForwardOptionalReverse(col) addForwardReverse(col) addBasicModel(col) col.save() else: db.begin() return col
def Collection(path, lock=True, server=False, log=False): "Open a new or existing collection. Path must be unicode." assert path.endswith(".anki2") path = os.path.abspath(path) create = not os.path.exists(path) if create: base = os.path.basename(path) for c in ("/", ":", "\\"): assert c not in base # connect db = DB(path) db.setAutocommit(True) if create: ver = _createDB(db) else: ver = _upgradeSchema(db) db.execute("pragma temp_store = memory") db.execute("pragma cache_size = 10000") if not isWin: db.execute("pragma journal_mode = wal") db.setAutocommit(False) # add db to col and do any remaining upgrades col = _Collection(db, server, log) if ver < SCHEMA_VERSION: _upgrade(col, ver) elif ver > SCHEMA_VERSION: raise Exception("This file requires a newer version of Anki.") elif create: # add in reverse order so basic is default addClozeModel(col) addBasicTypingModel(col) addForwardOptionalReverse(col) addForwardReverse(col) addBasicModel(col) col.save() if lock: col.lock() return col
def _openCol(self): self.col = _Collection(self.db)