fastapi-toolsets 5.0.0b2__tar.gz → 5.1.1__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 (53) hide show
  1. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/PKG-INFO +2 -7
  2. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/README.md +0 -2
  3. fastapi_toolsets-5.1.1/pyproject.toml +133 -0
  4. fastapi_toolsets-5.0.0b2/pyproject.toml → fastapi_toolsets-5.1.1/pyproject.toml.orig +15 -7
  5. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/__init__.py +1 -1
  6. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/cli/commands/fixtures.py +1 -1
  7. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/crud/factory.py +268 -73
  8. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/crud/search.py +89 -60
  9. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/db/core.py +11 -9
  10. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/db/m2m.py +1 -3
  11. fastapi_toolsets-5.1.1/src/fastapi_toolsets/dependencies.py +166 -0
  12. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/exceptions/handler.py +25 -26
  13. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/fixtures/__init__.py +6 -0
  14. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/fixtures/utils.py +9 -7
  15. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/models/watched.py +75 -37
  16. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/schemas.py +4 -4
  17. fastapi_toolsets-5.0.0b2/src/fastapi_toolsets/dependencies.py +0 -155
  18. fastapi_toolsets-5.0.0b2/src/fastapi_toolsets/security/__init__.py +0 -26
  19. fastapi_toolsets-5.0.0b2/src/fastapi_toolsets/security/abc.py +0 -55
  20. fastapi_toolsets-5.0.0b2/src/fastapi_toolsets/security/oauth.py +0 -197
  21. fastapi_toolsets-5.0.0b2/src/fastapi_toolsets/security/sources/__init__.py +0 -8
  22. fastapi_toolsets-5.0.0b2/src/fastapi_toolsets/security/sources/bearer.py +0 -120
  23. fastapi_toolsets-5.0.0b2/src/fastapi_toolsets/security/sources/cookie.py +0 -148
  24. fastapi_toolsets-5.0.0b2/src/fastapi_toolsets/security/sources/header.py +0 -67
  25. fastapi_toolsets-5.0.0b2/src/fastapi_toolsets/security/sources/multi.py +0 -71
  26. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/LICENSE +0 -0
  27. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/_imports.py +0 -0
  28. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/cli/__init__.py +0 -0
  29. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/cli/app.py +0 -0
  30. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/cli/commands/__init__.py +0 -0
  31. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/cli/config.py +0 -0
  32. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/cli/pyproject.py +0 -0
  33. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/cli/utils.py +0 -0
  34. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/crud/__init__.py +1 -1
  35. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/db/__init__.py +0 -0
  36. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/db/locks.py +0 -0
  37. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/db/testing.py +0 -0
  38. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/db/watch.py +0 -0
  39. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/exceptions/__init__.py +2 -2
  40. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/exceptions/exceptions.py +0 -0
  41. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/fixtures/enum.py +0 -0
  42. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/fixtures/registry.py +0 -0
  43. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/logger.py +0 -0
  44. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/metrics/__init__.py +0 -0
  45. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/metrics/handler.py +0 -0
  46. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/metrics/registry.py +0 -0
  47. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/models/__init__.py +3 -3
  48. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/models/columns.py +0 -0
  49. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/py.typed +0 -0
  50. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/pytest/__init__.py +0 -0
  51. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/pytest/plugin.py +0 -0
  52. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/pytest/utils.py +0 -0
  53. {fastapi_toolsets-5.0.0b2 → fastapi_toolsets-5.1.1}/src/fastapi_toolsets/types.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fastapi-toolsets
3
- Version: 5.0.0b2
3
+ Version: 5.1.1
4
4
  Summary: Production-ready utilities for FastAPI applications
5
5
  Keywords: fastapi,sqlalchemy,postgresql
6
6
  Author: d3vyce
@@ -29,14 +29,12 @@ Requires-Dist: asyncpg>=0.29.0
29
29
  Requires-Dist: fastapi>=0.100.0
30
30
  Requires-Dist: pydantic>=2.0
31
31
  Requires-Dist: sqlalchemy[asyncio]>=2.0
32
- Requires-Dist: fastapi-toolsets[cli,metrics,pytest,security] ; extra == 'all'
32
+ Requires-Dist: fastapi-toolsets[cli,metrics,pytest] ; extra == 'all'
33
33
  Requires-Dist: typer>=0.9.0 ; extra == 'cli'
34
34
  Requires-Dist: prometheus-client>=0.20.0 ; extra == 'metrics'
35
35
  Requires-Dist: httpx>=0.25.0 ; extra == 'pytest'
36
36
  Requires-Dist: pytest-xdist>=3.0.0 ; extra == 'pytest'
37
37
  Requires-Dist: pytest>=8.0.0 ; extra == 'pytest'
38
- Requires-Dist: async-lru>=1.0 ; extra == 'security'
39
- Requires-Dist: httpx>=0.25.0 ; extra == 'security'
40
38
  Requires-Python: >=3.11
41
39
  Project-URL: Homepage, https://github.com/d3vyce/fastapi-toolsets
