Skip to content
This repository was archived by the owner on Sep 30, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 31 additions & 42 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -158,15 +158,11 @@ another_val:
[**`main.py`**](https://github.com/bybatkhuu/module.python-config/blob/main/examples/simple/main.py)

```python
import sys
import pprint
import logging

from onion_config import ConfigLoader, BaseConfig

from loguru import logger

logging.basicConfig(stream=sys.stdout, level=logging.INFO)
logger = logging.getLogger(__name__)
from onion_config import ConfigLoader, BaseConfig


class ConfigSchema(BaseConfig):
Expand All @@ -180,8 +176,8 @@ except Exception:
exit(2)

if __name__ == "__main__":
logger.info(f" App name: {config.app['name']}")
logger.info(f" Config:\n{pprint.pformat(config.model_dump())}\n")
logger.info(f"App name: {config.app['name']}")
logger.info(f"Config:\n{pprint.pformat(config.model_dump())}\n")
```

Run the [**`examples/simple`**](https://github.com/bybatkhuu/module.python-config/tree/main/examples/simple):
Expand All @@ -195,8 +191,8 @@ python ./main.py
**Output**:

```txt
INFO:__main__: App name: New App
INFO:__main__: Config:
2023-09-01 18:23:35.551 | INFO | __main__:<module>:22 - App name: New App
2023-09-01 18:23:35.551 | INFO | __main__:<module>:23 - Config:
{'another_val': {'extra': 1},
'app': {'description': 'Description of my app.',
'name': 'New App',
Expand Down Expand Up @@ -277,16 +273,6 @@ extra:
}
```

[**`logger.py`**](https://github.com/bybatkhuu/module.python-config/blob/main/examples/advanced/logger.py):

```python
import sys
import logging

logging.basicConfig(stream=sys.stdout, level=logging.INFO)
logger = logging.getLogger(__name__)
```

[**`schema.py`**](https://github.com/bybatkhuu/module.python-config/blob/main/examples/advanced/schema.py):

```python
Expand Down Expand Up @@ -328,9 +314,10 @@ class ConfigSchema(BaseConfig):
[**`config.py`**](https://github.com/bybatkhuu/module.python-config/blob/main/examples/advanced/config.py):

```python
from loguru import logger

from onion_config import ConfigLoader

from logger import logger
from schema import ConfigSchema


Expand All @@ -348,7 +335,7 @@ try:
env_file_paths=[".env", ".env.base", ".env.prod"],
pre_load_hook=_pre_load_hook,
config_data={"base": "start_value"},
quiet=False,
warn_mode="LOG",
)
# Main config object:
config: ConfigSchema = _config_loader.load()
Expand All @@ -362,24 +349,25 @@ except Exception:
```python
import pprint

from loguru import logger

from config import config
from logger import logger


if __name__ == "__main__":
logger.info(f" ENV: {config.env}")
logger.info(f" DEBUG: {config.debug}")
logger.info(f" Extra: {config.extra_val}")
logger.info(f" Logger: {config.logger}")
logger.info(f" App: {config.app}")
logger.info(f" Secret: '{config.app.secret.get_secret_value()}'\n")
logger.info(f" Config:\n{pprint.pformat(config.model_dump())}\n")
logger.info(f"ENV: {config.env}")
logger.info(f"DEBUG: {config.debug}")
logger.info(f"Extra: {config.extra_val}")
logger.info(f"Logger: {config.logger}")
logger.info(f"App: {config.app}")
logger.info(f"Secret: '{config.app.secret.get_secret_value()}'\n")
logger.info(f"Config:\n{pprint.pformat(config.model_dump())}\n")

try:
# This will raise ValidationError
config.app.port = 8443
except Exception as e:
logger.error(f" {e}\n")
logger.error(f"{e}\n")
```

Run the [**`examples/advanced`**](https://github.com/bybatkhuu/module.python-config/tree/main/examples/advanced):
Expand All @@ -393,16 +381,17 @@ python ./app.py
**Output**:

```txt
WARNING:onion_config._base:'/home/user/workspaces/projects/onion_config/examples/advanced/.env' file is not exist!
WARNING:onion_config._base:'/not_exists/path/configs_3' directory is not exist!
INFO:logger: ENV: production
INFO:logger: DEBUG: True
INFO:logger: Extra: Something extra!
INFO:logger: Logger: {'output': 'stdout', 'level': 'info'}
INFO:logger: App: name='New App' bind_host='0.0.0.0' port=80 secret=SecretStr('**********') version='0.0.1' description=None
INFO:logger: Secret: 'my_secret'

INFO:logger: Config:
2023-09-01 18:25:43.744 | INFO | onion_config._base:load:129 - Loading all configs...
2023-09-01 18:25:43.747 | WARNING | onion_config._base:_load_configs_dir:242 - '/not_exists/path/configs_3' directory is not exist!
2023-09-01 18:25:43.748 | SUCCESS | onion_config._base:load:156 - Successfully loaded all configs!
2023-09-01 18:25:43.748 | INFO | __main__:<module>:12 - ENV: production
2023-09-01 18:25:43.748 | INFO | __main__:<module>:13 - DEBUG: True
2023-09-01 18:25:43.748 | INFO | __main__:<module>:14 - Extra: Something extra!
2023-09-01 18:25:43.748 | INFO | __main__:<module>:15 - Logger: {'output': 'stdout', 'level': 'info'}
2023-09-01 18:25:43.748 | INFO | __main__:<module>:16 - App: name='New App' bind_host='0.0.0.0' port=80 secret=SecretStr('**********') version='0.0.1' description=None
2023-09-01 18:25:43.748 | INFO | __main__:<module>:17 - Secret: 'my_secret'

2023-09-01 18:25:43.748 | INFO | __main__:<module>:18 - Config:
{'app': {'bind_host': '0.0.0.0',
'description': None,
'name': 'New App',
Expand All @@ -416,7 +405,7 @@ INFO:logger: Config:
'extra_val': 'Something extra!',
'logger': {'level': 'info', 'output': 'stdout'}}

ERROR:logger: 1 validation error for AppConfig
2023-09-01 18:25:43.748 | ERROR | __main__:<module>:24 - 1 validation error for AppConfig
port
Instance is frozen [type=frozen_instance, input_value=8443, input_type=int]
```
Expand Down
19 changes: 10 additions & 9 deletions examples/advanced/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,22 @@

import pprint

from loguru import logger

from config import config
from logger import logger


if __name__ == "__main__":
logger.info(f" ENV: {config.env}")
logger.info(f" DEBUG: {config.debug}")
logger.info(f" Extra: {config.extra_val}")
logger.info(f" Logger: {config.logger}")
logger.info(f" App: {config.app}")
logger.info(f" Secret: '{config.app.secret.get_secret_value()}'\n")
logger.info(f" Config:\n{pprint.pformat(config.model_dump())}\n")
logger.info(f"ENV: {config.env}")
logger.info(f"DEBUG: {config.debug}")
logger.info(f"Extra: {config.extra_val}")
logger.info(f"Logger: {config.logger}")
logger.info(f"App: {config.app}")
logger.info(f"Secret: '{config.app.secret.get_secret_value()}'\n")
logger.info(f"Config:\n{pprint.pformat(config.model_dump())}\n")

try:
# This will raise ValidationError
config.app.port = 8443
except Exception as e:
logger.error(f" {e}\n")
logger.error(f"{e}\n")
6 changes: 4 additions & 2 deletions examples/advanced/config.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
# -*- coding: utf-8 -*-

from loguru import logger

from onion_config import ConfigLoader

from logger import logger
from schema import ConfigSchema


Expand All @@ -12,6 +13,7 @@ def _pre_load_hook(config_data: dict) -> dict:
config_data["extra_val"] = "Something extra!"
return config_data


config = None
try:
_config_loader = ConfigLoader(
Expand All @@ -20,7 +22,7 @@ def _pre_load_hook(config_data: dict) -> dict:
env_file_paths=[".env", ".env.base", ".env.prod"],
pre_load_hook=_pre_load_hook,
config_data={"base": "start_value"},
quiet=False,
warn_mode="LOG",
)
# Main config object:
config: ConfigSchema = _config_loader.load()
Expand Down
7 changes: 0 additions & 7 deletions examples/advanced/logger.py

This file was deleted.

12 changes: 4 additions & 8 deletions examples/simple/main.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,11 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import pprint
import logging

from onion_config import ConfigLoader, BaseConfig

from loguru import logger

logging.basicConfig(stream=sys.stdout, level=logging.INFO)
logger = logging.getLogger(__name__)
from onion_config import ConfigLoader, BaseConfig


class ConfigSchema(BaseConfig):
Expand All @@ -23,5 +19,5 @@ class ConfigSchema(BaseConfig):
exit(2)

if __name__ == "__main__":
logger.info(f" App name: {config.app['name']}")
logger.info(f" Config:\n{pprint.pformat(config.model_dump())}\n")
logger.info(f"App name: {config.app['name']}")
logger.info(f"Config:\n{pprint.pformat(config.model_dump())}\n")
2 changes: 1 addition & 1 deletion onion_config/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# -*- coding: utf-8 -*-

from ._base import ConfigLoader, BaseConfig, __version__
from ._base import ConfigLoader, BaseConfig, WarnEnum, __version__
Loading