source: TI07-MOLES/trunk/PythonCode/wsgi/ndgObject.py @ 2098

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI07-MOLES/trunk/PythonCode/wsgi/ndgObject.py@2098
Revision 2098, 3.8 KB checked in by lawrence, 14 years ago (diff)

Further modifications to support xml versions of displayed records in
discovery.

Line 
1
2
3class ndgObject:
4
5    ''' This class instantiates an ndgObject and methods to obtain
6                (1) a downloadable xml representation from a repository,
7                (2) a printable xml representation '''
8   
9    def __init__(self,uri,config=None):
10        ''' Instantiate an ndg URI, and potentially methods for retrieving documents described by this URI'''
11        bits=uri.split(':')
12        bits2=uri.split('__')
13        ok=1
14        if len(bits)==3:
15            repository,schema,localID=bits
16        elif len(bits2)==3:
17            repository,schema,localID=bits2
18        else:
19            bits=uri.split('/')
20            if len(bits)==2:
21                schema='NDG-B0'
22                repository,localID=bits
23            else: ok=0
24        if not ok:
25            raise ValueError,'URI [%s] is not a valid NDG style URI'%uri
26        else:
27            self.repository,self.schema,self.localID=repository,schema,localID
28        self.setConfig(config)
29       
30    def setConfig(self,config):
31        ''' Set up the configuration for retrieving this document '''
32        if config is None:
33            self.gettable=-1
34            self.discoveryURL,self.baseURL,self.xmlURL,self.printableURL=None,None,None,None
35        else:
36            self.config=config
37            self.baseURL='%s?repository=%s&uri=%s__%s__%s'%(self.config.get('DISCOVERY','default'),
38                                        self.config.get('DEFAULT','repository'),
39                                        self.repository,self.schema,self.localID)
40            #we can only get this file for sure if it's a discovery record
41            if self.schema in ['DIF','DC']:
42                self.discoveryURL=self.baseURL+'&format=%s&type=html'%self.schema
43                self.gettable=1
44                self.xmlURL=self.discoveryURL.replace('html','xml')
45                self.printableURL=self.discoveryURL.replace('html','print')
46            elif self.schema in ['MOLES-B0']:
47                fmt=self.config.get('DISCOVERY','formatDefault','DIF')
48                self.discoveryURL=self.baseURL+'&format=%s&type=html'%fmt
49                self.gettable=1
50                self.xmlURL=self.baseURL+'&type=xml'
51                self.printableURL=self.baseURL+'&type=print'
52            else:# stub-B is not gettable as a discovery record
53                self.gettable=0
54                self.discoveryURL=None
55                self.xmlURL=self.baseURL+'&type=xml'
56                self.printableURL=self.baseURL+'&type=print'
57           
58    def get(self,type='xml'):
59        ''' Actually retrieve an xml record corresponding to an ndg URI '''
60        if self.gettable:
61            pass
62        else:
63            pass
64         
65
66import unittest
67
68class TestCase(unittest.TestCase):
69    """ Tests as required """
70   
71    def testURI1(self):
72        ''' Testing the underscore ID type '''
73        uri='badc.nerc.ac.uk__NDG-B0__local1'
74        n=ndgObject(uri)
75        self.__assertions(n)
76       
77    def __assertions(self,uri):
78        self.assertEqual('badc.nerc.ac.uk',uri.repository)
79        self.assertEqual('NDG-B0',uri.schema)
80        self.assertEqual('local1',uri.localID)
81       
82    def testURI2(self):
83        ''' Testing the colon form of ID '''
84        uri='badc.nerc.ac.uk:NDG-B0:local1'
85        n=ndgObject(uri)
86        self.__assertions(n)
87   
88    def testURI3(self):
89        ''' Testing the default MOLES form of id '''
90        uri='badc.nerc.ac.uk/local1'
91        n=ndgObject(uri)
92        self.__assertions(n)
93   
94    def testMakeURL(self):
95        ''' Tests making a url via a configuration file '''
96        uri='badc.nerc.ac.uk__NDG-B0__local1'
97        n=ndgObject(uri)
98        n.schema='DIF'
99        from Utilities import myConfig
100        config=myConfig('ndgDiscovery.config')
101        n.setConfig(config)
102        if n.gettable:
103            self.assertEqual(n.URL[0:5],'http:')
104
105if __name__=="__main__":
106    unittest.main()
Note: See TracBrowser for help on using the repository browser.