initial checkin of qa api
[tests.git] / qaapi / qa / logger.py
1 import os
2 import traceback
3 import time
4
5 class Logfile:
6     """
7     Represents a logfile. Used to write data to a file. e.g.
8
9         logfile = Logfile('filename')
10         print >> logfile, data          
11     """         
12     def __init__(self, filename):
13         self.filename = filename
14
15     def write(self, data):
16         try:
17             fd = os.open(self.filename, os.O_WRONLY | os.O_CREAT | os.O_APPEND, 0644)
18             os.write(fd, '%s' % data)
19             os.close(fd)
20         except OSError:
21             sys.stderr.write(data)
22             sys.stderr.flush()
23
24
25
26 def log(method, method_name = None, \
27         log_filename = 'system.log', errorlog_filename = 'system_error.log'):
28     """
29     Logs whether the specified method completed successfully or not and 
30     returns the method result. Use as a decorator, e.g.,
31         
32         @log
33         def foo(...):
34             ...
35         
36     Or:
37         def foo(...):
38             ...
39         foo = log(foo)
40
41     Or:
42         result = log(foo)(...)                  
43
44     """
45     logfile = Logfile(log_filename)
46     error_logfile = Logfile(errorlog_filename)                  
47     
48     if method_name is None:
49         method_name = method.__name__
50     
51     def wrapper(*args, **kwds):
52         
53         print >> logfile, method_name + ": ",
54         try:
55             #print >> logfile, args, 
56             result = method(*args, **kwds)
57             print >> logfile, " [OK]"
58         except:
59             print >>logfile, " [FAILED]"
60             print >> error_logfile, "%s: %s\n" % (method_name, traceback.format_exc())
61             raise
62
63     return wrapper