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/ **/output/
**/.DS_Store **/.DS_Store
*.pyc *.pyc
.env src/config/.env.prod
src/config/.env.dev
dist dist
jobs.csv jobs.csv
.vscode/launch.json .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 import MongoClient
from pymongo.synchronous.database import Database from pymongo.synchronous.database import Database
from config.settings import settings
from jobspy import create_logger from jobspy import create_logger
@ -17,12 +18,12 @@ class MongoDB:
self = super().__new__(cls) self = super().__new__(cls)
cls._instance = self cls._instance = self
logger = create_logger("Mongo Client") logger = create_logger("Mongo Client")
mongoUri = os.getenv("MONGO_URI") mongoUri = settings.mongo_uri
if not mongoUri: if not mongoUri:
logger.error("MONGO_URI environment variable is not set") logger.error("MONGO_URI environment variable is not set")
raise ValueError("MONGO_URI environment variable is not set") raise ValueError("MONGO_URI environment variable is not set")
client = MongoClient(mongoUri) client = MongoClient(mongoUri)
database_name = os.getenv("MONGO_DB_NAME") database_name = settings.mongo_db_name
if not database_name: if not database_name:
logger.error("MONGO_DB_NAME environment variable is not set") logger.error("MONGO_DB_NAME environment variable is not set")
raise ValueError( raise ValueError(

View File

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

View File

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