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

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26