42
40
  Project-URL: Documentation, https://fastapi-toolsets.d3vyce.fr/
@@ -46,7 +44,6 @@ Provides-Extra: all
46
44
  Provides-Extra: cli
47
45
  Provides-Extra: metrics
48
46
  Provides-Extra: pytest
49
- Provides-Extra: security
50
47
  Description-Content-Type: text/markdown
51
48
 
52
49
  # FastAPI Toolsets
@@ -82,7 +79,6 @@ Install only the extras you need:
82
79
  ```bash
83
80
  uv add "fastapi-toolsets[cli]"
84
81
  uv add "fastapi-toolsets[metrics]"
85
- uv add "fastapi-toolsets[security]"
86
82
  uv add "fastapi-toolsets[pytest]"
87
83
  ```
88
84
 
@@ -108,7 +104,6 @@ uv add "fastapi-toolsets[all]"
108
104
 
109
105
  ### Optional
110
106
 
111
- - **Security**: Composable authentication sources (`BearerTokenAuth`, `CookieAuth`, `APIKeyHeaderAuth`, `MultiAuth`) with HMAC-signed cookies and OAuth 2.0 / OIDC helpers
112
107
  - **CLI**: Django-like command-line interface with fixture management and custom commands support
113
108
  - **Metrics**: Prometheus metrics endpoint with provider/collector registry
114
109
  - **Pytest Helpers**: Async test client, database session management, `pytest-xdist` support, and table cleanup utilities
@@ -31,7 +31,6 @@ Install only the extras you need:
31
31
  ```bash
32
32
  uv add "fastapi-toolsets[cli]"
33
33
  uv add "fastapi-toolsets[metrics]"
34
- uv add "fastapi-toolsets[security]"
35
34
  uv add "fastapi-toolsets[pytest]"
36
35
  ```
37
36
 
@@ -57,7 +56,6 @@ uv add "fastapi-toolsets[all]"
57
56
 
58
57
  ### Optional
59
58
 
60
- - **Security**: Composable authentication sources (`BearerTokenAuth`, `CookieAuth`, `APIKeyHeaderAuth`, `MultiAuth`) with HMAC-signed cookies and OAuth 2.0 / OIDC helpers
61
59
  - **CLI**: Django-like command-line interface with fixture management and custom commands support
62
60
  - **Metrics**: Prometheus metrics endpoint with provider/collector registry
63
61
  - **Pytest Helpers**: Async test client, database session management, `pytest-xdist` support, and table cleanup utilities
