/[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 413 by jonathan, Wed Feb 19 16:52:04 2003 UTC revision 525 by jonathan, Wed Mar 12 19:12:30 2003 UTC
# Line 22  from xml.sax import make_parser, ErrorHa Line 22  from xml.sax import make_parser, ErrorHa
22  from Thuban import _  from Thuban import _
23  from Thuban.common import *  from Thuban.common import *
24    
25    from Thuban.Model.table import FIELDTYPE_INT, FIELDTYPE_DOUBLE, \
26         FIELDTYPE_STRING
27    
28  from Thuban.Model.session import Session  from Thuban.Model.session import Session
29  from Thuban.Model.map import Map  from Thuban.Model.map import Map
30  from Thuban.Model.layer import Layer  from Thuban.Model.layer import Layer
31  from Thuban.Model.color import Color  from Thuban.Model.color import Color
32  from Thuban.Model.proj import Projection  from Thuban.Model.proj import Projection
33  from Thuban.Model.classification import Classification, \  from Thuban.Model.classification import Classification, \
34      ClassDataDefault, ClassDataPoint, ClassDataRange, ClassDataMap      ClassGroupDefault, ClassGroupSingleton, ClassGroupRange, ClassGroupMap, \
35        ClassGroupProperties
36    
37    
38  def parse_color(color):  def parse_color(color):
# Line 150  class ProcessSession(xml.sax.handler.Con Line 154  class ProcessSession(xml.sax.handler.Con
154          stroke = parse_color(attrs.get((None, 'stroke'), "#000000"))          stroke = parse_color(attrs.get((None, 'stroke'), "#000000"))
155          stroke_width = int(attrs.get((None, 'stroke_width'), "1"))          stroke_width = int(attrs.get((None, 'stroke_width'), "1"))
156          self.aLayer = layer_class(title, filename, fill = fill,          self.aLayer = layer_class(title, filename, fill = fill,
157                                    stroke = stroke, stroke_width = stroke_width)                                    stroke = stroke, lineWidth = stroke_width)
158      start_dispatcher['layer'] = "start_layer"      start_dispatcher['layer'] = "start_layer"
159    
160      def end_layer(self, name, qname):      def end_layer(self, name, qname):
# Line 158  class ProcessSession(xml.sax.handler.Con Line 162  class ProcessSession(xml.sax.handler.Con
162      end_dispatcher['layer'] = "end_layer"      end_dispatcher['layer'] = "end_layer"
163    
164      def start_classification(self, name, qname, attrs):      def start_classification(self, name, qname, attrs):
165          self.aLayer.GetClassification().SetField(          field = attrs.get((None, 'field'), None)
166              attrs.get((None, 'field'), None))  
167            fieldType = attrs.get((None, 'field_type'), None)
168            dbFieldType = self.aLayer.GetFieldType(field)
169    
170            if fieldType != dbFieldType:
171                raise ValueError(_("xml field type differs from database!"))
172    
173            # setup conversion routines depending on the kind of data
174            # we will be seeing later on
175            if fieldType == FIELDTYPE_STRING:
176                self.conv = str
177            elif fieldType == FIELDTYPE_INT:
178                self.conv = lambda p: int(float(p))
179            elif fieldType == FIELDTYPE_DOUBLE:
180                self.conv = float
181    
182            self.aLayer.GetClassification().SetField(field)
183    
184      start_dispatcher['classification'] = "start_classification"      start_dispatcher['classification'] = "start_classification"
185    
186      def end_classification(self, name, qname):      def end_classification(self, name, qname):
# Line 167  class ProcessSession(xml.sax.handler.Con Line 188  class ProcessSession(xml.sax.handler.Con
188      end_dispatcher['classification'] = "end_classification"      end_dispatcher['classification'] = "end_classification"
189    
190      def start_clnull(self, name, qname, attrs):      def start_clnull(self, name, qname, attrs):
191          self.cl_data = ClassDataDefault()          self.cl_group = ClassGroupDefault()
192          self.cl_data.SetLabel(attrs.get((None, 'label'), ""))          self.cl_group.SetLabel(attrs.get((None, 'label'), ""))
193            self.cl_prop = ClassGroupProperties()
194      start_dispatcher['clnull'] = "start_clnull"      start_dispatcher['clnull'] = "start_clnull"
195    
196      def end_clnull(self, name, qname):      def end_clnull(self, name, qname):
197          self.aLayer.GetClassification().SetDefaultData(self.cl_data)          self.cl_group.SetProperties(self.cl_prop)
198          del self.cl_data          self.aLayer.GetClassification().SetDefaultGroup(self.cl_group)
199            del self.cl_group, self.cl_prop
200      end_dispatcher['clnull'] = "end_clnull"      end_dispatcher['clnull'] = "end_clnull"
201    
202      def start_clpoint(self, name, qname, attrs):      def start_clpoint(self, name, qname, attrs):
203          attrib_value = attrs.get((None, 'value'), "0")          attrib_value = attrs.get((None, 'value'), "0")
204    
205          try:          #try:
206              value  = Str2Num(attrib_value)              #value  = Str2Num(attrib_value)
207          except:          #except:
208              value  = attrib_value              #value  = attrib_value
209    
210          self.cl_data = ClassDataPoint(value)          value = self.conv(attrib_value)
211          self.cl_data.SetLabel(attrs.get((None, 'label'), ""))  
212            self.cl_group = ClassGroupSingleton(value)
213            self.cl_group.SetLabel(attrs.get((None, 'label'), ""))
214            self.cl_prop = ClassGroupProperties()
215    
216      start_dispatcher['clpoint'] = "start_clpoint"      start_dispatcher['clpoint'] = "start_clpoint"
217    
218      def end_clpoint(self, name, qname):      def end_clpoint(self, name, qname):
219          self.aLayer.GetClassification().AddClassData(self.cl_data)          self.cl_group.SetProperties(self.cl_prop)
220          del self.cl_data          self.aLayer.GetClassification().AddGroup(self.cl_group)
221            del self.cl_group, self.cl_prop
222      end_dispatcher['clpoint'] = "end_clpoint"      end_dispatcher['clpoint'] = "end_clpoint"
223    
224      def start_clrange(self, name, qname, attrs):      def start_clrange(self, name, qname, attrs):
225    
226          try:          try:
227              min = Str2Num(attrs.get((None, 'min'), "0"))              min = self.conv(attrs.get((None, 'min'), "0"))
228              max = Str2Num(attrs.get((None, 'max'), "0"))              max = self.conv(attrs.get((None, 'max'), "0"))
229                #min = Str2Num(attrs.get((None, 'min'), "0"))
230                #max = Str2Num(attrs.get((None, 'max'), "0"))
231          except ValueError:          except ValueError:
232              raise ValueError(_("Classification range is not a number!"))              raise ValueError(_("Classification range is not a number!"))
233    
234          self.cl_data = ClassDataRange(min, max)          self.cl_group = ClassGroupRange(min, max)
235          self.cl_data.SetLabel(attrs.get((None, 'label'), ""))          self.cl_group.SetLabel(attrs.get((None, 'label'), ""))
236            self.cl_prop = ClassGroupProperties()
237    
238      start_dispatcher['clrange'] = "start_clrange"      start_dispatcher['clrange'] = "start_clrange"
239    
240      def end_clrange(self, name, qname):      def end_clrange(self, name, qname):
241          self.aLayer.GetClassification().AddClassData(self.cl_data)          self.cl_group.SetProperties(self.cl_prop)
242          del self.cl_data          self.aLayer.GetClassification().AddGroup(self.cl_group)
243            del self.cl_group, self.cl_prop
244      end_dispatcher['clrange'] = "end_clrange"      end_dispatcher['clrange'] = "end_clrange"
245    
246      def start_cldata(self, name, qname, attrs):      def start_cldata(self, name, qname, attrs):
247          self.cl_data.SetStroke(parse_color(attrs.get((None, 'stroke'), "None")))          self.cl_prop.SetLineColor(
248          self.cl_data.SetStrokeWidth(              parse_color(attrs.get((None, 'stroke'), "None")))
249            self.cl_prop.SetLineWidth(
250              int(attrs.get((None, 'stroke_width'), "0")))              int(attrs.get((None, 'stroke_width'), "0")))
251          self.cl_data.SetFill(parse_color(attrs.get((None, 'fill'), "None")))          self.cl_prop.SetFill(parse_color(attrs.get((None, 'fill'), "None")))
252      start_dispatcher['cldata'] = "start_cldata"      start_dispatcher['cldata'] = "start_cldata"
253    
254      def end_cldata(self, name, qname):      def end_cldata(self, name, qname):
# Line 224  class ProcessSession(xml.sax.handler.Con Line 256  class ProcessSession(xml.sax.handler.Con
256      end_dispatcher['cldata'] = "end_cldata"      end_dispatcher['cldata'] = "end_cldata"
257    
258      def start_table(self, name, qname, attrs):      def start_table(self, name, qname, attrs):
259          print "table title: %s" % attrs.get('title', None)          #print "table title: %s" % attrs.get('title', None)
260            pass
261      start_dispatcher['table'] = "start_table"      start_dispatcher['table'] = "start_table"
262    
263      def end_table(self, name, qname):      def end_table(self, name, qname):
# Line 258  def load_session(filename): Line 291  def load_session(filename):
291      parser.setContentHandler(handler)      parser.setContentHandler(handler)
292      parser.setErrorHandler(ErrorHandler())      parser.setErrorHandler(ErrorHandler())
293      parser.setFeature(xml.sax.handler.feature_namespaces, 1)      parser.setFeature(xml.sax.handler.feature_namespaces, 1)
294    
295        #
296        # Well, this isn't pretty, but it appears that if you
297        # use Python 2.2 without the site-package _xmlplus then
298        # the following will fail, and without them it will work.
299        # However, if you do have the site-package and you don't
300        # call these functions, the reader raises an exception
301        #
302        try:
303            parser.setFeature(xml.sax.handler.feature_validation, 0)
304            parser.setFeature(xml.sax.handler.feature_external_ges, 0)
305            parser.setFeature(xml.sax.handler.feature_external_pes, 0)
306        except SAXNotRecognizedException:
307            pass
308    
309      parser.parse(file)      parser.parse(file)
310    
311      session = handler.theSession      session = handler.theSession

Legend:
Removed from v.413  
changed lines
  Added in v.525

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26