oarepo-runtime 1.5.32__py3-none-any.whl → 1.5.34__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
- service = current_service_registry.get(service_id)
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(model_records_generator(record_class))
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(model_records_generator(draft_class))
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
+ }
@@ -1,10 +1,3 @@
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
1
+ from flask_babel import get_locale, gettext, lazy_gettext
9
2
 
10
3
  __all__ = ("gettext", "lazy_gettext", "get_locale")
@@ -1,90 +1,6 @@
1
- from oarepo import __version__ as oarepo_version
1
+ from oarepo_runtime.records.entity_resolvers.proxies import DraftProxy, RecordProxy
2
2
 
3
- from oarepo_runtime.records.entity_resolvers.proxies import DraftProxy
3
+ from invenio_records_resources.references import EntityResolver, RecordResolver
4
+ from invenio_users_resources.entity_resolvers import UserResolver, GroupResolver
4
5
 
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"]
6
+ __all__ = ["DraftProxy", "UserResolver", "GroupResolver", "RecordResolver", "EntityResolver", "RecordProxy"]
@@ -1,22 +1,46 @@
1
1
  from invenio_pidstore.errors import PIDUnregistered
2
- from oarepo import __version__ as oarepo_version
3
2
 
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
- )
3
+ from invenio_records_resources.references.entity_resolvers.records import (
4
+ RecordProxy as InvenioRecordProxy,
5
+ )
12
6
 
13
7
  from sqlalchemy.exc import NoResultFound
14
8
 
15
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
+
16
41
  class DraftProxy(RecordProxy):
17
42
  def _resolve(self):
18
43
  pid_value = self._parse_ref_dict_id()
19
-
20
44
  try:
21
45
  return self.record_cls.pid.resolve(pid_value, registered_only=False)
22
46
  except (PIDUnregistered, NoResultFound):
@@ -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(lang_field, value_field):
14
- @validates(lang_field)
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_{lang_field}_{value_field}",
23
+ f"I18nSchema_{lang_name}_{value_name}",
21
24
  (Schema,),
22
25
  {
23
26
  "validate_lang": validate_lang,
24
- lang_field: fields.String(required=True),
25
- value_field: fields.String(required=True),
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, lang_field="lang", value_field="value", **kwargs
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(lang_field, value_field)),
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, lang_field="lang", value_field="value", **kwargs
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(lang_field, value_field),
48
+ get_i18n_schema(lang_name, value_name, value_field),
46
49
  *args,
47
50
  **kwargs,
48
51
  )
@@ -1,72 +1,74 @@
1
1
  from functools import lru_cache
2
2
 
3
3
  from marshmallow import Schema, fields
4
-
4
+ from marshmallow_utils.fields import SanitizedHTML
5
+ from invenio_base.utils import obj_or_import_string
5
6
 
6
7
  @lru_cache
7
- def get_i18n_ui_schema(lang_field, value_field):
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)
8
10
  return type(
9
- f"I18nUISchema_{lang_field}_{value_field}",
11
+ f"I18nUISchema_{lang_name}_{value_name}",
10
12
  (Schema,),
11
13
  {
12
- lang_field: fields.String(required=True),
13
- value_field: fields.String(required=True),
14
+ lang_name: fields.String(required=True),
15
+ value_name: value_field_class(required=True),
14
16
  },
15
17
  )
16
18
 
17
19
 
18
20
  def MultilingualUIField( # noqa NOSONAR
19
- *args, lang_field="lang", value_field="value", **kwargs
21
+ *args, lang_name="lang", value_name="value", value_field="marshmallow_utils.fields.SanitizedHTML", **kwargs
20
22
  ):
21
23
  return fields.List(
22
- fields.Nested(get_i18n_ui_schema(lang_field, value_field)),
24
+ fields.Nested(get_i18n_ui_schema(lang_name, value_name, value_field)),
23
25
  **kwargs,
24
26
  )
25
27
 
26
28
 
