[Pymoul-svn] SF.net SVN: pymoul: [74] pymoul/trunk/src/moul
Status: Alpha
Brought to you by:
tiran
From: <ti...@us...> - 2007-01-25 13:50:47
|
Revision: 74 http://pymoul.svn.sourceforge.net/pymoul/?rev=74&view=rev Author: tiran Date: 2007-01-25 05:50:46 -0800 (Thu, 25 Jan 2007) Log Message: ----------- Logging improvements: Now logs to a file, too Modified Paths: -------------- pymoul/trunk/src/moul/config/__init__.py pymoul/trunk/src/moul/file/wdysini.py pymoul/trunk/src/moul/log.py pymoul/trunk/src/moul/osdependent/darwin/__init__.py pymoul/trunk/src/moul/osdependent/linux/__init__.py pymoul/trunk/src/moul/osdependent/win32/__init__.py Modified: pymoul/trunk/src/moul/config/__init__.py =================================================================== --- pymoul/trunk/src/moul/config/__init__.py 2007-01-25 04:05:27 UTC (rev 73) +++ pymoul/trunk/src/moul/config/__init__.py 2007-01-25 13:50:46 UTC (rev 74) @@ -39,30 +39,48 @@ if __WIN32__: from moul.osdependent.win32 import ( getMoulUserDataDir, - getPyMoulIniDir, + getPyMoulDataDir as _getPyMoulDataDir, _startMOUL, EXEC_NAME ) elif __LINUX__: from moul.osdependent.linux import ( getMoulUserDataDir, - getPyMoulIniDir, + getPyMoulDataDir as _getPyMoulDataDir, _startMOUL, EXEC_NAME ) elif __MACOSX__: from moul.osdependent.darwin import ( getMoulUserDataDir, - getPyMoulIniDir, + getPyMoulDataDir as _getPyMoulDataDir, _startMOUL, EXEC_NAME ) else: raise RuntimeError('platform %s not supported' % sys.platform) +def getPyMoulDataDir(check=False): + """Get pyMoul data directory + + The directory contains log files, ini files and other local stuff + """ + datadir = _getPyMoulDataDir() + if check: + if os.path.abspath(datadir) != datadir: + raise ValueError("Datadir is not absolute %s" % datadir) + if not os.path.isdir(datadir): + parent = os.path.abspath(os.path.join(datadir, os.pardir)) + if not os.path.isdir(parent): + raise ValueError("Datadir's parent dir does not exist: %s" + % par) + else: + LOG.debug("Creating pyMoul data dir %s" % datadir) + os.mkdir(datadir, 0750) + LOG.debug("Using pyMoul data dir %s" % datadir) + return datadir + ## configuration - - class Configuration(dict): def __new__(cls, *args, **kwargs): self = dict.__new__(cls, *args, **kwargs) @@ -161,8 +179,8 @@ def getMoulUserDataDir(self): return getMoulUserDataDir() - def getPyMoulIniDir(self): - return getPyMoulIniDir() + def getPyMoulDataDir(self): + return getPyMoulDataDir() def lookupDir(self, name): """Lookup MOUL directory @@ -174,7 +192,7 @@ path = path.replace('/', os.sep) map = {'installdir' : self.getMoulInstallDir(), 'datadir' : self.getMoulUserDataDir(), - 'pymouldir' : self.getPyMoulIniDir(), + 'pymouldir' : self.getPyMoulDataDir(), } fullpath = path % map #self._cache[name] = fullpath Modified: pymoul/trunk/src/moul/file/wdysini.py =================================================================== --- pymoul/trunk/src/moul/file/wdysini.py 2007-01-25 04:05:27 UTC (rev 73) +++ pymoul/trunk/src/moul/file/wdysini.py 2007-01-25 13:50:46 UTC (rev 74) @@ -335,6 +335,8 @@ """ if self._fpath is not None: raise ValueError("File already open") + if not os.path.isdir(path): + raise OSError("Directory not found %s" % path) self._fpath = os.path.join(path, self._filename) self.parseEncFile(self._fpath) Modified: pymoul/trunk/src/moul/log.py =================================================================== --- pymoul/trunk/src/moul/log.py 2007-01-25 04:05:27 UTC (rev 73) +++ pymoul/trunk/src/moul/log.py 2007-01-25 13:50:46 UTC (rev 74) @@ -24,27 +24,65 @@ __all__ = ['LOG', 'getLogger', 'signalLogDecorator'] import logging +from logging import Formatter +from logging import handlers import os import sys from moul.metadata import __version__ as moul_version +# alias +getLogger = logging.getLogger + # copied from moul.config to prevent circular imports __FROZEN__ = bool(getattr(sys, 'frozen', False)) __LOG_SIGNALS__ = not __FROZEN__ - if __FROZEN__: level = logging.ERROR else: level = logging.DEBUG -logging.basicConfig(level=level, - format='%(asctime)s %(name)-10s %(levelname)-7s %(message)s', - #datefmt='%a, %d %b %Y %H:%M:%S' - datefmt='%m-%d %H:%M:%S' - ) -LOG = logging.getLogger('pyMoul') -getLogger = logging.getLogger +format = Formatter('%(asctime)s %(name)-8s %(levelname)-7s %(message)s', + #'%a, %d %b %Y %H:%M:%S' + '%m-%d %H:%M:%S') +root = getLogger() +root.setLevel(level) +# Add streaming handler for sys.stderr +shdlr = logging.StreamHandler(sys.stderr) +shdlr.setFormatter(format) +shdlr.setLevel(level) +root.addHandler(shdlr) + +# setup a memory handler to store records before we have the infrastructure +# to log events to a file +mhdlr = handlers.MemoryHandler(capacity=16*1024) # MemoryHandler doesn't flush w/o a target +mhdlr.setFormatter(format) +mhdlr.setLevel(logging.DEBUG) +root.addHandler(mhdlr) + +# DEBUG system infos +LOG = getLogger('pyMoul') +LOG.debug("pyMoul version: %s" % moul_version) +LOG.debug("Python: %s" % repr(sys.version_info)) +LOG.debug("Python: %s" % sys.version.replace('\n', ' ')) +LOG.debug("Platform: %s, OS name: %s" % (sys.platform, os.name)) + +# now get the pymoul userdata dir +from moul.config import getPyMoulDataDir +logFile = os.path.join(getPyMoulDataDir(check=True), 'pymoul.log') +LOG.debug("Adding file logger: %s" % logFile) +fhdlr = handlers.RotatingFileHandler(logFile, backupCount=9) +fhdlr.setFormatter(format) +fhdlr.setLevel(logging.DEBUG) +root.addHandler(fhdlr) +fhdlr.doRollover() + +# flush and remove remove memory handler +mhdlr.setTarget(fhdlr) +mhdlr.flush() +root.removeHandler(mhdlr) +del mhdlr + def signalLogDecorator(__logger__): """Decorator to log signals @@ -65,10 +103,3 @@ else: return func return wrapper - -# DEBUG system infos -LOG.debug("pyMoul version: %s" % moul_version) -LOG.debug("Python: %s" % repr(sys.version_info)) -LOG.debug("Python: %s" % sys.version.replace('\n', ' ')) -LOG.debug("Platform: %s, OS name: %s" % (sys.platform, os.name)) - Modified: pymoul/trunk/src/moul/osdependent/darwin/__init__.py =================================================================== --- pymoul/trunk/src/moul/osdependent/darwin/__init__.py 2007-01-25 04:05:27 UTC (rev 73) +++ pymoul/trunk/src/moul/osdependent/darwin/__init__.py 2007-01-25 13:50:46 UTC (rev 74) @@ -37,7 +37,7 @@ """ moul_data = os.path.join(HOME, MOUL_DIR) -def getPyMoulIniDir(): +def getPyMoulDataDir(): """Get path to the pyMoul ini directory """ inidir= os.path.join(HOME, '.pymoul') Modified: pymoul/trunk/src/moul/osdependent/linux/__init__.py =================================================================== --- pymoul/trunk/src/moul/osdependent/linux/__init__.py 2007-01-25 04:05:27 UTC (rev 73) +++ pymoul/trunk/src/moul/osdependent/linux/__init__.py 2007-01-25 13:50:46 UTC (rev 74) @@ -36,9 +36,9 @@ The MOUL data directory contains log files, chatlogs, KI images and many more things. """ - moul_data = os.path.join(HOME, MOUL_DIR) + return os.path.join(HOME, MOUL_DIR) -def getPyMoulIniDir(): +def getPyMoulDataDir(): """Get path to the pyMoul ini directory """ inidir= os.path.join(HOME, '.pymoul') Modified: pymoul/trunk/src/moul/osdependent/win32/__init__.py =================================================================== --- pymoul/trunk/src/moul/osdependent/win32/__init__.py 2007-01-25 04:05:27 UTC (rev 73) +++ pymoul/trunk/src/moul/osdependent/win32/__init__.py 2007-01-25 13:50:46 UTC (rev 74) @@ -41,7 +41,7 @@ moul_data = os.path.join(mydoc, MOUL_DIR) return moul_data -def getPyMoulIniDir(): +def getPyMoulDataDir(): """Get path to the pyMoul ini file """ app_data = get_appdata() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |