/[thuban]/branches/WIP-pyshapelib-bramz/Thuban/Model/load.py
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/Thuban/Model/load.py

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

revision 706 by jonathan, Wed Apr 23 08:44:21 2003 UTC revision 784 by jonathan, Tue Apr 29 17:30:18 2003 UTC
# Line 1  Line 1 
1  # Copyright (C) 2001, 2002 by Intevation GmbH  # Copyright (C) 2001, 2002, 2003 by Intevation GmbH
2  # Authors:  # Authors:
3  # Jan-Oliver Wagner <[email protected]>  # Jan-Oliver Wagner <[email protected]>
4  # Bernhard Herzog <[email protected]>  # Bernhard Herzog <[email protected]>
# Line 13  Parser for thuban session files. Line 13  Parser for thuban session files.
13    
14  __version__ = "$Revision$"  __version__ = "$Revision$"
15    
16  import sys, string, os  import string, os
17    
18  import xml.sax  import xml.sax
19  import xml.sax.handler  import xml.sax.handler
20  from xml.sax import make_parser, ErrorHandler, SAXNotRecognizedException  from xml.sax import make_parser, ErrorHandler, SAXNotRecognizedException
21    
22  from Thuban import _  from Thuban import _
 from Thuban.common import *  
23    
24  from Thuban.Model.table import FIELDTYPE_INT, FIELDTYPE_DOUBLE, \  from Thuban.Model.table import FIELDTYPE_INT, FIELDTYPE_DOUBLE, \
25       FIELDTYPE_STRING       FIELDTYPE_STRING
# Line 76  class XMLReader(xml.sax.handler.ContentH Line 75  class XMLReader(xml.sax.handler.ContentH
75    
76      def __init__(self):      def __init__(self):
77          self.chars = ''          self.chars = ''
         self.__parser = None  
78          self.__directory = ""          self.__directory = ""
79          self.__dispatchers = {}          self.__dispatchers = {}
80    
81      def read(self, file_or_filename):      def read(self, file_or_filename):
82    
83          if hasattr(file_or_filename, "write"):          if hasattr(file_or_filename, "read"):
84              # it's a file object              # it's a file object
85              self.__directory = ""              self.__directory = ""
86              self.__file = file_or_filename              self.__file = file_or_filename
# Line 91  class XMLReader(xml.sax.handler.ContentH Line 89  class XMLReader(xml.sax.handler.ContentH
89              self.__directory = os.path.dirname(filename)              self.__directory = os.path.dirname(filename)
90              self.__file = open(filename)              self.__file = open(filename)
91    
92          if self.__parser is None:          parser = make_parser()
93              self.__parser = make_parser()          parser.setContentHandler(self)
94              self.__parser.setContentHandler(self)          parser.setErrorHandler(ErrorHandler())
95              self.__parser.setErrorHandler(ErrorHandler())          parser.setFeature(xml.sax.handler.feature_namespaces, 1)
96              self.__parser.setFeature(xml.sax.handler.feature_namespaces, 1)  
97            #
98              #          # Well, this isn't pretty, but it appears that if you
99              # Well, this isn't pretty, but it appears that if you          # use Python 2.2 without the site-package _xmlplus then
100              # use Python 2.2 without the site-package _xmlplus then          # the following will fail, and without them it will work.
101              # the following will fail, and without them it will work.          # However, if you do have the site-package and you don't
102              # However, if you do have the site-package and you don't          # call these functions, the reader raises an exception
103              # call these functions, the reader raises an exception          #
104              #          # The reason we set these to 0 in the first place is
105              # The reason we set these to 0 in the first place is          # because there is an unresolved issue with external
106              # because there is an unresolved issue with external          # entities causing an exception in the reader
107              # entities causing an exception in the reader          #
108              #          try:
109              try:              parser.setFeature(xml.sax.handler.feature_validation,0)
110                  self.__parser.setFeature(xml.sax.handler.feature_validation,0)              parser.setFeature(xml.sax.handler.feature_external_ges,0)
111                  self.__parser.setFeature(xml.sax.handler.feature_external_ges,0)              parser.setFeature(xml.sax.handler.feature_external_pes,0)
112                  self.__parser.setFeature(xml.sax.handler.feature_external_pes,0)          except SAXNotRecognizedException:
113              except SAXNotRecognizedException:              pass
                 pass  
