|
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