Skip to content

Commit 2720c25

Browse files
authored
Merge pull request #11 from igormagalhaesr/app-settings
App settings
2 parents 1d796c0 + eb56290 commit 2720c25

File tree

3 files changed

+47
-14
lines changed

3 files changed

+47
-14
lines changed

src/app/core/config.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,38 @@ class CryptSettings(BaseSettings):
1818
ACCESS_TOKEN_EXPIRE_MINUTES: int = config("ACCESS_TOKEN_EXPIRE_MINUTES")
1919

2020

21-
class PostgresSettings(BaseSettings):
21+
class DatabaseSettings(BaseSettings):
22+
pass
23+
24+
25+
class SQLiteSettings(DatabaseSettings):
26+
SQLITE_URI: str = config("SQLITE_URI", default="./sql_app.db")
27+
SQLITE_SYNC_PREFIX: str = config("SQLITE_SYNC_PREFIX", default="sqlite:///")
28+
SQLITE_ASYNC_PREFIX: str = config("SQLITE_ASYNC_PREFIX", default="sqlite+aiosqlite:///")
29+
30+
31+
class MySQLSettings(DatabaseSettings):
32+
MYSQL_USER: str = config("MYSQL_USER", default="username")
33+
MYSQL_PASSWORD: str = config("MYSQL_PASSWORD", default="password")
34+
MYSQL_SERVER: str = config("MYSQL_SERVER", default="localhost")
35+
MYSQL_PORT: str = config("MYSQL_PORT", default=5432)
36+
MYSQL_DB: str = config("MYSQL_DB", default="dbname")
37+
MYSQL_URI: str = f"{MYSQL_USER}:{MYSQL_PASSWORD}@{MYSQL_SERVER}:{MYSQL_PORT}/{MYSQL_DB}"
38+
MYSQL_SYNC_PREFIX: str = config("MYSQL_SYNC_PREFIX", default="mysql://")
39+
MYSQL_ASYNC_PREFIX: str = config("MYSQL_ASYNC_PREFIX", default="mysql+aiomysql://")
40+
MYSQL_URL: str = config("MYSQL_URL", default=None)
41+
42+
43+
class PostgresSettings(DatabaseSettings):
2244
POSTGRES_USER: str = config("POSTGRES_USER", default="postgres")
2345
POSTGRES_PASSWORD: str = config("POSTGRES_PASSWORD", default="postgres")
2446
POSTGRES_SERVER: str = config("POSTGRES_SERVER", default="localhost")
2547
POSTGRES_PORT: str = config("POSTGRES_PORT", default=5432)
2648
POSTGRES_DB: str = config("POSTGRES_DB", default="postgres")
49+
POSTGRES_SYNC_PREFIX: str = config("POSTGRES_SYNC_PREFIX", default="postgresql://")
50+
POSTGRES_ASYNC_PREFIX: str = config("POSTGRES_ASYNC_PREFIX", default="postgresql+asyncpg://")
2751
POSTGRES_URI: str = f"{POSTGRES_USER}:{POSTGRES_PASSWORD}@{POSTGRES_SERVER}:{POSTGRES_PORT}/{POSTGRES_DB}"
52+
POSTGRES_URL: str | None = config("POSTGRES_URL", default=None)
2853

2954

3055
class FirstUserSettings(BaseSettings):

src/app/core/database.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@ class Base(DeclarativeBase, MappedAsDataclass):
99
pass
1010

1111
DATABASE_URI = settings.POSTGRES_URI
12-
ASYNC_SQLALCHEMY_DATABASE_URL = f"postgresql+asyncpg://{DATABASE_URI}"
12+
DATABASE_PREFIX = settings.POSTGRES_ASYNC_PREFIX
13+
DATABASE_URL = f"{DATABASE_PREFIX}{DATABASE_URI}"
1314

1415
async_engine = create_async_engine(
15-
ASYNC_SQLALCHEMY_DATABASE_URL,
16-
echo=False,
16+
DATABASE_URL,
17+
echo=False,
1718
future=True
1819
)
1920

src/app/main.py

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
from app.core.database import Base
55
from app.core.database import async_engine as engine
6-
from app.core.config import settings
6+
from app.core.config import settings, DatabaseSettings, RedisCacheSettings, AppSettings
77
from app.api import router
88
from app.core import cache
99

@@ -25,17 +25,24 @@ async def close_redis_cache_pool():
2525

2626
# -------------- application --------------
2727
def create_application() -> FastAPI:
28-
application = FastAPI(
29-
title=settings.APP_NAME,
30-
description=settings.APP_DESCRIPTION,
31-
contact=settings.CONTACT,
32-
license_info=settings.CONTACT
33-
)
28+
if isinstance(settings, AppSettings):
29+
application = FastAPI(
30+
title=settings.APP_NAME,
31+
description=settings.APP_DESCRIPTION,
32+
contact=settings.CONTACT,
33+
license_info=settings.CONTACT
34+
)
35+
else:
36+
application = FastAPI()
3437

3538
application.include_router(router)
36-
application.add_event_handler("startup", create_tables)
37-
application.add_event_handler("startup", create_redis_cache_pool)
38-
application.add_event_handler("shutdown", close_redis_cache_pool)
39+
40+
if isinstance(settings, DatabaseSettings):
41+
application.add_event_handler("startup", create_tables)
42+
43+
if isinstance(settings, RedisCacheSettings):
44+
application.add_event_handler("startup", create_redis_cache_pool)
45+
application.add_event_handler("shutdown", close_redis_cache_pool)
3946

4047
return application
4148

0 commit comments

Comments
 (0)