114    
115          self.__parser.parse(self.__file)          parser.parse(self.__file)
116    
117          self.close()          self.close()
118    
119      def close(self):      def close(self):
120          self.__file.close()          self.__file.close()
121                    
122      def GetFileName(self):      def GetFilename(self):
123          if hasattr(self.__file, "name"):          if hasattr(self.__file, "name"):
124              return self.__file.name              return self.__file.name
125    
# Line 133  class XMLReader(xml.sax.handler.ContentH Line 130  class XMLReader(xml.sax.handler.ContentH
130    
131    
132      def AddDispatchers(self, dict):      def AddDispatchers(self, dict):
133          self.__dispatchers.update(dict)          """Add the function names that should be used to process XML tags.
134    
135          #for key, (start, end) in dict.iteritems():          dict -- a dictionary whose keys are XML tag strings and whose values
136              #if start is not None: self.start_dispatcher[key] = start                  are pairs of strings such that the first string is
137              #if end   is not None: self.end_dispatcher[key]   = end                  the name of the function that should be called when the
138                    XML tag opens and the second string is the name of the
139                    function that should be called when the XML tag closes.
140                    If a pair element is None, no function is called.
141            """
142    
143            self.__dispatchers.update(dict)
144    
145      def startElementNS(self, name, qname, attrs):      def startElementNS(self, name, qname, attrs):
146          """Call the method given for name in self.start_dispatcher          """Call the method given for name in self.start_dispatcher
147          """          """
148          if name[0] is None:          if name[0] is None:
149              method_name = self.__dispatchers.get(name[1])              method_name = self.__dispatchers.get(name[1])
             #method_name = self.start_dispatcher.get(name[1])  
150          else:          else:
151              # Dispatch with namespace              # Dispatch with namespace
152              method_name = self.__dispatchers.get(name)              method_name = self.__dispatchers.get(name)
153          if method_name is not None \          if method_name is not None and method_name[0] is not None:
             and method_name[0] is not None:  
154              getattr(self, method_name[0])(name, qname, attrs)              getattr(self, method_name[0])(name, qname, attrs)
155    
156      def endElementNS(self, name, qname):      def endElementNS(self, name, qname):
# Line 157  class XMLReader(xml.sax.handler.ContentH Line 158  class XMLReader(xml.sax.handler.ContentH
158          """          """
159          if name[0] is None:          if name[0] is None:
160              method_name = self.__dispatchers.get(name[1])              method_name = self.__dispatchers.get(name[1])
             #method_name = self.end_dispatcher.get(name[1])  
161          else:          else:
162              # Dispatch with namespace              # Dispatch with namespace
163              method_name = self.__dispatchers.get(name)              method_name = self.__dispatchers.get(name)
164          if method_name is not None \          if method_name is not None and method_name[1] is not None:
             and method_name[1] is not None:  
