Source code for invenio_admin.filters
# -*- coding: utf-8 -*-
#
# This file is part of Invenio.
# Copyright (C) 2015-2018 CERN.
#
# Invenio is free software; you can redistribute it and/or modify it
# under the terms of the MIT License; see LICENSE file for more details.
"""Flask-Admin filter utilities."""
from __future__ import absolute_import, print_function
import uuid
from flask_admin.contrib.sqla import filters
from flask_admin.model.filters import convert
[docs]class UUIDEqualFilter(filters.FilterEqual):
"""UUID aware filter."""
[docs] def apply(self, query, value, alias):
"""Convert UUID.
:param query: SQLAlchemy query object.
:param value: UUID value.
:param alias: Alias of the column.
:returns: Filtered query matching the UUID value.
"""
try:
value = uuid.UUID(value)
return query.filter(self.column == value)
except ValueError:
return query
[docs]class FilterConverter(filters.FilterConverter):
"""Filter converter for dealing with UUIDs and variants."""
uuid_filters = (UUIDEqualFilter, )
[docs] @convert('uuidtype')
def conv_uuid(self, column, name, **kwargs):
"""Convert UUID filter."""
return [f(column, name, **kwargs) for f in self.uuid_filters]
[docs] @convert('variant')
def conv_variant(self, column, name, **kwargs):
"""Convert variants."""
return self.convert(str(column.type), column, name, **kwargs)