Source code for koapy.utils.store.SQLiteStore

from sqlalchemy import create_engine, inspect

from .sqlalchemy.Base import Base
from .sqlalchemy.Library import Library
from .sqlalchemy.Session import Session
from .SQLiteStoreLibrary import SQLiteStoreLibrary


[docs]class SQLiteStore: def __init__(self, filename): self._filename = filename self._engine = create_engine("sqlite:///" + self._filename) Session.configure(bind=self._engine) inspector = inspect(self._engine) table_names = inspector.get_table_names() if len(table_names) == 0: Base.metadata.create_all(self._engine) inspector = inspect(self._engine) table_names = inspector.get_table_names() assert all(table_name in table_names for table_name in Base.metadata.tables) self._session = Session() self._library_cache = {}
[docs] def list_libraries(self): libraries = self._session.query(Library).all() libraries = [library.name for library in libraries] return libraries
def _get_library(self, library): library = self._session.query(Library).filter(Library.name == library).one() return library
[docs] def library_exists(self, library): try: _library = self._get_library(library) return True except: return False
[docs] def initialize_library(self, library): library_name = library if not self.library_exists(library_name): library = Library(name=library_name) try: self._session.add(library) self._session.commit() except: self._session.rollback() raise
[docs] def get_library(self, library): library_name = library if library_name in self._library_cache: return self._library_cache[library_name] library = self._get_library(library) library = SQLiteStoreLibrary(self, library) self._library_cache[library_name] = library return library
[docs] def get_or_create_library(self, library): if not self.library_exists(library): self.initialize_library(library) library = self.get_library(library) return library
[docs] def delete_library(self, library): library_name = library library = self._get_library(library_name) try: library.delete() self._session.commit() except: self._session.rollback() raise
def __getitem__(self, library): return self.get_library(library)