165              getattr(self, method_name[1])(name, qname)              getattr(self, method_name[1])(name, qname)
166    
167  class SessionLoader(XMLReader):  class SessionLoader(XMLReader):
# Line 199  class SessionLoader(XMLReader): Line 198  class SessionLoader(XMLReader):
198      def start_map(self, name, qname, attrs):      def start_map(self, name, qname, attrs):
199          """Start a map."""          """Start a map."""
200          self.aMap = Map(attrs.get((None, 'title'), None))          self.aMap = Map(attrs.get((None, 'title'), None))
201            self.__projReceiver = self.aMap
202    
203      def end_map(self, name, qname):      def end_map(self, name, qname):
204          self.theSession.AddMap(self.aMap)          self.theSession.AddMap(self.aMap)
205            self.__projReceiver = None
206    
207      def start_projection(self, name, qname, attrs):      def start_projection(self, name, qname, attrs):
208            self.ProjectionName = attrs.get((None, 'name'), None)
209          self.ProjectionParams = [ ]          self.ProjectionParams = [ ]
210    
211      def end_projection(self, name, qname):      def end_projection(self, name, qname):
212          self.aMap.SetProjection(Projection(self.ProjectionParams))          self.__projReceiver.SetProjection(
213                Projection(self.ProjectionParams, self.ProjectionName))
214    
215      def start_parameter(self, name, qname, attrs):      def start_parameter(self, name, qname, attrs):
216          s = attrs.get((None, 'value'))          s = attrs.get((None, 'value'))
# Line 224  class SessionLoader(XMLReader): Line 227  class SessionLoader(XMLReader):
227          title = attrs.get((None, 'title'), "")          title = attrs.get((None, 'title'), "")
228          filename = attrs.get((None, 'filename'), "")          filename = attrs.get((None, 'filename'), "")
229          filename = os.path.join(self.GetDirectory(), filename)          filename = os.path.join(self.GetDirectory(), filename)
230            visible  = attrs.get((None, 'visible'), "true")
231          fill = parse_color(attrs.get((None, 'fill'), "None"))          fill = parse_color(attrs.get((None, 'fill'), "None"))
232          stroke = parse_color(attrs.get((None, 'stroke'), "#000000"))          stroke = parse_color(attrs.get((None, 'stroke'), "#000000"))
233          stroke_width = int(attrs.get((None, 'stroke_width'), "1"))          stroke_width = int(attrs.get((None, 'stroke_width'), "1"))
234          self.aLayer = layer_class(title, filename, fill = fill,          self.aLayer = layer_class(title,
235                                    stroke = stroke, lineWidth = stroke_width)                                    self.theSession.OpenShapefile(filename),
236                                      fill = fill, stroke = stroke,
237                                      lineWidth = stroke_width,
238                                      visible = visible != "false")
239    
240            self.__projReceiver = self.aLayer
241    
242      def end_layer(self, name, qname):      def end_layer(self, name, qname):
243          self.aMap.AddLayer(self.aLayer)          self.aMap.AddLayer(self.aLayer)
244            self.__projReceiver = None
245    
246      def start_classification(self, name, qname, attrs):      def start_classification(self, name, qname, attrs):
247          field = attrs.get((None, 'field'), None)          field = attrs.get((None, 'field'), None)
# Line 270  class SessionLoader(XMLReader): Line 280  class SessionLoader(XMLReader):
280      def start_clpoint(self, name, qname, attrs):      def start_clpoint(self, name, qname, attrs):
281          attrib_value = attrs.get((None, 'value'), "0")          attrib_value = attrs.get((None, 'value'), "0")
282    
         #try:  
             #value  = Str2Num(attrib_value)  
         #except:  
             #value  = attrib_value  
   
283          value = self.conv(attrib_value)          value = self.conv(attrib_value)
284    
285          self.cl_group = ClassGroupSingleton(value)          self.cl_group = ClassGroupSingleton(value)
# Line 292  class SessionLoader(XMLReader): Line 297  class SessionLoader(XMLReader):
297          try:          try:
298              min = self.conv(attrs.get((None, 'min'), "0"))              min = self.conv(attrs.get((None, 'min'), "0"))
299              max = self.conv(attrs.get((None, 'max'), "0"))              max = self.conv(attrs.get((None, 'max'), "0"))
             #min = Str2Num(attrs.get((None, 'min'), "0"))  
             #max = Str2Num(attrs.get((None, 'max'), "0"))  
300          except ValueError:          except ValueError:
301              raise ValueError(_("Classification range is not a number!"))              raise ValueError(_("Classification range is not a number!"))
302    

Legend:
Removed from v.706  
changed lines
  Added in v.784

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26