oarepo-runtime 1.5.44__py3-none-any.whl → 1.5.46__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- oarepo_runtime/datastreams/utils.py +2 -1
- oarepo_runtime/records/systemfields/selectors.py +1 -1
- oarepo_runtime/records/systemfields/synthetic.py +3 -1
- oarepo_runtime/services/config/__init__.py +1 -2
- oarepo_runtime/services/config/service.py +0 -19
- oarepo_runtime/services/generators.py +8 -22
- oarepo_runtime/services/permissions/__init__.py +3 -0
- oarepo_runtime/services/permissions/generators.py +40 -0
- {oarepo_runtime-1.5.44.dist-info → oarepo_runtime-1.5.46.dist-info}/METADATA +1 -1
- {oarepo_runtime-1.5.44.dist-info → oarepo_runtime-1.5.46.dist-info}/RECORD +14 -12
- {oarepo_runtime-1.5.44.dist-info → oarepo_runtime-1.5.46.dist-info}/LICENSE +0 -0
- {oarepo_runtime-1.5.44.dist-info → oarepo_runtime-1.5.46.dist-info}/WHEEL +0 -0
- {oarepo_runtime-1.5.44.dist-info → oarepo_runtime-1.5.46.dist-info}/entry_points.txt +0 -0
- {oarepo_runtime-1.5.44.dist-info → oarepo_runtime-1.5.46.dist-info}/top_level.txt +0 -0
@@ -15,7 +15,8 @@ def get_record_service_for_record(record):
|
|
15
15
|
if not record:
|
16
16
|
return None
|
17
17
|
if "OAREPO_PRIMARY_RECORD_SERVICE" in current_app.config:
|
18
|
-
|
18
|
+
service_id = current_app.config["OAREPO_PRIMARY_RECORD_SERVICE"][type(record)]
|
19
|
+
return current_service_registry.get(service_id)
|
19
20
|
else:
|
20
21
|
return get_record_service_for_record_deprecated(record)
|
21
22
|
|
@@ -70,7 +70,9 @@ class SyntheticSystemField(MappingSystemFieldMixin, SystemField):
|
|
70
70
|
```
|
71
71
|
"""
|
72
72
|
|
73
|
-
def __init__(
|
73
|
+
def __init__(
|
74
|
+
self, selector: Selector = None, filter=None, map=None, key=None, **kwargs
|
75
|
+
):
|
74
76
|
self.selector = selector
|
75
77
|
self.map = map
|
76
78
|
self.filter = filter
|
@@ -4,11 +4,10 @@ from .permissions_presets import (
|
|
4
4
|
OaiHarvesterPermissionPolicy,
|
5
5
|
ReadOnlyPermissionPolicy,
|
6
6
|
)
|
7
|
-
from .service import PermissionsPresetsConfigMixin
|
7
|
+
from .service import PermissionsPresetsConfigMixin
|
8
8
|
|
9
9
|
__all__ = (
|
10
10
|
"PermissionsPresetsConfigMixin",
|
11
|
-
"UserWithRole",
|
12
11
|
"OaiHarvesterPermissionPolicy",
|
13
12
|
"ReadOnlyPermissionPolicy",
|
14
13
|
"EveryonePermissionPolicy",
|
@@ -3,10 +3,7 @@ import re
|
|
3
3
|
from typing import List, Type
|
4
4
|
|
5
5
|
from flask import current_app
|
6
|
-
from flask_principal import RoleNeed
|
7
6
|
from invenio_records_permissions import BasePermissionPolicy
|
8
|
-
from invenio_records_permissions.generators import Generator
|
9
|
-
from invenio_search.engine import dsl
|
10
7
|
|
11
8
|
from oarepo_runtime.utils.functools import class_property
|
12
9
|
|
@@ -103,19 +100,3 @@ class PermissionsPresetsConfigMixin:
|
|
103
100
|
name = name[:-6]
|
104
101
|
name = re.sub(r"(?<!^)(?=[A-Z])", "_", name).upper()
|
105
102
|
return f"{name}_PERMISSIONS_PRESETS"
|
106
|
-
|
107
|
-
|
108
|
-
class UserWithRole(Generator):
|
109
|
-
def __init__(self, *roles):
|
110
|
-
self.roles = roles
|
111
|
-
|
112
|
-
def needs(self, **kwargs):
|
113
|
-
return [RoleNeed(role) for role in self.roles]
|
114
|
-
|
115
|
-
def query_filter(self, identity=None, **kwargs):
|
116
|
-
if not identity:
|
117
|
-
return dsl.Q("match_none")
|
118
|
-
for provide in identity.provides:
|
119
|
-
if provide.method == "role" and provide.value in self.roles:
|
120
|
-
return dsl.Q("match_all")
|
121
|
-
return dsl.Q("match_none")
|
@@ -1,24 +1,10 @@
|
|
1
|
-
|
2
|
-
from invenio_records_permissions.generators import Generator
|
3
|
-
from invenio_search.engine import dsl
|
1
|
+
import warnings
|
4
2
|
|
3
|
+
from .permissions import RecordOwners
|
5
4
|
|
6
|
-
|
7
|
-
"
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
# 'record' is required, so if not passed we default to empty array,
|
13
|
-
# i.e. superuser-access.
|
14
|
-
return []
|
15
|
-
owners = getattr(record.parent, "owners", None)
|
16
|
-
if owners is not None:
|
17
|
-
return [UserNeed(owner.id) for owner in owners]
|
18
|
-
return []
|
19
|
-
|
20
|
-
def query_filter(self, identity=None, **kwargs):
|
21
|
-
"""Filters for current identity as owner."""
|
22
|
-
users = [n.value for n in identity.provides if n.method == "id"]
|
23
|
-
if users:
|
24
|
-
return dsl.Q("terms", **{"parent.owners.user": users})
|
5
|
+
warnings.warn(
|
6
|
+
"oarepo_runtime.services.generators is deprecated, import RecordOwners from "
|
7
|
+
"oarepo_runtime.services.permissions",
|
8
|
+
DeprecationWarning,
|
9
|
+
)
|
10
|
+
__all__ = ("RecordOwners",)
|
@@ -0,0 +1,40 @@
|
|
1
|
+
from flask_principal import RoleNeed, UserNeed
|
2
|
+
from invenio_records_permissions.generators import Generator
|
3
|
+
from invenio_search.engine import dsl
|
4
|
+
|
5
|
+
|
6
|
+
class RecordOwners(Generator):
|
7
|
+
"""Allows record owners."""
|
8
|
+
|
9
|
+
def needs(self, record=None, **kwargs):
|
10
|
+
"""Enabling Needs."""
|
11
|
+
if record is None:
|
12
|
+
# 'record' is required, so if not passed we default to empty array,
|
13
|
+
# i.e. superuser-access.
|
14
|
+
return []
|
15
|
+
owners = getattr(record.parent, "owners", None)
|
16
|
+
if owners is not None:
|
17
|
+
return [UserNeed(owner.id) for owner in owners]
|
18
|
+
return []
|
19
|
+
|
20
|
+
def query_filter(self, identity=None, **kwargs):
|
21
|
+
"""Filters for current identity as owner."""
|
22
|
+
users = [n.value for n in identity.provides if n.method == "id"]
|
23
|
+
if users:
|
24
|
+
return dsl.Q("terms", **{"parent.owners.user": users})
|
25
|
+
|
26
|
+
|
27
|
+
class UserWithRole(Generator):
|
28
|
+
def __init__(self, *roles):
|
29
|
+
self.roles = roles
|
30
|
+
|
31
|
+
def needs(self, **kwargs):
|
32
|
+
return [RoleNeed(role) for role in self.roles]
|
33
|
+
|
34
|
+
def query_filter(self, identity=None, **kwargs):
|
35
|
+
if not identity:
|
36
|
+
return dsl.Q("match_none")
|
37
|
+
for provide in identity.provides:
|
38
|
+
if provide.method == "role" and provide.value in self.roles:
|
39
|
+
return dsl.Q("match_all")
|
40
|
+
return dsl.Q("match_none")
|
@@ -25,7 +25,7 @@ oarepo_runtime/datastreams/semi_asynchronous.py,sha256=TJWby2MDKXm5feRocoWB-8Ohs
|
|
25
25
|
oarepo_runtime/datastreams/synchronous.py,sha256=t5lfnMkLqy3jK5zMl-nIuA0HlMPiHGjwCqZ8XQP-3GM,2595
|
26
26
|
oarepo_runtime/datastreams/transformers.py,sha256=q5KzHPl2kJg7HP1BtKJ7F_UMqg_7L1ZGDX0O7s8D6UI,521
|
27
27
|
oarepo_runtime/datastreams/types.py,sha256=KZjblc3T_UFFW7LrMDmiR8lqVf86V484LAHj6yg05EI,9908
|
28
|
-
oarepo_runtime/datastreams/utils.py,sha256=
|
28
|
+
oarepo_runtime/datastreams/utils.py,sha256=GYpVdwMks0GRdz8DBpErdiV_2aJ-3V1uAkOHyz67bZw,4001
|
29
29
|
oarepo_runtime/datastreams/readers/__init__.py,sha256=P1n3llZQ3AFHnSPbeT1VaCJcEtRFz9AbHfjkZv5LG7s,1103
|
30
30
|
oarepo_runtime/datastreams/readers/attachments.py,sha256=A7EC1TqyTHG-go5DIaRotlBSOm6o9hGqAKyVVAceCRU,1956
|
31
31
|
oarepo_runtime/datastreams/readers/excel.py,sha256=CM8lr8mejN7NgoK5TJb1oXpjq0HxklQKMsuj3uqjTjA,3653
|
@@ -62,19 +62,19 @@ oarepo_runtime/records/systemfields/icu.py,sha256=sSGAgi5WhsAY4cCBL7-7nMpvHAuctp
|
|
62
62
|
oarepo_runtime/records/systemfields/mapping.py,sha256=tXOK_jkdY1pOUO7_VfChfDNB8UTi21GUXaidpugTnO8,1017
|
63
63
|
oarepo_runtime/records/systemfields/owner.py,sha256=dYRVBinniW7ECHuSnTAjeN6x1KhhJtNR9vxmD1KswMs,3805
|
64
64
|
oarepo_runtime/records/systemfields/record_status.py,sha256=U3kem4-JkNsT17e0iAl3HIAZ2MvO5lY_0U757aZvTKE,935
|
65
|
-
oarepo_runtime/records/systemfields/selectors.py,sha256=
|
66
|
-
oarepo_runtime/records/systemfields/synthetic.py,sha256=
|
65
|
+
oarepo_runtime/records/systemfields/selectors.py,sha256=rXNioeyCHLiNGsA_zu8bfoFdu29ACSNN7zHRUm1rJ6Q,928
|
66
|
+
oarepo_runtime/records/systemfields/synthetic.py,sha256=UustvhzcDGuaNZLDeHbWwshoxQR-qRIuHDCct5RXmrI,4287
|
67
67
|
oarepo_runtime/resources/__init__.py,sha256=v8BGrOTu_FjKzd0eozV7Q4GoGxyfybsL2cI-tbP5Pys,185
|
68
68
|
oarepo_runtime/resources/file_resource.py,sha256=Ta3bFce7l0xwqkkOMOEu9mxbB8BbKj5HUHRHmidhnl8,414
|
69
69
|
oarepo_runtime/resources/localized_ui_json_serializer.py,sha256=3V9cJaG_e1PMXKVX_wKfBp1LmbeForwHyBNYdyha4uQ,1878
|
70
70
|
oarepo_runtime/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
71
71
|
oarepo_runtime/services/components.py,sha256=FkqyFe6-5HZKJDqglQ-Smm_AIsDZ-LyWcOr1u2yGu3k,1836
|
72
|
-
oarepo_runtime/services/generators.py,sha256=
|
72
|
+
oarepo_runtime/services/generators.py,sha256=j87HitHA_w2awsz0C5IAAJ0qjg9JMtvdO3dvh6FQyfg,250
|
73
73
|
oarepo_runtime/services/results.py,sha256=gPmQ7DzX4da5zuvqQE7u-AUn_Yvz-YHt8W8DaxPbQ-M,2706
|
74
74
|
oarepo_runtime/services/search.py,sha256=9xGTN5Yg6eTdptQ9qjO_umbacf9ooMuHYGXWYfla4-M,6227
|
75
|
-
oarepo_runtime/services/config/__init__.py,sha256=
|
75
|
+
oarepo_runtime/services/config/__init__.py,sha256=dtlD84pJ6xI77UF22IPrCOt7tHD3g5DAEDApUdjDVFE,406
|
76
76
|
oarepo_runtime/services/config/permissions_presets.py,sha256=zApeA-2DYAlD--SzVz3vq_OFjq48Ko0pe08e4o2vxr4,6114
|
77
|
-
oarepo_runtime/services/config/service.py,sha256=
|
77
|
+
oarepo_runtime/services/config/service.py,sha256=s-dVbGkLICpsce6jgu7b5kzYFz9opWjSQFDBgbIhKio,4002
|
78
78
|
oarepo_runtime/services/custom_fields/__init__.py,sha256=xJ7XEyMJHPfIgX5JKpgpwh7SYc9Zee2dC5oC8cm99Qc,2282
|
79
79
|
oarepo_runtime/services/custom_fields/mappings.py,sha256=tg9CAdxGOkd_n6RB5Z2_wSwo_A0wqEey8RMcZ79AHo0,6906
|
80
80
|
oarepo_runtime/services/expansions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -92,6 +92,8 @@ oarepo_runtime/services/facets/year_histogram.py,sha256=kdfwx1lgw4UmfjdaqqeElJCB
|
|
92
92
|
oarepo_runtime/services/files/__init__.py,sha256=K8MStrEQf_BUhvzhwPTF93Hkhwrd1dtv35LDo7iZeTM,268
|
93
93
|
oarepo_runtime/services/files/components.py,sha256=x6Wd-vvkqTqB1phj2a6h42DNQksN8PuR2XKaOGoNHfw,2400
|
94
94
|
oarepo_runtime/services/files/service.py,sha256=8DH0Pefr9kilM2JnOb-UYsnqerE8Z1Mu4p6DOJ4j_ZU,608
|
95
|
+
oarepo_runtime/services/permissions/__init__.py,sha256=Cgin2Zr1fpaYr-aZcUotdmv0hsrPTUJVQt8ouvU8tuU,95
|
96
|
+
oarepo_runtime/services/permissions/generators.py,sha256=YEOBCCvU-RG0BSWMtg76sv8qLcMbXxNu3rRJPDLtvvQ,1371
|
95
97
|
oarepo_runtime/services/relations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
96
98
|
oarepo_runtime/services/relations/components.py,sha256=3g0VdnGUM-2yYt50fPi-OADReBGJb4h05vmYHfh-QFs,592
|
97
99
|
oarepo_runtime/services/relations/errors.py,sha256=VtlOKq9MEUeJ4IsiZhY7lWoshrusA_RL4SOHe2titno,552
|
@@ -117,9 +119,9 @@ oarepo_runtime/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
|
|
117
119
|
oarepo_runtime/utils/functools.py,sha256=gKS9YZtlIYcDvdNA9cmYO00yjiXBYV1jg8VpcRUyQyg,1324
|
118
120
|
oarepo_runtime/utils/path.py,sha256=V1NVyk3m12_YLbj7QHYvUpE1wScO78bYsX1LOLeXDkI,3108
|
119
121
|
tests/pkg_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
120
|
-
oarepo_runtime-1.5.
|
121
|
-
oarepo_runtime-1.5.
|
122
|
-
oarepo_runtime-1.5.
|
123
|
-
oarepo_runtime-1.5.
|
124
|
-
oarepo_runtime-1.5.
|
125
|
-
oarepo_runtime-1.5.
|
122
|
+
oarepo_runtime-1.5.46.dist-info/LICENSE,sha256=h2uWz0OaB3EN-J1ImdGJZzc7yvfQjvHVYdUhQ-H7ypY,1064
|
123
|
+
oarepo_runtime-1.5.46.dist-info/METADATA,sha256=qSraV8TexG2hMsNg1VcQW77Px24z_3A5njdIodRPp30,4680
|
124
|
+
oarepo_runtime-1.5.46.dist-info/WHEEL,sha256=Wyh-_nZ0DJYolHNn1_hMa4lM7uDedD_RGVwbmTjyItk,91
|
125
|
+
oarepo_runtime-1.5.46.dist-info/entry_points.txt,sha256=QrlXAKuPDVBinaSh_v3yO9_Nb9ZNmJCJ0VFcCW-z0Jg,327
|
126
|
+
oarepo_runtime-1.5.46.dist-info/top_level.txt,sha256=bHhlkT1_RQC4IkfTQCqA3iN4KCB6cSFQlsXpQMSP-bE,21
|
127
|
+
oarepo_runtime-1.5.46.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|