unions in which they appear. (which is itself
an unordered mapping unless you pass an OrderedDict).
+ - Fixed bug whereby mapper mapped to an anonymous
+ alias would fail if logging were used, due to
+ unescaped % sign in the alias name. [ticket:2171]
+ Also in 0.6.8.
+
- sql
- Fixed bug whereby nesting a label of a select()
with another label in it would produce incorrect
for mapper in self.iterate_to_root():
_memoized_configured_property.expire_instance(mapper)
- def _log(self, msg, *args):
- self.logger.info(
- "(" + self.class_.__name__ +
- "|" +
+ @property
+ def _log_desc(self):
+ return "(" + self.class_.__name__ + \
+ "|" + \
(self.local_table is not None and
self.local_table.description or
- str(self.local_table)) +
- (self.non_primary and "|non-primary" or "") + ") " +
- msg, *args)
+ str(self.local_table)) +\
+ (self.non_primary and
+ "|non-primary" or "") + ")"
+
+ def _log(self, msg, *args):
+
+ self.logger.info(
+ "%s " + msg, *((self._log_desc,) + args)
+ )
def _log_debug(self, msg, *args):
self.logger.debug(
- "(" + self.class_.__name__ +
- "|" +
- (self.local_table is not None and
- self.local_table.description
- or str(self.local_table)) +
- (self.non_primary and "|non-primary" or "") + ") " +
- msg, *args)
+ "%s " + msg, *((self._log_desc,) + args)
+ )
def __repr__(self):
return '<Mapper at 0x%x; %s>' % (
from test.lib import fixtures
from test.orm import _fixtures
from test.lib.assertsql import CompiledSQL
+import logging
class MapperTest(_fixtures.FixtureTest):
eq_(Bar.col1.__doc__, "primary key column")
eq_(Bar.foo.__doc__, "foo relationship")
+class ORMLoggingTest(_fixtures.FixtureTest):
+ def setup(self):
+ self.buf = logging.handlers.BufferingHandler(100)
+ for log in [
+ logging.getLogger('sqlalchemy.orm'),
+ ]:
+ log.addHandler(self.buf)
+ log.setLevel(logging.DEBUG)
+
+ def teardown(self):
+ for log in [
+ logging.getLogger('sqlalchemy.orm'),
+ ]:
+ log.removeHandler(self.buf)
+
+ def _current_messages(self):
+ return [b.getMessage() for b in self.buf.buffer]
+
+ def test_mapper_info_aliased(self):
+ User, users = self.classes.User, self.tables.users
+ tb = users.select().alias()
+ mapper(User, tb)
+ s = Session()
+ s.add(User(name='ed'))
+ s.commit()
+ for msg in self._current_messages():
+ assert msg.startswith('(User|%%(%d anon)s) ' % id(tb))
class OptionsTest(_fixtures.FixtureTest):