source: TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/Utilities.py @ 1152

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/Utilities.py@1152
Revision 1152, 2.5 KB checked in by lawrence, 13 years ago (diff)

Refactoring browse for consistent service binding
and icons.

Line 
1from collections import deque # python 2.4
2import ConfigParser
3import os
4import re
5
6class myConfig:
7        ''' Handle missing sections and variables in a config file a bit gracefully '''
8        def __init__(self,configfile):
9                self.config=ConfigParser.ConfigParser()
10                if not os.path.exists(configfile):
11                        raise 'No config file'
12                self.config.read(configfile)
13                logfile=self.get('logging','debugLog',None)
14                self.logfile=None
15                if logfile is not None:
16                        self.logfile=open(logfile,'a')
17
18        def get(self,section,key,default=None):
19                try:
20                        return self.config.get(section,key)
21                except:
22                        return default
23       
24        def log(self,string):
25            ''' Log some debug information '''
26            if self.logfile is None: return
27            if string is not None:
28                self.logfile.write('%s\n'%string)
29            else:
30                self.logfile.write('empty log entry\n')
31               
32class Response:
33        ''' Holds all the parts of the response to an HTML get or post '''
34        def __init__(self,content='text/html'):
35                self.headers=[]
36                self.cookie=None
37                self.contentType=content
38                self.content=''
39        def write(self,out):
40                for name,value in self.headers:
41                        out.write("%s: %s\n"( name,value))
42                if self.cookie:
43                        out.write("%s\n"%self.cookie)
44                out.write("Content-type: %s\n"%self.contentType)
45                out.write("\n")
46                out.write(self.content)
47
48class RingBuffer(deque):
49    #deque is a python 2.4 class!
50    #credit http://www.onlamp.com/pub/a/python/excerpt/pythonckbk_chap1/index1.html
51    def __init__(self, size_max):
52        deque.__init__(self)
53        self.size_max = size_max
54    def append(self, datum):
55        deque.append(self, datum)
56        if len(self) > self.size_max:
57            self.popleft( )
58    def tolist(self):
59        return list(self)
60
61def wrapGetText(element,xpathExpression,multiple=0):
62        ''' Wraps a call to ET to get a text object in an error handler '''
63        if multiple:
64                r=element.findall(xpathExpression)
65        else:
66                r=[element.find(xpathExpression),]
67        try:
68                rr=[i.text for i in r]
69        except:
70                rr=['',]
71        if multiple: 
72                return rr
73        else: return rr[0] 
74
75def getURLdict(cgiFieldStorage):
76    ''' takes a cgi field storage object and converts it to a dictionary '''
77    result={}
78    for item in cgiFieldStorage:
79        result[item]=cgiFieldStorage[item].value
80    return result
81
82
83if __name__=="__main__":
84    x='''<test attr='something'>some content with <a href="target"> display</a> url</test>'''
85    import ElementTree as ET
86    y=ET.fromstring(x)
87    print PrettyPrintHTML(y,['content',])
88    print PrettyPrint(y)
89   
Note: See TracBrowser for help on using the repository browser.