Mercurial > traipse_dev
comparison plugins/cherrypy/_cputil.py @ 0:4385a7d0efd1 grumpy-goblin
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
author | sirebral |
---|---|
date | Tue, 14 Jul 2009 16:41:58 -0500 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4385a7d0efd1 |
---|---|
1 """ | |
2 Copyright (c) 2004, CherryPy Team (team@cherrypy.org) | |
3 All rights reserved. | |
4 | |
5 Redistribution and use in source and binary forms, with or without modification, | |
6 are permitted provided that the following conditions are met: | |
7 | |
8 * Redistributions of source code must retain the above copyright notice, | |
9 this list of conditions and the following disclaimer. | |
10 * Redistributions in binary form must reproduce the above copyright notice, | |
11 this list of conditions and the following disclaimer in the documentation | |
12 and/or other materials provided with the distribution. | |
13 * Neither the name of the CherryPy Team nor the names of its contributors | |
14 may be used to endorse or promote products derived from this software | |
15 without specific prior written permission. | |
16 | |
17 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | |
18 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | |
19 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |
20 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE | |
21 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
22 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |
23 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |
24 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |
25 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
26 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
27 """ | |
28 | |
29 | |
30 """ | |
31 A module containing a few utility classes/functions used by CherryPy | |
32 """ | |
33 | |
34 import time, thread, cpg, _cpdefaults, cperror | |
35 | |
36 try: import zlib | |
37 except ImportError: pass | |
38 | |
39 class EmptyClass: | |
40 """ An empty class """ | |
41 pass | |
42 | |
43 def getSpecialFunction(name): | |
44 """ Return the special function """ | |
45 | |
46 # First, we look in the right-most object if this special function is implemented. | |
47 # If not, then we try the previous object and so on until we reach cpg.root | |
48 # If it's still not there, we use the implementation from the | |
49 # "_cpdefaults.py" module | |
50 | |
51 | |
52 moduleList = [_cpdefaults] | |
53 root = getattr(cpg, 'root', None) | |
54 if root: | |
55 moduleList.append(root) | |
56 # Try object path | |
57 try: | |
58 path = cpg.request.objectPath or cpg.request.path | |
59 except: | |
60 path = '/' | |
61 if path: | |
62 pathList = path.split('/')[1:] | |
63 | |
64 obj = cpg.root | |
65 previousObj = None | |
66 # Successively get objects from the path | |
67 for newObj in pathList: | |
68 previousObj = obj | |
69 try: | |
70 obj = getattr(obj, newObj) | |
71 moduleList.append(obj) | |
72 except AttributeError: | |
73 break | |
74 | |
75 moduleList.reverse() | |
76 for module in moduleList: | |
77 func = getattr(module, name, None) | |
78 if func != None: | |
79 return func | |
80 | |
81 raise cperror.InternalError, "Special function %s could not be found" % repr(name) | |
82 |