oarepo-runtime 2.0.0.dev12__py3-none-any.whl → 2.0.0.dev14__py3-none-any.whl

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.
@@ -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.0dev12"
22
+ __version__ = "2.0.0dev14"
23
23
 
24
24
  __all__ = ("Model", "OARepoRuntime", "__version__", "current_runtime")
oarepo_runtime/ext.py CHANGED
@@ -182,17 +182,17 @@ class OARepoRuntime:
182
182
 
183
183
  @cached_property
184
184
  def published_indices(self) -> set[str]:
185
- """Return the set of published indices."""
185
+ """Return the set of published indices for RDM-compatible records only."""
186
186
  indices = set()
187
- for model in self.models.values():
187
+ for model in self.rdm_models:
188
188
  indices.add(model.record_cls.index.search_alias) # type: ignore[attr-defined]
189
189
  return indices
190
190
 
191
191
  @cached_property
192
192
  def draft_indices(self) -> set[str]:
193
- """Return the set of draft indices."""
193
+ """Return the set of draft indices for RDM-compatible records only."""
194
194
  indices = set()
195
- for model in self.models.values():
195
+ for model in self.rdm_models:
196
196
  if model.draft_cls is not None:
197
197
  indices.add(model.draft_cls.index.search_alias) # type: ignore[attr-defined]
198
198
  return indices
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # Copyright (c) 2025 CESNET z.s.p.o.
3
3
  #
4
- # This file is a part of oarepo-runtime (see http://github.com/oarepo/oarepo-runtime).
4
+ # This file is a part of oarepo-runtime (see https://github.com/oarepo/oarepo-runtime).
5
5
  #
6
6
  # oarepo-runtime is free software; you can redistribute it and/or modify it
7
7
  # under the terms of the MIT License; see LICENSE file for more details.
@@ -60,3 +60,19 @@ class EveryonePermissionPolicy(RecordPermissionPolicy):
60
60
  can_read_deleted: GeneratorList = (SystemProcess(), AnyUser())
61
61
  can_manage_record_access: GeneratorList = (SystemProcess(), AnyUser())
62
62
  can_lift_embargo: GeneratorList = (SystemProcess(), AnyUser())
