Skip to content

Commit 0da8066

Browse files
committed
feat(api): add deprecation headers to releng legacy JSON endpoint
Add `deprecated_json_endpoint` decorator in `api/deprecation.py` (RFC 8594). Apply to `releng/views.py` `releases_json` - response now includes `Deprecation: true` and `Link: </api/v1/releng/releases/>; rel="successor-version"`.
1 parent be50f07 commit 0da8066

3 files changed

Lines changed: 23 additions & 0 deletions

File tree

api/deprecation.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from functools import wraps
2+
3+
4+
def deprecated_json_endpoint(successor_path: str):
5+
def decorator(view_func):
6+
@wraps(view_func)
7+
def wrapper(request, *args, **kwargs):
8+
response = view_func(request, *args, **kwargs)
9+
response['Deprecation'] = 'true'
10+
response['Link'] = f'<{successor_path}>; rel="successor-version"'
11+
return response
12+
return wrapper
13+
return decorator

api/tests/test_deprecation.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import pytest
2+
3+
4+
def test_releng_releases_json_deprecation_headers(db, client):
5+
response = client.get('/releng/releases/json/')
6+
assert response.status_code == 200
7+
assert response['Deprecation'] == 'true'
8+
assert response['Link'] == '</api/v1/releng/releases/>; rel="successor-version"'

releng/views.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from main.models import Package
1212
from mirrors.models import MirrorUrl
1313

14+
from api.deprecation import deprecated_json_endpoint
1415
from .models import Release
1516

1617

@@ -59,6 +60,7 @@ def default(self, obj):
5960
return super(ReleaseJSONEncoder, self).default(obj)
6061

6162

63+
@deprecated_json_endpoint('/api/v1/releng/releases/')
6264
def releases_json(request):
6365
releases = Release.objects.all()
6466
try:

0 commit comments

Comments
 (0)