diff options
Diffstat (limited to 'api/app/core')
-rw-r--r-- | api/app/core/__init__.py | 0 | ||||
-rw-r--r-- | api/app/core/cache.py | 13 | ||||
-rw-r--r-- | api/app/core/config.py | 65 | ||||
-rw-r--r-- | api/app/core/db.py | 5 | ||||
-rw-r--r-- | api/app/core/netbox.py | 13 | ||||
-rw-r--r-- | api/app/core/prometheus.py | 0 |
6 files changed, 96 insertions, 0 deletions
diff --git a/api/app/core/__init__.py b/api/app/core/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/api/app/core/__init__.py diff --git a/api/app/core/cache.py b/api/app/core/cache.py new file mode 100644 index 0000000..09d03c8 --- /dev/null +++ b/api/app/core/cache.py @@ -0,0 +1,13 @@ +from app.core.config import settings +import redis + +def create_redis(): + return redis.ConnectionPool( + host=settings.REDIS_SERVER, + port=settings.REDIS_PORT, + db=settings.REDIS_DB, + decode_responses=True, + ) + + +pool = create_redis()
\ No newline at end of file diff --git a/api/app/core/config.py b/api/app/core/config.py new file mode 100644 index 0000000..d9174d8 --- /dev/null +++ b/api/app/core/config.py @@ -0,0 +1,65 @@ +from typing import Annotated, Any, Literal + +from pydantic import ( + AnyUrl, + BeforeValidator, + PostgresDsn, + computed_field +) +from pydantic_core import MultiHostUrl +from pydantic_settings import BaseSettings, SettingsConfigDict + + +def parse_cors(v: Any) -> list[str] | str: + if isinstance(v, str) and not v.startswith("["): + return [i.strip() for i in v.split(",")] + elif isinstance(v, list | str): + return v + raise ValueError(v) + + +class Settings(BaseSettings): + model_config = SettingsConfigDict( + env_file=".env", + env_ignore_empty=True, + extra="ignore", + ) + ENVIRONMENT: Literal["local", "production"] = "local" + + BACKEND_CORS_ORIGINS: Annotated[ + list[AnyUrl] | str, BeforeValidator(parse_cors) + ] = [] + + @computed_field # type: ignore[prop-decorator] + @property + def all_cors_origins(self) -> list[str]: + return [str(origin).rstrip("/") for origin in self.BACKEND_CORS_ORIGINS] + + PROJECT_NAME: str = "Gondul" + POSTGRES_SERVER: str = "localhost" + POSTGRES_PORT: int = 5432 + POSTGRES_USERNAME: str = "postgres" + POSTGRES_PASSWORD: str + POSTGRES_DATABASE: str = "postgres" + + REDIS_SERVER: str = "localhost" + REDIS_PORT: int = 6379 + REDIS_DB: int = 0 + + NETBOX_URL: str = "http://localhost" + NETBOX_TOKEN: str = "" + + @computed_field # type: ignore[prop-decorator] + @property + def SQLALCHEMY_DATABASE_URI(self) -> PostgresDsn: + return MultiHostUrl.build( + scheme="postgresql+psycopg", + username=self.POSTGRES_USERNAME, + password=self.POSTGRES_PASSWORD, + host=self.POSTGRES_SERVER, + port=self.POSTGRES_PORT, + path=self.POSTGRES_DATABASE, + ) + + +settings = Settings() # type: ignore diff --git a/api/app/core/db.py b/api/app/core/db.py new file mode 100644 index 0000000..b67ca87 --- /dev/null +++ b/api/app/core/db.py @@ -0,0 +1,5 @@ +from sqlmodel import create_engine +from app.core.config import settings + + +engine = create_engine(str(settings.SQLALCHEMY_DATABASE_URI))
\ No newline at end of file diff --git a/api/app/core/netbox.py b/api/app/core/netbox.py new file mode 100644 index 0000000..78a77c2 --- /dev/null +++ b/api/app/core/netbox.py @@ -0,0 +1,13 @@ +import os +import pynetbox + +from app.core.config import settings + +def setup_netbox(): + return pynetbox.api( + settings.NETBOX_URL, + token=settings.NETBOX_TOKEN, + threading=True, + ) + +nb = setup_netbox()
\ No newline at end of file diff --git a/api/app/core/prometheus.py b/api/app/core/prometheus.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/api/app/core/prometheus.py |