27
29
  def I18nStrUIField( # noqa NOSONAR
28
- *args, lang_field="lang", value_field="value", **kwargs
30
+ *args, lang_name="lang", value_name="value", value_field="marshmallow_utils.fields.SanitizedHTML", **kwargs
29
31
  ):
30
32
  return fields.Nested(
31
- get_i18n_ui_schema(lang_field, value_field),
33
+ get_i18n_ui_schema(lang_name, value_name, value_field),
32
34
  *args,
33
35
  **kwargs,
34
36
  )
35
37
 
36
38
 
37
39
  @lru_cache
38
- def get_i18n_localized_ui_schema(lang_field, value_field):
40
+ def get_i18n_localized_ui_schema(lang_name, value_name):
39
41
  class I18nLocalizedUISchema(Schema):
40
42
  def _serialize(self, value, attr=None, obj=None, **kwargs):
41
43
  if not value:
42
44
  return None
43
45
  language = self.context["locale"].language
44
46
  for v in value:
45
- if language == v[lang_field]:
46
- return v[value_field]
47
- return next(iter(value))[value_field]
47
+ if language == v[lang_name]:
48
+ return v[value_name]
49
+ return next(iter(value))[value_name]
48
50
 
49
51
  # inherit to get a nice name for debugging
50
52
  return type(
51
- f"I18nLocalizedUISchema_{lang_field}_{value_field}",
53
+ f"I18nLocalizedUISchema_{lang_name}_{value_name}",
52
54
  (I18nLocalizedUISchema,),
53
55
  {},
54
56
  )
55
57
 
56
58
 
57
59
  def MultilingualLocalizedUIField( # noqa NOSONAR
58
- *args, lang_field="lang", value_field="value", **kwargs
60
+ *args, lang_name="lang", value_name="value", **kwargs
59
61
  ):
60
62
  return fields.Nested(
61
- get_i18n_localized_ui_schema(lang_field, value_field), **kwargs
63
+ get_i18n_localized_ui_schema(lang_name, value_name), **kwargs
62
64
  )
63
65
 
64
66
 
65
67
  def I18nStrLocalizedUIField( # noqa NOSONAR
66
- *args, lang_field="lang", value_field="value", **kwargs
68
+ *args, lang_name="lang", value_name="value", **kwargs
67
69
  ):
