Source code for sqla_inspect.base
# -*- coding: utf-8 -*-
# * Authors:
# * Arezki Feth <f.a@majerti.fr>;
# * Miotte Julien <j.m@majerti.fr>;
# * TJEBBES Gaston <g.t@majerti.fr>
#
"""
utilities to inspect Sqlalchemy models
"""
from sqlalchemy import inspect
from sqlalchemy.orm import (
ColumnProperty,
RelationshipProperty,
)
from colanderalchemy.schema import _creation_order
[docs]class BaseSqlaInspector(object):
"""
Base class for exporters
"""
def __init__(self, model):
self.inspector = inspect(model)
[docs] def get_sorted_columns(self):
"""
Return columns regarding their relevance in the model's declaration
"""
return sorted(self.inspector.attrs, key=_creation_order)
[docs] def get_columns_only(self):
"""
Return only the columns
"""
return [prop for prop in self.get_sorted_columns() \
if isinstance(prop, ColumnProperty)]
[docs] def get_relationships_only(self):
"""
Return only the relationships
"""
return [prop for prop in self.get_sorted_columns() \
if isinstance(prop, RelationshipProperty)]
@staticmethod
[docs] def get_info_field(prop):
"""
Return the info attribute of the given property
"""
if isinstance(prop, ColumnProperty):
column = prop.columns[0]
elif isinstance(prop, RelationshipProperty):
column = prop
return column.info