pydantic-settings-manager 0.1.1__tar.gz → 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pydantic_settings_manager-0.2.0/.github/workflows/ci.yml +55 -0
- pydantic_settings_manager-0.2.0/.gitignore +14 -0
- pydantic_settings_manager-0.2.0/CHANGELOG.md +52 -0
- pydantic_settings_manager-0.2.0/Makefile +30 -0
- {pydantic_settings_manager-0.1.1 → pydantic_settings_manager-0.2.0}/PKG-INFO +60 -14
- {pydantic_settings_manager-0.1.1 → pydantic_settings_manager-0.2.0}/README.md +49 -0
- pydantic_settings_manager-0.2.0/mypy.ini +9 -0
- {pydantic_settings_manager-0.1.1 → pydantic_settings_manager-0.2.0}/pydantic_settings_manager/__init__.py +4 -4
- {pydantic_settings_manager-0.1.1 → pydantic_settings_manager-0.2.0}/pydantic_settings_manager/base.py +3 -3
- {pydantic_settings_manager-0.1.1 → pydantic_settings_manager-0.2.0}/pydantic_settings_manager/mapped.py +10 -10
- pydantic_settings_manager-0.2.0/pydantic_settings_manager/py.typed +0 -0
- {pydantic_settings_manager-0.1.1 → pydantic_settings_manager-0.2.0}/pydantic_settings_manager/single.py +4 -4
- pydantic_settings_manager-0.2.0/pydantic_settings_manager/types.py +7 -0
- {pydantic_settings_manager-0.1.1 → pydantic_settings_manager-0.2.0}/pydantic_settings_manager/utils.py +3 -3
- {pydantic_settings_manager-0.1.1 → pydantic_settings_manager-0.2.0}/pyproject.toml +54 -35
- pydantic_settings_manager-0.2.0/tests/__init__.py +0 -0
- pydantic_settings_manager-0.2.0/tests/test_mapped.py +164 -0
- pydantic_settings_manager-0.2.0/tests/test_single.py +68 -0
- pydantic_settings_manager-0.2.0/tests/test_utils.py +65 -0
- pydantic_settings_manager-0.2.0/uv.lock +522 -0
- pydantic_settings_manager-0.1.1/pydantic_settings_manager/types.py +0 -6
- {pydantic_settings_manager-0.1.1 → pydantic_settings_manager-0.2.0}/LICENSE +0 -0
@@ -0,0 +1,55 @@
|
|
1
|
+
name: CI
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ main ]
|
6
|
+
pull_request:
|
7
|
+
branches: [ main ]
|
8
|
+
release:
|
9
|
+
types: [created]
|
10
|
+
|
11
|
+
jobs:
|
12
|
+
test:
|
13
|
+
runs-on: ubuntu-latest
|
14
|
+
strategy:
|
15
|
+
matrix:
|
16
|
+
python-version: ["3.9", "3.10", "3.11", "3.12"]
|
17
|
+
|
18
|
+
steps:
|
19
|
+
- uses: actions/checkout@v4
|
20
|
+
- name: Install uv
|
21
|
+
uses: astral-sh/setup-uv@v4
|
22
|
+
with:
|
23
|
+
version: "latest"
|
24
|
+
- name: Set up Python ${{ matrix.python-version }}
|
25
|
+
run: uv python install ${{ matrix.python-version }}
|
26
|
+
- name: Install dependencies
|
27
|
+
run: uv sync --dev
|
28
|
+
- name: Run tests
|
29
|
+
run: uv run make test
|
30
|
+
- name: Run format check
|
31
|
+
run: uv run ruff check .
|
32
|
+
- name: Run linters
|
33
|
+
run: uv run make lint
|
34
|
+
|
35
|
+
publish:
|
36
|
+
needs: test
|
37
|
+
runs-on: ubuntu-latest
|
38
|
+
if: github.event_name == 'release' && github.event.action == 'created'
|
39
|
+
|
40
|
+
steps:
|
41
|
+
- uses: actions/checkout@v4
|
42
|
+
- name: Install uv
|
43
|
+
uses: astral-sh/setup-uv@v4
|
44
|
+
with:
|
45
|
+
version: "latest"
|
46
|
+
- name: Set up Python
|
47
|
+
run: uv python install 3.9
|
48
|
+
- name: Install dependencies
|
49
|
+
run: uv sync --dev
|
50
|
+
- name: Build and publish
|
51
|
+
env:
|
52
|
+
UV_PUBLISH_TOKEN: ${{ secrets.PYPI_TOKEN }}
|
53
|
+
run: |
|
54
|
+
uv build
|
55
|
+
uv publish
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
All notable changes to this project will be documented in this file.
|
4
|
+
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
7
|
+
|
8
|
+
## [0.2.0] - 2025-06-28
|
9
|
+
|
10
|
+
### Changed
|
11
|
+
- **BREAKING**: Migrated from Poetry to uv for dependency management
|
12
|
+
- Modernized development toolchain with unified linting using ruff
|
13
|
+
- Updated to use PEP 621 compliant project metadata format
|
14
|
+
- Introduced PEP 735 dependency groups for flexible development environments
|
15
|
+
- Enhanced CI/CD pipeline to use uv instead of Poetry
|
16
|
+
- Improved type checking configuration with stricter MyPy settings
|
17
|
+
- Updated all development dependencies to latest versions
|
18
|
+
|
19
|
+
### Added
|
20
|
+
- Comprehensive development documentation in README
|
21
|
+
- Support for modular dependency groups (test, lint, dev)
|
22
|
+
- Enhanced linting rules including pyupgrade and flake8-comprehensions
|
23
|
+
- Migration guide for developers updating their local environment
|
24
|
+
|
25
|
+
### Removed
|
26
|
+
- Poetry configuration files (poetry.lock, pyproject.toml Poetry sections)
|
27
|
+
- Separate black, isort, and flake8 configurations (replaced by ruff)
|
28
|
+
|
29
|
+
## [0.1.2] - 2024-03-12
|
30
|
+
|
31
|
+
### Added
|
32
|
+
- Added py.typed file for better type checking support
|
33
|
+
- Improved package configuration and build process
|
34
|
+
|
35
|
+
## [0.1.1] - 2024-03-12
|
36
|
+
|
37
|
+
### Added
|
38
|
+
- Added detailed documentation in README.md
|
39
|
+
- Added example code for both SingleSettingsManager and MappedSettingsManager
|
40
|
+
|
41
|
+
### Fixed
|
42
|
+
- Improved type hints and documentation
|
43
|
+
|
44
|
+
## [0.1.0] - 2024-03-11
|
45
|
+
|
46
|
+
### Added
|
47
|
+
- Initial release
|
48
|
+
- Implemented SingleSettingsManager for managing single settings object
|
49
|
+
- Implemented MappedSettingsManager for managing multiple settings objects
|
50
|
+
- Support for loading settings from multiple sources
|
51
|
+
- Command line argument overrides
|
52
|
+
- Settings validation through Pydantic
|
@@ -0,0 +1,30 @@
|
|
1
|
+
.PHONY: format lint test clean build publish
|
2
|
+
.DEFAULT_GOAL := build
|
3
|
+
|
4
|
+
format:
|
5
|
+
uv run ruff check --fix .
|
6
|
+
|
7
|
+
lint:
|
8
|
+
uv run ruff check .
|
9
|
+
uv run mypy .
|
10
|
+
|
11
|
+
test:
|
12
|
+
uv run pytest --cov=pydantic_settings_manager tests/
|
13
|
+
|
14
|
+
clean:
|
15
|
+
rm -rf dist/
|
16
|
+
rm -rf *.egg-info/
|
17
|
+
find . -type d -name __pycache__ -exec rm -rf {} +
|
18
|
+
find . -type f -name "*.pyc" -delete
|
19
|
+
find . -type f -name "*.pyo" -delete
|
20
|
+
find . -type f -name "*.pyd" -delete
|
21
|
+
find . -type f -name ".coverage" -delete
|
22
|
+
find . -type d -name ".pytest_cache" -exec rm -rf {} +
|
23
|
+
find . -type d -name ".mypy_cache" -exec rm -rf {} +
|
24
|
+
find . -type d -name ".ruff_cache" -exec rm -rf {} +
|
25
|
+
|
26
|
+
build: format lint test clean
|
27
|
+
uv build
|
28
|
+
|
29
|
+
publish: build
|
30
|
+
uv publish
|
@@ -1,29 +1,27 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.4
|
2
2
|
Name: pydantic-settings-manager
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.2.0
|
4
4
|
Summary: A library for managing Pydantic settings objects
|
5
|
-
|
5
|
+
Project-URL: homepage, https://github.com/kiarina/pydantic-settings-manager
|
6
|
+
Project-URL: repository, https://github.com/kiarina/pydantic-settings-manager
|
7
|
+
Project-URL: documentation, https://github.com/kiarina/pydantic-settings-manager
|
8
|
+
Author-email: kiarina <kiarinadawa@gmail.com>
|
6
9
|
License: MIT
|
7
|
-
|
8
|
-
|
9
|
-
Author-email: kiarinadawa@gmail.com
|
10
|
-
Requires-Python: >=3.8,<4.0
|
10
|
+
License-File: LICENSE
|
11
|
+
Keywords: configuration,pydantic,settings
|
11
12
|
Classifier: Development Status :: 4 - Beta
|
12
13
|
Classifier: Intended Audience :: Developers
|
13
14
|
Classifier: License :: OSI Approved :: MIT License
|
14
15
|
Classifier: Operating System :: OS Independent
|
15
16
|
Classifier: Programming Language :: Python :: 3
|
16
|
-
Classifier: Programming Language :: Python :: 3.8
|
17
17
|
Classifier: Programming Language :: Python :: 3.9
|
18
18
|
Classifier: Programming Language :: Python :: 3.10
|
19
19
|
Classifier: Programming Language :: Python :: 3.11
|
20
20
|
Classifier: Programming Language :: Python :: 3.12
|
21
|
-
Classifier: Programming Language :: Python :: 3.13
|
22
21
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
23
|
-
Requires-
|
24
|
-
Requires-Dist: pydantic-settings
|
25
|
-
|
26
|
-
Project-URL: Repository, https://github.com/kiarina/pydantic-settings-manager
|
22
|
+
Requires-Python: >=3.9
|
23
|
+
Requires-Dist: pydantic-settings>=2.0.0
|
24
|
+
Requires-Dist: pydantic>=2.0.0
|
27
25
|
Description-Content-Type: text/markdown
|
28
26
|
|
29
27
|
# pydantic-settings-manager
|
@@ -109,6 +107,55 @@ assert settings.name == "production"
|
|
109
107
|
assert settings.value == 100
|
110
108
|
```
|
111
109
|
|
110
|
+
## Development
|
111
|
+
|
112
|
+
This project uses modern Python development tools with flexible dependency groups:
|
113
|
+
|
114
|
+
- **ruff**: Fast linter and formatter (replaces black, isort, and flake8)
|
115
|
+
- **mypy**: Static type checking
|
116
|
+
- **pytest**: Testing framework with coverage reporting
|
117
|
+
- **uv**: Fast Python package manager with PEP 735 dependency groups support
|
118
|
+
|
119
|
+
### Setup
|
120
|
+
|
121
|
+
```bash
|
122
|
+
# Install all development dependencies
|
123
|
+
uv sync --group dev
|
124
|
+
|
125
|
+
# Or install specific dependency groups
|
126
|
+
uv sync --group test # Testing tools only
|
127
|
+
uv sync --group lint # Linting tools only
|
128
|
+
|
129
|
+
# Format code
|
130
|
+
uv run ruff check --fix .
|
131
|
+
|
132
|
+
# Run linting
|
133
|
+
uv run ruff check .
|
134
|
+
uv run mypy .
|
135
|
+
|
136
|
+
# Run tests
|
137
|
+
uv run pytest --cov=pydantic_settings_manager tests/
|
138
|
+
|
139
|
+
# Build and test everything
|
140
|
+
make build
|
141
|
+
```
|
142
|
+
|
143
|
+
### Development Workflow
|
144
|
+
|
145
|
+
```bash
|
146
|
+
# Quick setup for testing
|
147
|
+
uv sync --group test
|
148
|
+
make test
|
149
|
+
|
150
|
+
# Quick setup for linting
|
151
|
+
uv sync --group lint
|
152
|
+
make lint
|
153
|
+
|
154
|
+
# Full development environment
|
155
|
+
uv sync --group dev
|
156
|
+
make build
|
157
|
+
```
|
158
|
+
|
112
159
|
## Documentation
|
113
160
|
|
114
161
|
For more detailed documentation, please see the [GitHub repository](https://github.com/kiarina/pydantic-settings-manager).
|
@@ -116,4 +163,3 @@ For more detailed documentation, please see the [GitHub repository](https://gith
|
|
116
163
|
## License
|
117
164
|
|
118
165
|
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
119
|
-
|
@@ -81,6 +81,55 @@ assert settings.name == "production"
|
|
81
81
|
assert settings.value == 100
|
82
82
|
```
|
83
83
|
|
84
|
+
## Development
|
85
|
+
|
86
|
+
This project uses modern Python development tools with flexible dependency groups:
|
87
|
+
|
88
|
+
- **ruff**: Fast linter and formatter (replaces black, isort, and flake8)
|
89
|
+
- **mypy**: Static type checking
|
90
|
+
- **pytest**: Testing framework with coverage reporting
|
91
|
+
- **uv**: Fast Python package manager with PEP 735 dependency groups support
|
92
|
+
|
93
|
+
### Setup
|
94
|
+
|
95
|
+
```bash
|
96
|
+
# Install all development dependencies
|
97
|
+
uv sync --group dev
|
98
|
+
|
99
|
+
# Or install specific dependency groups
|
100
|
+
uv sync --group test # Testing tools only
|
101
|
+
uv sync --group lint # Linting tools only
|
102
|
+
|
103
|
+
# Format code
|
104
|
+
uv run ruff check --fix .
|
105
|
+
|
106
|
+
# Run linting
|
107
|
+
uv run ruff check .
|
108
|
+
uv run mypy .
|
109
|
+
|
110
|
+
# Run tests
|
111
|
+
uv run pytest --cov=pydantic_settings_manager tests/
|
112
|
+
|
113
|
+
# Build and test everything
|
114
|
+
make build
|
115
|
+
```
|
116
|
+
|
117
|
+
### Development Workflow
|
118
|
+
|
119
|
+
```bash
|
120
|
+
# Quick setup for testing
|
121
|
+
uv sync --group test
|
122
|
+
make test
|
123
|
+
|
124
|
+
# Quick setup for linting
|
125
|
+
uv sync --group lint
|
126
|
+
make lint
|
127
|
+
|
128
|
+
# Full development environment
|
129
|
+
uv sync --group dev
|
130
|
+
make build
|
131
|
+
```
|
132
|
+
|
84
133
|
## Documentation
|
85
134
|
|
86
135
|
For more detailed documentation, please see the [GitHub repository](https://github.com/kiarina/pydantic-settings-manager).
|
@@ -0,0 +1,9 @@
|
|
1
|
+
[mypy]
|
2
|
+
# Perform type checking on functions and methods without type hints
|
3
|
+
check_untyped_defs = True
|
4
|
+
|
5
|
+
# Do not check imported modules
|
6
|
+
follow_imports = silent
|
7
|
+
|
8
|
+
# Perform incremental checking (only check changed files for faster execution)
|
9
|
+
incremental = True
|
@@ -21,17 +21,17 @@ from .base import BaseSettingsManager
|
|
21
21
|
from .mapped import MappedSettingsManager, SettingsMap
|
22
22
|
from .single import SingleSettingsManager
|
23
23
|
|
24
|
-
__version__ = "0.
|
24
|
+
__version__ = "0.2.0"
|
25
25
|
|
26
26
|
__all__ = [
|
27
27
|
# Re-exports from pydantic_settings
|
28
28
|
"BaseSettings",
|
29
|
-
"SettingsConfigDict",
|
30
29
|
# Base manager
|
31
30
|
"BaseSettingsManager",
|
32
|
-
# Single settings manager
|
33
|
-
"SingleSettingsManager",
|
34
31
|
# Mapped settings manager
|
35
32
|
"MappedSettingsManager",
|
33
|
+
"SettingsConfigDict",
|
36
34
|
"SettingsMap",
|
35
|
+
# Single settings manager
|
36
|
+
"SingleSettingsManager",
|
37
37
|
]
|
@@ -2,7 +2,7 @@
|
|
2
2
|
Base classes for settings managers.
|
3
3
|
"""
|
4
4
|
from abc import ABC, abstractmethod
|
5
|
-
from typing import Any,
|
5
|
+
from typing import Any, Generic, TypeVar
|
6
6
|
|
7
7
|
from pydantic_settings import BaseSettings
|
8
8
|
|
@@ -21,7 +21,7 @@ class BaseSettingsManager(ABC, Generic[T]):
|
|
21
21
|
"""
|
22
22
|
|
23
23
|
@abstractmethod
|
24
|
-
def __init__(self, settings_cls:
|
24
|
+
def __init__(self, settings_cls: type[T]):
|
25
25
|
"""
|
26
26
|
Initialize the settings manager.
|
27
27
|
|
@@ -31,7 +31,7 @@ class BaseSettingsManager(ABC, Generic[T]):
|
|
31
31
|
self.settings_cls = settings_cls
|
32
32
|
"""The settings class being managed"""
|
33
33
|
|
34
|
-
self.user_config:
|
34
|
+
self.user_config: dict[str, Any] = {}
|
35
35
|
"""User configuration dictionary"""
|
36
36
|
|
37
37
|
@property
|
@@ -3,7 +3,7 @@ Mapped settings manager implementation.
|
|
3
3
|
"""
|
4
4
|
from __future__ import annotations
|
5
5
|
|
6
|
-
from typing import Any,
|
6
|
+
from typing import Any, Generic
|
7
7
|
|
8
8
|
from pydantic import BaseModel, Field
|
9
9
|
from pydantic.main import create_model
|
@@ -30,7 +30,7 @@ class SettingsMap(BaseModel, Generic[T]):
|
|
30
30
|
key: str = ""
|
31
31
|
"""The key of the currently active settings"""
|
32
32
|
|
33
|
-
map:
|
33
|
+
map: dict[str, T] = Field(default_factory=dict)
|
34
34
|
"""A dictionary mapping keys to settings objects"""
|
35
35
|
|
36
36
|
|
@@ -80,20 +80,20 @@ class MappedSettingsManager(BaseSettingsManager[T]):
|
|
80
80
|
```
|
81
81
|
"""
|
82
82
|
|
83
|
-
def __init__(self, settings_cls:
|
83
|
+
def __init__(self, settings_cls: type[T]):
|
84
84
|
"""
|
85
85
|
Initialize the settings manager.
|
86
86
|
|
87
87
|
Args:
|
88
88
|
settings_cls: The settings class to manage
|
89
89
|
"""
|
90
|
-
self.settings_cls:
|
90
|
+
self.settings_cls: type[T] = settings_cls
|
91
91
|
"""The settings class being managed"""
|
92
92
|
|
93
93
|
self.cli_args: SettingsMap[T] = SettingsMap[T]()
|
94
94
|
"""Command line arguments"""
|
95
95
|
|
96
|
-
self.user_config:
|
96
|
+
self.user_config: dict[str, Any] = {}
|
97
97
|
"""User configuration"""
|
98
98
|
|
99
99
|
self.system_settings: T = settings_cls()
|
@@ -128,7 +128,7 @@ class MappedSettingsManager(BaseSettingsManager[T]):
|
|
128
128
|
self.clear()
|
129
129
|
|
130
130
|
@property
|
131
|
-
def _cli_args_config(self) ->
|
131
|
+
def _cli_args_config(self) -> dict[str, Any]:
|
132
132
|
"""
|
133
133
|
Get the command line arguments as a dictionary.
|
134
134
|
|
@@ -146,7 +146,7 @@ class MappedSettingsManager(BaseSettingsManager[T]):
|
|
146
146
|
return diff_dict(base, target)
|
147
147
|
|
148
148
|
@property
|
149
|
-
def _system_settings_config(self) ->
|
149
|
+
def _system_settings_config(self) -> dict[str, Any]:
|
150
150
|
"""
|
151
151
|
Get the system settings as a dictionary.
|
152
152
|
|
@@ -180,7 +180,7 @@ class MappedSettingsManager(BaseSettingsManager[T]):
|
|
180
180
|
DynamicMapSettings = create_model(
|
181
181
|
"DynamicMapSettings",
|
182
182
|
key=(str, ""),
|
183
|
-
map=(
|
183
|
+
map=(dict[str, self.settings_cls], {}), # type: ignore[name-defined]
|
184
184
|
__base__=SettingsMap[T],
|
185
185
|
)
|
186
186
|
|
@@ -215,7 +215,7 @@ class MappedSettingsManager(BaseSettingsManager[T]):
|
|
215
215
|
if not self.map_settings.map:
|
216
216
|
settings = self.settings_cls(**self.system_settings.model_dump())
|
217
217
|
else:
|
218
|
-
key =
|
218
|
+
key = next(iter(self.map_settings.map.keys()))
|
219
219
|
settings = self.map_settings.map[key]
|
220
220
|
else:
|
221
221
|
if self.map_settings.key not in self.map_settings.map:
|
@@ -272,7 +272,7 @@ class MappedSettingsManager(BaseSettingsManager[T]):
|
|
272
272
|
return self.map_settings.key
|
273
273
|
|
274
274
|
@property
|
275
|
-
def all_settings(self) ->
|
275
|
+
def all_settings(self) -> dict[str, T]:
|
276
276
|
"""
|
277
277
|
Get all settings.
|
278
278
|
|
File without changes
|
@@ -1,7 +1,7 @@
|
|
1
1
|
"""
|
2
2
|
Single settings manager implementation.
|
3
3
|
"""
|
4
|
-
from typing import Any,
|
4
|
+
from typing import Any, Union
|
5
5
|
|
6
6
|
from .base import BaseSettingsManager, T
|
7
7
|
from .utils import NestedDict, nested_dict, update_dict
|
@@ -42,20 +42,20 @@ class SingleSettingsManager(BaseSettingsManager[T]):
|
|
42
42
|
```
|
43
43
|
"""
|
44
44
|
|
45
|
-
def __init__(self, settings_cls:
|
45
|
+
def __init__(self, settings_cls: type[T]):
|
46
46
|
"""
|
47
47
|
Initialize the settings manager.
|
48
48
|
|
49
49
|
Args:
|
50
50
|
settings_cls: The settings class to manage
|
51
51
|
"""
|
52
|
-
self.settings_cls:
|
52
|
+
self.settings_cls: type[T] = settings_cls
|
53
53
|
"""The settings class being managed"""
|
54
54
|
|
55
55
|
self.cli_args: NestedDict = nested_dict()
|
56
56
|
"""Command line arguments"""
|
57
57
|
|
58
|
-
self.user_config:
|
58
|
+
self.user_config: dict[str, Any] = {}
|
59
59
|
"""User configuration"""
|
60
60
|
|
61
61
|
self._settings: Union[T, None] = None
|
@@ -2,12 +2,12 @@
|
|
2
2
|
Utility functions for dictionary operations.
|
3
3
|
"""
|
4
4
|
from collections import defaultdict
|
5
|
-
from typing import Any
|
5
|
+
from typing import Any
|
6
6
|
|
7
7
|
from .types import NestedDict
|
8
8
|
|
9
9
|
|
10
|
-
def diff_dict(base:
|
10
|
+
def diff_dict(base: dict[str, Any], target: dict[str, Any]) -> dict[str, Any]:
|
11
11
|
"""
|
12
12
|
Get the difference between two dictionaries.
|
13
13
|
Only includes keys where the values are different.
|
@@ -27,7 +27,7 @@ def diff_dict(base: Dict[str, Any], target: Dict[str, Any]) -> Dict[str, Any]:
|
|
27
27
|
return result
|
28
28
|
|
29
29
|
|
30
|
-
def update_dict(base:
|
30
|
+
def update_dict(base: dict[str, Any], update: dict[str, Any]) -> dict[str, Any]:
|
31
31
|
"""
|
32
32
|
Update a dictionary with another dictionary.
|
33
33
|
Performs a deep update.
|
@@ -1,13 +1,12 @@
|
|
1
|
-
[
|
1
|
+
[project]
|
2
2
|
name = "pydantic-settings-manager"
|
3
|
-
version = "0.
|
3
|
+
version = "0.2.0"
|
4
4
|
description = "A library for managing Pydantic settings objects"
|
5
|
-
authors = [
|
6
|
-
|
5
|
+
authors = [
|
6
|
+
{ name = "kiarina", email = "kiarinadawa@gmail.com" }
|
7
|
+
]
|
8
|
+
license = { text = "MIT" }
|
7
9
|
readme = "README.md"
|
8
|
-
homepage = "https://github.com/kiarina/pydantic-settings-manager"
|
9
|
-
repository = "https://github.com/kiarina/pydantic-settings-manager"
|
10
|
-
documentation = "https://github.com/kiarina/pydantic-settings-manager"
|
11
10
|
keywords = ["pydantic", "settings", "configuration"]
|
12
11
|
classifiers = [
|
13
12
|
"Development Status :: 4 - Beta",
|
@@ -15,44 +14,32 @@ classifiers = [
|
|
15
14
|
"License :: OSI Approved :: MIT License",
|
16
15
|
"Operating System :: OS Independent",
|
17
16
|
"Programming Language :: Python :: 3",
|
18
|
-
"Programming Language :: Python :: 3.8",
|
19
17
|
"Programming Language :: Python :: 3.9",
|
20
18
|
"Programming Language :: Python :: 3.10",
|
21
19
|
"Programming Language :: Python :: 3.11",
|
20
|
+
"Programming Language :: Python :: 3.12",
|
22
21
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
23
22
|
]
|
24
|
-
|
25
|
-
|
23
|
+
requires-python = ">=3.9"
|
24
|
+
dependencies = [
|
25
|
+
"pydantic>=2.0.0",
|
26
|
+
"pydantic-settings>=2.0.0",
|
26
27
|
]
|
27
28
|
|
28
|
-
[
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
[tool.poetry.group.dev.dependencies]
|
34
|
-
pytest = "^7.4.0"
|
35
|
-
pytest-cov = "^4.1.0"
|
36
|
-
black = "^23.7.0"
|
37
|
-
isort = "^5.12.0"
|
38
|
-
mypy = "^1.5.0"
|
39
|
-
ruff = "^0.0.284"
|
29
|
+
[project.urls]
|
30
|
+
homepage = "https://github.com/kiarina/pydantic-settings-manager"
|
31
|
+
repository = "https://github.com/kiarina/pydantic-settings-manager"
|
32
|
+
documentation = "https://github.com/kiarina/pydantic-settings-manager"
|
40
33
|
|
41
34
|
[build-system]
|
42
|
-
requires = ["
|
43
|
-
build-backend = "
|
35
|
+
requires = ["hatchling"]
|
36
|
+
build-backend = "hatchling.build"
|
44
37
|
|
45
|
-
[tool.
|
46
|
-
|
47
|
-
target-version = ["py38"]
|
48
|
-
|
49
|
-
[tool.isort]
|
50
|
-
profile = "black"
|
51
|
-
line_length = 100
|
52
|
-
multi_line_output = 3
|
38
|
+
[tool.setuptools.package-data]
|
39
|
+
pydantic_settings_manager = ["py.typed"]
|
53
40
|
|
54
41
|
[tool.mypy]
|
55
|
-
python_version = "3.
|
42
|
+
python_version = "3.9"
|
56
43
|
warn_return_any = true
|
57
44
|
warn_unused_configs = true
|
58
45
|
disallow_untyped_defs = true
|
@@ -67,5 +54,37 @@ warn_unreachable = true
|
|
67
54
|
|
68
55
|
[tool.ruff]
|
69
56
|
line-length = 100
|
70
|
-
target-version = "
|
71
|
-
|
57
|
+
target-version = "py39"
|
58
|
+
fix = true
|
59
|
+
|
60
|
+
[tool.ruff.lint]
|
61
|
+
select = [
|
62
|
+
"E", # pycodestyle errors
|
63
|
+
"W", # pycodestyle warnings
|
64
|
+
"F", # pyflakes
|
65
|
+
"I", # isort
|
66
|
+
"B", # flake8-bugbear
|
67
|
+
"C4", # flake8-comprehensions
|
68
|
+
"UP", # pyupgrade
|
69
|
+
"RUF", # ruff-specific rules
|
70
|
+
]
|
71
|
+
ignore = []
|
72
|
+
|
73
|
+
[tool.ruff.lint.isort]
|
74
|
+
known-first-party = ["pydantic_settings_manager"]
|
75
|
+
|
76
|
+
[dependency-groups]
|
77
|
+
test = [
|
78
|
+
"pytest>=8.3.5",
|
79
|
+
"pytest-cov>=5.0.0",
|
80
|
+
]
|
81
|
+
lint = [
|
82
|
+
"mypy>=1.14.1",
|
83
|
+
"ruff>=0.12.1",
|
84
|
+
]
|
85
|
+
dev = [
|
86
|
+
"pytest>=8.3.5",
|
87
|
+
"pytest-cov>=5.0.0",
|
88
|
+
"mypy>=1.14.1",
|
89
|
+
"ruff>=0.12.1",
|
90
|
+
]
|
File without changes
|