# pull properties from the inherited mapper if any.
if self.inherits:
for key, prop in self.inherits._props.iteritems():
- if key not in self._props and not self._should_exclude(key, local=False):
+ if key not in self._props and not self._should_exclude(key, key, local=False):
self._adapt_inherited_property(key, prop, False)
# create properties for each column in the mapped table,
if column in self._columntoproperty:
continue
- if self._should_exclude(column.key, local=self.local_table.c.contains_column(column)):
- continue
-
column_key = (self.column_prefix or '') + column.key
+ if self._should_exclude(column.key, column_key, local=self.local_table.c.contains_column(column)):
+ continue
+
# adjust the "key" used for this column to that
# of the inheriting mapper
for mapper in self.iterate_to_root():
col = self.polymorphic_on
else:
dont_instrument = False
- if self._should_exclude(col.key, local=False):
+ if self._should_exclude(col.key, col.key, local=False):
raise sa_exc.InvalidRequestError("Cannot exclude or override the discriminator column %r" % col.key)
self._configure_property(col.key, ColumnProperty(col, _no_instrument=dont_instrument), init=False, setparent=True)
def _is_userland_descriptor(self, obj):
return not isinstance(obj, (MapperProperty, attributes.InstrumentedAttribute)) and hasattr(obj, '__get__')
- def _should_exclude(self, name, local):
+ def _should_exclude(self, name, assigned_name, local):
"""determine whether a particular property should be implicitly present on the class.
This occurs when properties are propagated from an inherited class, or are
# check for descriptors, either local or from
# an inherited class
if local:
- if self.class_.__dict__.get(name, None)\
- and self._is_userland_descriptor(self.class_.__dict__[name]):
+ if self.class_.__dict__.get(assigned_name, None)\
+ and self._is_userland_descriptor(self.class_.__dict__[assigned_name]):
return True
else:
- if getattr(self.class_, name, None)\
- and self._is_userland_descriptor(getattr(self.class_, name)):
+ if getattr(self.class_, assigned_name, None)\
+ and self._is_userland_descriptor(getattr(self.class_, assigned_name)):
return True
if (self.include_properties is not None and
class Hoho(object): pass
class Lala(object): pass
+ class HasDef(object):
+ def name(self):
+ pass
+
p_m = mapper(Person, t, polymorphic_on=t.c.type,
include_properties=('id', 'type', 'name'))
e_m = mapper(Employee, inherits=p_m, polymorphic_identity='employee',
l_m = mapper(Lala, t, exclude_properties=('vendor_id', 'boss_id'),
column_prefix="p_")
+ hd_m = mapper(HasDef, t, column_prefix="h_")
+
p_m.compile()
#sa.orm.compile_mappers()
have = set([p.key for p in class_mapper(cls).iterate_properties])
want = set(want)
eq_(have, want)
-
+
+ assert_props(HasDef, ['h_boss_id', 'h_employee_number', 'h_id', 'name', 'h_name', 'h_vendor_id', 'h_type'])
assert_props(Person, ['id', 'name', 'type'])
assert_instrumented(Person, ['id', 'name', 'type'])
assert_props(Employee, ['boss', 'boss_id', 'employee_number',