68
70
  return fields.Nested(
69
- get_i18n_ui_schema(lang_field, value_field),
71
+ get_i18n_ui_schema(lang_name, value_name),
70
72
  *args,
71
73
  **kwargs,
72
74
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: oarepo-runtime
3
- Version: 1.5.32
3
+ Version: 1.5.34
4
4
  Summary: A set of runtime extensions of Invenio repository
5
5
  Description-Content-Type: text/markdown
6
6
  License-File: LICENSE
@@ -11,7 +11,7 @@ oarepo_runtime/cli/cf.py,sha256=W0JEJK2JqKubQw8qtZJxohmADDRUBode4JZAqYLDGvc,339
11
11
  oarepo_runtime/cli/check.py,sha256=AvC5VHAnwmtCd8R-Caj8v6nCAREKjObTdNtLJ24aJO8,4935
12
12
  oarepo_runtime/cli/configuration.py,sha256=cLXoGDtjuA5uv9ZfYFcH0C4wcadj0qWC3P_E4Bf5-z0,1061
13
13
  oarepo_runtime/cli/fixtures.py,sha256=teMbU-ocrSOmmCJvK-ICl6lMTAOWxJ5Tpkg6JQc0Y0s,5486
14
- oarepo_runtime/cli/index.py,sha256=H4nSZnClnlCSI8Thlz_jx-uPpgNVVQyagpWIPtQoIr4,7239
14
+ oarepo_runtime/cli/index.py,sha256=6SaM3Ml6qCRakXbGz3afBAYM9hFRYrPIa6vw3pwqR_Q,8158
15
15
  oarepo_runtime/cli/validate.py,sha256=HpSvHQCGHlrdgdpKix9cIlzlBoJEiT1vACZdMnOUGEY,2827
16
16
  oarepo_runtime/datastreams/__init__.py,sha256=_i52Ek9J8DMARST0ejZAZPzUKm55xrrlKlCSO7dl6y4,1008
17
17
  oarepo_runtime/datastreams/asynchronous.py,sha256=1I1mEaTxyrcHD7LK6O9z2QX37AgeejflxynGmLreLQ0,7396
@@ -39,15 +39,15 @@ oarepo_runtime/datastreams/writers/service.py,sha256=PvCxYASDxOqT6iyL6cjw0aH41La
39
39
  oarepo_runtime/datastreams/writers/utils.py,sha256=Lk_ZLNeXTLuFEn04lw1-6bJ7duG6kwA8X4wf9c_GiL4,1067
40
40
  oarepo_runtime/datastreams/writers/validation_errors.py,sha256=wOCXdniR6so_4ExpdFYYgBRyENp7_6kVFZM2L-Hy3G8,661
41
41
  oarepo_runtime/datastreams/writers/yaml.py,sha256=XchUJHQ58E2Mfgs8elImXbL38jFtI8Hfoye6yaR0gKI,1482
42
- oarepo_runtime/i18n/__init__.py,sha256=G4PJ_kQlPDiBW6ntjQZ-O4qHQgkJWAXsNLUuOBcglNM,402
42
+ oarepo_runtime/i18n/__init__.py,sha256=h0knW_HwiyIt5TBHfdGqN7_BBYfpz1Fw6zhVy0C28fM,111
43
43
  oarepo_runtime/info/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
44
  oarepo_runtime/info/views.py,sha256=jtI2JJBdApuT5ZIxU2kskJBz6GpJVTgUGrM8EMNIiAk,11137
45
45
  oarepo_runtime/records/__init__.py,sha256=w1vtMmGDpcn9PQ2gbwihrYBZhawhzDWWOpnDdeaOPVo,1038
46
46
  oarepo_runtime/records/dumpers/__init__.py,sha256=OmzNhLdMNKibmCksnj9eTX9xPBG30dziiK3j3bAAp3k,233
47
47
  oarepo_runtime/records/dumpers/edtf_interval.py,sha256=YCShZAoqBQYaxVilEVotS-jXZsxxoXO67yu2urhkaMA,1198
48
48
  oarepo_runtime/records/dumpers/multilingual_dumper.py,sha256=PbNFCLsiH4XV3E1v8xga_fzlcEImHy8OXn_UKh_8VBU,1090
49
- oarepo_runtime/records/entity_resolvers/__init__.py,sha256=QvGxjfDRCg21eD5zDjWf0TSGFotEYG1PydrjT2wG7DY,3465
50
- oarepo_runtime/records/entity_resolvers/proxies.py,sha256=hHUzJA1yDhp7nM35gHoAAv7w4zWuaSE-tLBNvIR0tD8,882
49
+ oarepo_runtime/records/entity_resolvers/__init__.py,sha256=fZFUh53idLswFIlF-5miLPQXMlDX6YEHAolJGgxgh6k,356
50
+ oarepo_runtime/records/entity_resolvers/proxies.py,sha256=dhWYIjjWzXdoAooHvGeT2PHlfuvFHPSw_839TMXW8jA,1518
51
51
  oarepo_runtime/records/owners/__init__.py,sha256=R4hudCBqLRRzgCnkEjXIL7hSp068z-s6YOwYSkWyuaw,93
52
52
  oarepo_runtime/records/owners/registry.py,sha256=fYgBuW5nBKn6pyz2OBgfNlynk64_yhQ9J7FzPk8QU1U,795
53
53
  oarepo_runtime/records/relations/__init__.py,sha256=bDAgxl_LdKsqpGG3qluxAkQnn5u2ItJngnHQKkqzlkE,373
@@ -96,8 +96,8 @@ oarepo_runtime/services/relations/errors.py,sha256=VtlOKq9MEUeJ4IsiZhY7lWoshrusA
96
96
  oarepo_runtime/services/relations/mapping.py,sha256=D7IYk83SXVgTv-0ohSnHOCzvCwbFLXJsayO1eQfQn0U,1285
97
97
  oarepo_runtime/services/schema/__init__.py,sha256=gD0II1Lz6fnW1Cgt4gtneZeyKWl_YZ47Wu0gmeKqtH8,1395
98
98
  oarepo_runtime/services/schema/cf.py,sha256=-m9seIH5VYUdxDsJlPVXS0-8f7xkpN7YfW1q9E1GacI,475
99
- oarepo_runtime/services/schema/i18n.py,sha256=myyg0tU8up0BmMt9IESKD91w5KC0V9v8Qa-9fF0ptIs,1341
100
- oarepo_runtime/services/schema/i18n_ui.py,sha256=18tA6uA067TP_wcit47hTel2M4hz88wYtwBgaeZDrew,1880
99
+ oarepo_runtime/services/schema/i18n.py,sha256=rCO8hZqRA_653uLn7eobJIsibbjgSLO9Q9Ka-2RG5r0,1645
100
+ oarepo_runtime/services/schema/i18n_ui.py,sha256=D3YGKToB3MZVqGyiPf_xWPtg9PhGUuOZ5VNfm7fwf68,2203
101
101
  oarepo_runtime/services/schema/i18n_validation.py,sha256=fyMTi2Rw-KiHv7c7HN61zGxRVa9sAjAEEkAL5wUyKNo,236
102
102
  oarepo_runtime/services/schema/marshmallow.py,sha256=LmcSxvbZ9jIhkNHCqqxt1SA2UNijoDmIzqli1MkoTrE,1153
103
103
  oarepo_runtime/services/schema/oneofschema.py,sha256=X_pXzrkYcLGGAtGN1qltrz45OzD_atrJHkHkp3L01xg,6660
@@ -115,9 +115,9 @@ oarepo_runtime/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
115
115
  oarepo_runtime/utils/functools.py,sha256=gKS9YZtlIYcDvdNA9cmYO00yjiXBYV1jg8VpcRUyQyg,1324
116
116
  oarepo_runtime/utils/path.py,sha256=V1NVyk3m12_YLbj7QHYvUpE1wScO78bYsX1LOLeXDkI,3108
117
117
  tests/pkg_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
118
- oarepo_runtime-1.5.32.dist-info/LICENSE,sha256=h2uWz0OaB3EN-J1ImdGJZzc7yvfQjvHVYdUhQ-H7ypY,1064
119
- oarepo_runtime-1.5.32.dist-info/METADATA,sha256=_PPldeHNddy89KosMLaNCm1xzAEjET1eHnno3M-31PU,4680
120
- oarepo_runtime-1.5.32.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
121
- oarepo_runtime-1.5.32.dist-info/entry_points.txt,sha256=QrlXAKuPDVBinaSh_v3yO9_Nb9ZNmJCJ0VFcCW-z0Jg,327
122
- oarepo_runtime-1.5.32.dist-info/top_level.txt,sha256=bHhlkT1_RQC4IkfTQCqA3iN4KCB6cSFQlsXpQMSP-bE,21
123
- oarepo_runtime-1.5.32.dist-info/RECORD,,
118
+ oarepo_runtime-1.5.34.dist-info/LICENSE,sha256=h2uWz0OaB3EN-J1ImdGJZzc7yvfQjvHVYdUhQ-H7ypY,1064
119
+ oarepo_runtime-1.5.34.dist-info/METADATA,sha256=0JbXNMjCdPlCOSa9qn7U5nJm2k2JF6tOG3CRo6hnYtU,4680
120
+ oarepo_runtime-1.5.34.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
121
+ oarepo_runtime-1.5.34.dist-info/entry_points.txt,sha256=QrlXAKuPDVBinaSh_v3yO9_Nb9ZNmJCJ0VFcCW-z0Jg,327
122
+ oarepo_runtime-1.5.34.dist-info/top_level.txt,sha256=bHhlkT1_RQC4IkfTQCqA3iN4KCB6cSFQlsXpQMSP-bE,21
123
+ oarepo_runtime-1.5.34.dist-info/RECORD,,