|
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