mirror of
https://github.com/norohind/jubilant-system-core.git
synced 2026-10-22 06:52:08 +03:00
Hook.py: add get_db() as method of Hook class
This commit is contained in:
1 file changed
+18
@@ -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
|
||||||
Reference in new issue
Block a user