class TestWithDB(TestCase): db_file = Path() / 'data.db' def setUp(self) -> None: super().setUp() basicConfig(level=INFO) self.db_file.unlink(missing_ok=True) self.db = Database(f'sqlite:///{self.db_file}') async def init(): await self.db.connect() await migrate(self.db) get_event_loop().run_until_complete(init()) def tearDown(self) -> None: super().tearDown() get_event_loop().run_until_complete(self.db.disconnect()) self.db_file.unlink(missing_ok=True)
class ShowsDB(object): def __init__(self): self.database = Database(url=DATABASE_URL, ssl='require', min_size=1, max_size=2) self.metadata = MetaData() self.shows = Table('shows', self.metadata, Column('show_id', Integer, primary_key=True), Column('type', String, nullable=True), Column('title', String, nullable=True), Column('director', String, nullable=True), Column('cast', String, nullable=True), Column('country', String, nullable=True), Column('date_added', Date, nullable=True), Column('release_year', Integer, nullable=True), Column('rating', String, nullable=True), Column('duration', String, nullable=True), Column('listed_in', String, nullable=True), Column('description', String, nullable=True)) def initialize(self): engine = create_engine(DATABASE_URL) self.metadata.create_all(engine) return self def connect(self): return self.database.connect() def disconnect(self): return self.database.disconnect() def execute(self, query, get='all'): if get != 'all': return self.database.fetch_one(query) return self.database.fetch_all(query) def fetch_all(self, query): return self.database.fetch_all(query)