oarepo-runtime 1.5.91__py3-none-any.whl → 1.5.93__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.
- oarepo_runtime/services/permissions/__init__.py +2 -2
- oarepo_runtime/services/permissions/generators.py +58 -4
- oarepo_runtime/services/schema/marshmallow.py +9 -1
- oarepo_runtime/services/search.py +46 -7
- {oarepo_runtime-1.5.91.dist-info → oarepo_runtime-1.5.93.dist-info}/METADATA +1 -1
- {oarepo_runtime-1.5.91.dist-info → oarepo_runtime-1.5.93.dist-info}/RECORD +10 -10
- {oarepo_runtime-1.5.91.dist-info → oarepo_runtime-1.5.93.dist-info}/LICENSE +0 -0
- {oarepo_runtime-1.5.91.dist-info → oarepo_runtime-1.5.93.dist-info}/WHEEL +0 -0
- {oarepo_runtime-1.5.91.dist-info → oarepo_runtime-1.5.93.dist-info}/entry_points.txt +0 -0
- {oarepo_runtime-1.5.91.dist-info → oarepo_runtime-1.5.93.dist-info}/top_level.txt +0 -0
@@ -1,3 +1,3 @@
|
|
1
|
-
from .generators import RecordOwners, UserWithRole
|
1
|
+
from .generators import IfDraftType, RecordOwners, UserWithRole
|
2
2
|
|
3
|
-
__all__ = ("RecordOwners", "UserWithRole")
|
3
|
+
__all__ = ("RecordOwners", "UserWithRole", "IfDraftType")
|
@@ -1,7 +1,14 @@
|
|
1
|
+
from typing import Literal
|
2
|
+
|
3
|
+
from flask import current_app
|
1
4
|
from flask_principal import RoleNeed, UserNeed
|
2
|
-
from invenio_records_permissions.generators import
|
5
|
+
from invenio_records_permissions.generators import (
|
6
|
+
ConditionalGenerator,
|
7
|
+
Disable,
|
8
|
+
Generator,
|
9
|
+
)
|
3
10
|
from invenio_search.engine import dsl
|
4
|
-
|
11
|
+
|
5
12
|
|
6
13
|
class RecordOwners(Generator):
|
7
14
|
"""Allows record owners."""
|
@@ -12,7 +19,7 @@ class RecordOwners(Generator):
|
|
12
19
|
# 'record' is required, so if not passed we default to empty array,
|
13
20
|
# i.e. superuser-access.
|
14
21
|
return []
|
15
|
-
if current_app.config.get(
|
22
|
+
if current_app.config.get("INVENIO_RDM_ENABLED", False):
|
16
23
|
owners = getattr(record.parent.access, "owned_by", None)
|
17
24
|
if owners is not None:
|
18
25
|
owners_list = owners if isinstance(owners, list) else [owners]
|
@@ -27,11 +34,12 @@ class RecordOwners(Generator):
|
|
27
34
|
"""Filters for current identity as owner."""
|
28
35
|
users = [n.value for n in identity.provides if n.method == "id"]
|
29
36
|
if users:
|
30
|
-
if current_app.config.get(
|
37
|
+
if current_app.config.get("INVENIO_RDM_ENABLED", False):
|
31
38
|
return dsl.Q("terms", **{"parent.access.owned_by.user": users})
|
32
39
|
else:
|
33
40
|
return dsl.Q("terms", **{"parent.owners.user": users})
|
34
41
|
|
42
|
+
|
35
43
|
class UserWithRole(Generator):
|
36
44
|
def __init__(self, *roles):
|
37
45
|
self.roles = roles
|
@@ -46,3 +54,49 @@ class UserWithRole(Generator):
|
|
46
54
|
if provide.method == "role" and provide.value in self.roles:
|
47
55
|
return dsl.Q("match_all")
|
48
56
|
return dsl.Q("match_none")
|
57
|
+
|
58
|
+
|
59
|
+
class IfDraftType(ConditionalGenerator):
|
60
|
+
def __init__(
|
61
|
+
self,
|
62
|
+
draft_types: list[
|
63
|
+
Literal["initial"] | Literal["metadata"] | Literal["new_version"]
|
64
|
+
]
|
65
|
+
| Literal["initial"]
|
66
|
+
| Literal["metadata"]
|
67
|
+
| Literal["new_version"],
|
68
|
+
then_=None,
|
69
|
+
else_=None,
|
70
|
+
):
|
71
|
+
if not isinstance(draft_types, (list, tuple)):
|
72
|
+
draft_types = [draft_types]
|
73
|
+
self._draft_types = draft_types
|
74
|
+
if not then_:
|
75
|
+
then_ = [Disable()]
|
76
|
+
if not else_:
|
77
|
+
else_ = [Disable()]
|
78
|
+
if not isinstance(then_, (list, tuple)):
|
79
|
+
then_ = [then_]
|
80
|
+
if not isinstance(else_, (list, tuple)):
|
81
|
+
else_ = [else_]
|
82
|
+
super().__init__(then_, else_)
|
83
|
+
|
84
|
+
def _condition(self, record=None, **kwargs):
|
85
|
+
if not record:
|
86
|
+
return False
|
87
|
+
|
88
|
+
index = record.versions.index
|
89
|
+
is_latest = record.versions.is_latest
|
90
|
+
is_draft = record.is_draft
|
91
|
+
|
92
|
+
if not is_draft:
|
93
|
+
return False
|
94
|
+
|
95
|
+
if index == 1 and not is_latest:
|
96
|
+
draft_type = "initial"
|
97
|
+
elif index > 1 and not is_latest:
|
98
|
+
draft_type = "new_version"
|
99
|
+
else:
|
100
|
+
draft_type = "metadata"
|
101
|
+
|
102
|
+
return draft_type in self._draft_types
|
@@ -1,10 +1,12 @@
|
|
1
1
|
import typing
|
2
2
|
|
3
|
-
|
3
|
+
from invenio_rdm_records.services.schemas.record import RDMRecordSchema
|
4
4
|
from invenio_records_resources.services.records.schema import (
|
5
5
|
BaseRecordSchema as InvenioBaseRecordSchema,
|
6
6
|
)
|
7
7
|
|
8
|
+
import marshmallow as ma
|
9
|
+
|
8
10
|
|
9
11
|
class BaseRecordSchema(InvenioBaseRecordSchema):
|
10
12
|
"""Base record schema - in addition to invenio exposes $schema as well."""
|
@@ -12,6 +14,12 @@ class BaseRecordSchema(InvenioBaseRecordSchema):
|
|
12
14
|
_schema = ma.fields.Str(attribute="$schema", data_key="$schema")
|
13
15
|
|
14
16
|
|
17
|
+
class RDMBaseRecordSchema(RDMRecordSchema):
|
18
|
+
"""Base record schema - in addition to invenio exposes $schema as well."""
|
19
|
+
|
20
|
+
_schema = ma.fields.Str(attribute="$schema", data_key="$schema")
|
21
|
+
|
22
|
+
|
15
23
|
class DictOnlySchema(ma.Schema):
|
16
24
|
def get_attribute(self, obj: typing.Any, attr: str, default: typing.Any):
|
17
25
|
if not isinstance(attr, int) and "." in attr:
|
@@ -2,11 +2,18 @@ import dataclasses
|
|
2
2
|
import inspect
|
3
3
|
from typing import List
|
4
4
|
|
5
|
+
from invenio_rdm_records.services.config import (
|
6
|
+
RDMSearchDraftsOptions as BaseRDMSearchDraftsOptions,
|
7
|
+
)
|
8
|
+
from invenio_rdm_records.services.config import (
|
9
|
+
RDMSearchOptions as BaseRDMSearchOptions,
|
10
|
+
)
|
5
11
|
from invenio_records_resources.proxies import current_service_registry
|
6
12
|
from invenio_records_resources.services.records import (
|
7
13
|
SearchOptions as InvenioSearchOptions,
|
8
14
|
)
|
9
15
|
from invenio_records_resources.services.records.params import (
|
16
|
+
FacetsParam,
|
10
17
|
PaginationParam,
|
11
18
|
QueryStrParam,
|
12
19
|
SortParam,
|
@@ -17,6 +24,7 @@ from invenio_search.engine import dsl
|
|
17
24
|
# TODO: integrate this to invenio_records_resources.services.records and remove SearchOptions class
|
18
25
|
from oarepo_runtime.i18n import lazy_gettext as _
|
19
26
|
from oarepo_runtime.records.systemfields.icu import ICUSuggestField
|
27
|
+
from oarepo_runtime.utils.functools import class_property
|
20
28
|
|
21
29
|
from .facets.params import GroupedFacetsParam
|
22
30
|
|
@@ -47,13 +55,16 @@ class FuzzySuggestQueryParser(SuggestQueryParser):
|
|
47
55
|
return dsl.Q("bool", should=[multi_match_with_bool_prefix, multi_match_fuzzy])
|
48
56
|
|
49
57
|
|
50
|
-
class
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
GroupedFacetsParam
|
56
|
-
|
58
|
+
class SearchOptionsMixin:
|
59
|
+
@class_property
|
60
|
+
def params_interpreters_cls(cls):
|
61
|
+
"""Replaces FacetsParam with GroupedFacetsParam."""
|
62
|
+
param_interpreters = [*super(SearchOptionsMixin, cls).params_interpreters_cls]
|
63
|
+
# replace FacetsParam with GroupedFacetsParam
|
64
|
+
for idx, interpreter in enumerate(param_interpreters):
|
65
|
+
if interpreter == FacetsParam:
|
66
|
+
param_interpreters[idx] = GroupedFacetsParam
|
67
|
+
return param_interpreters
|
57
68
|
|
58
69
|
sort_options = {
|
59
70
|
"title": dict(
|
@@ -75,6 +86,24 @@ class SearchOptions(InvenioSearchOptions):
|
|
75
86
|
}
|
76
87
|
|
77
88
|
|
89
|
+
class SearchOptions(SearchOptionsMixin, InvenioSearchOptions):
|
90
|
+
# TODO: should be changed
|
91
|
+
params_interpreters_cls = [
|
92
|
+
QueryStrParam,
|
93
|
+
PaginationParam,
|
94
|
+
SortParam,
|
95
|
+
GroupedFacetsParam,
|
96
|
+
]
|
97
|
+
|
98
|
+
|
99
|
+
class RDMSearchOptions(SearchOptionsMixin, BaseRDMSearchOptions):
|
100
|
+
pass
|
101
|
+
|
102
|
+
|
103
|
+
class RDMSearchDraftsOptions(SearchOptionsMixin, BaseRDMSearchDraftsOptions):
|
104
|
+
pass
|
105
|
+
|
106
|
+
|
78
107
|
@dataclasses.dataclass
|
79
108
|
class SuggestField:
|
80
109
|
field: str
|
@@ -192,3 +221,13 @@ class ICUSortOptions:
|
|
192
221
|
class I18nSearchOptions(SearchOptions):
|
193
222
|
extra_sort_options = {}
|
194
223
|
record_cls = None
|
224
|
+
|
225
|
+
|
226
|
+
class I18nRDMSearchOptions(RDMSearchOptions):
|
227
|
+
extra_sort_options = {}
|
228
|
+
record_cls = None
|
229
|
+
|
230
|
+
|
231
|
+
class I18nRDMDraftsSearchOptions(RDMSearchDraftsOptions):
|
232
|
+
extra_sort_options = {}
|
233
|
+
record_cls = None
|
@@ -76,7 +76,7 @@ oarepo_runtime/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG
|
|
76
76
|
oarepo_runtime/services/components.py,sha256=h7oQNPueuPqBD6mCRCIr7ZuNvzeliXinHjOyVV3FBvw,10775
|
77
77
|
oarepo_runtime/services/generators.py,sha256=j87HitHA_w2awsz0C5IAAJ0qjg9JMtvdO3dvh6FQyfg,250
|
78
78
|
oarepo_runtime/services/results.py,sha256=Ap2mUJHl3V4BSduTrBWPuco0inQVq0QsuCbVhez48uY,5705
|
79
|
-
oarepo_runtime/services/search.py,sha256=
|
79
|
+
oarepo_runtime/services/search.py,sha256=exCEfRAWlajVfQBZ1Qf1usYEF7Fwp5H8Lb_usOiLRS8,7422
|
80
80
|
oarepo_runtime/services/config/__init__.py,sha256=559w4vphVAipa420OwTsxGUP-b7idoqSIX13FSJyVz0,783
|
81
81
|
oarepo_runtime/services/config/link_conditions.py,sha256=evPRd5XU76Ok4J-08bBfplbHZ019rl74FpJmO8iM5yg,3298
|
82
82
|
oarepo_runtime/services/config/permissions_presets.py,sha256=YF99Vjh1fGqSEXNw7qIfcUQFvzpE54_BafqkO6wlYHk,6668
|
@@ -102,8 +102,8 @@ oarepo_runtime/services/facets/year_histogram.py,sha256=kdfwx1lgw4UmfjdaqqeElJCB
|
|
102
102
|
oarepo_runtime/services/files/__init__.py,sha256=K8MStrEQf_BUhvzhwPTF93Hkhwrd1dtv35LDo7iZeTM,268
|
103
103
|
oarepo_runtime/services/files/components.py,sha256=x6Wd-vvkqTqB1phj2a6h42DNQksN8PuR2XKaOGoNHfw,2400
|
104
104
|
oarepo_runtime/services/files/service.py,sha256=8DH0Pefr9kilM2JnOb-UYsnqerE8Z1Mu4p6DOJ4j_ZU,608
|
105
|
-
oarepo_runtime/services/permissions/__init__.py,sha256=
|
106
|
-
oarepo_runtime/services/permissions/generators.py,sha256=
|
105
|
+
oarepo_runtime/services/permissions/__init__.py,sha256=33zqKGgRQmRfNZI8kAhue1bFoT1deYiVVNinP8Bvv0I,123
|
106
|
+
oarepo_runtime/services/permissions/generators.py,sha256=fuG0zp940l5AcAQmjGnOcF8vnCPmGUGKHsPYMOpGsYY,3288
|
107
107
|
oarepo_runtime/services/records/__init__.py,sha256=hIoa2fx1AkDr6c-MgY561U2oN9LFeUCtfbVnetpBUOg,78
|
108
108
|
oarepo_runtime/services/records/links.py,sha256=gVe-_hGkLtX7pd6sS6jTbRIhBby2FTn9PXyYPy3yxzs,737
|
109
109
|
oarepo_runtime/services/relations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -115,7 +115,7 @@ oarepo_runtime/services/schema/cf.py,sha256=-m9seIH5VYUdxDsJlPVXS0-8f7xkpN7YfW1q
|
|
115
115
|
oarepo_runtime/services/schema/i18n.py,sha256=NACu0SqXWuuwKVpBZdz4K8tVfBaCEI9YpcCtC1l1YGI,1669
|
116
116
|
oarepo_runtime/services/schema/i18n_ui.py,sha256=MnEDW0gcZPvEODbJ6XzldxNCJ2suhfmdHQ4wkcAG6zA,2179
|
117
117
|
oarepo_runtime/services/schema/i18n_validation.py,sha256=fyMTi2Rw-KiHv7c7HN61zGxRVa9sAjAEEkAL5wUyKNo,236
|
118
|
-
oarepo_runtime/services/schema/marshmallow.py,sha256=
|
118
|
+
oarepo_runtime/services/schema/marshmallow.py,sha256=iAMMH5MlYs59qetXAHOROvERNScfVqY9TrEIJejHCuw,1421
|
119
119
|
oarepo_runtime/services/schema/marshmallow_to_json_schema.py,sha256=VYLnVWHOoaxWCD_gqJO8-8u1SbaPEFBjDZ5HGgGr0Ow,2027
|
120
120
|
oarepo_runtime/services/schema/oneofschema.py,sha256=GnWH4Or_G5M0NgSmCoqMI6PBrJg5AC9RHrcB5QDKRq0,6661
|
121
121
|
oarepo_runtime/services/schema/polymorphic.py,sha256=bAbUoTIeDBiJPYPhpLEKKZekEdkHlpqkmNxk1hN3PDw,564
|
@@ -135,9 +135,9 @@ tests/marshmallow_to_json/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
|
|
135
135
|
tests/marshmallow_to_json/test_datacite_ui_schema.py,sha256=82iLj8nW45lZOUewpWbLX3mpSkpa9lxo-vK-Qtv_1bU,48552
|
136
136
|
tests/marshmallow_to_json/test_simple_schema.py,sha256=izZN9p0v6kovtSZ6AdxBYmK_c6ZOti2_z_wPT_zXIr0,1500
|
137
137
|
tests/pkg_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
138
|
-
oarepo_runtime-1.5.
|
139
|
-
oarepo_runtime-1.5.
|
140
|
-
oarepo_runtime-1.5.
|
141
|
-
oarepo_runtime-1.5.
|
142
|
-
oarepo_runtime-1.5.
|
143
|
-
oarepo_runtime-1.5.
|
138
|
+
oarepo_runtime-1.5.93.dist-info/LICENSE,sha256=h2uWz0OaB3EN-J1ImdGJZzc7yvfQjvHVYdUhQ-H7ypY,1064
|
139
|
+
oarepo_runtime-1.5.93.dist-info/METADATA,sha256=utgiMZHHRhAFIpjCSNUAgZYwr2lwKD_BqHQfvKt7jJo,4720
|
140
|
+
oarepo_runtime-1.5.93.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
141
|
+
oarepo_runtime-1.5.93.dist-info/entry_points.txt,sha256=k7O5LZUOGsVeSpB7ulU0txBUNp1CVQG7Q7TJIVTPbzU,491
|
142
|
+
oarepo_runtime-1.5.93.dist-info/top_level.txt,sha256=bHhlkT1_RQC4IkfTQCqA3iN4KCB6cSFQlsXpQMSP-bE,21
|
143
|
+
oarepo_runtime-1.5.93.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|