Source code for campos.sources.object
import datetime as dt
from collections import OrderedDict
from . import (FieldSource, from_bool, from_int, from_float, from_str,
from_date, from_time, from_datetime)
__author__ = 'Juan Manuel Bermúdez Cabrera'
[docs]class ObjectSource(FieldSource):
"""Generic field source for all kinds of objects, this is the fallback
class when more fitted sources can't be found.
.. seealso:: :class:`~.sqlalchemy.SQLAlchemySource`
"""
def create_fields(self, attributes):
# exclude attributes with unsupported values
filtered = OrderedDict()
for attr, text_value in attributes.items():
text, value = text_value
if type(value) in self.SUPPORTED_TYPES:
filtered[attr] = text, value
fields = OrderedDict()
for attr, text_value in filtered.items():
field = None
text, value = text_value
if isinstance(value, bool):
field = from_bool(attr, text, value)
elif isinstance(value, int):
field = from_int(attr, text, value)
elif isinstance(value, float):
field = from_float(attr, text, value)
elif isinstance(value, str):
field = from_str(attr, text, value)
elif isinstance(value, dt.datetime):
field = from_datetime(attr, text, value)
elif isinstance(value, dt.date):
field = from_date(attr, text, value)
elif isinstance(value, dt.time):
field = from_time(attr, text, value)
if field is not None:
fields[field.name] = field
return fields