63
+
64
+ can_draft_media_create_files: GeneratorList = (SystemProcess(), AnyUser())
65
+ can_draft_media_read_files: GeneratorList = (SystemProcess(), AnyUser())
66
+ can_draft_media_set_content_files: GeneratorList = (SystemProcess(), AnyUser())
67
+ can_draft_media_get_content_files: GeneratorList = (SystemProcess(), AnyUser())
68
+ can_draft_media_commit_files: GeneratorList = (SystemProcess(), AnyUser())
69
+ can_draft_media_update_files: GeneratorList = (SystemProcess(), AnyUser())
70
+ can_draft_media_delete_files: GeneratorList = (SystemProcess(), AnyUser())
71
+
72
+ can_media_read_files: GeneratorList = (SystemProcess(), AnyUser())
73
+ can_media_get_content_files: GeneratorList = (SystemProcess(), AnyUser())
74
+ can_media_create_files: GeneratorList = (SystemProcess(), AnyUser())
75
+ can_media_set_content_files: GeneratorList = (SystemProcess(), AnyUser())
76
+ can_media_commit_files: GeneratorList = (SystemProcess(), AnyUser())
77
+ can_media_update_files: GeneratorList = (SystemProcess(), AnyUser())
78
+ can_media_delete_files: GeneratorList = (SystemProcess(), AnyUser())
@@ -0,0 +1,77 @@
1
+ #
2
+ # Copyright (c) 2025 CESNET z.s.p.o.
3
+ #
4
+ # This file is a part of oarepo-runtime (see https://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
+ """Typed invenio generators."""
10
+
11
+ from __future__ import annotations
12
+
13
+ from abc import abstractmethod
14
+ from typing import TYPE_CHECKING, Any, override
15
+
16
+ from invenio_records_permissions.generators import (
17
+ ConditionalGenerator as InvenioConditionalGenerator,
18
+ )
19
+ from invenio_records_permissions.generators import Generator as InvenioGenerator
20
+
21
+ if TYPE_CHECKING:
22
+ from collections.abc import Sequence
23
+
24
+ from flask_principal import Need
25
+ from invenio_records_resources.records.api import Record
26
+ from invenio_search.engine import dsl
27
+
28
+
29
+ class Generator(InvenioGenerator):
30
+ """Custom generator for the service.
31
+
32
+ This class will be removed when invenio has proper type stubs.
33
+ """
34
+
35
+ @override
36
+ def needs(self, **kwargs: Any) -> Sequence[Need]: # type: ignore[reportIncompatibleMethodOverride]
37
+ return super().needs(**kwargs) # type: ignore[no-any-return]
38
+
39
+ @override
40
+ def excludes(self, **kwargs: Any) -> Sequence[Need]: # type: ignore[reportIncompatibleMethodOverride]
41
+ return super().excludes(**kwargs) # type: ignore[no-any-return]
42
+
43
+ @override
44
+ def query_filter(self, **kwargs: Any) -> dsl.query.Query: # type: ignore[reportIncompatibleMethodOverride]
45
+ return super().query_filter(**kwargs) # type: ignore[no-any-return]
46
+
47
+
48
+ class ConditionalGenerator(InvenioConditionalGenerator):
49
+ """Typed conditional generator.
50
+
51
+ This class will be removed when invenio has proper type stubs.
52
+ """
53
+
54
+ def __init__(self, then_: Sequence[InvenioGenerator], else_: Sequence[InvenioGenerator]) -> None:
55
+ """Initialize the conditional generator."""
56
+ super().__init__(then_=then_, else_=else_)
57
+
58
+ @abstractmethod
59
+ def _condition(self, **kwargs: Any) -> bool:
60
+ """Condition to choose generators set."""
61
+ raise NotImplementedError # pragma: nocover
62
+
63
+ def _generators(self, record: Record, **kwargs: Any) -> Sequence[InvenioGenerator]:
64
+ """Get the "then" or "else" generators."""
65
+ return super()._generators(record=record, **kwargs) # type: ignore[no-any-return]
66
+
67
+ @override
68
+ def needs(self, **kwargs: Any) -> Sequence[Need]: # type: ignore[override]
69
+ return super().needs(**kwargs) # type: ignore[no-any-return]
70
+
71
+ @override
72
+ def excludes(self, **kwargs: Any) -> Sequence[Need]: # type: ignore[override]
73
+ return super().excludes(**kwargs) # type: ignore[no-any-return]
74
+
75
+ @override
76
+ def query_filter(self, **kwargs: Any) -> dsl.query.Query: # type: ignore[reportIncompatibleMethodOverride]
77
+ return super().query_filter(**kwargs) # type: ignore[no-any-return]
@@ -11,6 +11,6 @@
11
11
 
12
12
  from __future__ import annotations
13
13
 
14
- from .links import pagination_links_html
14
+ from .links import pagination_endpoint_links_html
15
15
 
16
- __all__ = ("pagination_links_html",)
16
+ __all__ = ("pagination_endpoint_links_html",)
@@ -11,21 +11,25 @@
11
11
 
12
12
  from __future__ import annotations
13
13
 
14
- from invenio_records_resources.services.base.links import Link
14
+ from typing import Any
15
15
 
16
+ from invenio_records_resources.services.base.links import EndpointLink
16
17
 
