Changeset 440

Show
Ignore:
Timestamp:
10/14/09 17:23:01 (2 years ago)
Author:
apdavison
Message:

Dependency warnings now use the warnings module instead of print statements (which means they can be turned off). Added some logging-related stuff.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/__init__.py

    r414 r440  
    3838__all__ = ['analysis', 'parameters', 'plotting', 'signals', 'stgen', 'io', 'datastore', 'utilities', 'spike2', 'random', 'optimize', 'tisean'] 
    3939__version__ = "0.1.0 (Asynchronous Astrocyte)" 
     40import warnings 
    4041 
    4142######################################################### 
     
    6869######################################################### 
    6970 
     71class DependencyWarning(UserWarning): 
     72    pass 
     73 
    7074def get_import_warning(name): 
    71     return ''' ----------------- Dependency Warning --------------------- 
    72 ** %s ** package is not installed.  
     75    return '''** %s ** package is not installed.  
    7376To have functions using %s please install the package. 
    7477website : %s 
     
    7679 
    7780def get_runtime_warning(name, errmsg): 
    78     return ''' ----------------- Dependency Warning --------------------- 
    79 ** %s ** package is installed but cannot be imported. The error message is: %s  
    80 ''' %(name, errmsg) 
     81    return '** %s ** package is installed but cannot be imported. The error message is: %s' %(name, errmsg) 
    8182 
    8283def check_numpy_version(): 
     
    102103            dependencies[name]['is_present'] = True 
    103104        except ImportError: 
    104             print get_import_warning(name) 
     105            warnings.warn(get_import_warning(name), DependencyWarning) 
    105106        except RuntimeError, errmsg: 
    106             print get_runtime_warning(name, errmsg) 
     107            warnings.warn(get_runtime_warning(name, errmsg), DependencyWarning) 
    107108        dependencies[name]['check'] = True 
    108109        return dependencies[name]['is_present'] 
     
    181182 
    182183 
     184class NameOrLevelFilter(logging.Filter): 
     185    """ 
     186    Logging filter which allows messages that either meet the same name criteria 
     187    as the base filter class, or have a level >= the level specified. 
     188     
     189    The intended use is when you want to receive most messages at a high level, 
     190    but receive certain named messages at a lower level, e.g. for debugging a 
     191    particular component. 
     192    """ 
     193    def __init__(self, name='', level=logging.INFO): 
     194        self.name = name 
     195        self.nlen = len(name) 
     196        self.level = level 
     197         
     198    def filter(self, record): 
     199        allow_by_name = logging.Filter.filter(self, record) 
     200        allow_by_level = record.levelno >= self.level 
     201        return (allow_by_name or allow_by_level) 
     202     
     203 
    183204def init_logging(filename, file_level=logging.INFO, console_level=logging.WARNING): 
    184205    logging.basicConfig(level=file_level, 
    185                         format='%(asctime)s %(levelname)s %(message)s', # %(pathname)s %(module)s %(funcName)s', 
     206                        format='%(asctime)s %(name)-10s %(levelname)-6s %(message)s [%(pathname)s:%(lineno)d]', 
    186207                        filename=filename, 
    187208                        filemode='w') 
     
    190211    console.setFormatter(FancyFormatter('%(message)s')) 
    191212    logging.getLogger('').addHandler(console) 
     213    return console