Skip to content

Commit 9cbbb1b

Browse files
committed
Add everything
1 parent d82dc14 commit 9cbbb1b

13 files changed

+797
-1083
lines changed

CHANGELOG.md

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,16 @@ Please follow [the Keep a Changelog standard](https://keepachangelog.com/en/1.0.
55

66
## [Unreleased]
77

8-
### Removed
9-
10-
* `regex`, `include`, `min_items`, `max_items`, and `unique_items` arguments were removed from `schema(...).field(...).had`. Notice that it's not a breaking change for most cases because passing these arguments caused exceptions
8+
## [4.2.0]
119

1210
### Added
1311

14-
* Automatic creation of versioned_routers based on the `VersionBundle` passed to `Cadwyn`
12+
* Automatic changelog generation from version changes using `Cadwyn.generate_changelog` method and `GET /changelog` endpoint.
13+
* Automatic creation of versioned_routers based on the `VersionBundle` passed to `Cadwyn` which means that all versions mentioned in the version bundle will already be available for routing even without the use of `generate_and_include_versioned_routers`
14+
15+
### Removed
16+
17+
* `regex`, `include`, `min_items`, `max_items`, and `unique_items` arguments were removed from `schema(...).field(...).had`. Notice that it's not a breaking change for most cases because passing these arguments caused exceptions
1518

1619
## [4.1.0]
1720

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ lint:
88
pre-commit run --all-files
99

1010
format:
11-
poetry run ruff . --fix && poetry run ruff format .;
11+
poetry run ruff check . --fix && poetry run ruff format .;
1212

1313
test:
1414
rm -f .coverage coverage.xml; \

cadwyn/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import importlib.metadata
22

33
from .applications import Cadwyn
4+
from .changelogs import hidden
45
from .route_generation import VersionedAPIRouter, generate_versioned_routers
56
from .schema_generation import generate_versioned_models, migrate_response_body
67
from .structure import (
@@ -37,4 +38,5 @@
3738
"RequestInfo",
3839
"ResponseInfo",
3940
"generate_versioned_models",
41+
"hidden",
4042
]

cadwyn/applications.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
from starlette.types import Lifespan
2626
from typing_extensions import Self
2727

28+
from cadwyn.changelogs import CadwynChangelogResource, _generate_changelog
2829
from cadwyn.middleware import HeaderVersioningMiddleware, _get_api_version_dependency
2930
from cadwyn.route_generation import generate_versioned_routers
3031
from cadwyn.routing import _RootHeaderAPIRouter
@@ -47,6 +48,8 @@ def __init__(
4748
*,
4849
versions: VersionBundle,
4950
api_version_header_name: str = "x-api-version",
51+
changelog_url: str | None = "/changelog",
52+
include_changelog_url_in_schema: bool = True,
5053
debug: bool = False,
5154
title: str = "FastAPI",
5255
summary: str | None = None,
@@ -154,13 +157,16 @@ def __init__(
154157
api_version_var=self.versions.api_version_var,
155158
)
156159

160+
self.changelog_url = changelog_url
161+
self.include_changelog_url_in_schema = include_changelog_url_in_schema
162+
157163
self.docs_url = docs_url
158164
self.redoc_url = redoc_url
159165
self.openapi_url = openapi_url
160166
self.redoc_url = redoc_url
161167

162168
unversioned_router = APIRouter(**self._kwargs_to_router)
163-
self._add_openapi_endpoints(unversioned_router)
169+
self._add_utility_endpoints(unversioned_router)
164170
self._add_default_versioned_routers()
165171
self.include_router(unversioned_router)
166172
self.add_middleware(
@@ -189,7 +195,19 @@ def dependency_overrides( # pyright: ignore[reportIncompatibleVariableOverride]
189195
) -> None:
190196
self._dependency_overrides_provider.dependency_overrides = value
191197

192-
def _add_openapi_endpoints(self, unversioned_router: APIRouter):
198+
def generate_changelog(self) -> CadwynChangelogResource:
199+
return _generate_changelog(self.versions, self.router)
200+
201+
def _add_utility_endpoints(self, unversioned_router: APIRouter):
202+
if self.changelog_url is not None:
203+
unversioned_router.add_api_route(
204+
path=self.changelog_url,
205+
endpoint=self.generate_changelog,
206+
response_model=CadwynChangelogResource,
207+
methods=["GET"],
208+
include_in_schema=self.include_changelog_url_in_schema,
209+
)
210+
193211
if self.openapi_url is not None:
194212
unversioned_router.add_route(
195213
path=self.openapi_url,

0 commit comments

Comments
 (0)