Skip to content

Commit 8a87fae

Browse files
committed
refactor(schema): Align community schemas with custom-fields
1 parent c18a2f7 commit 8a87fae

3 files changed

Lines changed: 26 additions & 11 deletions

File tree

invenio_communities/communities/resources/ui_schema.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,18 @@
55

66
"""UI community schema."""
77

8-
from functools import partial
9-
108
from flask import g
119
from flask_resources import BaseObjectSchema
1210
from idutils import detect_identifier_schemes, to_url
1311
from invenio_i18n import get_locale
1412
from invenio_i18n import lazy_gettext as _
13+
from invenio_records_resources.proxies import current_custom_fields_schema_registry
1514
from invenio_records_resources.services.custom_fields import CustomFieldsSchemaUI
1615
from invenio_vocabularies.contrib.awards.serializer import AwardL10NItemSchema
1716
from invenio_vocabularies.contrib.funders.serializer import FunderL10NItemSchema
1817
from invenio_vocabularies.resources import VocabularyL10Schema
1918
from marshmallow import Schema, fields, post_dump
20-
from marshmallow_utils.fields import FormatEDTF as FormatEDTF_
19+
from marshmallow_utils.fields import FormatEDTF
2120

2221
from invenio_communities.communities.schema import CommunityThemeSchema
2322
from invenio_communities.proxies import current_communities
@@ -57,10 +56,6 @@ def mask_removed_by(obj):
5756
return return_value
5857

5958

60-
# Partial to make short definitions in below schema.
61-
FormatEDTF = partial(FormatEDTF_, locale=get_locale)
62-
63-
6459
class TombstoneSchema(Schema):
6560
"""Schema for a record tombstone."""
6661

@@ -70,9 +65,13 @@ class TombstoneSchema(Schema):
7065

7166
removed_by = fields.Function(mask_removed_by)
7267

73-
removal_date_l10n_medium = FormatEDTF(attribute="removal_date", format="medium")
68+
removal_date_l10n_medium = FormatEDTF(
69+
attribute="removal_date", format="medium", locale=get_locale
70+
)
7471

75-
removal_date_l10n_long = FormatEDTF(attribute="removal_date", format="long")
72+
removal_date_l10n_long = FormatEDTF(
73+
attribute="removal_date", format="long", locale=get_locale
74+
)
7675

7776
citation_text = fields.String(attribute="citation_text")
7877

@@ -106,7 +105,9 @@ class UICommunitySchema(BaseObjectSchema):
106105

107106
# Custom fields
108107
custom_fields = fields.Nested(
109-
partial(CustomFieldsSchemaUI, fields_var="COMMUNITIES_CUSTOM_FIELDS")
108+
lambda: current_custom_fields_schema_registry.get(
109+
"COMMUNITIES_CUSTOM_FIELDS", CustomFieldsSchemaUI.field_property_name
110+
)
110111
)
111112

112113
permissions = fields.Method("get_permissions", dump_only=True)

invenio_communities/communities/schema.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from uuid import UUID
1111

1212
from invenio_i18n import lazy_gettext as _
13+
from invenio_records_resources.proxies import current_custom_fields_schema_registry
1314
from invenio_records_resources.services.custom_fields import CustomFieldsSchema
1415
from invenio_records_resources.services.records.schema import (
1516
BaseGhostSchema,
@@ -245,7 +246,9 @@ class Meta:
245246
access = NestedAttribute(CommunityAccessSchema, required=True)
246247

247248
custom_fields = NestedAttribute(
248-
partial(CustomFieldsSchema, fields_var="COMMUNITIES_CUSTOM_FIELDS")
249+
lambda: current_custom_fields_schema_registry.get(
250+
"COMMUNITIES_CUSTOM_FIELDS", CustomFieldsSchema.field_property_name
251+
)
249252
)
250253

251254
is_verified = fields.Boolean(dump_only=True)

invenio_communities/ext.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@
1111
from invenio_base.utils import load_or_import_from_config
1212
from invenio_i18n import lazy_gettext as _
1313
from invenio_records_resources.services import FileService
14+
from invenio_records_resources.services.custom_fields.schema import (
15+
CustomFieldsSchema,
16+
CustomFieldsSchemaUI,
17+
)
1418

1519
from invenio_communities.communities import (
1620
CommunityFileServiceConfig,
@@ -216,3 +220,10 @@ def init(app):
216220

217221
# change notification handlers
218222
rr_ext.notification_registry.register("users", ext.service.on_relation_update)
223+
224+
# Register custom fields schemas
225+
cfs_registry = app.extensions[
226+
"invenio-records-resources"
227+
].custom_fields_schema_registry
228+
cfs_registry.register(app, "COMMUNITIES_CUSTOM_FIELDS", CustomFieldsSchema)
229+
cfs_registry.register(app, "COMMUNITIES_CUSTOM_FIELDS", CustomFieldsSchemaUI)

0 commit comments

Comments
 (0)