oarepo-runtime 1.5.7__tar.gz → 1.5.10__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {oarepo-runtime-1.5.7/oarepo_runtime.egg-info → oarepo-runtime-1.5.10}/PKG-INFO +1 -1
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/records/systemfields/featured_file.py +18 -18
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/records/systemfields/icu.py +6 -6
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/records/systemfields/mapping.py +13 -3
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/records/systemfields/record_status.py +8 -8
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/records/systemfields/synthetic.py +3 -3
- oarepo-runtime-1.5.10/oarepo_runtime/services/config/service.py +90 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/custom_fields/__init__.py +2 -2
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10/oarepo_runtime.egg-info}/PKG-INFO +1 -1
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/setup.cfg +1 -1
- oarepo-runtime-1.5.7/oarepo_runtime/services/config/service.py +0 -43
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/LICENSE +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/MANIFEST.in +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/README.md +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/__init__.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/cli/__init__.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/cli/assets.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/cli/base.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/cli/cf.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/cli/check.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/cli/configuration.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/cli/fixtures.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/cli/index.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/cli/validate.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/__init__.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/asynchronous.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/catalogue.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/datastreams.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/errors.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/ext.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/fixtures.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/json.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/readers/__init__.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/readers/attachments.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/readers/excel.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/readers/json.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/readers/service.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/readers/yaml.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/semi_asynchronous.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/synchronous.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/transformers.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/types.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/utils.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/writers/__init__.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/writers/attachments_file.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/writers/attachments_service.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/writers/service.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/writers/utils.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/writers/validation_errors.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/writers/yaml.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/ext.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/ext_config.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/i18n/__init__.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/info/__init__.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/info/views.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/profile.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/proxies.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/records/__init__.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/records/dumpers/__init__.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/records/dumpers/edtf_interval.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/records/dumpers/multilingual_dumper.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/records/entity_resolvers/__init__.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/records/entity_resolvers/proxies.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/records/relations/__init__.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/records/relations/base.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/records/relations/internal.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/records/relations/lookup.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/records/relations/pid_relation.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/records/systemfields/__init__.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/records/systemfields/has_draftcheck.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/resources/__init__.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/resources/file_resource.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/resources/localized_ui_json_serializer.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/__init__.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/config/__init__.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/config/permissions_presets.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/custom_fields/mappings.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/expansions/__init__.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/expansions/expandable_fields.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/expansions/service.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/facets/__init__.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/facets/base.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/facets/date.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/facets/enum.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/facets/facet_groups_names.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/facets/max_facet.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/facets/nested_facet.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/facets/params.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/files/__init__.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/files/service.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/relations/__init__.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/relations/components.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/relations/errors.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/relations/mapping.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/results.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/schema/__init__.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/schema/cf.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/schema/i18n.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/schema/i18n_ui.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/schema/i18n_validation.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/schema/marshmallow.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/schema/polymorphic.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/schema/ui.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/schema/validation.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/search.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/translations/cs/LC_MESSAGES/messages.mo +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/translations/cs/LC_MESSAGES/messages.po +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/translations/default_translations.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/translations/en/LC_MESSAGES/messages.mo +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/translations/en/LC_MESSAGES/messages.po +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/translations/jinjax_messages.jinja +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/translations/messages.pot +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/uow.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/utils/__init__.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/utils/functools.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/utils/path.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime.egg-info/SOURCES.txt +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime.egg-info/dependency_links.txt +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime.egg-info/entry_points.txt +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime.egg-info/requires.txt +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime.egg-info/top_level.txt +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/pyproject.toml +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/setup.py +0 -0
- {oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/tests/pkg_data/__init__.py +0 -0
{oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/records/systemfields/featured_file.py
RENAMED
@@ -6,22 +6,33 @@ from oarepo_runtime.datastreams.utils import get_file_service_for_record_service
|
|
6
6
|
from oarepo_runtime.records.systemfields.mapping import MappingSystemFieldMixin
|
7
7
|
|
8
8
|
|
9
|
-
class FeaturedFileFieldResult
|
9
|
+
class FeaturedFileFieldResult:
|
10
10
|
def __init__(self, record=None):
|
11
11
|
super().__init__()
|
12
12
|
self.record = record
|
13
13
|
|
14
|
-
|
14
|
+
|
15
|
+
class FeaturedFileField(MappingSystemFieldMixin, SystemField):
|
16
|
+
def __init__(self, source_field):
|
17
|
+
super(FeaturedFileField, self).__init__(source_field)
|
18
|
+
|
19
|
+
def __get__(self, instance, owner):
|
20
|
+
if instance is None:
|
21
|
+
return self
|
22
|
+
result = FeaturedFileFieldResult(record=instance)
|
23
|
+
return result
|
24
|
+
|
25
|
+
def search_dump(self, data, record):
|
15
26
|
for service in current_service_registry._services:
|
16
27
|
if getattr(
|
17
28
|
current_service_registry._services[service], "record_cls"
|
18
|
-
) == type(
|
29
|
+
) == type(record):
|
19
30
|
file_service = get_file_service_for_record_service(
|
20
31
|
record_service=current_service_registry._services[service],
|
21
|
-
record=
|
32
|
+
record=record,
|
22
33
|
)
|
23
34
|
|
24
|
-
files = file_service.list_files(system_identity,
|
35
|
+
files = file_service.list_files(system_identity, record["id"])
|
25
36
|
file_list = list(files.entries)
|
26
37
|
|
27
38
|
for file in file_list:
|
@@ -30,16 +41,5 @@ class FeaturedFileFieldResult(MappingSystemFieldMixin):
|
|
30
41
|
and "featured" in file["metadata"]
|
31
42
|
and file["metadata"]["featured"]
|
32
43
|
):
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
class FeaturedFileField(SystemField):
|
38
|
-
def __init__(self, source_field):
|
39
|
-
super(FeaturedFileField, self).__init__()
|
40
|
-
|
41
|
-
def __get__(self, instance, owner):
|
42
|
-
if instance is None:
|
43
|
-
return None
|
44
|
-
result = FeaturedFileFieldResult(record=instance)
|
45
|
-
return result
|
44
|
+
record["metadata"].update({"featured": file})
|
45
|
+
record.commit()
|
@@ -8,7 +8,7 @@ from oarepo_runtime.records.relations.lookup import lookup_key
|
|
8
8
|
from oarepo_runtime.records.systemfields.mapping import MappingSystemFieldMixin
|
9
9
|
|
10
10
|
|
11
|
-
class ICUField(SystemField):
|
11
|
+
class ICUField(MappingSystemFieldMixin, SystemField):
|
12
12
|
"""
|
13
13
|
A system field that acts as an opensearch "proxy" to another field.
|
14
14
|
It creates a top-level mapping field with the same name and copies
|
@@ -44,20 +44,20 @@ class ICUField(SystemField):
|
|
44
44
|
ret.append(val)
|
45
45
|
return ret
|
46
46
|
|
47
|
-
def search_dump(self, data):
|
47
|
+
def search_dump(self, data, record):
|
48
48
|
ret = {}
|
49
49
|
for lang in self.languages:
|
50
50
|
ret[lang] = self.get_values(data, lang)
|
51
51
|
data[self.attr_name] = ret
|
52
52
|
|
53
|
-
def search_load(self, data):
|
53
|
+
def search_load(self, data, record_cls):
|
54
54
|
data.pop(self.attr_name, None)
|
55
55
|
|
56
56
|
def __get__(self, instance, owner):
|
57
57
|
return self
|
58
58
|
|
59
59
|
|
60
|
-
class ICUSortField(
|
60
|
+
class ICUSortField(ICUField):
|
61
61
|
"""
|
62
62
|
A field that adds icu sorting field
|
63
63
|
"""
|
@@ -83,7 +83,7 @@ class ICUSortField(MappingSystemFieldMixin, ICUField):
|
|
83
83
|
}
|
84
84
|
|
85
85
|
|
86
|
-
class ICUSuggestField(
|
86
|
+
class ICUSuggestField(ICUField):
|
87
87
|
"""
|
88
88
|
A field that adds icu-aware suggestion field
|
89
89
|
"""
|
@@ -132,7 +132,7 @@ class ICUSuggestField(MappingSystemFieldMixin, ICUField):
|
|
132
132
|
}
|
133
133
|
|
134
134
|
|
135
|
-
class ICUSearchField(
|
135
|
+
class ICUSearchField(ICUField):
|
136
136
|
"""
|
137
137
|
A field that adds stemming-aware search field
|
138
138
|
"""
|
{oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/records/systemfields/mapping.py
RENAMED
@@ -16,18 +16,28 @@ class MappingSystemFieldMixin:
|
|
16
16
|
def dynamic_templates(self):
|
17
17
|
return []
|
18
18
|
|
19
|
+
@classmethod
|
20
|
+
def search_dump(cls, data, record):
|
21
|
+
"""Dump custom field."""
|
22
|
+
pass
|
23
|
+
|
24
|
+
@classmethod
|
25
|
+
def search_load(cls, data, record_cls):
|
26
|
+
"""Load custom field."""
|
27
|
+
pass
|
28
|
+
|
19
29
|
|
20
30
|
class SystemFieldDumperExt(SearchDumperExt):
|
21
31
|
def dump(self, record, data):
|
22
32
|
"""Dump custom fields."""
|
23
33
|
for cf in inspect.getmembers(
|
24
|
-
record, lambda x: isinstance(x, MappingSystemFieldMixin)
|
34
|
+
type(record), lambda x: isinstance(x, MappingSystemFieldMixin)
|
25
35
|
):
|
26
|
-
cf[1].search_dump(data)
|
36
|
+
cf[1].search_dump(data, record=record)
|
27
37
|
|
28
38
|
def load(self, data, record_cls):
|
29
39
|
"""Load custom fields."""
|
30
40
|
for cf in inspect.getmembers(
|
31
41
|
record_cls, lambda x: isinstance(x, MappingSystemFieldMixin)
|
32
42
|
):
|
33
|
-
cf[1].search_load(data)
|
43
|
+
cf[1].search_load(data, record_cls=record_cls)
|
{oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/records/systemfields/record_status.py
RENAMED
@@ -3,17 +3,11 @@ from invenio_records.systemfields import SystemField
|
|
3
3
|
from .mapping import MappingSystemFieldMixin
|
4
4
|
|
5
5
|
|
6
|
-
class RecordStatusResult
|
6
|
+
class RecordStatusResult:
|
7
7
|
def __init__(self, record, attr_name):
|
8
8
|
self.record = record
|
9
9
|
self.attr_name = attr_name
|
10
10
|
|
11
|
-
def search_dump(self, data):
|
12
|
-
if getattr(self.record, "is_draft"):
|
13
|
-
data[self.attr_name] = "draft"
|
14
|
-
else:
|
15
|
-
data[self.attr_name] = "published"
|
16
|
-
|
17
11
|
|
18
12
|
class RecordStatusSystemField(MappingSystemFieldMixin, SystemField):
|
19
13
|
@property
|
@@ -24,9 +18,15 @@ class RecordStatusSystemField(MappingSystemFieldMixin, SystemField):
|
|
24
18
|
},
|
25
19
|
}
|
26
20
|
|
27
|
-
def search_load(self, data):
|
21
|
+
def search_load(self, data, record_cls):
|
28
22
|
data.pop(self.attr_name, None)
|
29
23
|
|
24
|
+
def search_dump(self, data, record):
|
25
|
+
if getattr(record, "is_draft"):
|
26
|
+
data[self.attr_name] = "draft"
|
27
|
+
else:
|
28
|
+
data[self.attr_name] = "published"
|
29
|
+
|
30
30
|
def __get__(self, record, owner=None):
|
31
31
|
"""Accessing the attribute."""
|
32
32
|
# Class access
|
{oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/records/systemfields/synthetic.py
RENAMED
@@ -62,13 +62,13 @@ class SyntheticSystemField(MappingSystemFieldMixin, SystemField):
|
|
62
62
|
```
|
63
63
|
"""
|
64
64
|
|
65
|
-
def search_dump(self, data):
|
65
|
+
def search_dump(self, data, record):
|
66
66
|
dt = self._value(data)
|
67
67
|
if dt:
|
68
68
|
data[self.key] = dt
|
69
69
|
|
70
|
-
def search_load(self, data):
|
71
|
-
data.pop(self.key)
|
70
|
+
def search_load(self, data, record_cls):
|
71
|
+
data.pop(self.key, None)
|
72
72
|
|
73
73
|
def __get__(self, record, owner=None):
|
74
74
|
if record is None:
|
@@ -0,0 +1,90 @@
|
|
1
|
+
import inspect
|
2
|
+
import re
|
3
|
+
from functools import cached_property
|
4
|
+
from typing import List, Type
|
5
|
+
|
6
|
+
from flask import current_app
|
7
|
+
from invenio_records_permissions import BasePermissionPolicy
|
8
|
+
|
9
|
+
|
10
|
+
class PermissionsPresetsConfigMixin:
|
11
|
+
components = tuple()
|
12
|
+
PERMISSIONS_PRESETS_CONFIG_KEY = None
|
13
|
+
# PERMISSIONS_PRESETS = [] # noqa (omitted here because of the order of mixins)
|
14
|
+
|
15
|
+
@cached_property
|
16
|
+
def permission_policy_cls(self):
|
17
|
+
"""
|
18
|
+
Returns a class that contains all permissions from the presets.
|
19
|
+
"""
|
20
|
+
presets = self._get_preset_classes()
|
21
|
+
|
22
|
+
permissions = {}
|
23
|
+
for preset_class in presets:
|
24
|
+
for permission_name, permission_needs in self._get_permissions_from_preset(
|
25
|
+
preset_class
|
26
|
+
):
|
27
|
+
target = permissions.setdefault(permission_name, [])
|
28
|
+
for need in permission_needs:
|
29
|
+
if need not in target:
|
30
|
+
target.append(need)
|
31
|
+
|
32
|
+
return type(f"{type(self).__name__}Permissions", tuple(presets), permissions)
|
33
|
+
|
34
|
+
@staticmethod
|
35
|
+
def _get_permissions_from_preset(preset_class):
|
36
|
+
for permission_name, permission_needs in inspect.getmembers(preset_class):
|
37
|
+
if not permission_name.startswith("can_"):
|
38
|
+
continue
|
39
|
+
if not isinstance(permission_needs, (list, tuple)):
|
40
|
+
continue
|
41
|
+
yield permission_name, permission_needs
|
42
|
+
|
43
|
+
def _get_preset_classes(self) -> List[Type[BasePermissionPolicy]]:
|
44
|
+
"""
|
45
|
+
Returns a list of permission presets classes to be used for this service.
|
46
|
+
|
47
|
+
The list is read from the configuration, if it exists, otherwise it returns
|
48
|
+
the default value from the class attribute PERMISSIONS_PRESETS.
|
49
|
+
"""
|
50
|
+
registered_preset_classes = current_app.config["OAREPO_PERMISSIONS_PRESETS"]
|
51
|
+
preset_classes = [
|
52
|
+
registered_preset_classes[x]
|
53
|
+
for x in self._get_permissions_presets()
|
54
|
+
]
|
55
|
+
if hasattr(self, "base_permission_policy_cls"):
|
56
|
+
preset_classes.insert(0, self.base_permission_policy_cls)
|
57
|
+
return preset_classes
|
58
|
+
|
59
|
+
def _get_permissions_presets(self):
|
60
|
+
"""
|
61
|
+
Returns a list of names of permissions presets to be used for this service.
|
62
|
+
|
63
|
+
The list is read from the configuration, if it exists, otherwise it returns
|
64
|
+
the default value from the class attribute PERMISSIONS_PRESETS.
|
65
|
+
"""
|
66
|
+
config_key = self._get_presents_config_key()
|
67
|
+
if config_key in current_app.config:
|
68
|
+
return current_app.config[config_key]
|
69
|
+
return self.PERMISSIONS_PRESETS # noqa (omitted here because of the order of mixins)
|
70
|
+
|
71
|
+
def _get_presents_config_key(self):
|
72
|
+
"""
|
73
|
+
Returns the name of the configuration key that contains the list of
|
74
|
+
permissions presets to be used for this service.
|
75
|
+
|
76
|
+
The key is read from the class attribute PERMISSIONS_PRESETS_CONFIG_KEY.
|
77
|
+
If it is not set, the key is generated from the name of the service
|
78
|
+
configuration class (MyServiceConfig becomes MY_SERVICE_PERMISSIONS_PRESETS).
|
79
|
+
"""
|
80
|
+
if self.PERMISSIONS_PRESETS_CONFIG_KEY:
|
81
|
+
return self.PERMISSIONS_PRESETS_CONFIG_KEY
|
82
|
+
|
83
|
+
# use the base class of the service config file (e.g. MyServiceConfig),
|
84
|
+
# remove the "Config" part and convert it to snake uppercase.
|
85
|
+
# add "_PERMISSIONS_PRESETS" at the end.
|
86
|
+
name = type(self).__name__
|
87
|
+
if name.endswith("Config"):
|
88
|
+
name = name[:-6]
|
89
|
+
name = re.sub(r'(?<!^)(?=[A-Z])', '_', name).upper()
|
90
|
+
return f"{name}_PERMISSIONS_PRESETS"
|
{oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/custom_fields/__init__.py
RENAMED
@@ -21,14 +21,14 @@ class CustomFieldsMixin(MappingSystemFieldMixin):
|
|
21
21
|
def mapping_settings(self):
|
22
22
|
return {}
|
23
23
|
|
24
|
-
def search_dump(self, data):
|
24
|
+
def search_dump(self, data, record):
|
25
25
|
custom_fields = current_app.config.get(self.config_key, {})
|
26
26
|
|
27
27
|
for cf in custom_fields:
|
28
28
|
cf.dump(data, cf_key=self.key)
|
29
29
|
return data
|
30
30
|
|
31
|
-
def search_load(self, data):
|
31
|
+
def search_load(self, data, record_cls):
|
32
32
|
custom_fields = current_app.config.get(self.config_key, {})
|
33
33
|
|
34
34
|
for cf in custom_fields:
|
@@ -1,43 +0,0 @@
|
|
1
|
-
import inspect
|
2
|
-
from functools import cached_property
|
3
|
-
|
4
|
-
from flask import current_app
|
5
|
-
|
6
|
-
|
7
|
-
class PermissionsPresetsConfigMixin:
|
8
|
-
components = tuple()
|
9
|
-
|
10
|
-
@cached_property
|
11
|
-
def permission_policy_cls(self):
|
12
|
-
presets = self._get_preset_classes()
|
13
|
-
|
14
|
-
permissions = {}
|
15
|
-
for preset_class in presets:
|
16
|
-
for permission_name, permission_needs in self._get_permissions_from_preset(
|
17
|
-
preset_class
|
18
|
-
):
|
19
|
-
target = permissions.setdefault(permission_name, [])
|
20
|
-
for need in permission_needs:
|
21
|
-
if need not in target:
|
22
|
-
target.append(need)
|
23
|
-
|
24
|
-
return type(f"{type(self).__name__}Permissions", tuple(presets), permissions)
|
25
|
-
|
26
|
-
@staticmethod
|
27
|
-
def _get_permissions_from_preset(preset_class):
|
28
|
-
for permission_name, permission_needs in inspect.getmembers(preset_class):
|
29
|
-
if not permission_name.startswith("can_"):
|
30
|
-
continue
|
31
|
-
if not isinstance(permission_needs, (list, tuple)):
|
32
|
-
continue
|
33
|
-
yield permission_name, permission_needs
|
34
|
-
|
35
|
-
def _get_preset_classes(self):
|
36
|
-
registered_preset_classes = current_app.config["OAREPO_PERMISSIONS_PRESETS"]
|
37
|
-
preset_classes = [
|
38
|
-
registered_preset_classes[x]
|
39
|
-
for x in self.PERMISSIONS_PRESETS # noqa (omitted here because of the order of mixins)
|
40
|
-
]
|
41
|
-
if hasattr(self, "base_permission_policy_cls"):
|
42
|
-
preset_classes.insert(0, self.base_permission_policy_cls)
|
43
|
-
return preset_classes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/readers/__init__.py
RENAMED
File without changes
|
{oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/readers/attachments.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/readers/service.py
RENAMED
File without changes
|
File without changes
|
{oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/semi_asynchronous.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/writers/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/datastreams/writers/service.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/records/dumpers/edtf_interval.py
RENAMED
File without changes
|
{oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/records/dumpers/multilingual_dumper.py
RENAMED
File without changes
|
{oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/records/entity_resolvers/__init__.py
RENAMED
File without changes
|
{oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/records/entity_resolvers/proxies.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/records/relations/pid_relation.py
RENAMED
File without changes
|
{oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/records/systemfields/__init__.py
RENAMED
File without changes
|
{oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/records/systemfields/has_draftcheck.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/config/permissions_presets.py
RENAMED
File without changes
|
{oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/custom_fields/mappings.py
RENAMED
File without changes
|
{oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/expansions/__init__.py
RENAMED
File without changes
|
File without changes
|
{oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/expansions/service.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/facets/facet_groups_names.py
RENAMED
File without changes
|
File without changes
|
{oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/facets/nested_facet.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/relations/__init__.py
RENAMED
File without changes
|
{oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/relations/components.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/schema/i18n_validation.py
RENAMED
File without changes
|
{oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/schema/marshmallow.py
RENAMED
File without changes
|
{oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/services/schema/polymorphic.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/translations/default_translations.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{oarepo-runtime-1.5.7 → oarepo-runtime-1.5.10}/oarepo_runtime/translations/jinjax_messages.jinja
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|