Skip to content

Commit

Permalink
Add support for default values in env variable getter
Browse files Browse the repository at this point in the history
Updated the `EnvironmentVariableGetter.get` method to accept an optional `default_value` parameter. If the specified environment variable is not set, the method now returns the provided default value instead of raising an error.
  • Loading branch information
felixschndr committed Jan 26, 2025
1 parent 35e94be commit b80bbe1
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 13 deletions.
3 changes: 1 addition & 2 deletions source/bring_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,10 @@

import aiohttp
from bring_api import Bring, BringItemOperation, BringNotificationType
from environment_variable_getter import EnvironmentVariableGetter
from ingredient import Ingredient
from logger_mixin import LoggerMixin

from source.environment_variable_getter import EnvironmentVariableGetter


class BringHandler(LoggerMixin):
def __init__(self, loop: asyncio.AbstractEventLoop):
Expand Down
17 changes: 12 additions & 5 deletions source/environment_variable_getter.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import os
from typing import Any

from dotenv import find_dotenv, load_dotenv

Expand All @@ -10,8 +11,14 @@

class EnvironmentVariableGetter:
@staticmethod
def get(name_of_variable: str) -> str:
value = os.environ[name_of_variable]
if value == "":
raise KeyError(f'The environment variable "{name_of_variable}" is not set!')
return value
def get(name_of_variable: str, default_value: Any = None) -> str:
try:
value = os.environ[name_of_variable]
if value == "":
raise KeyError()
return value
except KeyError:
if default_value is not None:
return default_value

raise RuntimeError(f'The environment variable "{name_of_variable}" is not set!') from None
10 changes: 4 additions & 6 deletions source/main.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
import asyncio
import logging
import os

from bring_handler import BringHandler
from dotenv import load_dotenv
from environment_variable_getter import EnvironmentVariableGetter
from flask import Flask, request
from ingredient import Ingredient
from logger_mixin import LoggerMixin

from source.environment_variable_getter import EnvironmentVariableGetter

load_dotenv()

app = Flask(__name__)
Expand Down Expand Up @@ -60,7 +58,7 @@ def status_handler() -> str:
def parse_ignored_ingredients() -> list[Ingredient]:
try:
ignored_ingredients_input = EnvironmentVariableGetter.get("IGNORED_INGREDIENTS")
except KeyError:
except RuntimeError:
logger.log.info(
'The variable IGNORED_INGREDIENTS is not set. All ingredients will be added. Consider adding something like "Salt,Pepper"'
)
Expand All @@ -80,7 +78,7 @@ def parse_ignored_ingredients() -> list[Ingredient]:
bring_handler = BringHandler(loop)
ignored_ingredients = parse_ignored_ingredients()

host = os.getenv("HTTP_HOST", "0.0.0.0")
port = int(os.getenv("HTTP_PORT", 8742))
host = EnvironmentVariableGetter.get("HTTP_HOST", "0.0.0.0")
port = int(EnvironmentVariableGetter.get("HTTP_PORT", 8742))
logger.log.info(f"Listening on {host}:{port}")
app.run(host=host, port=port)

0 comments on commit b80bbe1

Please # to comment.