Skip to content

Commit 7e09aa4

Browse files
authored
[ENG-10168] 2.1.7 BE: add link header to cedar metadata records endpoints (#11596)
* add link header to guid metadata endpoints for registry and project * update code * add link header to cedar metadata records endpoints
1 parent 7d60801 commit 7e09aa4

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

api/cedar_metadata_records/views.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919
CedarMetadataRecordsDetailSerializer,
2020
)
2121
from framework.auth.oauth_scopes import CoreScopes
22-
23-
from osf.models import CedarMetadataRecord
22+
from osf.models import CedarMetadataRecord, Node, Registration
23+
from website import settings
2424

2525
logger = logging.getLogger(__name__)
2626

@@ -99,5 +99,10 @@ def get_serializer_class(self):
9999

100100
def get(self, request, *args, **kwargs):
101101
record = self.get_object()
102+
is_referent_project_or_registration = isinstance(record.guid.referent, (Node, Registration))
102103
file_name = f'{record._id}-{record.get_template_name()}-v{record.get_template_version()}.json'
103-
return Response(record.metadata, headers={'Content-Disposition': f'attachment; filename={file_name}'})
104+
headers = {'Content-Disposition': f'attachment; filename={file_name}'}
105+
if is_referent_project_or_registration:
106+
guid_id = record.guid._id
107+
headers['link'] = f'<{settings.DOMAIN}{guid_id}/>; rel="describes"; type="text/html"'
108+
return Response(record.metadata, headers=headers)

api_tests/cedar_metadata_records/views/test_record_metadata_download_get.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
from .test_record import TestCedarMetadataRecord
44
from osf.utils.permissions import READ, WRITE
55
from osf_tests.factories import AuthUserFactory
6+
from website import settings
7+
68

79
@pytest.mark.django_db
810
class TestCedarMetadataRecordMetadataDownloadPrivateProjectPublishedMetadata(TestCedarMetadataRecord):
@@ -13,6 +15,7 @@ def test_record_metadata_download_for_node_with_admin_auth(self, app, node, user
1315
resp = app.get(f'/_/cedar_metadata_records/{cedar_record_for_node._id}/metadata_download/', auth=admin.auth)
1416
assert resp.status_code == 200
1517
assert resp.headers['Content-Disposition'] == f'attachment; filename={self.get_record_metadata_download_file_name(cedar_record_for_node)}'
18+
assert resp.headers.get('Link') == f'<{settings.DOMAIN}{node._id}/>; rel="describes"; type="text/html"'
1619
assert resp.json == cedar_record_metadata_json
1720

1821
def test_record_metadata_download_for_node_with_write_auth(self, app, node, cedar_record_for_node, cedar_record_metadata_json):
@@ -179,6 +182,7 @@ def test_record_metadata_download_for_registration_with_admin_auth(self, app, us
179182
resp = app.get(f'/_/cedar_metadata_records/{cedar_record_for_registration._id}/metadata_download/', auth=admin.auth)
180183
assert resp.status_code == 200
181184
assert resp.headers['Content-Disposition'] == f'attachment; filename={self.get_record_metadata_download_file_name(cedar_record_for_registration)}'
185+
assert resp.headers.get('Link') == f'<{settings.DOMAIN}{cedar_record_for_registration.guid._id}/>; rel="describes"; type="text/html"'
182186
assert resp.json == cedar_record_metadata_json
183187

184188
def test_record_metadata_download_for_registration_with_write_auth(self, app, registration, cedar_record_for_registration, cedar_record_metadata_json):
@@ -307,6 +311,7 @@ def test_record_metadata_download_for_node_with_admin_auth(self, app, user, ceda
307311
resp = app.get(f'/_/cedar_metadata_records/{cedar_draft_record_for_file_alt._id}/metadata_download/', auth=admin.auth)
308312
assert resp.status_code == 200
309313
assert resp.headers['Content-Disposition'] == f'attachment; filename={self.get_record_metadata_download_file_name(cedar_draft_record_for_file_alt)}'
314+
assert not resp.headers.get('Link')
310315
assert resp.json == cedar_record_metadata_json
311316

312317
def test_record_metadata_download_for_node_with_write_auth(self, app, node_alt, cedar_draft_record_for_file_alt, cedar_record_metadata_json):

0 commit comments

Comments
 (0)