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