oarepo-runtime 1.5.32__tar.gz → 1.5.34__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {oarepo_runtime-1.5.32/oarepo_runtime.egg-info → oarepo_runtime-1.5.34}/PKG-INFO +1 -1
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/cli/index.py +36 -15
- oarepo_runtime-1.5.34/oarepo_runtime/i18n/__init__.py +3 -0
- oarepo_runtime-1.5.34/oarepo_runtime/records/entity_resolvers/__init__.py +6 -0
- oarepo_runtime-1.5.34/oarepo_runtime/records/entity_resolvers/proxies.py +48 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/schema/i18n.py +13 -10
- oarepo_runtime-1.5.34/oarepo_runtime/services/schema/i18n_ui.py +74 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34/oarepo_runtime.egg-info}/PKG-INFO +1 -1
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/setup.cfg +2 -2
- oarepo_runtime-1.5.32/oarepo_runtime/i18n/__init__.py +0 -10
- oarepo_runtime-1.5.32/oarepo_runtime/records/entity_resolvers/__init__.py +0 -90
- oarepo_runtime-1.5.32/oarepo_runtime/records/entity_resolvers/proxies.py +0 -24
- oarepo_runtime-1.5.32/oarepo_runtime/services/schema/i18n_ui.py +0 -72
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/LICENSE +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/MANIFEST.in +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/README.md +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/__init__.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/cli/__init__.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/cli/assets.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/cli/base.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/cli/cf.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/cli/check.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/cli/configuration.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/cli/fixtures.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/cli/validate.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/datastreams/__init__.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/datastreams/asynchronous.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/datastreams/catalogue.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/datastreams/datastreams.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/datastreams/errors.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/datastreams/ext.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/datastreams/fixtures.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/datastreams/json.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/datastreams/readers/__init__.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/datastreams/readers/attachments.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/datastreams/readers/excel.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/datastreams/readers/json.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/datastreams/readers/service.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/datastreams/readers/yaml.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/datastreams/semi_asynchronous.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/datastreams/synchronous.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/datastreams/transformers.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/datastreams/types.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/datastreams/utils.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/datastreams/writers/__init__.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/datastreams/writers/attachments_file.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/datastreams/writers/attachments_service.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/datastreams/writers/service.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/datastreams/writers/utils.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/datastreams/writers/validation_errors.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/datastreams/writers/yaml.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/ext.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/ext_config.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/info/__init__.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/info/views.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/profile.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/proxies.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/records/__init__.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/records/dumpers/__init__.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/records/dumpers/edtf_interval.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/records/dumpers/multilingual_dumper.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/records/owners/__init__.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/records/owners/registry.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/records/relations/__init__.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/records/relations/base.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/records/relations/internal.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/records/relations/lookup.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/records/relations/pid_relation.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/records/systemfields/__init__.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/records/systemfields/featured_file.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/records/systemfields/has_draftcheck.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/records/systemfields/icu.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/records/systemfields/mapping.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/records/systemfields/owner.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/records/systemfields/record_status.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/records/systemfields/selectors.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/records/systemfields/synthetic.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/resources/__init__.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/resources/file_resource.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/resources/localized_ui_json_serializer.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/__init__.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/components.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/config/__init__.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/config/permissions_presets.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/config/service.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/custom_fields/__init__.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/custom_fields/mappings.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/expansions/__init__.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/expansions/expandable_fields.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/expansions/service.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/facets/__init__.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/facets/base.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/facets/date.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/facets/enum.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/facets/facet_groups_names.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/facets/max_facet.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/facets/nested_facet.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/facets/params.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/files/__init__.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/files/service.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/generators.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/relations/__init__.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/relations/components.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/relations/errors.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/relations/mapping.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/results.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/schema/__init__.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/schema/cf.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/schema/i18n_validation.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/schema/marshmallow.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/schema/oneofschema.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/schema/polymorphic.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/schema/ui.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/schema/validation.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/search.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/translations/cs/LC_MESSAGES/messages.mo +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/translations/cs/LC_MESSAGES/messages.po +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/translations/default_translations.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/translations/en/LC_MESSAGES/messages.mo +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/translations/en/LC_MESSAGES/messages.po +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/translations/jinjax_messages.jinja +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/translations/messages.pot +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/uow.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/utils/__init__.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/utils/functools.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/utils/path.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime.egg-info/SOURCES.txt +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime.egg-info/dependency_links.txt +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime.egg-info/entry_points.txt +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime.egg-info/requires.txt +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime.egg-info/top_level.txt +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/pyproject.toml +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/setup.py +0 -0
- {oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/tests/pkg_data/__init__.py +0 -0
@@ -95,17 +95,6 @@ def record_or_service(model):
|
|
95
95
|
return record
|
96
96
|
|
97
97
|
|
98
|
-
def model_records_generator(model_class):
|
99
|
-
try:
|
100
|
-
for x in db.session.query(model_class.model_cls.id).filter(
|
101
|
-
model_class.model_cls.is_deleted.is_(False)
|
102
|
-
):
|
103
|
-
rec_id = x[0]
|
104
|
-
yield model_class.get_record(rec_id)
|
105
|
-
except Exception as e:
|
106
|
-
click.secho(f"Could not index {model_class}: {e}", fg="red", file=sys.stderr)
|
107
|
-
|
108
|
-
|
109
98
|
@index.command()
|
110
99
|
@with_appcontext
|
111
100
|
@click.argument("model", required=False)
|
@@ -119,14 +108,22 @@ def reindex(model, bulk_size, verbose):
|
|
119
108
|
for service_id in services:
|
120
109
|
click.secho(f"Preparing to index {service_id}", file=sys.stderr)
|
121
110
|
|
122
|
-
|
111
|
+
try:
|
112
|
+
service = current_service_registry.get(service_id)
|
113
|
+
except KeyError:
|
114
|
+
click.secho(f"Service {service_id} not in known services:", color="red")
|
115
|
+
for known_service_id, known_service in sorted(current_service_registry._services.items()):
|
116
|
+
click.secho(f" {known_service_id} -> {type(known_service).__module__}.{type(known_service).__name__}", color="red")
|
117
|
+
sys.exit(1)
|
123
118
|
record_class = getattr(service.config, "record_cls", None)
|
124
119
|
|
125
120
|
id_generators = []
|
126
121
|
|
122
|
+
record_generator = RECORD_GENERATORS.get(service_id, model_records_generator)
|
123
|
+
|
127
124
|
if record_class and hasattr(service, "indexer"):
|
128
125
|
try:
|
129
|
-
id_generators.append(
|
126
|
+
id_generators.append(record_generator(record_class))
|
130
127
|
except Exception as e:
|
131
128
|
click.secho(
|
132
129
|
f"Could not get record ids for {service_id}, exception {e}",
|
@@ -137,7 +134,7 @@ def reindex(model, bulk_size, verbose):
|
|
137
134
|
|
138
135
|
if draft_class and hasattr(service, "indexer"):
|
139
136
|
try:
|
140
|
-
id_generators.append(
|
137
|
+
id_generators.append(record_generator(draft_class))
|
141
138
|
except Exception as e:
|
142
139
|
click.secho(
|
143
140
|
f"Could not get draft record ids for {service_id}, exception {e}",
|
@@ -151,7 +148,6 @@ def reindex(model, bulk_size, verbose):
|
|
151
148
|
for bulk in generate_bulk_data(gen, service.indexer, bulk_size=bulk_size):
|
152
149
|
index_result = service.indexer.client.bulk(bulk)
|
153
150
|
count += len(bulk) // 2
|
154
|
-
|
155
151
|
for index_item_result in index_result["items"]:
|
156
152
|
result = index_item_result["index"]
|
157
153
|
if result["status"] != 200:
|
@@ -215,3 +211,28 @@ def dump_yaml(data):
|
|
215
211
|
io = StringIO()
|
216
212
|
yaml.dump(data, io, allow_unicode=True)
|
217
213
|
return io.getvalue()
|
214
|
+
|
215
|
+
|
216
|
+
def model_records_generator(model_class):
|
217
|
+
try:
|
218
|
+
for x in db.session.query(model_class.model_cls.id).filter(
|
219
|
+
model_class.model_cls.is_deleted.is_(False)
|
220
|
+
):
|
221
|
+
rec_id = x[0]
|
222
|
+
yield model_class.get_record(rec_id)
|
223
|
+
except Exception as e:
|
224
|
+
click.secho(f"Could not index {model_class}: {e}", fg="red", file=sys.stderr)
|
225
|
+
|
226
|
+
def users_record_generator(model_class):
|
227
|
+
from invenio_accounts.models import User
|
228
|
+
from invenio_users_resources.records.api import UserAggregate
|
229
|
+
try:
|
230
|
+
for x in db.session.query(User.id):
|
231
|
+
rec_id = x[0]
|
232
|
+
yield UserAggregate.get_record(rec_id)
|
233
|
+
except Exception as e:
|
234
|
+
click.secho(f"Could not index {model_class}: {e}", fg="red", file=sys.stderr)
|
235
|
+
|
236
|
+
RECORD_GENERATORS = {
|
237
|
+
'users': users_record_generator
|
238
|
+
}
|
@@ -0,0 +1,6 @@
|
|
1
|
+
from oarepo_runtime.records.entity_resolvers.proxies import DraftProxy, RecordProxy
|
2
|
+
|
3
|
+
from invenio_records_resources.references import EntityResolver, RecordResolver
|
4
|
+
from invenio_users_resources.entity_resolvers import UserResolver, GroupResolver
|
5
|
+
|
6
|
+
__all__ = ["DraftProxy", "UserResolver", "GroupResolver", "RecordResolver", "EntityResolver", "RecordProxy"]
|
@@ -0,0 +1,48 @@
|
|
1
|
+
from invenio_pidstore.errors import PIDUnregistered
|
2
|
+
|
3
|
+
from invenio_records_resources.references.entity_resolvers.records import (
|
4
|
+
RecordProxy as InvenioRecordProxy,
|
5
|
+
)
|
6
|
+
|
7
|
+
from sqlalchemy.exc import NoResultFound
|
8
|
+
|
9
|
+
|
10
|
+
def set_field(result, resolved_dict, field_name):
|
11
|
+
from_metadata = resolved_dict.get("metadata", {}).get(field_name)
|
12
|
+
from_data = resolved_dict.get(field_name)
|
13
|
+
|
14
|
+
if from_metadata:
|
15
|
+
result.setdefault("metadata", {})[field_name] = from_metadata
|
16
|
+
if from_data:
|
17
|
+
result[field_name] = from_data
|
18
|
+
|
19
|
+
|
20
|
+
class RecordProxy(InvenioRecordProxy):
|
21
|
+
picked_fields = ["title", "creators", "contributors"]
|
22
|
+
|
23
|
+
def pick_resolved_fields(self, identity, resolved_dict):
|
24
|
+
"""Select which fields to return when resolving the reference."""
|
25
|
+
resolved_fields = super().pick_resolved_fields(identity, resolved_dict)
|
26
|
+
|
27
|
+
for fld in self.picked_fields:
|
28
|
+
set_field(resolved_fields, resolved_dict, fld)
|
29
|
+
|
30
|
+
return resolved_fields
|
31
|
+
|
32
|
+
def ghost_record(self, value):
|
33
|
+
return {
|
34
|
+
**value,
|
35
|
+
"metadata": {
|
36
|
+
"title": "Deleted record",
|
37
|
+
},
|
38
|
+
}
|
39
|
+
|
40
|
+
|
41
|
+
class DraftProxy(RecordProxy):
|
42
|
+
def _resolve(self):
|
43
|
+
pid_value = self._parse_ref_dict_id()
|
44
|
+
try:
|
45
|
+
return self.record_cls.pid.resolve(pid_value, registered_only=False)
|
46
|
+
except (PIDUnregistered, NoResultFound):
|
47
|
+
# try checking if it is a published record before failing
|
48
|
+
return self.record_cls.pid.resolve(pid_value)
|
@@ -1,6 +1,7 @@
|
|
1
1
|
from functools import lru_cache
|
2
|
-
|
2
|
+
import importlib
|
3
3
|
import langcodes
|
4
|
+
from invenio_base.utils import obj_or_import_string
|
4
5
|
from marshmallow import Schema, ValidationError, fields, validates
|
5
6
|
|
6
7
|
"""
|
@@ -10,39 +11,41 @@ it for each project.
|
|
10
11
|
|
11
12
|
|
12
13
|
@lru_cache
|
13
|
-
def get_i18n_schema(
|
14
|
-
@validates(
|
14
|
+
def get_i18n_schema(lang_name, value_name, value_field="marshmallow_utils.fields.SanitizedHTML"):
|
15
|
+
@validates(lang_name)
|
15
16
|
def validate_lang(self, value):
|
16
17
|
if value != "_" and not langcodes.Language.get(value).is_valid():
|
17
18
|
raise ValidationError("Invalid language code")
|
18
19
|
|
20
|
+
value_field_class = obj_or_import_string(value_field)
|
21
|
+
|
19
22
|
return type(
|
20
|
-
f"I18nSchema_{
|
23
|
+
f"I18nSchema_{lang_name}_{value_name}",
|
21
24
|
(Schema,),
|
22
25
|
{
|
23
26
|
"validate_lang": validate_lang,
|
24
|
-
|
25
|
-
|
27
|
+
lang_name: fields.String(required=True),
|
28
|
+
value_name: value_field_class(required=True),
|
26
29
|
},
|
27
30
|
)
|
28
31
|
|
29
32
|
|
30
33
|
def MultilingualField( # noqa NOSONAR
|
31
|
-
*args,
|
34
|
+
*args, lang_name="lang", value_name="value", value_field="marshmallow_utils.fields.SanitizedHTML", **kwargs
|
32
35
|
):
|
33
36
|
# TODO: args are not used but oarepo-model-builder-multilingual generates them
|
34
37
|
# should be fixed there and subsequently removed here
|
35
38
|
return fields.List(
|
36
|
-
fields.Nested(get_i18n_schema(
|
39
|
+
fields.Nested(get_i18n_schema(lang_name, value_name, value_field)),
|
37
40
|
**kwargs,
|
38
41
|
)
|
39
42
|
|
40
43
|
|
41
44
|
def I18nStrField( # noqa NOSONAR
|
42
|
-
*args,
|
45
|
+
*args, lang_name="lang", value_name="value", value_field="marshmallow_utils.fields.SanitizedHTML", **kwargs
|
43
46
|
):
|
44
47
|
return fields.Nested(
|
45
|
-
get_i18n_schema(
|
48
|
+
get_i18n_schema(lang_name, value_name, value_field),
|
46
49
|
*args,
|
47
50
|
**kwargs,
|
48
51
|
)
|
@@ -0,0 +1,74 @@
|
|
1
|
+
from functools import lru_cache
|
2
|
+
|
3
|
+
from marshmallow import Schema, fields
|
4
|
+
from marshmallow_utils.fields import SanitizedHTML
|
5
|
+
from invenio_base.utils import obj_or_import_string
|
6
|
+
|
7
|
+
@lru_cache
|
8
|
+
def get_i18n_ui_schema(lang_name, value_name, value_field="marshmallow_utils.fields.SanitizedHTML"):
|
9
|
+
value_field_class = obj_or_import_string(value_field)
|
10
|
+
return type(
|
11
|
+
f"I18nUISchema_{lang_name}_{value_name}",
|
12
|
+
(Schema,),
|
13
|
+
{
|
14
|
+
lang_name: fields.String(required=True),
|
15
|
+
value_name: value_field_class(required=True),
|
16
|
+
},
|
17
|
+
)
|
18
|
+
|
19
|
+
|
20
|
+
def MultilingualUIField( # noqa NOSONAR
|
21
|
+
*args, lang_name="lang", value_name="value", value_field="marshmallow_utils.fields.SanitizedHTML", **kwargs
|
22
|
+
):
|
23
|
+
return fields.List(
|
24
|
+
fields.Nested(get_i18n_ui_schema(lang_name, value_name, value_field)),
|
25
|
+
**kwargs,
|
26
|
+
)
|
27
|
+
|
28
|
+
|
29
|
+
def I18nStrUIField( # noqa NOSONAR
|
30
|
+
*args, lang_name="lang", value_name="value", value_field="marshmallow_utils.fields.SanitizedHTML", **kwargs
|
31
|
+
):
|
32
|
+
return fields.Nested(
|
33
|
+
get_i18n_ui_schema(lang_name, value_name, value_field),
|
34
|
+
*args,
|
35
|
+
**kwargs,
|
36
|
+
)
|
37
|
+
|
38
|
+
|
39
|
+
@lru_cache
|
40
|
+
def get_i18n_localized_ui_schema(lang_name, value_name):
|
41
|
+
class I18nLocalizedUISchema(Schema):
|
42
|
+
def _serialize(self, value, attr=None, obj=None, **kwargs):
|
43
|
+
if not value:
|
44
|
+
return None
|
45
|
+
language = self.context["locale"].language
|
46
|
+
for v in value:
|
47
|
+
if language == v[lang_name]:
|
48
|
+
return v[value_name]
|
49
|
+
return next(iter(value))[value_name]
|
50
|
+
|
51
|
+
# inherit to get a nice name for debugging
|
52
|
+
return type(
|
53
|
+
f"I18nLocalizedUISchema_{lang_name}_{value_name}",
|
54
|
+
(I18nLocalizedUISchema,),
|
55
|
+
{},
|
56
|
+
)
|
57
|
+
|
58
|
+
|
59
|
+
def MultilingualLocalizedUIField( # noqa NOSONAR
|
60
|
+
*args, lang_name="lang", value_name="value", **kwargs
|
61
|
+
):
|
62
|
+
return fields.Nested(
|
63
|
+
get_i18n_localized_ui_schema(lang_name, value_name), **kwargs
|
64
|
+
)
|
65
|
+
|
66
|
+
|
67
|
+
def I18nStrLocalizedUIField( # noqa NOSONAR
|
68
|
+
*args, lang_name="lang", value_name="value", **kwargs
|
69
|
+
):
|
70
|
+
return fields.Nested(
|
71
|
+
get_i18n_ui_schema(lang_name, value_name),
|
72
|
+
*args,
|
73
|
+
**kwargs,
|
74
|
+
)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[metadata]
|
2
2
|
name = oarepo-runtime
|
3
|
-
version = 1.5.
|
3
|
+
version = 1.5.34
|
4
4
|
description = A set of runtime extensions of Invenio repository
|
5
5
|
authors = Alzbeta Pokorna
|
6
6
|
readme = README.md
|
@@ -8,7 +8,7 @@ long_description = file:README.md
|
|
8
8
|
long_description_content_type = text/markdown
|
9
9
|
|
10
10
|
[options]
|
11
|
-
python = >=3.
|
11
|
+
python = >=3.10
|
12
12
|
install_requires =
|
13
13
|
marshmallow
|
14
14
|
langcodes
|
@@ -1,10 +0,0 @@
|
|
1
|
-
from oarepo import __version__ as oarepo_version
|
2
|
-
|
3
|
-
# compatibility setting between invenio rdm 11 and invenio rdm 12
|
4
|
-
# can be removed when invenio rdm 11 is no longer supported
|
5
|
-
if oarepo_version.split(".")[0] == "11":
|
6
|
-
from flask_babelex import get_locale, gettext, lazy_gettext
|
7
|
-
else:
|
8
|
-
from flask_babel import get_locale, gettext, lazy_gettext
|
9
|
-
|
10
|
-
__all__ = ("gettext", "lazy_gettext", "get_locale")
|
@@ -1,90 +0,0 @@
|
|
1
|
-
from oarepo import __version__ as oarepo_version
|
2
|
-
|
3
|
-
from oarepo_runtime.records.entity_resolvers.proxies import DraftProxy
|
4
|
-
|
5
|
-
# compatibility setting between invenio rdm 11 and invenio rdm 12
|
6
|
-
# can be removed when invenio rdm 11 is no longer supported
|
7
|
-
if oarepo_version.split(".")[0] == "11":
|
8
|
-
from invenio_records_resources.references import EntityResolver, RecordResolver
|
9
|
-
from invenio_users_resources.resolvers import UserResolver
|
10
|
-
|
11
|
-
#copyied from newer invenio_users_resources, GroupResolver isn't in older versions
|
12
|
-
from flask_principal import RoleNeed
|
13
|
-
from invenio_accounts.models import Role
|
14
|
-
from invenio_records_resources.references.resolvers import (
|
15
|
-
EntityProxy,
|
16
|
-
EntityResolver,
|
17
|
-
)
|
18
|
-
from invenio_users_resources.services.groups.config import GroupsServiceConfig
|
19
|
-
from sqlalchemy.exc import NoResultFound
|
20
|
-
|
21
|
-
class GroupProxy(EntityProxy):
|
22
|
-
"""Resolver proxy for a Role entity."""
|
23
|
-
|
24
|
-
def _resolve(self):
|
25
|
-
"""Resolve the User from the proxy's reference dict, or system_identity."""
|
26
|
-
# Resolves to role name, not id
|
27
|
-
role_id = self._parse_ref_dict_id()
|
28
|
-
try:
|
29
|
-
return Role.query.filter(
|
30
|
-
Role.name == role_id # TODO to be changed to role id
|
31
|
-
).one()
|
32
|
-
except NoResultFound:
|
33
|
-
return {}
|
34
|
-
|
35
|
-
def pick_resolved_fields(self, identity, resolved_dict):
|
36
|
-
"""Select which fields to return when resolving the reference."""
|
37
|
-
serialized_role = {}
|
38
|
-
|
39
|
-
return serialized_role
|
40
|
-
|
41
|
-
def get_needs(self, ctx=None):
|
42
|
-
"""Return needs based on the given roles."""
|
43
|
-
role_id = self._parse_ref_dict_id()
|
44
|
-
return [RoleNeed(role_id)]
|
45
|
-
|
46
|
-
def ghost_record(self, value):
|
47
|
-
"""Return default representation of not resolved group.
|
48
|
-
|
49
|
-
.. note::
|
50
|
-
|
51
|
-
Only groups that are not indexed should need this. Non-indexed groups include groups that were not created by users
|
52
|
-
e.g. user-moderation.
|
53
|
-
"""
|
54
|
-
return {}
|
55
|
-
|
56
|
-
|
57
|
-
class GroupResolver(EntityResolver):
|
58
|
-
"""Group entity resolver."""
|
59
|
-
|
60
|
-
type_id = "group"
|
61
|
-
"""Type identifier for this resolver."""
|
62
|
-
|
63
|
-
def __init__(self):
|
64
|
-
"""Constructor."""
|
65
|
-
# There's a bit of a mixup of type_key and type_id. Base resolver has no
|
66
|
-
# type_key, but RecordResolvers have.
|
67
|
-
self.type_key = self.type_id
|
68
|
-
super().__init__(GroupsServiceConfig.service_id)
|
69
|
-
|
70
|
-
def matches_reference_dict(self, ref_dict):
|
71
|
-
"""Check if the reference dict references a role."""
|
72
|
-
return self._parse_ref_dict_type(ref_dict) == self.type_id
|
73
|
-
|
74
|
-
def _reference_entity(self, entity):
|
75
|
-
"""Create a reference dict for the given user."""
|
76
|
-
return {"group": str(entity.id)}
|
77
|
-
|
78
|
-
def matches_entity(self, entity):
|
79
|
-
"""Check if the entity is a Role."""
|
80
|
-
return isinstance(entity, Role)
|
81
|
-
|
82
|
-
def _get_entity_proxy(self, ref_dict):
|
83
|
-
"""Return a GroupProxy for the given reference dict."""
|
84
|
-
return GroupProxy(self, ref_dict)
|
85
|
-
|
86
|
-
else:
|
87
|
-
from invenio_records_resources.references import EntityResolver, RecordResolver
|
88
|
-
from invenio_users_resources.entity_resolvers import UserResolver, GroupResolver
|
89
|
-
|
90
|
-
__all__ = ["DraftProxy", "UserResolver", "GroupResolver", "RecordResolver", "EntityResolver"]
|
@@ -1,24 +0,0 @@
|
|
1
|
-
from invenio_pidstore.errors import PIDUnregistered
|
2
|
-
from oarepo import __version__ as oarepo_version
|
3
|
-
|
4
|
-
# compatibility setting between invenio rdm 11 and invenio rdm 12
|
5
|
-
# can be removed when invenio rdm 11 is no longer supported
|
6
|
-
if oarepo_version.split(".")[0] == "11":
|
7
|
-
from invenio_records_resources.references.resolvers.records import RecordProxy
|
8
|
-
else:
|
9
|
-
from invenio_records_resources.references.entity_resolvers.records import (
|
10
|
-
RecordProxy,
|
11
|
-
)
|
12
|
-
|
13
|
-
from sqlalchemy.exc import NoResultFound
|
14
|
-
|
15
|
-
|
16
|
-
class DraftProxy(RecordProxy):
|
17
|
-
def _resolve(self):
|
18
|
-
pid_value = self._parse_ref_dict_id()
|
19
|
-
|
20
|
-
try:
|
21
|
-
return self.record_cls.pid.resolve(pid_value, registered_only=False)
|
22
|
-
except (PIDUnregistered, NoResultFound):
|
23
|
-
# try checking if it is a published record before failing
|
24
|
-
return self.record_cls.pid.resolve(pid_value)
|
@@ -1,72 +0,0 @@
|
|
1
|
-
from functools import lru_cache
|
2
|
-
|
3
|
-
from marshmallow import Schema, fields
|
4
|
-
|
5
|
-
|
6
|
-
@lru_cache
|
7
|
-
def get_i18n_ui_schema(lang_field, value_field):
|
8
|
-
return type(
|
9
|
-
f"I18nUISchema_{lang_field}_{value_field}",
|
10
|
-
(Schema,),
|
11
|
-
{
|
12
|
-
lang_field: fields.String(required=True),
|
13
|
-
value_field: fields.String(required=True),
|
14
|
-
},
|
15
|
-
)
|
16
|
-
|
17
|
-
|
18
|
-
def MultilingualUIField( # noqa NOSONAR
|
19
|
-
*args, lang_field="lang", value_field="value", **kwargs
|
20
|
-
):
|
21
|
-
return fields.List(
|
22
|
-
fields.Nested(get_i18n_ui_schema(lang_field, value_field)),
|
23
|
-
**kwargs,
|
24
|
-
)
|
25
|
-
|
26
|
-
|
27
|
-
def I18nStrUIField( # noqa NOSONAR
|
28
|
-
*args, lang_field="lang", value_field="value", **kwargs
|
29
|
-
):
|
30
|
-
return fields.Nested(
|
31
|
-
get_i18n_ui_schema(lang_field, value_field),
|
32
|
-
*args,
|
33
|
-
**kwargs,
|
34
|
-
)
|
35
|
-
|
36
|
-
|
37
|
-
@lru_cache
|
38
|
-
def get_i18n_localized_ui_schema(lang_field, value_field):
|
39
|
-
class I18nLocalizedUISchema(Schema):
|
40
|
-
def _serialize(self, value, attr=None, obj=None, **kwargs):
|
41
|
-
if not value:
|
42
|
-
return None
|
43
|
-
language = self.context["locale"].language
|
44
|
-
for v in value:
|
45
|
-
if language == v[lang_field]:
|
46
|
-
return v[value_field]
|
47
|
-
return next(iter(value))[value_field]
|
48
|
-
|
49
|
-
# inherit to get a nice name for debugging
|
50
|
-
return type(
|
51
|
-
f"I18nLocalizedUISchema_{lang_field}_{value_field}",
|
52
|
-
(I18nLocalizedUISchema,),
|
53
|
-
{},
|
54
|
-
)
|
55
|
-
|
56
|
-
|
57
|
-
def MultilingualLocalizedUIField( # noqa NOSONAR
|
58
|
-
*args, lang_field="lang", value_field="value", **kwargs
|
59
|
-
):
|
60
|
-
return fields.Nested(
|
61
|
-
get_i18n_localized_ui_schema(lang_field, value_field), **kwargs
|
62
|
-
)
|
63
|
-
|
64
|
-
|
65
|
-
def I18nStrLocalizedUIField( # noqa NOSONAR
|
66
|
-
*args, lang_field="lang", value_field="value", **kwargs
|
67
|
-
):
|
68
|
-
return fields.Nested(
|
69
|
-
get_i18n_ui_schema(lang_field, value_field),
|
70
|
-
*args,
|
71
|
-
**kwargs,
|
72
|
-
)
|
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.32 → oarepo_runtime-1.5.34}/oarepo_runtime/datastreams/readers/__init__.py
RENAMED
File without changes
|
{oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/datastreams/readers/attachments.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/datastreams/readers/service.py
RENAMED
File without changes
|
File without changes
|
{oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/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.32 → oarepo_runtime-1.5.34}/oarepo_runtime/datastreams/writers/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/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
|
{oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/records/dumpers/edtf_interval.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/records/relations/__init__.py
RENAMED
File without changes
|
File without changes
|
{oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/records/relations/internal.py
RENAMED
File without changes
|
File without changes
|
{oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/records/relations/pid_relation.py
RENAMED
File without changes
|
{oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/records/systemfields/__init__.py
RENAMED
File without changes
|
{oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/records/systemfields/featured_file.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/records/systemfields/mapping.py
RENAMED
File without changes
|
{oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/records/systemfields/owner.py
RENAMED
File without changes
|
{oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/records/systemfields/record_status.py
RENAMED
File without changes
|
{oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/records/systemfields/selectors.py
RENAMED
File without changes
|
{oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/records/systemfields/synthetic.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
|
{oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/custom_fields/__init__.py
RENAMED
File without changes
|
{oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/custom_fields/mappings.py
RENAMED
File without changes
|
{oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/expansions/__init__.py
RENAMED
File without changes
|
File without changes
|
{oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/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.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/facets/facet_groups_names.py
RENAMED
File without changes
|
File without changes
|
{oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/facets/nested_facet.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/relations/__init__.py
RENAMED
File without changes
|
{oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/relations/components.py
RENAMED
File without changes
|
File without changes
|
{oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/relations/mapping.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/schema/i18n_validation.py
RENAMED
File without changes
|
{oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/schema/marshmallow.py
RENAMED
File without changes
|
{oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/schema/oneofschema.py
RENAMED
File without changes
|
{oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/schema/polymorphic.py
RENAMED
File without changes
|
File without changes
|
{oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/services/schema/validation.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime/translations/default_translations.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/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
|
{oarepo_runtime-1.5.32 → oarepo_runtime-1.5.34}/oarepo_runtime.egg-info/dependency_links.txt
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|