diff --git a/.env.example b/.env.example index 26c9aea..f16299c 100644 --- a/.env.example +++ b/.env.example @@ -7,12 +7,12 @@ UP=up DOWN=down WEB_SERVER=web_server -MONGO_HOST=mongodb -MONGO_PORT=27017 -MONGO_USER=farmer -MONGO_PASS=tractor -MONGO_DB=greenhouse -MONGO_COLLECTION=greens -MONGO_TEST_DB=farmland +MONGODB_HOST=mongodb +MONGODB_PORT=27017 +MONGODB_USER=farmer +MONGODB_PASSWORD=tractor +MONGODB_DATABASE=greenhouse +MONGODB_COLLECTION=greens +MONGODB_TEST=farmland MONGO_URL=mongodb://farmer:tractor@mongodb:27017/?retryWrites=true&w=majority diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index ed1e1f0..7ffb2b5 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -23,13 +23,14 @@ jobs: UP: up DOWN: down WEB_SERVER: web_server - MONGO_HOST: mongodb - MONGO_PORT: 27017 - MONGO_USER: farmer - MONGO_PASS: tractor - MONGO_DB: greenhouse - MONGO_COLLECTION: greens - MONGO_TEST_DB: farmland + MONGODB_HOST: mongodb + MONGODB_PORT: 27017 + MONGODB_USER: farmer + MONGODB_PASSWORD: tractor + MONGODB_DATABASE: greenhouse + MONGODB_COLLECTION: greens + MONGODB_TEST: farmland + MONGODB_PARAMS: retryWrites=true&w=majority MONGO_URL: mongodb://farmer:tractor@127.0.0.1:27017/?retryWrites=true&w=majority services: diff --git a/LICENSE b/LICENSE index 5ef4393..a883243 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2021 Jakub Miazek +Copyright (c) 2024 Jakub Miazek Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/docker-compose.yml b/docker-compose.yml index 446599f..cebc94a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -25,8 +25,8 @@ services: ports: - "27017:27017" environment: - - "MONGO_INITDB_DATABASE=${MONGO_DB}" - - "MONGO_INITDB_ROOT_USERNAME=${MONGO_USER}" - - "MONGO_INITDB_ROOT_PASSWORD=${MONGO_PASS}" + - "MONGO_INITDB_DATABASE=${MONGODB_DATABASE}" + - "MONGO_INITDB_ROOT_USERNAME=${MONGODB_USER}" + - "MONGO_INITDB_ROOT_PASSWORD=${MONGODB_PASSWORD}" command: mongod --quiet --logpath /dev/null \ No newline at end of file diff --git a/greens/config.py b/greens/config.py index cd73c1f..30152b3 100644 --- a/greens/config.py +++ b/greens/config.py @@ -1,24 +1,12 @@ import os +from pydantic import MongoDsn, computed_field +from pydantic_core import MultiHostUrl from pydantic_settings import BaseSettings class Settings(BaseSettings): - """ - Represents the configuration settings for the application. - - Args: - environment (str): The environment in which the application is running. Defaults to "local". - testing (str): The testing mode of the application. Defaults to "0". - up (str): The up status of the application. Defaults to "up". - down (str): The down status of the application. Defaults to "down". - web_server (str): The web server used by the application. Defaults to "web_server". - db_url (str): The URL of the MongoDB database. - db_name (str): The name of the MongoDB database. - collection (str): The name of the MongoDB collection. - test_db_name (str): The name of the MongoDB test database. - - """ + """Settings for the application""" environment: str = os.getenv("ENVIRONMENT", "local") testing: str = os.getenv("TESTING", "0") up: str = os.getenv("UP", "up") @@ -26,9 +14,28 @@ class Settings(BaseSettings): web_server: str = os.getenv("WEB_SERVER", "web_server") db_url: str = os.getenv("MONGO_URL", "") - db_name: str = os.getenv("MONGO_DB", "") - collection: str = os.getenv("MONGO_COLLECTION", "") - test_db_name: str = os.getenv("MONGO_TEST_DB", "") + mongodb_database: str = os.getenv("MONGODB_DATABASE", "") + mongodb_collection: str = os.getenv("MONGODB_COLLECTION", "") + mongodb_test: str = os.getenv("MONGODB_TEST", "") + + MONGODB_HOST: str + MONGODB_PORT: int + MONGODB_USER: str + MONGODB_PASSWORD: str + MONGODB_PARAMS: str + + @computed_field + @property + def mongodb_url(self) -> MongoDsn: + return MultiHostUrl.build( + scheme="mongodb", + host=self.MONGODB_HOST, + port=self.MONGODB_PORT, + username=self.MONGODB_USER, + password=self.MONGODB_PASSWORD, + + path=self.MONGODB_PARAMS + ) settings = Settings() diff --git a/greens/main.py b/greens/main.py index f54cfb9..a09ea7f 100644 --- a/greens/main.py +++ b/greens/main.py @@ -16,7 +16,7 @@ async def lifespan(app: FastAPI): app.state.logger = get_logger(__name__) app.state.logger.info("Starting greens on your farmland...mmm") app.state.mongo_client, app.state.mongo_db, app.state.mongo_collection = await init_mongo( - global_settings.db_name, global_settings.db_url, global_settings.collection + global_settings.mongodb_database, global_settings.mongodb_url, global_settings.mongodb_collection ) try: yield diff --git a/greens/routers/v1/vegs.py b/greens/routers/v1/vegs.py index 2160fa1..0abe7dc 100644 --- a/greens/routers/v1/vegs.py +++ b/greens/routers/v1/vegs.py @@ -6,7 +6,7 @@ from greens.schemas.vegs import Document, DocumentResponse, ObjectIdField from greens.services.repository import create_document, retrieve_document -collection = global_settings.collection +collection = global_settings.mongodb_collection router = APIRouter() diff --git a/pytest.ini b/pytest.ini deleted file mode 100644 index ceb650c..0000000 --- a/pytest.ini +++ /dev/null @@ -1,6 +0,0 @@ -[pytest] -python_files = tests.py test_*.py *_tests.py -addopts = --cov=. - --cov-report html:htmlcov - --cov-report term-missing -testpaths = tests diff --git a/tests/conftest.py b/tests/conftest.py index 44e15ef..41b4dee 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -25,6 +25,6 @@ async def client() -> AsyncGenerator: ) as client: app.state.logger = get_logger(__name__) app.state.mongo_client, app.state.mongo_db, app.state.mongo_collection = await init_mongo( - global_settings.test_db_name, global_settings.db_url, global_settings.collection + global_settings.mongodb_test, global_settings.db_url, global_settings.mongodb_collection ) yield client