oarepo-runtime 2.0.0.dev29__py3-none-any.whl → 2.0.0.dev31__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/__init__.py +1 -1
- oarepo_runtime/api.py +30 -0
- oarepo_runtime/info/views.py +26 -8
- oarepo_runtime/resources/config.py +9 -1
- oarepo_runtime/services/config/permissions.py +49 -54
- oarepo_runtime/services/records/links.py +32 -0
- oarepo_runtime/services/schema/ui.py +13 -2
- {oarepo_runtime-2.0.0.dev29.dist-info → oarepo_runtime-2.0.0.dev31.dist-info}/METADATA +1 -1
- {oarepo_runtime-2.0.0.dev29.dist-info → oarepo_runtime-2.0.0.dev31.dist-info}/RECORD +12 -12
- {oarepo_runtime-2.0.0.dev29.dist-info → oarepo_runtime-2.0.0.dev31.dist-info}/WHEEL +0 -0
- {oarepo_runtime-2.0.0.dev29.dist-info → oarepo_runtime-2.0.0.dev31.dist-info}/entry_points.txt +0 -0
- {oarepo_runtime-2.0.0.dev29.dist-info → oarepo_runtime-2.0.0.dev31.dist-info}/licenses/LICENSE +0 -0
oarepo_runtime/__init__.py
CHANGED
oarepo_runtime/api.py
CHANGED
@@ -24,6 +24,7 @@ if TYPE_CHECKING:
|
|
24
24
|
from collections.abc import Mapping
|
25
25
|
|
26
26
|
from flask_babel.speaklater import LazyString
|
27
|
+
from flask_resources.deserializers import DeserializerMixin
|
27
28
|
from flask_resources.responses import ResponseHandler
|
28
29
|
from flask_resources.serializers import BaseSerializer
|
29
30
|
from invenio_drafts_resources.records.api import Draft
|
@@ -92,6 +93,26 @@ class Export:
|
|
92
93
|
"""Description of the export format, human readable."""
|
93
94
|
|
94
95
|
|
96
|
+
@dataclasses.dataclass
|
97
|
+
class Import:
|
98
|
+
"""Configuration of an import format."""
|
99
|
+
|
100
|
+
code: str
|
101
|
+
"""Code of the import format, used to identify the import format in the URL."""
|
102
|
+
|
103
|
+
name: LazyString
|
104
|
+
"""Name of the import format, human readable."""
|
105
|
+
|
106
|
+
mimetype: str
|
107
|
+
"""MIME type of the import format."""
|
108
|
+
|
109
|
+
deserializer: DeserializerMixin
|
110
|
+
"""Deserializer used to deserialize the record into the import format."""
|
111
|
+
|
112
|
+
description: LazyString | None = None
|
113
|
+
"""Description of the import format, human readable."""
|
114
|
+
|
115
|
+
|
95
116
|
class Model[
|
96
117
|
S: RecordService = RecordService,
|
97
118
|
C: RecordServiceConfig = RecordServiceConfig,
|
@@ -131,6 +152,7 @@ class Model[
|
|
131
152
|
records_alias_enabled: bool = True,
|
132
153
|
model_metadata: ModelMetadata | None = None,
|
133
154
|
features: Mapping[str, Any] | None = None,
|
155
|
+
imports: list[Import] | None = None,
|
134
156
|
):
|
135
157
|
"""Initialize the model configuration.
|
136
158
|
|
@@ -155,6 +177,8 @@ class Model[
|
|
155
177
|
Such models will be searchable via the `/api/records` endpoint.
|
156
178
|
:param model_metadata: Metadata of the model.
|
157
179
|
:param features: Features of the model. Filled by the feature presets themselves during registration.
|
180
|
+
:param imports: List of import formats that can be used to import the record.
|
181
|
+
If not provided, no imports are available.
|
158
182
|
"""
|
159
183
|
self._code = code
|
160
184
|
self._name = name
|
@@ -176,6 +200,7 @@ class Model[
|
|
176
200
|
self._resource = resource
|
177
201
|
self._resource_config = resource_config
|
178
202
|
self._exports = exports or []
|
203
|
+
self._imports = imports or []
|
179
204
|
self._model_metadata = model_metadata
|
180
205
|
self._features = features
|
181
206
|
|
@@ -358,3 +383,8 @@ class Model[
|
|
358
383
|
def features(self) -> Mapping[str, Any] | None:
|
359
384
|
"""Get a mapping of features."""
|
360
385
|
return self._features
|
386
|
+
|
387
|
+
@property
|
388
|
+
def imports(self) -> list[Import]:
|
389
|
+
"""Get all importable request body parsers."""
|
390
|
+
return self._imports
|
oarepo_runtime/info/views.py
CHANGED
@@ -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[
|
79
|
+
def components(self) -> tuple[type[InfoComponent], ...]:
|
66
80
|
"""Get the components for the info resource from config."""
|
67
|
-
return tuple(
|
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(
|
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
|
|
@@ -13,13 +13,14 @@ from __future__ import annotations
|
|
13
13
|
|
14
14
|
from typing import TYPE_CHECKING
|
15
15
|
|
16
|
+
from flask_resources import RequestBodyParser
|
16
17
|
from flask_resources.responses import ResponseHandler
|
17
18
|
from invenio_records_resources.resources.records.headers import etag_headers
|
18
19
|
|
19
20
|
if TYPE_CHECKING:
|
20
21
|
from collections.abc import Iterable
|
21
22
|
|
22
|
-
from oarepo_runtime.api import Export
|
23
|
+
from oarepo_runtime.api import Export, Import
|
23
24
|
|
24
25
|
|
25
26
|
def exports_to_response_handlers(
|
@@ -33,3 +34,10 @@ def exports_to_response_handlers(
|
|
33
34
|
)
|
34
35
|
for export in exports
|
35
36
|
}
|
37
|
+
|
38
|
+
|
39
|
+
def imports_to_request_body_parsers(
|
40
|
+
imports: Iterable[Import],
|
41
|
+
) -> dict[str, RequestBodyParser]:
|
42
|
+
"""Convert imports to a dictionary of mimetype -> request body parsers."""
|
43
|
+
return {import_option.mimetype: RequestBodyParser(import_option.deserializer) for import_option in imports}
|
@@ -12,76 +12,71 @@
|
|
12
12
|
|
13
13
|
from __future__ import annotations
|
14
14
|
|
15
|
-
from collections.abc import Collection
|
16
|
-
from typing import ClassVar
|
17
|
-
|
18
15
|
from invenio_records_permissions import RecordPermissionPolicy
|
19
16
|
from invenio_records_permissions.generators import AnyUser, Generator, SystemProcess
|
20
17
|
|
21
|
-
type GeneratorList = Collection[Generator]
|
22
|
-
|
23
18
|
|
24
19
|
class EveryonePermissionPolicy(RecordPermissionPolicy):
|
25
20
|
"""Record policy for read-only repository."""
|
26
21
|
|
27
|
-
can_search:
|
28
|
-
can_read:
|
29
|
-
can_create:
|
30
|
-
can_update:
|
31
|
-
can_delete:
|
32
|
-
can_manage:
|
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())
|
33
28
|
|
34
|
-
can_create_files:
|
35
|
-
can_set_content_files:
|
36
|
-
can_get_content_files:
|
37
|
-
can_commit_files:
|
38
|
-
can_read_files:
|
39
|
-
can_update_files:
|
40
|
-
can_delete_files:
|
41
|
-
can_list_files:
|
42
|
-
can_manage_files:
|
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())
|
43
38
|
|
44
|
-
can_edit:
|
45
|
-
can_new_version:
|
46
|
-
can_search_drafts:
|
47
|
-
can_read_draft:
|
48
|
-
can_search_versions:
|
49
|
-
can_update_draft:
|
50
|
-
can_delete_draft:
|
51
|
-
can_publish:
|
52
|
-
can_draft_create_files:
|
53
|
-
can_draft_set_content_files:
|
54
|
-
can_draft_get_content_files:
|
55
|
-
can_draft_commit_files:
|
56
|
-
can_draft_read_files:
|
57
|
-
can_draft_update_files:
|
58
|
-
can_draft_delete_files:
|
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())
|
59
54
|
|
60
|
-
can_add_community:
|
61
|
-
can_remove_community:
|
55
|
+
can_add_community: tuple[Generator, ...] = (SystemProcess(), AnyUser())
|
56
|
+
can_remove_community: tuple[Generator, ...] = (SystemProcess(), AnyUser())
|
62
57
|
|
63
|
-
can_read_deleted:
|
64
|
-
can_manage_record_access:
|
65
|
-
can_lift_embargo:
|
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())
|
66
61
|
|
67
|
-
can_draft_media_create_files:
|
68
|
-
can_draft_media_read_files:
|
69
|
-
can_draft_media_set_content_files:
|
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, ...] = (
|
70
65
|
SystemProcess(),
|
71
66
|
AnyUser(),
|
72
67
|
)
|
73
|
-
can_draft_media_get_content_files:
|
68
|
+
can_draft_media_get_content_files: tuple[Generator, ...] = (
|
74
69
|
SystemProcess(),
|
75
70
|
AnyUser(),
|
76
71
|
)
|
77
|
-
can_draft_media_commit_files:
|
78
|
-
can_draft_media_update_files:
|
79
|
-
can_draft_media_delete_files:
|
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())
|
80
75
|
|
81
|
-
can_media_read_files:
|
82
|
-
can_media_get_content_files:
|
83
|
-
can_media_create_files:
|
84
|
-
can_media_set_content_files:
|
85
|
-
can_media_commit_files:
|
86
|
-
can_media_update_files:
|
87
|
-
can_media_delete_files:
|
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())
|
@@ -14,6 +14,38 @@ from __future__ import annotations
|
|
14
14
|
from invenio_records_resources.services.base.links import EndpointLink
|
15
15
|
|
16
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
|
+
|
17
49
|
def pagination_endpoint_links_html(endpoint: str, params: list[str] | None = None) -> dict[str, EndpointLink]:
|
18
50
|
"""Create pagination links (prev/self/next) from the same endpoint."""
|
19
51
|
return {
|
@@ -73,7 +73,13 @@ class LocalizedDate(LocalizedMixin, FormatDate):
|
|
73
73
|
class FormatTimeString(FormatTime):
|
74
74
|
"""Time formater."""
|
75
75
|
|
76
|
-
def parse(
|
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,
|
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,5 +1,5 @@
|
|
1
|
-
oarepo_runtime/__init__.py,sha256
|
2
|
-
oarepo_runtime/api.py,sha256=
|
1
|
+
oarepo_runtime/__init__.py,sha256=kswOtKLkeTENZ1q_4do3W0XvIcgjL7ZEe6rxHa7M5Gg,686
|
2
|
+
oarepo_runtime/api.py,sha256=tLPgKv1iao2ZeL0tTJeA85019_sMW_dQAleayOeXjgI,14200
|
3
3
|
oarepo_runtime/config.py,sha256=RUEPFn_5bKp9Wb0OY-Fb3VK30m35vF5IsLjYaQHhP3g,3838
|
4
4
|
oarepo_runtime/ext.py,sha256=NgiRNl_hwTvEWcXnNwVh_XCPJyvwr3dZkdPmkWvN1xo,8785
|
5
5
|
oarepo_runtime/proxies.py,sha256=x8Y1iTP8QIzSI67s90VR0_5fvXuT1xlJXtAHsaoXFwg,903
|
@@ -8,7 +8,7 @@ oarepo_runtime/typing.py,sha256=vH8UUb4QTJowuvibwHaOOEwxx8i21LcOeplxJl0Yrew,1594
|
|
8
8
|
oarepo_runtime/cli/__init__.py,sha256=H7GOeOBf0udgKWOdlAQswIMvRrD8BwcEjOVxIqP0Suw,731
|
9
9
|
oarepo_runtime/cli/search.py,sha256=4fHkrjltUUPVUzJiuWaiWxTk62rIYxal3_3jRsZVMmI,1175
|
10
10
|
oarepo_runtime/info/__init__.py,sha256=qRG3mSyoiw7sKm9StiuBJs6l15HrdAQ4sphsAQsJtQc,336
|
11
|
-
oarepo_runtime/info/views.py,sha256
|
11
|
+
oarepo_runtime/info/views.py,sha256=-ZBKkJgzaaYDU5cS7DuG5Cem4M42ohQ-LN6BaCXjo1I,16967
|
12
12
|
oarepo_runtime/records/__init__.py,sha256=AbWzmVCY7MhrpdEeI0e3lKzeugPMUSo8T08-NBVeig4,339
|
13
13
|
oarepo_runtime/records/drafts.py,sha256=b45ROjd9lwy6ratrpAruimcKvQmJradk5JgILoBAHmY,1965
|
14
14
|
oarepo_runtime/records/mapping.py,sha256=fn6M208axxBqHtRV6qKQukwUw1z0hq_KF4qfuB2rr98,2630
|
@@ -19,14 +19,14 @@ oarepo_runtime/records/systemfields/mapping.py,sha256=HC9QnY6J6Ftw-DwotKUTvnyRif
|
|
19
19
|
oarepo_runtime/records/systemfields/publication_status.py,sha256=1g3VXNPh0FsiPCpe-7ZuaMEF4x8ffrDrt37Rqnjp0ng,2027
|
20
20
|
oarepo_runtime/records/systemfields/selectors.py,sha256=ijVDwAXaXTV5NtcXsrALkhddgCogLNe2eEscFr23qyg,1656
|
21
21
|
oarepo_runtime/resources/__init__.py,sha256=voynQULXoOEviADkbOpekMphZPTAz4IOTg5BF9xPwTM,453
|
22
|
-
oarepo_runtime/resources/config.py,sha256=
|
22
|
+
oarepo_runtime/resources/config.py,sha256=Lbx1QPWAJ8z1truhYntbnhGGWp2OCcwqKm6BuvPJNT0,1330
|
23
23
|
oarepo_runtime/services/__init__.py,sha256=OGtBgEeaDTyk2RPDNXuKbU9_7egFBZr42SM0gN5FrF4,341
|
24
24
|
oarepo_runtime/services/generators.py,sha256=8Z2QGzob4c2vaaNqhcMZsRybmwtOt30Plgf3EFmcJXw,4622
|
25
25
|
oarepo_runtime/services/results.py,sha256=qzoIQW5-ShL1YJDgPjfTlPnsgfEZhojNehhHNTUxRgI,7120
|
26
26
|
oarepo_runtime/services/config/__init__.py,sha256=SX1kfIGk8HkohdLQrNpRQUTltksEyDcCa-kFXxrX4e8,711
|
27
27
|
oarepo_runtime/services/config/components.py,sha256=cyU-JeMzLuBL-9JkUKbUQuu527WAq0yptGs6806XSho,23039
|
28
28
|
oarepo_runtime/services/config/link_conditions.py,sha256=T1ZZ5SbbvIfujm0oJx73s_ku3WmeFqElAOZJwPFTw2o,4388
|
29
|
-
oarepo_runtime/services/config/permissions.py,sha256=
|
29
|
+
oarepo_runtime/services/config/permissions.py,sha256=Ynkn9cXyf9wlyTahi6syJuGwvawkRsixLN_OL79WjIc,4532
|
30
30
|
oarepo_runtime/services/facets/__init__.py,sha256=k39ZYt1dMVOW01QRSTgx3CfuTYwvEWmL0VYTR3huVsE,349
|
31
31
|
oarepo_runtime/services/facets/base.py,sha256=EkYrZZzhcHoKZ9Ml6scT2YrIU1h5WeWU7My2EJbTfEE,1018
|
32
32
|
oarepo_runtime/services/facets/date.py,sha256=8LIsNjV7NHjIciStdHV_lNsGO5KF9WOBhuFj_pxhEag,2213
|
@@ -35,14 +35,14 @@ oarepo_runtime/services/facets/params.py,sha256=8ZFDeTUPDV3d9cdIIECo5F38KQ28h1eG
|
|
35
35
|
oarepo_runtime/services/facets/utils.py,sha256=z4RcBqM4_QfTSMY-mf8yhL18bhHg5XwzHmqV6mLtzvs,2251
|
36
36
|
oarepo_runtime/services/records/__init__.py,sha256=Mpohx3xEXTmoodTEHbCih6I97JIofgqa_bf_Ysq4e2g,446
|
37
37
|
oarepo_runtime/services/records/custom_fields.py,sha256=Yp3WsLYq1_OPMmJvpxCDtZi9IhuxHsBFPor8q901qn0,1417
|
38
|
-
oarepo_runtime/services/records/links.py,sha256=
|
38
|
+
oarepo_runtime/services/records/links.py,sha256=XzO8zEV7GgbkrhX98x9aq4Jn5v5yWAsh2Gy8rjDcCw0,2729
|
39
39
|
oarepo_runtime/services/records/mapping.py,sha256=y3oeToKEnaRYpMV3q2-2cXNzyzyL3XXGvY26BifybpE,1332
|
40
40
|
oarepo_runtime/services/schema/__init__.py,sha256=jgAPI_uKC6Ug4KQWnwQVg3-aNaw-eHja323AUFo5ELo,351
|
41
41
|
oarepo_runtime/services/schema/i18n.py,sha256=9D1zOQaPKAnYzejB0vO-m2BJYnam0N0Lrq4jID7twfE,3174
|
42
42
|
oarepo_runtime/services/schema/i18n_ui.py,sha256=DbusphhGDeaobTt4nuwNgKZ6Houlu4Sv3SuMGkdjRRY,3582
|
43
|
-
oarepo_runtime/services/schema/ui.py,sha256=
|
44
|
-
oarepo_runtime-2.0.0.
|
45
|
-
oarepo_runtime-2.0.0.
|
46
|
-
oarepo_runtime-2.0.0.
|
47
|
-
oarepo_runtime-2.0.0.
|
48
|
-
oarepo_runtime-2.0.0.
|
43
|
+
oarepo_runtime/services/schema/ui.py,sha256=Y_jBO-fowkpOgceWz8aqJSJAUiAnKLGSIuNpjNLnp8Q,4612
|
44
|
+
oarepo_runtime-2.0.0.dev31.dist-info/METADATA,sha256=P9qthmoamo_Dr8eSQJQ8LYfvxbQgw9mwTO2wDiqQoM0,4723
|
45
|
+
oarepo_runtime-2.0.0.dev31.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
46
|
+
oarepo_runtime-2.0.0.dev31.dist-info/entry_points.txt,sha256=rOfs8R1oXFN_dLH9zAZ6ydkvr83mDajegc6NBIRsCMQ,318
|
47
|
+
oarepo_runtime-2.0.0.dev31.dist-info/licenses/LICENSE,sha256=h2uWz0OaB3EN-J1ImdGJZzc7yvfQjvHVYdUhQ-H7ypY,1064
|
48
|
+
oarepo_runtime-2.0.0.dev31.dist-info/RECORD,,
|
File without changes
|
{oarepo_runtime-2.0.0.dev29.dist-info → oarepo_runtime-2.0.0.dev31.dist-info}/entry_points.txt
RENAMED
File without changes
|
{oarepo_runtime-2.0.0.dev29.dist-info → oarepo_runtime-2.0.0.dev31.dist-info}/licenses/LICENSE
RENAMED
File without changes
|