oarepo-runtime 2.0.0.dev30__tar.gz → 2.0.0.dev31__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 (50) hide show
  1. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/PKG-INFO +1 -1
  2. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/__init__.py +1 -1
  3. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/info/views.py +26 -8
  4. oarepo_runtime-2.0.0.dev31/oarepo_runtime/services/config/permissions.py +82 -0
  5. oarepo_runtime-2.0.0.dev31/oarepo_runtime/services/records/links.py +65 -0
  6. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/services/schema/ui.py +13 -2
  7. oarepo_runtime-2.0.0.dev30/oarepo_runtime/services/config/permissions.py +0 -87
  8. oarepo_runtime-2.0.0.dev30/oarepo_runtime/services/records/links.py +0 -33
  9. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/.gitignore +0 -0
  10. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/LICENSE +0 -0
  11. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/README.md +0 -0
  12. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/api.py +0 -0
  13. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/cli/__init__.py +0 -0
  14. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/cli/search.py +0 -0
  15. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/config.py +0 -0
  16. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/ext.py +0 -0
  17. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/info/__init__.py +0 -0
  18. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/proxies.py +0 -0
  19. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/py.typed +0 -0
  20. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/records/__init__.py +0 -0
  21. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/records/drafts.py +0 -0
  22. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/records/mapping.py +0 -0
  23. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/records/pid_providers.py +0 -0
  24. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/records/systemfields/__init__.py +0 -0
  25. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/records/systemfields/custom_fields.py +0 -0
  26. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/records/systemfields/mapping.py +0 -0
  27. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/records/systemfields/publication_status.py +0 -0
  28. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/records/systemfields/selectors.py +0 -0
  29. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/resources/__init__.py +0 -0
  30. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/resources/config.py +0 -0
  31. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/services/__init__.py +0 -0
  32. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/services/config/__init__.py +0 -0
  33. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/services/config/components.py +0 -0
  34. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/services/config/link_conditions.py +0 -0
  35. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/services/facets/__init__.py +0 -0
  36. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/services/facets/base.py +0 -0
  37. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/services/facets/date.py +0 -0
  38. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/services/facets/nested_facet.py +0 -0
  39. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/services/facets/params.py +0 -0
  40. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/services/facets/utils.py +0 -0
  41. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/services/generators.py +0 -0
  42. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/services/records/__init__.py +0 -0
  43. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/services/records/custom_fields.py +0 -0
  44. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/services/records/mapping.py +0 -0
  45. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/services/results.py +0 -0
  46. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/services/schema/__init__.py +0 -0
  47. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/services/schema/i18n.py +0 -0
  48. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/services/schema/i18n_ui.py +0 -0
  49. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/oarepo_runtime/typing.py +0 -0
  50. {oarepo_runtime-2.0.0.dev30 → oarepo_runtime-2.0.0.dev31}/pyproject.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: oarepo-runtime
3
- Version: 2.0.0.dev30
3
+ Version: 2.0.0.dev31
4
4
  Summary: A set of runtime extensions of Invenio repository
5
5
  Project-URL: Homepage, https://github.com/oarepo/oarepo-runtime
6
6
  License-Expression: MIT
@@ -19,6 +19,6 @@ from .api import Model
19
19
  from .ext import OARepoRuntime
20
20
  from .proxies import current_runtime
21
21
 
22
- __version__ = "2.0.0dev30"
22
+ __version__ = "2.0.0dev31"
23
23
 
24
24
  __all__ = ("Model", "OARepoRuntime", "__version__", "current_runtime")
@@ -16,13 +16,12 @@ import logging
16
16
  import os
17
17
  import re
18
18
  from functools import cached_property
19
- from typing import TYPE_CHECKING, Any, ClassVar, cast
19
+ from typing import TYPE_CHECKING, Any, ClassVar, Protocol, cast
20
20
  from urllib.parse import urljoin, urlparse, urlunparse
21
21
 
22
22
  import marshmallow as ma
23
23
  from flask import Blueprint, Flask, current_app, request, url_for
