From 475085fd1e44407cbd971573c46b507b094378c6 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Thu, 12 Oct 2006 18:01:11 +0000 Subject: [PATCH] some logging tweaks....its a little squirrely --- lib/sqlalchemy/logging.py | 10 ++++++---- lib/sqlalchemy/orm/session.py | 4 +++- lib/sqlalchemy/orm/unitofwork.py | 14 ++++++++------ 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/lib/sqlalchemy/logging.py b/lib/sqlalchemy/logging.py index fe5c5c0e5b..3a5a19fa81 100644 --- a/lib/sqlalchemy/logging.py +++ b/lib/sqlalchemy/logging.py @@ -30,8 +30,10 @@ import sys logging = __import__('logging') default_enabled = False -def default_logging(): +def default_logging(name): global default_enabled + if logging.getLogger(name).getEffectiveLevel() < logging.WARN: + default_enabled=True if not default_enabled: default_enabled = True rootlogger = logging.getLogger('sqlalchemy') @@ -58,13 +60,13 @@ def is_info_enabled(logger): return logger.isEnabledFor(logging.INFO) class echo_property(object): - level_map={logging.DEBUG : "debug", logging.NOTSET : False} + level_map={logging.DEBUG : "debug", logging.INFO:True} def __get__(self, instance, owner): level = logging.getLogger(_get_instance_name(instance)).getEffectiveLevel() - return echo_property.level_map.get(level, True) + return echo_property.level_map.get(level, False) def __set__(self, instance, value): if value: - default_logging() + default_logging(_get_instance_name(instance)) logging.getLogger(_get_instance_name(instance)).setLevel(value == 'debug' and logging.DEBUG or logging.INFO) else: logging.getLogger(_get_instance_name(instance)).setLevel(logging.NOTSET) diff --git a/lib/sqlalchemy/orm/session.py b/lib/sqlalchemy/orm/session.py index b12ee4e84c..fef887f7bf 100644 --- a/lib/sqlalchemy/orm/session.py +++ b/lib/sqlalchemy/orm/session.py @@ -134,7 +134,9 @@ class Session(object): objects in this Session.""" for instance in self: self._unattach(instance) + echo = self.uow.echo self.uow = unitofwork.UnitOfWork() + self.uow.echo = echo def mapper(self, class_, entity_name=None): """given an Class, returns the primary Mapper responsible for persisting it""" @@ -230,7 +232,7 @@ class Session(object): 'objects' is a list or tuple of objects specifically to be flushed; if None, all new and modified objects are flushed.""" - self.uow.flush(self, objects, echo=self.echo_uow) + self.uow.flush(self, objects) def get(self, class_, ident, **kwargs): """return an instance of the object based on the given identifier, or None if not found. diff --git a/lib/sqlalchemy/orm/unitofwork.py b/lib/sqlalchemy/orm/unitofwork.py index 2beb6a78eb..5c2e21c5fa 100644 --- a/lib/sqlalchemy/orm/unitofwork.py +++ b/lib/sqlalchemy/orm/unitofwork.py @@ -138,7 +138,7 @@ class UnitOfWork(object): def locate_dirty(self): return util.Set([x for x in self.identity_map.values() if x not in self.deleted and attribute_manager.is_modified(x)]) - def flush(self, session, objects=None, echo=False): + def flush(self, session, objects=None): # this context will track all the objects we want to save/update/delete, # and organize a hierarchical dependency structure. it also handles # communication with the mappers and relationships to fire off SQL @@ -185,7 +185,7 @@ class UnitOfWork(object): trans = session.create_transaction(autoflush=False) flush_context.transaction = trans try: - flush_context.execute(echo=echo) + flush_context.execute() except: trans.rollback() raise @@ -206,6 +206,9 @@ class UOWTransaction(object): self.__modified = False self.__is_executing = False self.logger = logging.instance_logger(self) + self.echo = uow.echo + + echo = logging.echo_property() def register_object(self, obj, isdelete = False, listonly = False, postupdate=False, post_update_cols=None, **kwargs): """adds an object to this UOWTransaction to be updated in the database. @@ -306,7 +309,7 @@ class UOWTransaction(object): task.dependencies.add(up) self._mark_modified() - def execute(self, echo=False): + def execute(self): # insure that we have a UOWTask for every mapper that will be involved # in the topological sort [self.get_task_by_mapper(m) for m in self._get_noninheriting_mappers()] @@ -333,7 +336,7 @@ class UOWTransaction(object): head = self._sort_dependencies() self.__modified = False - if echo: + if self.echo: if head is None: self.logger.info("Task dump: None") else: @@ -342,8 +345,7 @@ class UOWTransaction(object): head.execute(self) #if self.__modified and head is not None: # raise "Assertion failed ! new pre-execute dependency step should eliminate post-execute changes (except post_update stuff)." - if echo: - self.logger.info("Execute Complete") + self.logger.info("Execute Complete") def post_exec(self): """after an execute/flush is completed, all of the objects and lists that have -- 2.47.2