/[thuban]/trunk/thuban/Extensions/wms/parser.py
ViewVC logotype

Diff of /trunk/thuban/Extensions/wms/parser.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2155 by joey, Sat Apr 10 19:12:41 2004 UTC revision 2170 by joey, Tue Apr 13 17:21:19 2004 UTC
# Line 52  import xml.dom.minidom Line 52  import xml.dom.minidom
52    
53  from domutils import getElementsByName, getElementByName  from domutils import getElementsByName, getElementByName
54    
55    from Thuban import _
56    
57  class WMSCapabilitiesParser:  class WMSCapabilitiesParser:
58      """      """
59      Thuban class to parse capabilities supplied as large string.      Thuban class to parse capabilities supplied as large string.
# Line 68  class WMSCapabilitiesParser: Line 70  class WMSCapabilitiesParser:
70      access = None      access = None
71      formats = None      formats = None
72      srs_discrepancies = None      srs_discrepancies = None
73        error = None
74    
75    
76      def __init__(self):      def __init__(self):
# Line 78  class WMSCapabilitiesParser: Line 81  class WMSCapabilitiesParser:
81          # Note that we must not initialise internal variables of the          # Note that we must not initialise internal variables of the
82          # class in a mutable way or it will be shared among all          # class in a mutable way or it will be shared among all
83          # instances.  None is immutable, [] is not.          # instances.  None is immutable, [] is not.
84          layers = []          self.error = []
85    
86    
87      def grok(self, data):      def grok(self, data):
# Line 152  class WMSCapabilitiesParser: Line 155  class WMSCapabilitiesParser:
155          foo = getElementByName(top, 'Title')          foo = getElementByName(top, 'Title')
156          if foo and len(foo.childNodes[0].data):          if foo and len(foo.childNodes[0].data):
157              self.layers[index]['title'] = foo.childNodes[0].data              self.layers[index]['title'] = foo.childNodes[0].data
158            else:
159                # A <Title> is required for each layer, <name> is optional
160                # See OGC 01-068r3, 7.1.4.5.1 and 7.1.4.5.2
161                self.error.append(_("No title found for layer #%d") % index)
162    
163          foo = getElementByName(top, 'Name')          foo = getElementByName(top, 'Name')
164          if foo and len(foo.childNodes[0].data):          if foo and len(foo.childNodes[0].data):
# Line 163  class WMSCapabilitiesParser: Line 170  class WMSCapabilitiesParser:
170                  if srs[0:5] == 'EPSG:':                  if srs[0:5] == 'EPSG:':
171                      srs = srs[5:]                      srs = srs[5:]
172                  try:                  try:
173                      self.layers[index]['srs'].append(srs)                      int(srs)
174                  except KeyError:                      try:
175                      self.layers[index]['srs'] = [srs]                          self.layers[index]['srs'].append(srs)
176                        except KeyError:
177                            self.layers[index]['srs'] = [srs]
178                    except ValueError:
179                        if srs[0:4].upper() == 'AUTO' \
180                               or srs[0:4].upper() == 'NONE':
181                            try:
182                                self.layers[index]['_srs_'].append(srs)
183                            except KeyError:
184                                self.layers[index]['_srs_'] = [srs]
185                        else:
186                            self.error.append(_("SRS '%s' is not numerical and not"
187                                                " AUTO/NONE in layer '%s'") \
188                                              % (srs, self.layers[index]['title']))
189    
190          foo = getElementByName(top, 'LatLonBoundingBox')          foo = getElementByName(top, 'LatLonBoundingBox')
191          if foo is not None:          if foo is not None:
# Line 438  class WMSCapabilitiesParser: Line 458  class WMSCapabilitiesParser:
458                              if srs in pivot['bbox']:                              if srs in pivot['bbox']:
459                                  return pivot['bbox'][srs]                                  return pivot['bbox'][srs]
460    
461            # No matching BBox found, let's see if it was EPSG:4326
462            if srs == '4326':
463                return self.getLayerLatLonBBox(name)
464    
465          return None          return None
466    
467    
# Line 482  if __name__ == "__main__": Line 506  if __name__ == "__main__":
506    
507      import os      import os
508    
509        sample = "test/sample.xml"
510      try:      try:
511          f = open("test/sample.xml", "r")          f = open(sample, "r")
512      except IOError:      except IOError:
513          try:          try:
514              f = open(os.path.dirname(__file__) + "/test/sample.xml", "r")              f = open(os.path.dirname(__file__) + "/" + sample, "r")
515          except IOError:          except IOError:
516              print "Cannot open sample.xml for reading"              print "Cannot open %s for reading" % sample
517    
518      if f is not None:      if f is not None:
519          sample = f.read();          sample = f.read();

Legend:
Removed from v.2155  
changed lines
  Added in v.2170

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26