@@ -0,0 +1,133 @@
1
+ [project]
2
+ name = "fastapi-toolsets"
3
+ version = "5.1.1"
4
+ description = "Production-ready utilities for FastAPI applications"
5
+ readme = "README.md"
6
+ license = "MIT"
7
+ license-files = ["LICENSE"]
8
+ requires-python = ">=3.11"
9
+ keywords = [
10
+ "fastapi",
11
+ "sqlalchemy",
12
+ "postgresql",
13
+ ]
14
+ classifiers = [
15
+ "Development Status :: 5 - Production/Stable",
16
+ "Framework :: AsyncIO",
17
+ "Framework :: FastAPI",
18
+ "Framework :: Pydantic",
19
+ "Intended Audience :: Developers",
20
+ "Intended Audience :: Information Technology",
21
+ "Intended Audience :: System Administrators",
22
+ "License :: OSI Approved :: MIT License",
23
+ "Operating System :: OS Independent",
24
+ "Programming Language :: Python :: 3 :: Only",
25
+ "Programming Language :: Python :: 3.11",
26
+ "Programming Language :: Python :: 3.12",
27
+ "Programming Language :: Python :: 3.13",
28
+ "Programming Language :: Python :: 3.14",
29
+ "Topic :: Software Development :: Libraries :: Python Modules",
30
+ "Topic :: Software Development :: Libraries",
31
+ "Topic :: Software Development",
32
+ "Typing :: Typed",
33
+ ]
34
+ dependencies = [
35
+ "asyncpg>=0.29.0",
36
+ "fastapi>=0.100.0",
37
+ "pydantic>=2.0",
38
+ "sqlalchemy[asyncio]>=2.0",
39
+ ]
40
+
41
+ [[project.authors]]
42
+ name = "d3vyce"
43
+ email = "contact@d3vyce.fr"
44
+
45
+ [project.urls]
46
+ Homepage = "https://github.com/d3vyce/fastapi-toolsets"
47
+ Documentation = "https://fastapi-toolsets.d3vyce.fr/"
48
+ Repository = "https://github.com/d3vyce/fastapi-toolsets"
49
+ Issues = "https://github.com/d3vyce/fastapi-toolsets/issues"
50
+
51
+ [project.optional-dependencies]
52
+ cli = ["typer>=0.9.0"]
53
+ metrics = ["prometheus_client>=0.20.0"]
54
+ pytest = [
55
+ "httpx>=0.25.0",
56
+ "pytest-xdist>=3.0.0",
57
+ "pytest>=8.0.0",
58
+ ]
59
+ all = ["fastapi-toolsets[cli,metrics,pytest]"]
60
+
61
+ [project.scripts]
62
+ manager = "fastapi_toolsets.cli.app:cli"
63
+
64
+ [dependency-groups]
65
+ dev = [
66
+ { include-group = "tests" },
67
+ { include-group = "docs" },
68
+ { include-group = "docs-src" },
69
+ "fastapi-toolsets[all]",
70
+ "prek>=0.3.8",
71
+ "ruff>=0.1.0",
72
+ "ty>=0.0.1a0",
73
+ ]
74
+ tests = [
75
+ "async-lru>=1.0",
76
+ "coverage>=7.0.0",
77
+ "httpx>=0.25.0",
78
+ "pytest-anyio>=0.0.0",
79
+ "pytest-cov>=4.0.0",
80
+ "pytest-xdist>=3.0.0",
81
+ "pytest>=8.0.0",
82
+ ]
83
+ docs = [
84
+ "mike",
85
+ "mkdocstrings-python>=2.0.2",
86
+ "zensical>=0.0.30",
87
+ ]
88
+ docs-src = ["bcrypt>=4.0.0"]
89
+
90
+ [build-system]
91
+ requires = ["uv_build>=0.10,<0.13.0"]
92
+ build-backend = "uv_build"
93
+
94
+ [tool.ruff.format]
95
+ exclude = ["*.md"]
96
+
97
+ [tool.ruff.lint]
98
+ extend-select = ["E712"]
99
+
100
+ [tool.ruff.lint.flake8-bugbear]
101
+ extend-immutable-calls = [
102
+ "fastapi.Depends",
103
+ "fastapi.Security",
104
+ ]
105
+
106
+ [tool.ruff.lint.per-file-ignores]
107
+ "tests/**" = [
108
+ "RUF012",
109
+ "RUF059",
110
+ "SIM117",
111
+ "DTZ001",
112
+ "S110",
113
+ "BLE001",
114
+ ]
115
+
116
+ [tool.pytest.ini_options]
117
+ testpaths = ["tests"]
118
+ filterwarnings = ["ignore::DeprecationWarning"]
119
+
120
+ [tool.coverage.run]
121
+ source = ["src/fastapi_toolsets"]
122
+ branch = true
123
+
124
+ [tool.coverage.report]
125
+ exclude_lines = [
126
+ "pragma: no cover",
127
+ "if TYPE_CHECKING:",
128
+ "raise NotImplementedError",
129
+ ]
130
+
131
+ [tool.uv.sources.mike]
132
+ git = "https://github.com/squidfunk/mike.git"
133
+ tag = "2.2.0+zensical-0.1.0"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fastapi-toolsets"
3
- version = "5.0.0b2"
3
+ version = "5.1.1"
4
4
  description = "Production-ready utilities for FastAPI applications"
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -50,17 +50,13 @@ cli = [
50
50
  metrics = [
51
51
  "prometheus_client>=0.20.0",
52
52
  ]
53
- security = [
54
- "async-lru>=1.0",
55
- "httpx>=0.25.0",
56
- ]
57
53
  pytest = [
58
54
  "httpx>=0.25.0",
59
55
  "pytest-xdist>=3.0.0",
60
56
  "pytest>=8.0.0",
61
57
  ]
62
58
  all = [
63
- "fastapi-toolsets[cli,metrics,pytest,security]",
59
+ "fastapi-toolsets[cli,metrics,pytest]",
64
60
  ]
65
61
 
66
62
  [project.scripts]
@@ -95,9 +91,21 @@ docs-src = [
95
91
  ]
96
92
 
97
93
  [build-system]
98
- requires = ["uv_build>=0.10,<0.12.0"]
94
+ requires = ["uv_build>=0.10,<0.13.0"]
99
95
  build-backend = "uv_build"
100
96
 
97
+ [tool.ruff.format]
98
+ exclude = ["*.md"]
99
+
100
+ [tool.ruff.lint]
101
+ extend-select = ["E712"]
102
+
103
+ [tool.ruff.lint.flake8-bugbear]
104
+ extend-immutable-calls = ["fastapi.Depends", "fastapi.Security"]
105
+
106
+ [tool.ruff.lint.per-file-ignores]
107
+ "tests/**" = ["RUF012", "RUF059", "SIM117", "DTZ001", "S110", "BLE001"]
108
+
101
109
  [tool.pytest.ini_options]
102
110
  testpaths = ["tests"]
103
111
  filterwarnings = [
@@ -24,4 +24,4 @@ Example usage:
24
24
  return Response(data={"user": user.username}, message="Success")
25
25
  """
26
26
 
27
- __version__ = "5.0.0b2"
27
+ __version__ = "5.1.1"
@@ -57,7 +57,7 @@ async def load(
57
57
  ctx: typer.Context,
58
58
  contexts: Annotated[
59
59
  list[str] | None,
60
- typer.Argument(help="Contexts to load."),
60
+ typer.Argument(help="Contexts to load.", envvar="FIXTURES_CONTEXT"),
61
61
  ] = None,
62
62
  strategy: Annotated[
63
63
  LoadStrategy,