aboutsummaryrefslogtreecommitdiffstats
path: root/api/app/core
diff options
context:
space:
mode:
Diffstat (limited to 'api/app/core')
-rw-r--r--api/app/core/__init__.py0
-rw-r--r--api/app/core/cache.py13
-rw-r--r--api/app/core/config.py65
-rw-r--r--api/app/core/db.py5
-rw-r--r--api/app/core/netbox.py13
-rw-r--r--api/app/core/prometheus.py0
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