Вынес sqlite в отдельный модуль

This commit is contained in:
Alexey Polyakov
2026-05-08 15:27:05 +03:00
parent 2d3b9285bf
commit 4d51c70f8e
2 changed files with 61 additions and 66 deletions

60
src/common/sqlite.py Normal file
View File

@@ -0,0 +1,60 @@
class SQLiteCursorCompat:
def __init__(self, connection):
self.connection = connection
self.cursor = None
async def __aenter__(self):
self.cursor = await self.connection.cursor()
return self
async def __aexit__(self, exc_type, exc, tb):
if self.cursor is not None:
await self.cursor.close()
self.cursor = None
@property
def lastrowid(self):
return None if self.cursor is None else self.cursor.lastrowid
def _normalize_query(self, query):
return query.replace("%s", "?").replace(
"UNIX_TIMESTAMP()", "CAST(strftime('%s','now') AS INTEGER)"
)
async def execute(self, query, params=()):
normalized_query = self._normalize_query(query)
if params is None:
params = ()
elif not isinstance(params, (tuple, list, dict)):
params = (params,)
await self.cursor.execute(normalized_query, params)
async def fetchone(self):
row = await self.cursor.fetchone()
if row is None:
return None
return dict(row)
async def fetchall(self):
rows = await self.cursor.fetchall()
return [dict(row) for row in rows]
class SQLiteConnectionCompat:
def __init__(self, connection):
self.connection = connection
async def __aenter__(self):
return self
async def __aexit__(self, exc_type, exc, tb):
return False
def cursor(self):
return SQLiteCursorCompat(self.connection)
class SQLitePoolCompat:
def __init__(self, connection):
self.connection = connection
def acquire(self):
return SQLiteConnectionCompat(self.connection)

View File

@@ -8,6 +8,7 @@ import traceback
from common.config import ServerConfig from common.config import ServerConfig
from common.push import PushService from common.push import PushService
from common.sqlite import SQLitePoolCompat
from oneme.controller import OnemeController from oneme.controller import OnemeController
from tamtam.controller import TTController from tamtam.controller import TTController
from telegrambot.controller import TelegramBotController from telegrambot.controller import TelegramBotController
@@ -15,71 +16,6 @@ from telegrambot.controller import TelegramBotController
# Конфиг сервера # Конфиг сервера
server_config = ServerConfig() server_config = ServerConfig()
class SQLiteCursorCompat:
def __init__(self, connection):
self.connection = connection
self.cursor = None
async def __aenter__(self):
self.cursor = await self.connection.cursor()
return self
async def __aexit__(self, exc_type, exc, tb):
if self.cursor is not None:
await self.cursor.close()
self.cursor = None
@property
def lastrowid(self):
return None if self.cursor is None else self.cursor.lastrowid
def _normalize_query(self, query):
return query.replace("%s", "?").replace(
"UNIX_TIMESTAMP()", "CAST(strftime('%s','now') AS INTEGER)"
)
async def execute(self, query, params=()):
normalized_query = self._normalize_query(query)
if params is None:
params = ()
elif not isinstance(params, (tuple, list, dict)):
params = (params,)
await self.cursor.execute(normalized_query, params)
async def fetchone(self):
row = await self.cursor.fetchone()
if row is None:
return None
return dict(row)
async def fetchall(self):
rows = await self.cursor.fetchall()
return [dict(row) for row in rows]
class SQLiteConnectionCompat:
def __init__(self, connection):
self.connection = connection
async def __aenter__(self):
return self
async def __aexit__(self, exc_type, exc, tb):
return False
def cursor(self):
return SQLiteCursorCompat(self.connection)
class SQLitePoolCompat:
def __init__(self, connection):
self.connection = connection
def acquire(self):
return SQLiteConnectionCompat(self.connection)
async def init_db(): async def init_db():
"""Инициализация базы данных""" """Инициализация базы данных"""
@@ -117,7 +53,6 @@ def init_ssl():
# Возвращаем # Возвращаем
return ssl_context return ssl_context
def set_logging(): def set_logging():
"""Настройка уровня логирования""" """Настройка уровня логирования"""
# Настройка уровня логирования # Настройка уровня логирования