Source code for swimlane.core.fields
"""Abstractions for Swimlane app field types to simplify getting/setting values on records"""
from swimlane.core.fields.base import Field
from swimlane.utils import (
get_recursive_subclasses as _get_recursive_subclasses,
import_submodules as _import_submodules
)
_import_submodules(__name__)
# Lookup corresponding field given a Swimlane "$type" key
_FIELD_TYPE_MAP = {f.field_type: f for f in _get_recursive_subclasses(Field) if f.field_type}
[docs]def resolve_field_class(field_definition):
"""Return field class most fitting of provided Swimlane field definition"""
try:
return _FIELD_TYPE_MAP[field_definition['$type']]
except KeyError as error:
error.message = 'No field available to handle Swimlane $type "{}"'.format(field_definition)
raise
__all__ = ['resolve_field_class'] + [f.__class__.__name__ for f in _FIELD_TYPE_MAP.values()]