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.
Files changed (22) hide show
  1. pydantic_settings_manager-0.2.0/.github/workflows/ci.yml +55 -0
  2. pydantic_settings_manager-0.2.0/.gitignore +14 -0
  3. pydantic_settings_manager-0.2.0/CHANGELOG.md +52 -0
  4. pydantic_settings_manager-0.2.0/Makefile +30 -0
  5. {pydantic_settings_manager-0.1.1 → pydantic_settings_manager-0.2.0}/PKG-INFO +60 -14
  6. {pydantic_settings_manager-0.1.1 → pydantic_settings_manager-0.2.0}/README.md +49 -0
  7. pydantic_settings_manager-0.2.0/mypy.ini +9 -0
  8. {pydantic_settings_manager-0.1.1 → pydantic_settings_manager-0.2.0}/pydantic_settings_manager/__init__.py +4 -4
  9. {pydantic_settings_manager-0.1.1 → pydantic_settings_manager-0.2.0}/pydantic_settings_manager/base.py +3 -3
  10. {pydantic_settings_manager-0.1.1 → pydantic_settings_manager-0.2.0}/pydantic_settings_manager/mapped.py +10 -10
  11. pydantic_settings_manager-0.2.0/pydantic_settings_manager/py.typed +0 -0
  12. {pydantic_settings_manager-0.1.1 → pydantic_settings_manager-0.2.0}/pydantic_settings_manager/single.py +4 -4
  13. pydantic_settings_manager-0.2.0/pydantic_settings_manager/types.py +7 -0
  14. {pydantic_settings_manager-0.1.1 → pydantic_settings_manager-0.2.0}/pydantic_settings_manager/utils.py +3 -3
  15. {pydantic_settings_manager-0.1.1 → pydantic_settings_manager-0.2.0}/pyproject.toml +54 -35
  16. pydantic_settings_manager-0.2.0/tests/__init__.py +0 -0
  17. pydantic_settings_manager-0.2.0/tests/test_mapped.py +164 -0
  18. pydantic_settings_manager-0.2.0/tests/test_single.py +68 -0
  19. pydantic_settings_manager-0.2.0/tests/test_utils.py +65 -0
  20. pydantic_settings_manager-0.2.0/uv.lock +522 -0
  21. pydantic_settings_manager-0.1.1/pydantic_settings_manager/types.py +0 -6
  22. {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,14 @@
1
+ .DS_Store
2
+
3
+ __pycache__/
4
+ .mypy_cache/
5
+ .pytest_cache/
6
+ .ruff_cache/
7
+ .venv/
8
+
9
+ .coverage
10
+ .dmypy.json
11
+
12
+ dist/
13
+ build/
14
+ *.egg-info/
@@ -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
1
+ Metadata-Version: 2.4
2
2
  Name: pydantic-settings-manager
3
- Version: 0.1.1
3
+ Version: 0.2.0
4
4
  Summary: A library for managing Pydantic settings objects
5
- Home-page: https://github.com/kiarina/pydantic-settings-manager
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
- Keywords: pydantic,settings,configuration
8
- Author: kiarina
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-Dist: pydantic (>=2.0.0,<3.0.0)
24
- Requires-Dist: pydantic-settings (>=2.0.0,<3.0.0)
25
- Project-URL: Documentation, https://github.com/kiarina/pydantic-settings-manager
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.1.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, Dict, Generic, Type, TypeVar
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: Type[T]):
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: Dict[str, Any] = {}
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, Dict, Generic, Type
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: Dict[str, T] = Field(default_factory=dict)
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: Type[T]):
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: Type[T] = 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: Dict[str, Any] = {}
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) -> Dict[str, Any]:
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) -> Dict[str, Any]:
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=(Dict[str, self.settings_cls], {}), # type: ignore[name-defined]
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 = list(self.map_settings.map.keys())[0]
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) -> Dict[str, T]:
275
+ def all_settings(self) -> dict[str, T]:
276
276
  """
277
277
  Get all settings.
278
278
 
@@ -1,7 +1,7 @@
1
1
  """
2
2
  Single settings manager implementation.
3
3
  """
4
- from typing import Any, Dict, Type, Union
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: Type[T]):
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: Type[T] = 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: Dict[str, Any] = {}
58
+ self.user_config: dict[str, Any] = {}
59
59
  """User configuration"""
60
60
 
61
61
  self._settings: Union[T, None] = None
@@ -0,0 +1,7 @@
1
+ from collections import defaultdict
2
+ from typing import Any, Union
3
+
4
+ NestedDict = defaultdict[str, Union["NestedDict", Any]]
5
+ """
6
+ ネストした辞書型
7
+ """
@@ -2,12 +2,12 @@
2
2
  Utility functions for dictionary operations.
3
3
  """
4
4
  from collections import defaultdict
5
- from typing import Any, Dict
5
+ from typing import Any
6
6
 
7
7
  from .types import NestedDict
8
8
 
9
9
 
10
- def diff_dict(base: Dict[str, Any], target: Dict[str, Any]) -> Dict[str, Any]:
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: Dict[str, Any], update: Dict[str, Any]) -> Dict[str, Any]:
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
- [tool.poetry]
1
+ [project]
2
2
  name = "pydantic-settings-manager"
3
- version = "0.1.1"
3
+ version = "0.2.0"
4
4
  description = "A library for managing Pydantic settings objects"
5
- authors = ["kiarina <kiarinadawa@gmail.com>"]
6
- license = "MIT"
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
- packages = [
25
- { include = "pydantic_settings_manager" }
23
+ requires-python = ">=3.9"
24
+ dependencies = [
25
+ "pydantic>=2.0.0",
26
+ "pydantic-settings>=2.0.0",
26
27
  ]
27
28
 
28
- [tool.poetry.dependencies]
29
- python = "^3.8"
30
- pydantic = "^2.0.0"
31
- pydantic-settings = "^2.0.0"
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 = ["poetry-core"]
43
- build-backend = "poetry.core.masonry.api"
35
+ requires = ["hatchling"]
36
+ build-backend = "hatchling.build"
44
37
 
45
- [tool.black]
46
- line-length = 100
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.8"
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 = "py38"
71
- select = ["E", "F", "B", "I"]
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