Skip to content

Commit d2b2a25

Browse files
committed
schemas: add SimplifiedSchemaSerializer
Signed-off-by: Anna Trzcinska <[email protected]>
1 parent b371189 commit d2b2a25

File tree

2 files changed

+36
-2
lines changed

2 files changed

+36
-2
lines changed

cap/modules/records/utils.py

+24
Original file line numberDiff line numberDiff line change
@@ -71,3 +71,27 @@ def api_url_for(endpoint, pid, **kwargs):
7171
**kwargs)
7272

7373
return url_to_api_url(url)
74+
75+
76+
def reindex_by_schema_url(schema_url, pid_type):
77+
"""Reindex all records of given pid_type belonging to that schema."""
78+
def _get_json_type():
79+
"""If postgres db return JSONB, else JSON."""
80+
return JSONB if db.session.bind.dialect.name == 'postgresql' else JSON
81+
82+
indexer = RecordIndexer()
83+
84+
ids = (x[0] for x in RecordMetadata.query.filter(
85+
RecordMetadata.json['$schema'] == cast(
86+
schema_url, _get_json_type())).values(RecordMetadata.id))
87+
88+
filtered_by_pid_type = (x[0] for x in PersistentIdentifier.query.filter(
89+
PersistentIdentifier.status == PIDStatus.REGISTERED,
90+
PersistentIdentifier.object_type == 'rec', PersistentIdentifier.
91+
pid_type == pid_type, PersistentIdentifier.object_uuid.in_(
92+
ids)).values(PersistentIdentifier.object_uuid))
93+
94+
print('{} records will be reindexed...'.format(schema_url))
95+
96+
indexer.bulk_index(filtered_by_pid_type)
97+
indexer.process_bulk_queue(es_bulk_kwargs={'raise_on_error': True})

cap/modules/schemas/serializers.py

+12-2
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@
2525
import copy
2626

2727
from flask import url_for
28-
from invenio_jsonschemas.proxies import current_jsonschemas
29-
from marshmallow import Schema, ValidationError, fields, pre_load, validate
3028

3129
from cap.utils import url_to_api_url
30+
from invenio_jsonschemas.proxies import current_jsonschemas
31+
from marshmallow import Schema, ValidationError, fields, pre_load, validate
3232

3333
from .validators import JSONSchemaValidator
3434

@@ -102,6 +102,15 @@ def filter_out_fields_that_cannot_be_updated(self, data, **kwargs):
102102
return data
103103

104104

105+
class SimplifiedSchemaSerializer(Schema):
106+
"""Simplified serializer for schema."""
107+
108+
name = fields.Str(dump_only=True, required=True)
109+
version = fields.Str(dump_only=True, required=True,
110+
validate=validate.Regexp(regex=r"(\d+).(\d+).(\d+)"))
111+
fullname = fields.Str(dump_only=True)
112+
113+
105114
class ResolvedSchemaSerializer(SchemaSerializer):
106115
"""Schema serializer with resolved jsonschemas."""
107116

@@ -125,5 +134,6 @@ def get_resolved_record_schema(self, obj):
125134

126135

127136
schema_serializer = SchemaSerializer()
137+
simplified_schema_serializer = SimplifiedSchemaSerializer()
128138
update_schema_serializer = UpdateSchemaSerializer()
129139
resolved_schemas_serializer = ResolvedSchemaSerializer()

0 commit comments

Comments
 (0)