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

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

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

revision 696 by jonathan, Wed Apr 16 16:39:49 2003 UTC revision 875 by jonathan, Fri May 9 16:31:39 2003 UTC
# Line 7  Line 7 
7    
8  import os  import os
9  import Thuban  import Thuban
10  from Thuban.Model.load import XMLProcessor, load_xmlfile  from Thuban import _
11  from Thuban.Model.save import XMLSaver  
12    from Thuban.Model.load import XMLReader
13    from Thuban.Model.save import XMLWriter
14  from Thuban.Model.proj import Projection, ProjFile  from Thuban.Model.proj import Projection, ProjFile
15    from xml.sax import SAXParseException
16    
17  projdir = \  projdir = \
18          os.path.join(Thuban.__path__[0], os.pardir, "Resources", "Projections")          os.path.join(Thuban.__path__[0], os.pardir, "Resources", "Projections")
# Line 19  usrdir  = os.path.expanduser("~/.thuban" Line 22  usrdir  = os.path.expanduser("~/.thuban"
22  PROJ_EXT = ".proj"  PROJ_EXT = ".proj"
23    
24  def ReadProjFile(filename):  def ReadProjFile(filename):
25      """Read a single .proj file and return a ProjFile object."""      """Read a single .proj file and return a ProjFile object.
26        
27        Raises IOError if the file cannot be opened.
28        Raises OSError if the file cannot be read.
29        Raises SAXParseException if the file is not valid XML.
30        """
31    
32      projs = []      handler = ProjFileReader()
33      try:      handler.read(filename)
34          handler = ProjFileReader(filename)      return handler.GetProjFile()
35    
36          load_xmlfile(filename, handler)  def WriteProjFile(pf):
37          pf = handler.GetProjFile()      """Write a single .proj file
     except OSError:  
         pass  
38    
39      return pf      Raises IOError if the file cannot be written.
40        """
41    
 def WriteProjFile(pf):  
42      saver = ProjFileSaver(pf)      saver = ProjFileSaver(pf)
43      saver.write(pf.GetFileName())      saver.write(pf.GetFilename())
44    
45  def GetProjections(dir):  def GetProjFiles(dir):
46      """Read all .proj files in the given directory and      """Read all .proj files in the given directory and
47      return a list of ProjFile objects.      return a list of ProjFile objects.
48      """      """
49    
50      list = []      list = []
51      try:      try:
52          for file in filter(lambda s: s.endswith(PROJ_EXT), os.listdir(dir)):          dirlist = os.listdir(dir)
             filename = os.path.join(dir, file)  
             list.extend(ReadProjFile(filename))  
53      except OSError:      except OSError:
54          pass          pass # if we can't get a directory listing just return []
55        else:
56            for file in filter(lambda s: s.endswith(PROJ_EXT), dirlist):
57                try:
58                    filename = os.path.join(dir, file)
59                    list.append(ReadProjFile(filename))
60                except (OSError, IOError, SAXParseException):
61                    pass # just move onto the next file
62    
63      return list      return list
64    
65  def GetSuppliedProjections():  def GetSystemProjFiles():
66      """Return a list of ProjFile objects from files that are      """Return a list of ProjFile objects from files that are
67      supplied by Thuban.      supplied by Thuban.
68    
69        If no files could not be opened return a list with one
70        empty projection file set to store data in the default file.
71      """      """
72      return GetProjections(projdir)      filename = os.path.join(projdir, "defaults.proj")
73        try:
74            return [ReadProjFile(filename)]
75        except (OSError, IOError, SAXParseException):
76            return [ProjFile(filename)]
77    
78    def GetUserProjFiles():
79        """Return a list of ProjFile objects from files that are user-defined.
80    
81  def GetUserProjections():      If no files could not be opened return a list with one
82      """Return a list of ProjFile objects from files that are user-defined."""      empty projection file set to store data in the default file.
83      return GetProjections(usrdir)      """
84    
85  class ProjFileReader(XMLProcessor):      filename = os.path.join(usrdir, "user.proj")
86        try:
87            return [ReadProjFile(filename)]
88        except (OSError, IOError, SAXParseException):
89            return [ProjFile(filename)]
90    
91    class ProjFileReader(XMLReader):
92    
93        def __init__(self):
94            XMLReader.__init__(self)
95            self.__pf = ProjFile("")
96    
97            XMLReader.AddDispatchers(self,
98                {'projection': ("start_projection", "end_projection"),
99                 'parameter':  ("start_parameter", None)})
100                
101        def read(self, file_or_filename):
102            XMLReader.read(self, file_or_filename)
103    
104      def __init__(self, filename):          self.__pf.SetFilename(XMLReader.GetFilename(self))
         XMLProcessor.__init__(self, os.path.dirname(filename))  
           
         self.pf = ProjFile(filename)  
105                    
106      def start_projection(self, name, qname, attrs):      def start_projection(self, name, qname, attrs):
107          self.params = []          self.params = []
108          self.name = attrs.get((None, 'name'), "Unknown")          self.name = self.encode(attrs.get((None, 'name'), _("Unknown")))
     XMLProcessor.start_dispatcher['projection'] = "start_projection"  
109    
110      def end_projection(self, name, qname):      def end_projection(self, name, qname):
111          self.pf.Add(Projection(self.params, self.name))          self.__pf.Add(Projection(self.params, self.name))
     XMLProcessor.end_dispatcher['projection'] = "end_projection"  
112    
113      def start_parameter(self, name, qname, attrs):      def start_parameter(self, name, qname, attrs):
114          s = attrs.get((None, 'value'))          s = attrs.get((None, 'value'))
115          s = str(s) # we can't handle unicode in proj          s = str(s) # we can't handle unicode in proj
116          self.params.append(s)          self.params.append(s)
     XMLProcessor.start_dispatcher['parameter'] = "start_parameter"  
117    
118      def GetProjFile(self):      def GetProjFile(self):
119          return self.pf          return self.__pf
120    
121    
122  class ProjFileSaver(XMLSaver):  class ProjFileSaver(XMLWriter):
123    
124      def __init__(self, pf):      def __init__(self, pf):
125          XMLSaver.__init__(self)          XMLWriter.__init__(self)
126          self.pf = pf          self.__pf = pf
127    
128      def write(self, file_or_filename):      def write(self, file_or_filename):
129          XMLSaver.write(self, file_or_filename)          XMLWriter.write(self, file_or_filename)
130    
131          self.write_header("projfile", "thuban.dtd")          self.write_header("projfile", "projfile.dtd")
132          self.write_projfile(self.pf)          self.write_projfile(self.__pf)
133          self.close()          self.close()
134    
135      def write_projfile(self, pf):      def write_projfile(self, pf):
# Line 107  class ProjFileSaver(XMLSaver): Line 139  class ProjFileSaver(XMLSaver):
139          for p in pf.GetProjections():          for p in pf.GetProjections():
140              self.open_element("projection", {"name": p.GetName()})              self.open_element("projection", {"name": p.GetName()})
141    
142              for param in p.GetParameters():              for param in p.GetAllParameters():
143                  self.write_element("parameter", {"value": param})                  self.write_element("parameter", {"value": param})
144    
145              self.close_element("projection")              self.close_element("projection")

Legend:
Removed from v.696  
changed lines
  Added in v.875

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26