added pydantic settings

pull/231/head
Yariv Menachem 2025-01-02 14:07:44 +02:00
parent f83e875171
commit fe3ee7c4d8
7 changed files with 35 additions and 7 deletions

3
.gitignore vendored
View File

@ -6,7 +6,8 @@
**/output/
**/.DS_Store
*.pyc
.env
src/config/.env.prod
src/config/.env.dev
dist
jobs.csv
.vscode/launch.json

Binary file not shown.

0
src/config/__init__.py Normal file
View File

25
src/config/settings.py Normal file
View File

@ -0,0 +1,25 @@
import os
from pydantic_settings import BaseSettings, SettingsConfigDict
if not os.getenv("ENV"):
raise ValueError("Invalid environment. Set the 'ENV' variable (e.g., export ENV=dev).")
dotenv_file = os.path.join(os.path.dirname(__file__), ".env." + os.environ.get("ENV"))
if not os.path.exists(dotenv_file):
raise FileNotFoundError(f"Environment file not found: {dotenv_file}")
class Settings(BaseSettings):
environment: str
telegram_api_token: str
mongo_uri: str
mongo_db_name: str
print(f"Loading environment from: {dotenv_file}")
model_config = SettingsConfigDict(
env_file=dotenv_file
)
settings = Settings()

View File

@ -3,6 +3,7 @@ import os
from pymongo import MongoClient
from pymongo.synchronous.database import Database
from config.settings import settings
from jobspy import create_logger
@ -17,12 +18,12 @@ class MongoDB:
self = super().__new__(cls)
cls._instance = self
logger = create_logger("Mongo Client")
mongoUri = os.getenv("MONGO_URI")
mongoUri = settings.mongo_uri
if not mongoUri:
logger.error("MONGO_URI environment variable is not set")
raise ValueError("MONGO_URI environment variable is not set")
client = MongoClient(mongoUri)
database_name = os.getenv("MONGO_DB_NAME")
database_name = settings.mongo_db_name
if not database_name:
logger.error("MONGO_DB_NAME environment variable is not set")
raise ValueError(

View File

@ -5,6 +5,7 @@ from dotenv import load_dotenv
from telegram import Bot, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.constants import ReactionEmoji
from config.settings import settings
from jobspy.jobs import JobPost
from jobspy.scrapers.utils import create_logger
@ -20,7 +21,7 @@ class TelegramBot:
return cls.instance
def __init__(self):
self._api_token = os.getenv("TELEGRAM_API_TOKEN")
self._api_token = settings.telegram_api_token
self.bot = Bot(token=self._api_token)
def get_reply_markup(self):

View File

@ -1,6 +1,6 @@
import os
from dotenv import load_dotenv
from db import JobRepository
from db.job_repository import JobRepository
from tests.test_util import createMockJob
load_dotenv()
@ -13,7 +13,7 @@ class DatabaseTests:
This block ensures that the script runs the test only when executed directly,
not when imported as a module.
"""
self.jobRepository = JobRepository(os.getenv("MONGO_DB_NAME") + "dev")
self.jobRepository = JobRepository()
def insert_job(self):
"""