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

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

Coding to support showing full xml documents etc in browse, note
not tested as underlying web services not workign at moment.

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
70
71       
72
73
74if __name__=="__main__":
75    x='''<test attr='something'>some content with <a href="target"> display</a> url</test>'''
76    import ElementTree as ET
77    y=ET.fromstring(x)
78    print PrettyPrintHTML(y,['content',])
79    print PrettyPrint(y)
80   
Note: See TracBrowser for help on using the repository browser.