Revision: 4949
Author: wikipedian
Date: 2008-01-30 12:19:31 +0000 (Wed, 30 Jan 2008)
Log Message:
-----------
Each time a script is called, a line is now written to the file logs/commands.log. This
line contains a timestamp, the called module, and the parameters.
You can use this new logfile to track errors and to report bugs.
Modified Paths:
--------------
trunk/pywikipedia/wikipedia.py
Modified: trunk/pywikipedia/wikipedia.py
===================================================================
--- trunk/pywikipedia/wikipedia.py 2008-01-30 10:17:03 UTC (rev 4948)
+++ trunk/pywikipedia/wikipedia.py 2008-01-30 12:19:31 UTC (rev 4949)
@@ -5182,6 +5182,17 @@
except ValueError:
return args[0]
+def decodeArg(arg):
+ if sys.platform=='win32' and config.console_encoding == 'cp850':
+ # Western Windows versions give parameters encoded as windows-1252
+ # even though the console encoding is cp850.
+ return unicode(arg, 'windows-1252')
+ else:
+ # Linux uses the same encoding for both.
+ # I don't know how non-Western Windows versions behave.
+ return unicode(arg, config.console_encoding)
+
+
def handleArgs():
"""Handle standard command line arguments, return the rest as a list.
@@ -5189,7 +5200,6 @@
global parameters such as -lang or -log. Returns a list of all arguments
that are not global. This makes sure that global arguments are applied
first, regardless of the order in which the arguments were given.
-
"""
global default_code, default_family, verbose
# get commandline arguments
@@ -5201,14 +5211,7 @@
moduleName = calledModuleName()
nonGlobalArgs = []
for arg in args[1:]:
- if sys.platform=='win32' and config.console_encoding == 'cp850':
- # Western Windows versions give parameters encoded as windows-1252
- # even though the console encoding is cp850.
- arg = unicode(arg, 'windows-1252')
- else:
- # Linux uses the same encoding for both.
- # I don't know how non-Western Windows versions behave.
- arg = unicode(arg, config.console_encoding)
+ arg = decodeArg(arg)
if arg == '-help':
showHelp(moduleName)
sys.exit(0)
@@ -5464,6 +5467,26 @@
result += diff[i]
output(result)
+def writeToCommandLogFile():
+ """
+ Save the name of the called module along with all parameters to
+ logs/commands.log so that the user can look it up later to track errors
+ or report bugs.
+ """
+ # put quotation marks around all parameters
+ args = [decodeArg(sys.argv[0])] + map(lambda s: decodeArg('"%s"' % s), sys.argv[1:])
+ commandLogFilename = config.datafilepath('logs', 'commands.log')
+ try:
+ commandLogFile = codecs.open(commandLogFilename, 'a', 'utf-8')
+ except IOError:
+ commandLogFile = codecs.open(commandLogFilename, 'w', 'utf-8')
+ # add a timestamp in ISO 8601 formulation
+ isoDate = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
+ commandLogFile.write(isoDate + ' ')
+ s = u' '.join(args)
+ commandLogFile.write(s + '\n')
+ commandLogFile.close()
+
def setLogfileStatus(enabled, logname = None):
global logfile
if enabled:
@@ -5481,6 +5504,8 @@
if '*' in config.log or calledModuleName() in config.log:
setLogfileStatus(True)
+writeToCommandLogFile()
+
colorTagR = re.compile('\03{.*?}', re.UNICODE)
def log(text):