1 | # $Id: Misc.py,v 1.8 2005/11/02 22:26:08 tavis_rudd Exp $ |
---|
2 | """Miscellaneous functions/objects used by Cheetah but also useful standalone. |
---|
3 | |
---|
4 | Meta-Data |
---|
5 | ================================================================================ |
---|
6 | Author: Mike Orr <iron@mso.oz.net> |
---|
7 | License: This software is released for unlimited distribution under the |
---|
8 | terms of the MIT license. See the LICENSE file. |
---|
9 | Version: $Revision: 1.8 $ |
---|
10 | Start Date: 2001/11/07 |
---|
11 | Last Revision Date: $Date: 2005/11/02 22:26:08 $ |
---|
12 | """ |
---|
13 | __author__ = "Mike Orr <iron@mso.oz.net>" |
---|
14 | __revision__ = "$Revision: 1.8 $"[11:-2] |
---|
15 | |
---|
16 | import os # Used in mkdirsWithPyInitFile. |
---|
17 | import types # Used in useOrRaise. |
---|
18 | import sys # Used in die. |
---|
19 | |
---|
20 | ################################################## |
---|
21 | ## MISCELLANEOUS FUNCTIONS |
---|
22 | |
---|
23 | def die(reason): |
---|
24 | sys.stderr.write(reason + '\n') |
---|
25 | sys.exit(1) |
---|
26 | |
---|
27 | def useOrRaise(thing, errmsg=''): |
---|
28 | """Raise 'thing' if it's a subclass of Exception. Otherwise return it. |
---|
29 | |
---|
30 | Called by: Cheetah.Servlet.cgiImport() |
---|
31 | """ |
---|
32 | if type(thing) == types.ClassType and issubclass(thing, Exception): |
---|
33 | raise thing(errmsg) |
---|
34 | return thing |
---|
35 | |
---|
36 | |
---|
37 | def checkKeywords(dic, legalKeywords, what='argument'): |
---|
38 | """Verify no illegal keyword arguments were passed to a function. |
---|
39 | |
---|
40 | in : dic, dictionary (**kw in the calling routine). |
---|
41 | legalKeywords, list of strings, the keywords that are allowed. |
---|
42 | what, string, suffix for error message (see function source). |
---|
43 | out: None. |
---|
44 | exc: TypeError if 'dic' contains a key not in 'legalKeywords'. |
---|
45 | called by: Cheetah.Template.__init__() |
---|
46 | """ |
---|
47 | # XXX legalKeywords could be a set when sets get added to Python. |
---|
48 | for k in dic.keys(): # Can be dic.iterkeys() if Python >= 2.2. |
---|
49 | if k not in legalKeywords: |
---|
50 | raise TypeError("'%s' is not a valid %s" % (k, what)) |
---|
51 | |
---|
52 | |
---|
53 | def removeFromList(list_, *elements): |
---|
54 | """Save as list_.remove(each element) but don't raise an error if |
---|
55 | element is missing. Modifies 'list_' in place! Returns None. |
---|
56 | """ |
---|
57 | for elm in elements: |
---|
58 | try: |
---|
59 | list_.remove(elm) |
---|
60 | except ValueError: |
---|
61 | pass |
---|
62 | |
---|
63 | |
---|
64 | def mkdirsWithPyInitFiles(path): |
---|
65 | """Same as os.makedirs (mkdir 'path' and all missing parent directories) |
---|
66 | but also puts a Python '__init__.py' file in every directory it |
---|
67 | creates. Does nothing (without creating an '__init__.py' file) if the |
---|
68 | directory already exists. |
---|
69 | """ |
---|
70 | dir, fil = os.path.split(path) |
---|
71 | if dir and not os.path.exists(dir): |
---|
72 | mkdirsWithPyInitFiles(dir) |
---|
73 | if not os.path.exists(path): |
---|
74 | os.mkdir(path) |
---|
75 | init = os.path.join(path, "__init__.py") |
---|
76 | f = open(init, 'w') # Open and close to produce empty file. |
---|
77 | f.close() |
---|
78 | |
---|
79 | |
---|
80 | |
---|
81 | # vim: shiftwidth=4 tabstop=4 expandtab |
---|