From fe3ee7c4d849314545052765f79b9c4da8912a99 Mon Sep 17 00:00:00 2001 From: Yariv Menachem Date: Thu, 2 Jan 2025 14:07:44 +0200 Subject: [PATCH] added pydantic settings --- .gitignore | 3 ++- requirements.txt | Bin 1090 -> 1142 bytes src/config/__init__.py | 0 src/config/settings.py | 25 +++++++++++++++++++++++++ src/db/monogo_db.py | 5 +++-- src/telegram_bot.py | 3 ++- tests/test_db.py | 6 +++--- 7 files changed, 35 insertions(+), 7 deletions(-) create mode 100644 src/config/__init__.py create mode 100644 src/config/settings.py diff --git a/.gitignore b/.gitignore index 01099a2..1c7e01c 100644 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,8 @@ **/output/ **/.DS_Store *.pyc -.env +src/config/.env.prod +src/config/.env.dev dist jobs.csv .vscode/launch.json diff --git a/requirements.txt b/requirements.txt index f59c23045bdfc83c8b69d27594b901b0bd9392bb..5b69741ce820ca9fa1d7da4ab42d1907119a36e5 100644 GIT binary patch delta 44 vcmX@a@r`4H6U*dFj3NrU48;to3?)FA$&km84&>D_*fJO~=rNcBu^|Hh5XlLs delta 7 OcmeyyafoAs6AJ(ha{|8r diff --git a/src/config/__init__.py b/src/config/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/config/settings.py b/src/config/settings.py new file mode 100644 index 0000000..8d1b38d --- /dev/null +++ b/src/config/settings.py @@ -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() diff --git a/src/db/monogo_db.py b/src/db/monogo_db.py index 0cbd12e..bcac938 100644 --- a/src/db/monogo_db.py +++ b/src/db/monogo_db.py @@ -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( diff --git a/src/telegram_bot.py b/src/telegram_bot.py index 6b5ed3d..1bfaff9 100644 --- a/src/telegram_bot.py +++ b/src/telegram_bot.py @@ -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): diff --git a/tests/test_db.py b/tests/test_db.py index 7eea3be..bbe0e02 100644 --- a/tests/test_db.py +++ b/tests/test_db.py @@ -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): """