oarepo-runtime 2.0.0.dev30__py3-none-any.whl → 2.0.0.dev32__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/info/views.py +26 -8
- oarepo_runtime/services/config/permissions.py +49 -54
- oarepo_runtime/services/records/links.py +46 -0
- oarepo_runtime/services/schema/ui.py +13 -2
- {oarepo_runtime-2.0.0.dev30.dist-info → oarepo_runtime-2.0.0.dev32.dist-info}/METADATA +1 -1
- {oarepo_runtime-2.0.0.dev30.dist-info → oarepo_runtime-2.0.0.dev32.dist-info}/RECORD +10 -10
- {oarepo_runtime-2.0.0.dev30.dist-info → oarepo_runtime-2.0.0.dev32.dist-info}/WHEEL +0 -0
- {oarepo_runtime-2.0.0.dev30.dist-info → oarepo_runtime-2.0.0.dev32.dist-info}/entry_points.txt +0 -0
- {oarepo_runtime-2.0.0.dev30.dist-info → oarepo_runtime-2.0.0.dev32.dist-info}/licenses/LICENSE +0 -0
oarepo_runtime/__init__.py
CHANGED
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
|
|
@@ -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())
|
@@ -11,9 +11,55 @@
|
|
11
11
|
|
12
12
|
from __future__ import annotations
|
13
13
|
|
14
|
+
from typing import Any, override
|
15
|
+
|
14
16
|
from invenio_records_resources.services.base.links import EndpointLink
|
15
17
|
|
16
18
|
|
19
|
+
def rdm_pagination_record_endpoint_links(endpoint: str, params: list[str] | None = None) -> dict[str, EndpointLink]:
|
20
|
+
"""Create pagination links (prev/self/next) from the same endpoint.
|
21
|
+
|
22
|
+
These links are used on a record instance where we want to have a list of something,
|
23
|
+
for example /records/<pid>/versions.
|
24
|
+
|
25
|
+
Note: using RecordEndpointLink here is fragile as it normally expects
|
26
|
+
a record as the first argument to vars, but here we pass pagination
|
27
|
+
as the first argument to vars. Because pagination does not have pid_value
|
28
|
+
attribute, the vars method will just skip adding pid_value to vars and
|
29
|
+
the pid_value must be passed via params. This is done in invenio_rdm_records'
|
30
|
+
service but not in invenio_drafts_resources service, where the parameter is
|
31
|
+
called "id" instead of "pid_value". That is why this function is called rdm_...
|
32
|
+
"""
|
33
|
+
params = [*(params or []), "id"]
|
34
|
+
|
35
|
+
class RecordEndpointLinkWithId(EndpointLink):
|
36
|
+
@override
|
37
|
+
@staticmethod
|
38
|
+
def vars(obj: Any, vars: dict[str, Any]) -> None:
|
39
|
+
pid_value = vars.pop("pid_value", None)
|
40
|
+
if pid_value is not None:
|
41
|
+
vars["id"] = pid_value
|
42
|
+
|
43
|
+
return {
|
44
|
+
"prev": RecordEndpointLinkWithId(
|
45
|
+
endpoint,
|
46
|
+
when=lambda pagination, _ctx: pagination.has_prev,
|
47
|
+
vars=lambda pagination, _vars: _vars["args"].update({"page": pagination.prev_page.page}),
|
48
|
+
params=params,
|
49
|
+
),
|
50
|
+
"self": RecordEndpointLinkWithId(
|
51
|
+
endpoint,
|
52
|
+
params=params,
|
53
|
+
),
|
54
|
+
"next": RecordEndpointLinkWithId(
|
55
|
+
endpoint,
|
56
|
+
when=lambda pagination, _ctx: pagination.has_next,
|
57
|
+
vars=lambda pagination, _vars: _vars["args"].update({"page": pagination.next_page.page}),
|
58
|
+
params=params,
|
59
|
+
),
|
60
|
+
}
|
61
|
+
|
62
|
+
|
17
63
|
def pagination_endpoint_links_html(endpoint: str, params: list[str] | None = None) -> dict[str, EndpointLink]:
|
18
64
|
"""Create pagination links (prev/self/next) from the same endpoint."""
|
19
65
|
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,4 +1,4 @@
|
|
1
|
-
oarepo_runtime/__init__.py,sha256=
|
1
|
+
oarepo_runtime/__init__.py,sha256=KfYo8NvRdAHBVai7t596N-WaBjCB0W_3VyMuPuNfAg4,686
|
2
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
|
@@ -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
|
@@ -26,7 +26,7 @@ oarepo_runtime/services/results.py,sha256=qzoIQW5-ShL1YJDgPjfTlPnsgfEZhojNehhHNT
|
|
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=v9HFSJ047uchgvjB2sBdjsGTo2jDY4rARfIZVxI5tEY,3106
|
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.dev32.dist-info/METADATA,sha256=N7fZZvQfa7cDfzMWVzD6yv-ru126lrQt8C9JiL-SV-0,4723
|
45
|
+
oarepo_runtime-2.0.0.dev32.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
46
|
+
oarepo_runtime-2.0.0.dev32.dist-info/entry_points.txt,sha256=rOfs8R1oXFN_dLH9zAZ6ydkvr83mDajegc6NBIRsCMQ,318
|
47
|
+
oarepo_runtime-2.0.0.dev32.dist-info/licenses/LICENSE,sha256=h2uWz0OaB3EN-J1ImdGJZzc7yvfQjvHVYdUhQ-H7ypY,1064
|
48
|
+
oarepo_runtime-2.0.0.dev32.dist-info/RECORD,,
|
File without changes
|
{oarepo_runtime-2.0.0.dev30.dist-info → oarepo_runtime-2.0.0.dev32.dist-info}/entry_points.txt
RENAMED
File without changes
|
{oarepo_runtime-2.0.0.dev30.dist-info → oarepo_runtime-2.0.0.dev32.dist-info}/licenses/LICENSE
RENAMED
File without changes
|