'generate/update a :class:`.ColumnProprerty` given a
:class:`.Column` object.'

def _property_from_column(self, key, prop):

    columns = util.to_list(prop)
    column = columns[0]
    if (not expression._is_column(column)):
        raise sa_exc.ArgumentError(('%s=%r    is    not    an    instance    of    MapperProperty    or    Column' % (key, prop)))
    prop = self._props.get(key, None)
    if isinstance(prop, properties.ColumnProperty):
        if (prop.parent is self):
            raise sa_exc.InvalidRequestError(("Implicitly    combining    column    %s    with    column    %s    under    attribute    '%s'.        Please    configure    one    or    more    attributes    for    these    same-named    columns    explicitly." % (prop.columns[(-1)], column, key)))
        prop = prop.copy()
        prop.columns.insert(0, column)
        self._log(('inserting    column    to    existing    list    in    properties.ColumnProperty    %s' % key))
        return prop
    elif ((prop is None) or isinstance(prop, properties.ConcreteInheritedProperty)):
        mapped_column = []
        for c in columns:
            mc = self.mapped_table.corresponding_column(c)
            if (mc is None):
                mc = self.local_table.corresponding_column(c)
                if (mc is not None):
                    self.mapped_table._reset_exported()
                mc = self.mapped_table.corresponding_column(c)
                if (mc is None):
                    raise sa_exc.ArgumentError(("When    configuring    property    '%s'    on    %s,    column    '%s'    is    not    represented    in    the    mapper's    table.    Use    the    `column_property()`    function    to    force    this    column    to    be    mapped    as    a    read-only    attribute." % (key, self, c)))
            mapped_column.append(mc)
        return properties.ColumnProperty(*mapped_column)
    else:
        raise sa_exc.ArgumentError(("WARNING:    when    configuring    property    '%s'    on    %s,    column    '%s'    conflicts    with    property    '%r'.    To    resolve    this,    map    the    column    to    the    class    under    a    different    name    in    the    'properties'    dictionary.        Or,    to    remove    all    awareness    of    the    column    entirely    (including    its    availability    as    a    foreign    key),    use    the    'include_properties'    or    'exclude_properties'    mapper    arguments    to    control    specifically    which    table    columns    get    mapped." % (key, self, column.key, prop)))
