Skip to content

Commit 614511d

Browse files
committed
urls: integrate invenio_url_for
1 parent ba0a3af commit 614511d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+741
-499
lines changed

invenio_rdm_records/oaiserver/services/config.py

+66-14
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,10 @@
1010
from invenio_i18n import lazy_gettext as _
1111
from invenio_oaiserver.models import OAISet
1212
from invenio_records_resources.services import ServiceConfig
13-
from invenio_records_resources.services.base import Link
14-
from invenio_records_resources.services.records.links import pagination_links
13+
from invenio_records_resources.services.base import EndpointLink
14+
from invenio_records_resources.services.records.links import pagination_endpoint_links
1515
from sqlalchemy import asc, desc
1616

17-
from ..services.links import OAIPMHSetLink
1817
from ..services.permissions import OAIPMHServerPermissionPolicy
1918
from ..services.results import (
2019
OAIMetadataFormatItem,
@@ -90,21 +89,74 @@ class OAIPMHServerServiceConfig(ServiceConfig):
9089
metadata_format_schema = OAIPMHMetadataFormat
9190

9291
links_item = {
93-
"self": OAIPMHSetLink("{+api}/oaipmh/sets/{id}"),
94-
"oai-listrecords": OAIPMHSetLink(
95-
"{+ui}/oai2d?verb=ListRecords&metadataPrefix=oai_dc&set={spec}"
92+
"self": EndpointLink(
93+
"oaipmh-server.read",
94+
vars=lambda obj, vars_: vars_.update({"id": obj.id}),
95+
params=["id"],
9696
),
97-
"oai-listidentifiers": OAIPMHSetLink(
98-
"{+ui}/oai2d?verb=ListIdentifiers&metadataPrefix=oai_dc&set={spec}"
97+
"oai-listrecords": EndpointLink(
98+
"invenio_oaiserver.response",
99+
vars=lambda obj, vars_: vars_.update(
100+
{
101+
# querystring parameters
102+
"args": {
103+
"verb": "ListRecords",
104+
"metadataPrefix": "oai_dc",
105+
"set": obj.spec,
106+
}
107+
}
108+
),
109+
),
110+
"oai-listidentifiers": EndpointLink(
111+
"invenio_oaiserver.response",
112+
vars=lambda obj, vars_: vars_.update(
113+
{
114+
"args": {
115+
"verb": "ListIdentifiers",
116+
"metadataPrefix": "oai_dc",
117+
"set": obj.spec,
118+
}
119+
}
120+
),
99121
),
100122
}
101123

102124
links_search = {
103-
**pagination_links("{+api}/oaipmh/sets{?args*}"),
104-
"oai-listsets": Link("{+ui}/oai2d?verb=ListSets"),
105-
"oai-listrecords": Link("{+ui}/oai2d?verb=ListRecords&metadataPrefix=oai_dc"),
106-
"oai-listidentifiers": Link(
107-
"{+ui}/oai2d?verb=ListIdentifiers&metadataPrefix=oai_dc"
125+
**pagination_endpoint_links("oaipmh-server.search"),
126+
"oai-listsets": EndpointLink(
127+
"invenio_oaiserver.response",
128+
vars=lambda obj, vars_: vars_.update({"args": {"verb": "ListSets"}}),
129+
),
130+
"oai-listrecords": EndpointLink(
131+
"invenio_oaiserver.response",
132+
vars=lambda obj, vars_: vars_.update(
133+
{
134+
"args": {
135+
"verb": "ListRecords",
136+
"metadataPrefix": "oai_dc",
137+
}
138+
}
139+
),
140+
),
141+
"oai-listidentifiers": EndpointLink(
142+
"invenio_oaiserver.response",
143+
vars=lambda obj, vars_: vars_.update(
144+
{
145+
"args": {
146+
"verb": "ListIdentifiers",
147+
"metadataPrefix": "oai_dc",
148+
}
149+
}
150+
),
151+
),
152+
"oai-identify": EndpointLink(
153+
"invenio_oaiserver.response",
154+
vars=lambda obj, vars_: vars_.update(
155+
{
156+
"args": {
157+
"verb": "Identify",
158+
}
159+
}
160+
),
108161
),
109-
"oai-identify": Link("{+ui}/oai2d?verb=Identify"),
110162
}

invenio_rdm_records/oaiserver/services/links.py

-24
This file was deleted.

invenio_rdm_records/resources/config.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -568,7 +568,7 @@ class RDMCommunityRecordsResourceConfig(RecordResourceConfig, ConfiguratorMixin)
568568
class RDMRecordCommunitiesResourceConfig(CommunityResourceConfig, ConfiguratorMixin):
569569
"""Record communities resource config."""
570570

571-
blueprint_name = "records-community"
571+
blueprint_name = "record_communities"
572572
url_prefix = "/records"
573573
routes = {
574574
"list": "/<pid_value>/communities",
@@ -586,7 +586,7 @@ class RDMRecordCommunitiesResourceConfig(CommunityResourceConfig, ConfiguratorMi
586586
class RDMRecordRequestsResourceConfig(ResourceConfig, ConfiguratorMixin):
587587
"""Record communities resource config."""
588588

589-
blueprint_name = "records-requests"
589+
blueprint_name = "record_requests"
590590
url_prefix = "/records"
591591
routes = {"list": "/<record_pid>/requests"}
592592

invenio_rdm_records/resources/resources.py

+2-4
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
from flask import abort, current_app, g, redirect, url_for
1717
from flask_resources import Resource, resource_requestctx, response_handler, route
18+
from invenio_base import invenio_url_for
1819
from invenio_drafts_resources.resources import RecordResource
1920
from invenio_records_resources.resources.errors import ErrorHandlersMixin
2021
from invenio_records_resources.resources.records.resource import (
@@ -29,8 +30,6 @@
2930
from invenio_stats import current_stats
3031
from sqlalchemy.exc import NoResultFound
3132

32-
from .urls import record_url_for
33-
3433

3534
def response_header_signposting(f):
3635
"""Add signposting link to view's reponse headers.
@@ -44,8 +43,7 @@ def response_header_signposting(f):
4443
@wraps(f)
4544
def inner(*args, **kwargs):
4645
pid_value = resource_requestctx.view_args["pid_value"]
47-
signposting_link = record_url_for(_app="api", pid_value=pid_value)
48-
46+
signposting_link = invenio_url_for("records.read", pid_value=pid_value)
4947
response = f(*args, **kwargs)
5048
if response.status_code != 200:
5149
return response

invenio_rdm_records/resources/serializers/datacite/schema.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# -*- coding: utf-8 -*-
22
#
33
# Copyright (C) 2021-2024 CERN.
4-
# Copyright (C) 2021 Northwestern University.
4+
# Copyright (C) 2021-2025 Northwestern University.
55
# Copyright (C) 2023 Graz University of Technology.
66
# Copyright (C) 2023 Caltech.
77
#
@@ -15,6 +15,7 @@
1515
from flask import current_app
1616
from flask_resources.serializers import BaseSerializerSchema
1717
from invenio_access.permissions import system_identity
18+
from invenio_base import invenio_url_for
1819
from invenio_i18n import lazy_gettext as _
1920
from marshmallow import Schema, ValidationError, fields, missing, post_dump, validate
2021
from marshmallow_utils.fields import SanitizedUnicode
@@ -458,7 +459,9 @@ def get_related_identifiers(self, obj):
458459
communities = obj.get("parent", {}).get("communities", {}).get("entries", [])
459460
for community in communities:
460461
slug = community.get("slug")
461-
url = f"{current_app.config['SITE_UI_URL']}/communities/{slug}"
462+
url = invenio_url_for(
463+
"invenio_app_rdm_communities.communities_home", pid_value=slug
464+
)
462465
serialized_identifiers.append(
463466
{
464467
"relatedIdentifier": url,

invenio_rdm_records/resources/serializers/dcat/schema.py

+7-2
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
# -*- coding: utf-8 -*-
22
#
33
# Copyright (C) 2023-2024 CERN.
4+
# Copyright (C) 2025 Northwestern University.
45
#
56
# Invenio-RDM-Records is free software; you can redistribute it and/or modify
67
# it under the terms of the MIT License; see LICENSE file for more details.
78

89
"""Dcat based Schema for Invenio RDM Records."""
910

1011
import idutils
11-
from flask import current_app
12+
from invenio_base import invenio_url_for
1213
from marshmallow import ValidationError, fields, missing, validate
1314
from marshmallow_utils.html import sanitize_unicode
1415

@@ -32,7 +33,11 @@ def get_files(self, obj):
3233
file_name = sanitize_unicode(
3334
value["key"]
3435
) # There can be inconsistencies in the file name i.e. if the file name consists of invalid XML characters
35-
url = f"{current_app.config['SITE_UI_URL']}/records/{record_id}/files/{file_name}"
36+
url = invenio_url_for(
37+
"invenio_app_rdm_records.record_file_download",
38+
pid_value=record_id,
39+
filename=file_name,
40+
)
3641
access_url = None
3742
if "doi" in obj["pids"]:
3843
access_url = idutils.to_url(

invenio_rdm_records/resources/serializers/dublincore/schema.py

+6-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99

1010
import bleach
1111
import idutils
12-
from flask import current_app
1312
from flask_resources.serializers import BaseSerializerSchema
13+
from invenio_base import invenio_url_for
1414
from marshmallow import fields, missing
1515
from pydash import py_
1616

@@ -103,7 +103,11 @@ def get_relations(self, obj):
103103
communities = obj.get("parent", {}).get("communities", {}).get("entries", [])
104104
for community in communities:
105105
slug = community["slug"]
106-
url = f"{current_app.config['SITE_UI_URL']}/communities/{slug}"
106+
url = invenio_url_for(
107+
"invenio_app_rdm_communities.communities_home",
108+
pid_value=slug,
109+
)
110+
107111
rels.append(self._transform_identifier(url, "url"))
108112

109113
# Parent doi

invenio_rdm_records/resources/serializers/marcxml/schema.py

+7-2
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
import bleach
1111
from dateutil.parser import parse
1212
from dojson.contrib.to_marc21.fields.bdleader import to_leader
13-
from flask import current_app
1413
from flask_resources.serializers import BaseSerializerSchema
14+
from invenio_base import invenio_url_for
1515
from marshmallow import fields, missing
1616
from marshmallow_utils.html import sanitize_unicode
1717
from pydash import py_
@@ -134,7 +134,12 @@ def get_files(self, obj):
134134
files = []
135135
for file_entry in files_entries.values():
136136
file_name = sanitize_unicode(file_entry["key"])
137-
url = f"{current_app.config['SITE_UI_URL']}/records/{record_id}/files/{file_name}"
137+
url = invenio_url_for(
138+
"invenio_app_rdm_records.record_file_download",
139+
pid_value=record_id,
140+
filename=file_name,
141+
)
142+
138143
file_ = {
139144
"s": str(file_entry["size"]), # file size
140145
"z": file_entry["checksum"], # check sum

invenio_rdm_records/resources/serializers/signposting/schema.py

+11-3
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
"""Signposting schemas."""
1010

1111
import idutils
12+
from invenio_base import invenio_url_for
1213
from marshmallow import Schema, fields, missing, post_dump
1314

14-
from ...urls import download_url_for
1515
from ..utils import get_vocabulary_props
1616

1717

@@ -83,7 +83,11 @@ def serialize_item(self, obj, **kwargs):
8383

8484
result = [
8585
{
86-
"href": download_url_for(pid_value=obj["id"], filename=entry["key"]),
86+
"href": invenio_url_for(
87+
"invenio_app_rdm_records.record_file_download",
88+
pid_value=obj["id"],
89+
filename=entry["key"],
90+
),
8791
"type": entry["mimetype"],
8892
}
8993
for entry in file_entries.values()
@@ -197,7 +201,11 @@ class ContentResourceSchema(Schema):
197201
def serialize_anchor(self, obj, **kwargs):
198202
"""Serialize to download url."""
199203
pid_value = self.context["record_dict"]["id"]
200-
return download_url_for(pid_value=pid_value, filename=obj["key"])
204+
return invenio_url_for(
205+
"invenio_app_rdm_records.record_file_download",
206+
pid_value=pid_value,
207+
filename=obj["key"],
208+
)
201209

202210
def serialize_collection(self, obj, **kwargs):
203211
"""Serialize to record landing page url."""

invenio_rdm_records/resources/urls.py

-70
This file was deleted.

0 commit comments

Comments
 (0)