| 
2 | 2 | Database  | 
3 | 3 | """  | 
4 | 4 | 
 
  | 
5 |  | -from typing import NoReturn, Self  | 
 | 5 | +from typing import Self  | 
6 | 6 | 
 
  | 
7 | 7 | from sqlalchemy.ext.asyncio import (AsyncEngine, async_sessionmaker,  | 
8 | 8 |  create_async_engine)  | 
 | 
15 | 15 | class Database:  | 
16 | 16 |  _instance = None  | 
17 | 17 | 
 
  | 
18 |  | - def __new__(cls, *args, **kwargs) -> Self:  | 
 | 18 | + def __new__(cls, *args, **kwargs) -> 'Database':  | 
19 | 19 |  if cls._instance is None:  | 
20 | 20 |  cls._instance = super(Database, cls).__new__(cls)  | 
21 | 21 |  return cls._instance  | 
22 | 22 | 
 
  | 
23 | 23 |  def __init__(  | 
24 |  | - self,  | 
25 |  | - engine: AsyncEngine | None = None,  | 
26 |  | - session: AsyncSession | None = None,  | 
 | 24 | +  self,  | 
 | 25 | +  engine: AsyncEngine | None = None,  | 
 | 26 | +  session: AsyncSession | None = None,  | 
27 | 27 |  ) -> None:  | 
28 | 28 |  if not hasattr(self, 'initialized'):  | 
29 |  | - self.engine = engine  | 
30 |  | - self.session = session  | 
 | 29 | + self.__engine = engine  | 
 | 30 | + self.__session = session  | 
31 | 31 |  self.initialized = True  | 
32 | 32 | 
 
  | 
33 |  | - async def __set_async_engine(self) -> NoReturn:  | 
34 |  | - if self.engine is None:  | 
35 |  | - self.engine = create_async_engine(  | 
 | 33 | + async def __set_async_engine(self) -> None:  | 
 | 34 | + if self.__engine is None:  | 
 | 35 | + self.__engine = create_async_engine(  | 
36 | 36 |  settings.pg_dsn.unicode_string(), echo=False, future=True  | 
37 | 37 |  )  | 
38 | 38 | 
 
  | 
39 |  | - async def __set_async_session(self) -> NoReturn:  | 
40 |  | - if self.session is None:  | 
41 |  | - self.session = async_sessionmaker(  | 
 | 39 | + async def __set_async_session(self) -> None:  | 
 | 40 | + if self.__session is None:  | 
 | 41 | + self.__session = async_sessionmaker(  | 
42 | 42 |  autocommit=False,  | 
43 | 43 |  autoflush=False,  | 
44 |  | - bind=self.engine,  | 
 | 44 | + bind=self.__engine,  | 
45 | 45 |  class_=AsyncSession,  | 
46 | 46 |  expire_on_commit=False,  | 
47 | 47 |  )()  | 
48 | 48 | 
 
  | 
49 |  | - async def __set_repositories(self) -> NoReturn:  | 
50 |  | - if self.session is not None:  | 
51 |  | - self.user = repos.UserRepo(session=self.session)  | 
 | 49 | + async def __set_repositories(self) -> None:  | 
 | 50 | + if self.__session is not None:  | 
 | 51 | + self.user = repos.UserRepo(session=self.__session)  | 
52 | 52 | 
 
  | 
53 | 53 |  async def __aenter__(self) -> Self:  | 
54 | 54 |  await self.__set_async_engine()  | 
55 | 55 |  await self.__set_async_session()  | 
56 | 56 |  await self.__set_repositories()  | 
57 | 57 |  return self  | 
58 | 58 | 
 
  | 
59 |  | - async def __aexit__(self, exc_type, exc_value, traceback) -> NoReturn:  | 
60 |  | - if self.session is not None:  | 
61 |  | - await self.session.close()  | 
 | 59 | + async def __aexit__(self, exc_type, exc_value, traceback) -> None:  | 
 | 60 | + if self.__session is not None:  | 
 | 61 | + await self.__session.commit()  | 
 | 62 | + await self.__session.close()  | 
 | 63 | + self.__session = None  | 
0 commit comments