]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/blob - allmydata/util/assertutil.py
2adae8d672b54e18e354298efb8cd2d3c00a54ee
[tahoe-lafs/tahoe-lafs.git] / allmydata / util / assertutil.py
1 # Copyright (c) 2003-2006 Bryce "Zooko" Wilcox-O'Hearn
2 # mailto:zooko@zooko.com
3 # http://zooko.com/
4 # Permission is hereby granted, free of charge, to any person obtaining a
5 # copy of this work to deal in this work without restriction (including the 
6 # rights to use, modify, distribute, sublicense, and/or sell copies)
7
8 """
9 Tests useful in assertion checking, prints out nicely formated messages too.
10 """
11
12 from humanreadable import hr
13
14 from twisted.python import log
15
16 def _assert(___cond=False, *___args, **___kwargs):
17     if ___cond:
18         return True
19     msgbuf=[]
20     if ___args:
21         msgbuf.append("%s %s" % tuple(map(hr, (___args[0], type(___args[0]),))))
22         msgbuf.extend([", %s %s" % tuple(map(hr, (arg, type(arg),))) for arg in ___args[1:]])
23         if ___kwargs:
24             msgbuf.append(", %s: %s %s" % ((___kwargs.items()[0][0],) + tuple(map(hr, (___kwargs.items()[0][1], type(___kwargs.items()[0][1]),)))))
25     else:
26         if ___kwargs:
27             msgbuf.append("%s: %s %s" % ((___kwargs.items()[0][0],) + tuple(map(hr, (___kwargs.items()[0][1], type(___kwargs.items()[0][1]),)))))
28     msgbuf.extend([", %s: %s %s" % tuple(map(hr, (k, v, type(v),))) for k, v in ___kwargs.items()[1:]])
29
30     raise AssertionError, "".join(msgbuf)
31
32     return False
33
34 def precondition(___cond=False, *___args, **___kwargs):
35     try:
36         if ___cond:
37             return True
38         msgbuf=["precondition", ]
39         if ___args or ___kwargs:
40             msgbuf.append(": ")
41         if ___args:
42             msgbuf.append("%s %s" % tuple(map(hr, (___args[0], type(___args[0]),))))
43             msgbuf.extend([", %s %s" % tuple(map(hr, (arg, type(arg),))) for arg in ___args[1:]])
44             if ___kwargs:
45                 msgbuf.append(", %s: %s %s" % ((___kwargs.items()[0][0],) + tuple(map(hr, (___kwargs.items()[0][1], type(___kwargs.items()[0][1]),)))))
46         else:
47             if ___kwargs:
48                 msgbuf.append("%s: %s %s" % ((___kwargs.items()[0][0],) + tuple(map(hr, (___kwargs.items()[0][1], type(___kwargs.items()[0][1]),)))))
49         msgbuf.extend([", %s: %s %s" % tuple(map(hr, (k, v, type(v),))) for k, v in ___kwargs.items()[1:]])
50     except Exception, le:
51         log.msg("assertutil.precondition(): INTERNAL ERROR IN pyutil.assertutil. %s %s %s" % (type(le), repr(le), le.args,))
52         log.err()
53         raise le
54     except:
55         log.msg("assertutil.precondition(): INTERNAL ERROR IN pyutil.assertutil.")
56         log.err()
57         raise
58
59     raise AssertionError, "".join(msgbuf)
60
61     return False
62
63 def postcondition(___cond=False, *___args, **___kwargs):
64     if ___cond:
65         return True
66     msgbuf=["postcondition", ]
67     if ___args or ___kwargs:
68         msgbuf.append(": ")
69     if ___args:
70         msgbuf.append("%s %s" % tuple(map(hr, (___args[0], type(___args[0]),))))
71         msgbuf.extend([", %s %s" % tuple(map(hr, (arg, type(arg),))) for arg in ___args[1:]])
72         if ___kwargs:
73             msgbuf.append(", %s: %s %s" % ((___kwargs.items()[0][0],) + tuple(map(hr, (___kwargs.items()[0][1], type(___kwargs.items()[0][1]),)))))
74     else:
75         if ___kwargs:
76             msgbuf.append("%s: %s %s" % ((___kwargs.items()[0][0],) + tuple(map(hr, (___kwargs.items()[0][1], type(___kwargs.items()[0][1]),)))))
77     msgbuf.extend([", %s: %s %s" % tuple(map(hr, (k, v, type(v),))) for k, v in ___kwargs.items()[1:]])
78
79     raise AssertionError, "".join(msgbuf)
80
81     return False
82