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

This commit is contained in:
norohind committed 2022-04-10 23:43:31 +03:00
1 parent a5e401ebea
commit 244102c291
1 file changed
+18
+18
View File
@@ -1,4 +1,6 @@
import sqlite3
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
import os
class Hook(ABC): # See at Hook class as to observer in observer pattern 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 @abstractmethod
def update(self, operation_id: int) -> None: def update(self, operation_id: int) -> None:
raise NotImplemented 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