source: cowsserver/trunk/lib/cowsserver/controllers/catalogue.py @ 6423

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/cowsserver/trunk/lib/cowsserver/controllers/catalogue.py@6423
Revision 6423, 1.6 KB checked in by domlowe, 11 years ago (diff)

Catalogue controller modified to use getCSMLDatasetInfo method to csml connector - used to quickly get csml info without parsing entire file. Makes it much faster.

Line 
1import logging
2
3import cowsserver.lib.base as base
4
5from cowsserver.lib.base import csTemplateLoader , globalCSMLConnector, c
6import operator
7
8
9log = logging.getLogger(__name__)
10
11class CatalogueController(base.BaseController):
12    """
13    List available endpoints.
14    """
15
16    def index(self):
17       
18        log.debug("starting catalog index action")
19       
20        c.allwxs=[]
21        c.wfsonly=[]
22
23        #need to handle wfs only features separately so sort into two lists
24        listwfsonly = list(globalCSMLConnector.listwfsonly())
25       
26       
27        log.debug("globalCSMLConnector.list() = %s" % ([x for x in globalCSMLConnector.list()],))
28       
29        for fc in globalCSMLConnector.list():
30           
31            if globalCSMLConnector.isGroup(fc):
32                fc_name = fc
33            else:
34                try:
35                    docmetadata = globalCSMLConnector.getCSMLDatasetInfo(fc)
36                except ValueError:
37                    log.warning('could not open file %s'%fc)
38                    continue     
39                if docmetadata.has_key('name'):
40                    fc_name = docmetadata['name']
41                else:
42                    fc_name = fc
43               
44            if fc in listwfsonly:
45                c.wfsonly.append((fc, fc_name) )
46            else:
47                c.allwxs.append((fc, fc_name) )
48       
49       
50        def sortCFByName(a, b):
51            return cmp(a[1].lower(), b[1].lower())
52       
53        c.allwxs.sort(cmp=sortCFByName)
54       
55        c.wfsonly.sort(cmp=sortCFByName)
56               
57        t = csTemplateLoader.load('catalogue.xml')
58       
59        return t.generate(c=c).render()
Note: See TracBrowser for help on using the repository browser.