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

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

More discovery (from browse) related improvments

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                self.logfile.write(string+'\n')
26               
27class Response:
28        ''' Holds all the parts of the response to an HTML get or post '''
29        def __init__(self,content='text/html'):
30                self.headers=[]
31                self.cookie=None
32                self.contentType=content
33                self.content=''
34        def write(self,out):
35                for name,value in self.headers:
36                        out.write("%s: %s\n"( name,value))
37                if self.cookie:
38                        out.write("%s\n"%self.cookie)
39                out.write("Content-type: %s\n"%self.contentType)
40                out.write("\n")
41                out.write(self.content)
42
43class RingBuffer(deque):
44    #deque is a python 2.4 class!
45    #credit http://www.onlamp.com/pub/a/python/excerpt/pythonckbk_chap1/index1.html
46    def __init__(self, size_max):
47        deque.__init__(self)
48        self.size_max = size_max
49    def append(self, datum):
50        deque.append(self, datum)
51        if len(self) > self.size_max:
52            self.popleft( )
53    def tolist(self):
54        return list(self)
55
56def wrapGetText(element,xpathExpression,multiple=0):
57        ''' Wraps a call to ET to get a text object in an error handler '''
58        if multiple:
59                r=element.findall(xpathExpression)
60        else:
61                r=[element.find(xpathExpression),]
62        try:
63                rr=[i.text for i in r]
64        except:
65                rr=['',]
66        if multiple: 
67                return rr
68        else: return rr[0] 
69
70def getURLdict(cgiFieldStorage):
71    ''' takes a cgi field storage object and converts it to a dictionary '''
72    result={}
73    for item in cgiFieldStorage:
74        result[item]=cgiFieldStorage[item].value
75    return result
76       
77
78
79if __name__=="__main__":
80    x='''<test attr='something'>some content with <a href="target"> display</a> url</test>'''
81    import ElementTree as ET
82    y=ET.fromstring(x)
83    print PrettyPrintHTML(y,['content',])
84    print PrettyPrint(y)
85   
Note: See TracBrowser for help on using the repository browser.