65 lines
2.6 KiB
Python
65 lines
2.6 KiB
Python
import os
|
|
from typing import List, ClassVar
|
|
from pydantic_settings import BaseSettings
|
|
from pydantic import AnyHttpUrl, field_validator
|
|
|
|
class Settings(BaseSettings):
|
|
# Project settings
|
|
PROJECT_NAME: str = "SEREACT - Secure Image Management API"
|
|
API_V1_STR: str = "/api/v1"
|
|
|
|
# Environment
|
|
ENVIRONMENT: str = "development"
|
|
|
|
# CORS settings
|
|
CORS_ORIGINS: List[str] = ["http://localhost:3000", "http://localhost:8000", "http://127.0.0.1:8000", "http://127.0.0.1:3000", "https://localhost:3000", "https://localhost:8000"]
|
|
|
|
@field_validator("CORS_ORIGINS", mode="before")
|
|
def assemble_cors_origins(cls, v):
|
|
if isinstance(v, str) and not v.startswith("["):
|
|
return [i.strip() for i in v.split(",")]
|
|
return v
|
|
|
|
# Firestore settings
|
|
FIRESTORE_PROJECT_ID: str = os.getenv("FIRESTORE_PROJECT_ID", "")
|
|
FIRESTORE_DATABASE_NAME: str = os.getenv("FIRESTORE_DATABASE_NAME", "sereact-db")
|
|
FIRESTORE_CREDENTIALS_FILE: str = os.getenv("FIRESTORE_CREDENTIALS_FILE", "firestore-credentials.json")
|
|
|
|
# Google Cloud Storage settings
|
|
GCS_BUCKET_NAME: str = os.getenv("GCS_BUCKET_NAME", "image-mgmt-bucket")
|
|
GCS_CREDENTIALS_FILE: str = os.getenv("GCS_CREDENTIALS_FILE", "credentials.json")
|
|
|
|
# Google Pub/Sub settings
|
|
PUBSUB_TOPIC: str = os.getenv("PUBSUB_TOPIC", "image-processing-topic")
|
|
PUBSUB_SUBSCRIPTION: str = os.getenv("PUBSUB_SUBSCRIPTION", "image-processing-subscription")
|
|
|
|
# Google Cloud Vision API
|
|
VISION_API_ENABLED: bool = os.getenv("VISION_API_ENABLED", "true").lower() == "true"
|
|
|
|
# Security settings
|
|
API_KEY_SECRET: str = os.getenv("API_KEY_SECRET", "super-secret-key-for-development-only")
|
|
API_KEY_EXPIRY_DAYS: int = int(os.getenv("API_KEY_EXPIRY_DAYS", "365"))
|
|
|
|
# Vector Database settings (for image embeddings)
|
|
VECTOR_DB_API_KEY: str = os.getenv("VECTOR_DB_API_KEY", "")
|
|
VECTOR_DB_ENVIRONMENT: str = os.getenv("VECTOR_DB_ENVIRONMENT", "")
|
|
VECTOR_DB_INDEX_NAME: str = os.getenv("VECTOR_DB_INDEX_NAME", "image-embeddings")
|
|
|
|
# Rate limiting
|
|
RATE_LIMIT_PER_MINUTE: int = int(os.getenv("RATE_LIMIT_PER_MINUTE", "100"))
|
|
|
|
# Qdrant settings
|
|
QDRANT_HOST: str = os.getenv("QDRANT_HOST", "localhost")
|
|
QDRANT_PORT: int = int(os.getenv("QDRANT_PORT", "6333"))
|
|
QDRANT_API_KEY: str = os.getenv("QDRANT_API_KEY", "")
|
|
QDRANT_COLLECTION: str = os.getenv("QDRANT_COLLECTION", "image_vectors")
|
|
|
|
# Logging
|
|
LOG_LEVEL: str = os.getenv("LOG_LEVEL", "INFO")
|
|
|
|
model_config: ClassVar[dict] = {
|
|
"case_sensitive": True,
|
|
"env_file": ".env"
|
|
}
|
|
|
|
settings = Settings() |