17
- def pagination_links_html(tpl: str) -> dict[str, Link]:
18
- """Create pagination links (prev/self/next) from the same template."""
18
+
19
+ def pagination_endpoint_links_html(endpoint: str, params: dict[str, Any] | None = None) -> dict[str, EndpointLink]:
20
+ """Create pagination links (prev/self/next) from the same endpoint."""
19
21
  return {
20
- "prev_html": Link(
21
- tpl,
22
- when=lambda pagination, _context: pagination.has_prev,
23
- vars=lambda pagination, variables: variables["args"].update({"page": pagination.prev_page.page}),
22
+ "prev_html": EndpointLink(
23
+ endpoint,
24
+ when=lambda pagination, _ctx: pagination.has_prev,
25
+ vars=lambda pagination, _vars: _vars["args"].update({"page": pagination.prev_page.page}),
26
+ params=params,
24
27
  ),
25
- "self_html": Link(tpl),
26
- "next_html": Link(
27
- tpl,
28
- when=lambda pagination, _context: pagination.has_next,
29
- vars=lambda pagination, variables: variables["args"].update({"page": pagination.next_page.page}),
28
+ "self_html": EndpointLink(endpoint, params=params),
29
+ "next_html": EndpointLink(
30
+ endpoint,
31
+ when=lambda pagination, _ctx: pagination.has_next,
32
+ vars=lambda pagination, _vars: _vars["args"].update({"page": pagination.next_page.page}),
33
+ params=params,
30
34
  ),
31
35
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: oarepo-runtime
3
- Version: 2.0.0.dev12
3
+ Version: 2.0.0.dev14
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
@@ -1,7 +1,7 @@
1
- oarepo_runtime/__init__.py,sha256=cUIeG2E4Jh0zema7HEQV6ejcTszVyS1-9iVD0XobEjI,686
1
+ oarepo_runtime/__init__.py,sha256=JwxRF8hZCrcuc6EyZKISir_JbAV8dOb6Fptw2UcekyM,686
2
2
  oarepo_runtime/api.py,sha256=b4v9YTPLK5EsEXzKuEqnymh148GwxCKNpy34kpxWYrI,11842
3
3
  oarepo_runtime/config.py,sha256=RUEPFn_5bKp9Wb0OY-Fb3VK30m35vF5IsLjYaQHhP3g,3838
4
- oarepo_runtime/ext.py,sha256=JbbqMM2H0Sq-umN4506wTpAbo5og954u-8MdG0U-ysU,7833
4
+ oarepo_runtime/ext.py,sha256=CtUb3tkXsJv7l7lDq9yOeP1rDKaPhM2ULMIwqoJrBKo,7887
5
5
  oarepo_runtime/proxies.py,sha256=PXaRiBh5qs5-h8M81cJOgtqypFQcYUSjiSn2TLSujRw,648
6
6
  oarepo_runtime/py.typed,sha256=RznSCjXReEUI9zkmD25E8XniG_MvPpLBF6MyNZA8MmE,42
7
7
  oarepo_runtime/cli/__init__.py,sha256=H7GOeOBf0udgKWOdlAQswIMvRrD8BwcEjOVxIqP0Suw,731
@@ -16,21 +16,22 @@ oarepo_runtime/records/systemfields/publication_status.py,sha256=1g3VXNPh0FsiPCp
16
16
  oarepo_runtime/resources/__init__.py,sha256=voynQULXoOEviADkbOpekMphZPTAz4IOTg5BF9xPwTM,453
17
17
  oarepo_runtime/resources/config.py,sha256=hJewyZ2FlEm4TtYnQS9JsnKnA6hhtSbvo1PC24-7f7Y,980
18
18
  oarepo_runtime/services/__init__.py,sha256=OGtBgEeaDTyk2RPDNXuKbU9_7egFBZr42SM0gN5FrF4,341
19
+ oarepo_runtime/services/generators.py,sha256=B_4GXzKS8RUDGVzR_EZOYSD2uAC7P-xpmoYxo_52BTw,2888
19
20
  oarepo_runtime/services/results.py,sha256=fk-Enx_LwZLbw81yZ7CXVTku86vd3_fjprnb8l5sFHk,6657
20
21
  oarepo_runtime/services/config/__init__.py,sha256=SX1kfIGk8HkohdLQrNpRQUTltksEyDcCa-kFXxrX4e8,711
21
- oarepo_runtime/services/config/components.py,sha256=t6zPWcwsL4d_U4PelmHQ50ymDAY_N4YcgVnM6aklktY,23038
22
+ oarepo_runtime/services/config/components.py,sha256=cyU-JeMzLuBL-9JkUKbUQuu527WAq0yptGs6806XSho,23039
22
23
  oarepo_runtime/services/config/link_conditions.py,sha256=raqf4yaBNLqNYgBxVNblo8MRJneVIFkwVNW7IW3AVYI,4309
23
- oarepo_runtime/services/config/permissions.py,sha256=x5k61LGnpXyJfXVoCTq2tTVTtPckmBcBtcBJx4UN9EA,3056
24
+ oarepo_runtime/services/config/permissions.py,sha256=9_706Yyz7X6IXhSaRBnkmGOr7c8kLnEXNkGZxxgNafE,4138
24
25
  oarepo_runtime/services/facets/__init__.py,sha256=k39ZYt1dMVOW01QRSTgx3CfuTYwvEWmL0VYTR3huVsE,349
25
26
  oarepo_runtime/services/facets/params.py,sha256=BxAmPmHlPs5ILQsKR98jZUFOWBSeiF454vOSIVIJj40,4697
26
- oarepo_runtime/services/records/__init__.py,sha256=c0n4vcMcJhSUWsKz0iyV4TTlGG8oLlJp0YEN0QGCZ8U,428
27
- oarepo_runtime/services/records/links.py,sha256=lqvnXabquL4DqWV93cdUYNUVYHx7T5Q0EXXuWAHM33A,1078
27
+ oarepo_runtime/services/records/__init__.py,sha256=Mpohx3xEXTmoodTEHbCih6I97JIofgqa_bf_Ysq4e2g,446
28
+ oarepo_runtime/services/records/links.py,sha256=oTKE9HXByQWEy8J6vT4KGjneeM_16MStwlXXglnnQSo,1254
28
29
  oarepo_runtime/services/records/mapping.py,sha256=y3oeToKEnaRYpMV3q2-2cXNzyzyL3XXGvY26BifybpE,1332
29
30
  oarepo_runtime/services/schema/__init__.py,sha256=jgAPI_uKC6Ug4KQWnwQVg3-aNaw-eHja323AUFo5ELo,351
30
31
  oarepo_runtime/services/schema/i18n.py,sha256=9D1zOQaPKAnYzejB0vO-m2BJYnam0N0Lrq4jID7twfE,3174
31
32
  oarepo_runtime/services/schema/i18n_ui.py,sha256=DbusphhGDeaobTt4nuwNgKZ6Houlu4Sv3SuMGkdjRRY,3582
32
- oarepo_runtime-2.0.0.dev12.dist-info/METADATA,sha256=fmp7MHpzCupK6BCiZoTBCws1V5gqeLsG1Ol6kcEwVgU,4495
33
- oarepo_runtime-2.0.0.dev12.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
34
- oarepo_runtime-2.0.0.dev12.dist-info/entry_points.txt,sha256=rOfs8R1oXFN_dLH9zAZ6ydkvr83mDajegc6NBIRsCMQ,318
35
- oarepo_runtime-2.0.0.dev12.dist-info/licenses/LICENSE,sha256=h2uWz0OaB3EN-J1ImdGJZzc7yvfQjvHVYdUhQ-H7ypY,1064
36
- oarepo_runtime-2.0.0.dev12.dist-info/RECORD,,
33
+ oarepo_runtime-2.0.0.dev14.dist-info/METADATA,sha256=r9YSaqRKd3AA6uXS4FiuQQD3hkJZjgN1yV3hRfdJltE,4495
34
+ oarepo_runtime-2.0.0.dev14.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
35
+ oarepo_runtime-2.0.0.dev14.dist-info/entry_points.txt,sha256=rOfs8R1oXFN_dLH9zAZ6ydkvr83mDajegc6NBIRsCMQ,318
36
+ oarepo_runtime-2.0.0.dev14.dist-info/licenses/LICENSE,sha256=h2uWz0OaB3EN-J1ImdGJZzc7yvfQjvHVYdUhQ-H7ypY,1064
37
+ oarepo_runtime-2.0.0.dev14.dist-info/RECORD,,