Added necessary class for new config

This commit is contained in:
2025-08-29 10:14:18 +01:00
parent 793d34b100
commit dbc1f03a98

View File

@@ -39,7 +39,10 @@ from invenio_records_permissions.generators import (
SystemProcess,
)
from invenio_records_resources.services.custom_fields import TextCF
from invenio_records_resources.services.records.facets.facets import TermsFacet
from invenio_records_resources.services.records.facets.facets import (
LabelledFacetMixin,
TermsFacet,
)
from invenio_records_resources.services.records.queryparser import (
FieldValueMapper,
QueryParser,
@@ -460,6 +463,62 @@ RDM_SORT_OPTIONS = {
# value_labels={"true": _("Yes"), "false": _("No")},
# )
class DateHistogramFacet(LabelledFacetMixin, dsl.DateHistogramFacet):
"""Date Range Facet
facets = {
'publication_date': DateRangeFacet(
field='dates',
interval='year',
format='yyyy'
)
}
"""
def __init__(self, *args, **kwargs):
"""Show only years with at least 1 document."""
kwargs.setdefault("min_doc_count", 1)
super().__init__(*args, **kwargs)
def get_value_filter(self, filter_value):
"""Overriding this function to cast string dates to datetime"""
for interval_type in ("calendar_interval", "fixed_interval"):
if interval_type in self._params:
break
else:
interval_type = "interval"
# dealing with a range
try:
if "--" in filter_value:
start, end = [
datetime.strptime(year, "%Y") for year in filter_value.split("--")
]
end = self.DATE_INTERVALS[self._params[interval_type]](end)
else:
start = datetime.strptime(filter_value, "%Y")
end = self.DATE_INTERVALS[self._params[interval_type]](start)
except ValueError:
start = 0
end = 1
# swap them
if start > end:
start, end = end, start
return dsl.query.Range(
_expand__to_dot=False,
**{
self._params["field"]: {
"gte": start,
"lt": end,
}
},
)
RDM_FACETS = {
"access_status": {
"facet": facets.access_status,