mirror of
https://github.com/norohind/jubilant-system-core.git
synced 2025-04-20 21:17:38 +03:00
Hook.py: add get_db() as method of Hook class
This commit is contained in:
parent
a5e401ebea
commit
244102c291
18
Hook.py
18
Hook.py
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user