/[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 2145 by joey, Tue Mar 30 18:05:53 2004 UTC revision 2165 by joey, Tue Apr 13 16:42:48 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 89  class WMSCapabilitiesParser: Line 92  class WMSCapabilitiesParser:
92          Information should only be retrieved with the respective          Information should only be retrieved with the respective
93          get*() methods.          get*() methods.
94          """          """
95          root = xml.dom.minidom.parseString(data).documentElement          xml_dom = xml.dom.minidom.parseString(data)
96            root = xml_dom.documentElement
97    
98          # Extract the title          # Extract the title
99          foo = getElementByName(getElementByName(root, 'Service'), 'Title')          foo = getElementByName(getElementByName(root, 'Service'), 'Title')
# Line 104  class WMSCapabilitiesParser: Line 108  class WMSCapabilitiesParser:
108          # Extract fees information          # Extract fees information
109          foo = getElementByName(getElementByName(root, 'Service'), 'Fees')          foo = getElementByName(getElementByName(root, 'Service'), 'Fees')
110          if foo and len(foo.childNodes[0].data) \          if foo and len(foo.childNodes[0].data) \
111                 and lower(foo.childNodes[0].data) != 'none':                 and foo.childNodes[0].data.lower() != 'none':
112              self.fees = foo.childNodes[0].data              self.fees = foo.childNodes[0].data
113                    
114          # Extract access information          # Extract access information
115          foo = getElementByName(getElementByName(root, 'Service'),          foo = getElementByName(getElementByName(root, 'Service'),
116                                 'AccessConstraints')                                 'AccessConstraints')
117          if foo and len(foo.childNodes[0].data) \          if foo and len(foo.childNodes[0].data) \
118                 and lower(foo.childNodes[0].data) != 'none':                 and foo.childNodes[0].data.lower() != 'none':
119              self.access = foo.childNodes[0].data              self.access = foo.childNodes[0].data
120                    
121          # Extract output format information          # Extract output format information
# Line 125  class WMSCapabilitiesParser: Line 129  class WMSCapabilitiesParser:
129          self.peekLayers(getElementByName(getElementByName(          self.peekLayers(getElementByName(getElementByName(
130              root, 'Capability'), 'Layer'), -1)              root, 'Capability'), 'Layer'), -1)
131    
132            xml_dom.unlink()
133    
134    
135      def peekLayers(self, top, parent):      def peekLayers(self, top, parent):
136          """          """
# Line 149  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 479  if __name__ == "__main__": Line 489  if __name__ == "__main__":
489    
490      import os      import os
491    
492        sample = "test/sample.xml"
493      try:      try:
494          f = open("test/sample.xml", "r")          f = open(sample, "r")
495      except IOError:      except IOError:
496          try:          try:
497              f = open(os.path.dirname(__file__) + "/test/sample.xml", "r")              f = open(os.path.dirname(__file__) + "/" + sample, "r")
498          except IOError:          except IOError:
499              print "Cannot open sample.xml for reading"              print "Cannot open %s for reading" % sample
500    
501      if f is not None:      if f is not None:
502          sample = f.read();          sample = f.read();

Legend:
Removed from v.2145  
changed lines
  Added in v.2165

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26