24
24
  from flask_resources import (
25
- Resource,
26
25
  ResourceConfig,
27
26
  from_conf,
28
27
  request_parser,
@@ -30,6 +29,7 @@ from flask_resources import (
30
29
  response_handler,
31
30
  route,
32
31
  )
32
+ from flask_resources.resources import Resource as BaseResource
33
33
  from invenio_base import invenio_url_for
34
34
  from invenio_base.utils import obj_or_import_string
35
35
  from invenio_jsonschemas import current_jsonschemas
@@ -38,16 +38,30 @@ from invenio_records_resources.proxies import (
38
38
  )
39
39
  from werkzeug.routing import BuildError
40
40
 
41
+ from oarepo_runtime.proxies import current_runtime
42
+
41
43
  if TYPE_CHECKING:
42
44
  from invenio_records.systemfields import ConstantField
43
45
  from invenio_records_resources.records.api import Record
44
46
 
45
47
  from oarepo_runtime import Model
46
- from oarepo_runtime.proxies import current_runtime
47
48
 
48
49
  logger = logging.getLogger("oarepo_runtime.info")
49
50
 
50
51
 
52
+ class InfoComponent(Protocol):
53
+ """Info component protocol."""
54
+
55
+ def __init__(self, resource: InfoResource) -> None:
56
+ """Create the component."""
57
+
58
+ def repository(self, data: dict) -> None:
59
+ """Modify repository info endpoint data."""
60
+
61
+ def model(self, data: list[dict]) -> None:
62
+ """Modify model info endpoint data."""
63
+
64
+
51
65
  class InfoConfig(ResourceConfig):
52
66
  """Info resource config."""
53
67
 
@@ -62,16 +76,19 @@ class InfoConfig(ResourceConfig):
62
76
  self.app = app
63
77
 
64
78
  @cached_property
65
- def components(self) -> tuple[object, ...]:
79
+ def components(self) -> tuple[type[InfoComponent], ...]:
66
80
  """Get the components for the info resource from config."""
67
- return tuple(obj_or_import_string(x) for x in self.app.config.get("INFO_ENDPOINT_COMPONENTS", []))
81
+ return tuple(
82
+ cast("type[InfoComponent]", obj_or_import_string(x))
83
+ for x in self.app.config.get("INFO_ENDPOINT_COMPONENTS", [])
84
+ )
68
85
 
69
86
 
70
87
  schema_view_args = request_parser(from_conf("schema_view_args"), location="view_args")
71
88
  model_view_args = request_parser(from_conf("model_view_args"), location="view_args")
72
89
 
73
90
 
74
- class InfoResource(Resource):
91
+ class InfoResource(BaseResource):
75
92
  """Info resource."""
76
93
 
77
94
  def create_url_rules(self) -> list[dict[str, Any]]:
@@ -149,6 +166,7 @@ class InfoResource(Resource):
149
166
  feature_keys.append("files")
150
167
  return feature_keys
151
168
 
169
+ # TODO: this should be done differently - we should add this to the model
152
170
  def _get_model_html_endpoint(self, model: Model) -> Any:
153
171
  base = self._get_model_api_endpoint(model)
154
172
  if not base:
@@ -160,7 +178,7 @@ class InfoResource(Resource):
160
178
  try:
161
179
  alias = model.api_blueprint_name
162
180
  return model.api_url("search", type=alias, _external=True)
163
- except BuildError:
181
+ except BuildError: # pragma: no cover
164
182
  logger.exception("Failed to get model api endpoint")
165
183
  return None
166
184
 
@@ -181,7 +199,7 @@ class InfoResource(Resource):
181
199
  service = model.service
182
200
  service_class = model.service.__class__
183
201
  if not service or not isinstance(service, service_class):
184
- continue
202
+ continue # pragma: no cover - sanity check
185
203
 
186
204
  model_features = self._get_model_features(model)
187
205
 
@@ -0,0 +1,82 @@
1
+ # mypy: disable-error-code="assignment"
2
+ #
3
+ # Copyright (c) 2025 CESNET z.s.p.o.
4
+ #
5
+ # This file is a part of oarepo-runtime (see http://github.com/oarepo/oarepo-runtime).
6
+ #
7
+ # oarepo-runtime is free software; you can redistribute it and/or modify it
8
+ # under the terms of the MIT License; see LICENSE file for more details.
9
+ #
10
+
11
+ """Everyone permissions."""
12
+
13
+ from __future__ import annotations
14
+
15
+ from invenio_records_permissions import RecordPermissionPolicy
16
+ from invenio_records_permissions.generators import AnyUser, Generator, SystemProcess
17
+
18
+
19
+ class EveryonePermissionPolicy(RecordPermissionPolicy):
20
+ """Record policy for read-only repository."""
21
+
22
+ can_search: tuple[Generator, ...] = (SystemProcess(), AnyUser())
23
+ can_read: tuple[Generator, ...] = (SystemProcess(), AnyUser())
24
+ can_create: tuple[Generator, ...] = (SystemProcess(), AnyUser())
25
+ can_update: tuple[Generator, ...] = (SystemProcess(), AnyUser())
26
+ can_delete: tuple[Generator, ...] = (SystemProcess(), AnyUser())
27
+ can_manage: tuple[Generator, ...] = (SystemProcess(), AnyUser())
28
+
29
+ can_create_files: tuple[Generator, ...] = (SystemProcess(), AnyUser())
30
+ can_set_content_files: tuple[Generator, ...] = (SystemProcess(), AnyUser())
31
+ can_get_content_files: tuple[Generator, ...] = (SystemProcess(), AnyUser())
32
+ can_commit_files: tuple[Generator, ...] = (SystemProcess(), AnyUser())
33
+ can_read_files: tuple[Generator, ...] = (SystemProcess(), AnyUser())
34
+ can_update_files: tuple[Generator, ...] = (SystemProcess(), AnyUser())
35
+ can_delete_files: tuple[Generator, ...] = (SystemProcess(), AnyUser())
36
+ can_list_files: tuple[Generator, ...] = (SystemProcess(), AnyUser())
37
+ can_manage_files: tuple[Generator, ...] = (SystemProcess(), AnyUser())
38
+
39
+ can_edit: tuple[Generator, ...] = (SystemProcess(), AnyUser())
40
+ can_new_version: tuple[Generator, ...] = (SystemProcess(), AnyUser())
41
+ can_search_drafts: tuple[Generator, ...] = (SystemProcess(), AnyUser())
42
+ can_read_draft: tuple[Generator, ...] = (SystemProcess(), AnyUser())
43
+ can_search_versions: tuple[Generator, ...] = (SystemProcess(), AnyUser())
44
+ can_update_draft: tuple[Generator, ...] = (SystemProcess(), AnyUser())
45
+ can_delete_draft: tuple[Generator, ...] = (SystemProcess(), AnyUser())
46
+ can_publish: tuple[Generator, ...] = (SystemProcess(), AnyUser())
47
+ can_draft_create_files: tuple[Generator, ...] = (SystemProcess(), AnyUser())
48
+ can_draft_set_content_files: tuple[Generator, ...] = (SystemProcess(), AnyUser())
49
+ can_draft_get_content_files: tuple[Generator, ...] = (SystemProcess(), AnyUser())
50
+ can_draft_commit_files: tuple[Generator, ...] = (SystemProcess(), AnyUser())
51
+ can_draft_read_files: tuple[Generator, ...] = (SystemProcess(), AnyUser())
52
+ can_draft_update_files: tuple[Generator, ...] = (SystemProcess(), AnyUser())
53
+ can_draft_delete_files: tuple[Generator, ...] = (SystemProcess(), AnyUser())
54
+
55
+ can_add_community: tuple[Generator, ...] = (SystemProcess(), AnyUser())
56
+ can_remove_community: tuple[Generator, ...] = (SystemProcess(), AnyUser())
57
+
58
+ can_read_deleted: tuple[Generator, ...] = (SystemProcess(), AnyUser())
59
+ can_manage_record_access: tuple[Generator, ...] = (SystemProcess(), AnyUser())
60
+ can_lift_embargo: tuple[Generator, ...] = (SystemProcess(), AnyUser())
61
+
62
+ can_draft_media_create_files: tuple[Generator, ...] = (SystemProcess(), AnyUser())
63
+ can_draft_media_read_files: tuple[Generator, ...] = (SystemProcess(), AnyUser())
64
+ can_draft_media_set_content_files: tuple[Generator, ...] = (
65
+ SystemProcess(),
66
+ AnyUser(),
67
+ )
68
+ can_draft_media_get_content_files: tuple[Generator, ...] = (
69
+ SystemProcess(),
70
+ AnyUser(),
71
+ )
72
+ can_draft_media_commit_files: tuple[Generator, ...] = (SystemProcess(), AnyUser())
73
+ can_draft_media_update_files: tuple[Generator, ...] = (SystemProcess(), AnyUser())
74
+ can_draft_media_delete_files: tuple[Generator, ...] = (SystemProcess(), AnyUser())
75
+
76
+ can_media_read_files: tuple[Generator, ...] = (SystemProcess(), AnyUser())
77
+ can_media_get_content_files: tuple[Generator, ...] = (SystemProcess(), AnyUser())
78
+ can_media_create_files: tuple[Generator, ...] = (SystemProcess(), AnyUser())
79
+ can_media_set_content_files: tuple[Generator, ...] = (SystemProcess(), AnyUser())
80
+ can_media_commit_files: tuple[Generator, ...] = (SystemProcess(), AnyUser())
81
+ can_media_update_files: tuple[Generator, ...] = (SystemProcess(), AnyUser())
82
+ can_media_delete_files: tuple[Generator, ...] = (SystemProcess(), AnyUser())
@@ -0,0 +1,65 @@
1
+ #
2
+ # Copyright (c) 2025 CESNET z.s.p.o.
3
+ #
4
+ # This file is a part of oarepo-runtime (see http://github.com/oarepo/oarepo-runtime).
5
+ #
6
+ # oarepo-runtime is free software; you can redistribute it and/or modify it
7
+ # under the terms of the MIT License; see LICENSE file for more details.
8
+ #
9
+
10
+ """Utility for rendering URI template links."""
11
+
12
+ from __future__ import annotations
13
+
14
+ from invenio_records_resources.services.base.links import EndpointLink
15
+
16
+
17
+ def rdm_pagination_record_endpoint_links(endpoint: str, params: list[str] | None = None) -> dict[str, EndpointLink]:
18
+ """Create pagination links (prev/self/next) from the same endpoint.
19
+
20
+ These links are used on a record instance where we want to have a list of something,
21
+ for example /records/<pid>/versions.
22
+
23
+ Note: using RecordEndpointLink here is fragile as it normally expects
24
+ a record as the first argument to vars, but here we pass pagination
25
+ as the first argument to vars. Because pagination does not have pid_value
26
+ attribute, the vars method will just skip adding pid_value to vars and
27
+ the pid_value must be passed via params. This is done in invenio_rdm_records'
28
+ service but not in invenio_drafts_resources service, where the parameter is
29
+ called "id" instead of "pid_value". That is why this function is called rdm_...
30
+ """
31
+ params = [*(params or []), "pid_value"]
32
+ return {
33
+ "prev": EndpointLink(
34
+ endpoint,
35
+ when=lambda pagination, _ctx: pagination.has_prev,
36
+ vars=lambda pagination, _vars: _vars["args"].update({"page": pagination.prev_page.page}),
37
+ params=params,
38
+ ),
39
+ "self": EndpointLink(endpoint, params=params),
40
+ "next": EndpointLink(
41
+ endpoint,
42
+ when=lambda pagination, _ctx: pagination.has_next,
43
+ vars=lambda pagination, _vars: _vars["args"].update({"page": pagination.next_page.page}),
44
+ params=params,
45
+ ),
46
+ }
47
+
48
+
49
+ def pagination_endpoint_links_html(endpoint: str, params: list[str] | None = None) -> dict[str, EndpointLink]:
50
+ """Create pagination links (prev/self/next) from the same endpoint."""
51
+ return {
52
+ "prev_html": EndpointLink(
53
+ endpoint,
54
+ when=lambda pagination, _ctx: pagination.has_prev,
55
+ vars=lambda pagination, _vars: _vars["args"].update({"page": pagination.prev_page.page}),
56
+ params=params,
57
+ ),
58
+ "self_html": EndpointLink(endpoint, params=params),
59
+ "next_html": EndpointLink(
60
+ endpoint,
61
+ when=lambda pagination, _ctx: pagination.has_next,
62
+ vars=lambda pagination, _vars: _vars["args"].update({"page": pagination.next_page.page}),
63
+ params=params,
64
+ ),
65
+ }
@@ -73,7 +73,13 @@ class LocalizedDate(LocalizedMixin, FormatDate):
73
73
  class FormatTimeString(FormatTime):
74
74
  """Time formater."""
75
75
 
76
- def parse(self, value: Any, as_time: bool = False, as_date: bool = False, as_datetime: bool = False) -> Any:
76
+ def parse(
77
+ self,
78
+ value: Any,
79
+ as_time: bool = False,
80
+ as_date: bool = False,
81
+ as_datetime: bool = False,
82
+ ) -> Any:
77
83
  """Parse date value."""
78
84
  if value and isinstance(value, str) and as_time:
79
85
  match = re.match(r"^(\d|0\d|1\d|2[0-3]):(\d|[0-5]\d|60)(:(\d|[0-5]\d|60))?$", value)
@@ -98,7 +104,12 @@ class MultilayerFormatEDTF(BabelFormatField):
98
104
  return format_edtf(value, format=self._format, locale=self.locale)
99
105
 
100
106
  def parse(
101
- self, value: str, as_time: bool = False, as_date: bool = False, as_datetime: bool = False, **kwargs: Any
107
+ self,
108
+ value: str,
109
+ as_time: bool = False,
110
+ as_date: bool = False,
111
+ as_datetime: bool = False,
112
+ **kwargs: Any,
102
113
  ) -> Any:
103
114
  """Parse date value."""
104
115
  _, _, _ = as_time, as_date, as_datetime
@@ -1,87 +0,0 @@
1
- # mypy: disable-error-code="assignment"
2
- #
3
- # Copyright (c) 2025 CESNET z.s.p.o.
4
- #
5
- # This file is a part of oarepo-runtime (see http://github.com/oarepo/oarepo-runtime).
6
- #
7
- # oarepo-runtime is free software; you can redistribute it and/or modify it
8
- # under the terms of the MIT License; see LICENSE file for more details.
9
- #
10
-
11
- """Everyone permissions."""
12
-
13
- from __future__ import annotations
14
-
15
- from collections.abc import Collection
16
- from typing import ClassVar
17
-
18
- from invenio_records_permissions import RecordPermissionPolicy
19
- from invenio_records_permissions.generators import AnyUser, Generator, SystemProcess
20
-
21
- type GeneratorList = Collection[Generator]
22
-
23
-
24
- class EveryonePermissionPolicy(RecordPermissionPolicy):
25
- """Record policy for read-only repository."""
26
-
27
- can_search: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
28
- can_read: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
29
- can_create: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
30
- can_update: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
31
- can_delete: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
32
- can_manage: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
33
-
34
- can_create_files: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
35
- can_set_content_files: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
36
- can_get_content_files: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
37
- can_commit_files: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
38
- can_read_files: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
39
- can_update_files: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
40
- can_delete_files: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
41
- can_list_files: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
42
- can_manage_files: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
43
-
44
- can_edit: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
45
- can_new_version: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
46
- can_search_drafts: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
47
- can_read_draft: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
48
- can_search_versions: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
49
- can_update_draft: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
50
- can_delete_draft: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
51
- can_publish: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
52
- can_draft_create_files: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
53
- can_draft_set_content_files: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
54
- can_draft_get_content_files: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
55
- can_draft_commit_files: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
56
- can_draft_read_files: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
57
- can_draft_update_files: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
58
- can_draft_delete_files: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
59
-
60
- can_add_community: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
61
- can_remove_community: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
62
-
63
- can_read_deleted: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
64
- can_manage_record_access: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
65
- can_lift_embargo: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
66
-
67
- can_draft_media_create_files: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
68
- can_draft_media_read_files: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
69
- can_draft_media_set_content_files: ClassVar[GeneratorList] = (
70
- SystemProcess(),
71
- AnyUser(),
72
- )
73
- can_draft_media_get_content_files: ClassVar[GeneratorList] = (
74
- SystemProcess(),
75
- AnyUser(),
76
- )
77
- can_draft_media_commit_files: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
78
- can_draft_media_update_files: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
79
- can_draft_media_delete_files: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
80
-
81
- can_media_read_files: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
82
- can_media_get_content_files: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
83
- can_media_create_files: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
84
- can_media_set_content_files: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
85
- can_media_commit_files: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
86
- can_media_update_files: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
87
- can_media_delete_files: ClassVar[GeneratorList] = (SystemProcess(), AnyUser())
@@ -1,33 +0,0 @@
1
- #
2
- # Copyright (c) 2025 CESNET z.s.p.o.
3
- #
4
- # This file is a part of oarepo-runtime (see http://github.com/oarepo/oarepo-runtime).
5
- #
6
- # oarepo-runtime is free software; you can redistribute it and/or modify it
7
- # under the terms of the MIT License; see LICENSE file for more details.
8
- #
9
-
10
- """Utility for rendering URI template links."""
11
-
12
- from __future__ import annotations
13
-
14
- from invenio_records_resources.services.base.links import EndpointLink
15
-
16
-
17
- def pagination_endpoint_links_html(endpoint: str, params: list[str] | None = None) -> dict[str, EndpointLink]:
18
- """Create pagination links (prev/self/next) from the same endpoint."""
19
- return {
20
- "prev_html": EndpointLink(
21
- endpoint,
22
- when=lambda pagination, _ctx: pagination.has_prev,
23
- vars=lambda pagination, _vars: _vars["args"].update({"page": pagination.prev_page.page}),
24
- params=params,
25
- ),
26
- "self_html": EndpointLink(endpoint, params=params),
27
- "next_html": EndpointLink(
28
- endpoint,
29
- when=lambda pagination, _ctx: pagination.has_next,
30
- vars=lambda pagination, _vars: _vars["args"].update({"page": pagination.next_page.page}),
31
- params=params,
32
- ),
33
- }