Hook.py: add get_db() as method of Hook class

This commit is contained in:
norohind 2022-04-10 23:43:31 +03:00
parent a5e401ebea
commit 244102c291
Signed by: norohind
GPG Key ID: 01C3BECC26FB59E1

18
Hook.py
View File

@ -1,4 +1,6 @@
import sqlite3
from abc import ABC, abstractmethod
import os
class Hook(ABC): # See at Hook class as to observer in observer pattern
@ -9,3 +11,19 @@ class Hook(ABC): # See at Hook class as to observer in observer pattern
@abstractmethod
def update(self, operation_id: int) -> None:
raise NotImplemented
@staticmethod
def get_db() -> sqlite3.Connection:
"""
One connection per request is only one method to avoid sqlite3.DatabaseError: database disk image is malformed.
Connections in sqlite are extremely cheap (0.22151980000001004 secs for 1000 just connections and
0.24141229999999325 secs for 1000 connections for this getter, thanks timeit)
and don't require to be closed, especially in RO mode. So, why not?
:return:
"""
db = sqlite3.connect(f'file:{os.environ["DB_PATH"]}?mode=ro', check_same_thread=False, uri=True)
db.row_factory = lambda c, r: dict(zip([col[0] for col in c.description], r))
return db