source: TI07-MOLES/tags/wsgi-beta/DC.py @ 2045

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI07-MOLES/tags/wsgi-beta/DC.py@5134
Revision 2045, 2.6 KB checked in by lawrence, 13 years ago (diff)

Sundry modes to wsgi browse/discovery on the road to deploying on
glue (mostly about the many possible locations of elementtree)

Line 
1from xmlHandler import xmlHandler,stripNamespace
2from htmlUtilities import span
3
4class DC(dict):
5    ''' This class represents Dublin Core in Python '''
6   
7    def __init__(self,xml):
8        ''' Initialise a Dublin Core record from xml '''
9       
10        self.metadataType='DC'
11        self.xml=xml
12        self.XH=xmlHandler(xml,string=1)
13        self.tree=self.XH.tree
14        self.order=[]
15
16        for tag in self.tree.getchildren():
17            name=stripNamespace(tag.tag)
18            u=(name,tag.text)
19            if u[1] is None: u=(name,'')
20            if name in self.keys():
21                if isinstance(self[name],list):
22                    self[name].append(u[1])
23                else:
24                    self[name]=[self[name],u[1]]
25            else:
26                self.order.append(name)
27                self.update((u,))
28           
29    def toHTML(self):
30       
31        def __nicelist(item):
32            k=''
33            if isinstance(item,list):
34                k+=item[0]
35                for i in item[1:]: k+=', %s'%i
36            else:
37                k+=item
38            return k
39           
40        m='<div class="metadata">'
41        h="%s<p>"%m
42        if 'title' in self.keys():
43            h+=span(self['title'],'title')+'<br/>'
44        if 'creator' in self.keys():
45            h+=span(__nicelist(self['creator']),'title')+'<br/>'
46        h+=m
47        if 'description' in self.keys():
48            h+='<div class="abstract">'+span('description: ','keywords')+span(self['description'],'metaentry')+'</div>'
49        for key in self.order:
50            if key not in ['title','creator','description']:
51                k=span(key,'keywords')+': '
52                k+=__nicelist(self[key])
53                h+=span(k,'metaentry')+'<br/>'
54        h+='</div></div>'
55        return h
56
57    def shortHTML(self,link):
58        pass
59
60import unittest
61class TestCase(unittest.TestCase):
62   
63    def testDC(self):
64       
65        x='''<oai_dc:dc xmlns:dc="http://purl.org/dc/elements/1.1/"
66         xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/"
67          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
68           xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/
69            http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
70            <dc:title> A test title</dc:title>
71            <dc:creator>Bryan</dc:creator>
72            <dc:creator>Anne</dc:creator>
73            <dc:subject>A</dc:subject><dc:subject>B</dc:subject></oai_dc:dc>'''
74        y=DC(x)
75        z=y['subject']
76        print z
77        a=y.toHTML()
78        print a
79       
80if __name__=="__main__":
81    unittest.main()
Note: See TracBrowser for help on using the repository browser.