/[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 1161 by jonathan, Thu Jun 12 12:41:01 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.xmlreader import XMLReader
17    from Thuban.Model.xmlwriter 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):  has_gdal_support = lambda: False
29      """Read a single .proj file and return a ProjFile object."""  try:
30        import gdal
31        """Return True if the gdal library is available."""
32        has_gdal_support = lambda: True
33    except ImportError:
34        pass
35    
36    def read_proj_file(filename):
37        """Read a single .proj file and return a ProjFile object.
38        
39        Raises IOError if the file cannot be opened.
40        Raises OSError if the file cannot be read.
41        Raises SAXParseException if the file is not valid XML.
42        """
43    
44      projs = []      handler = ProjFileReader()
45      try:      handler.read(filename)
46          handler = ProjFileReader(filename)      return handler.GetProjFile()
47    
48          load_xmlfile(filename, handler)  def write_proj_file(pf):
49          pf = handler.GetProjFile()      """Write a single .proj file
     except OSError:  
         pass  
50    
51      return pf      Raises IOError if the file cannot be written.
52        """
53    
 def WriteProjFile(pf):  
54      saver = ProjFileSaver(pf)      saver = ProjFileSaver(pf)
55      saver.write(pf.GetFileName())      saver.write(pf.GetFilename())
56    
57  def GetProjections(dir):  def get_proj_files(dir):
58      """Read all .proj files in the given directory and      """Read all .proj files in the given directory and
59      return a list of ProjFile objects.      return a list of ProjFile objects.
60      """      """
61    
62      list = []      list = []
63      try:      try:
64          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))  
65      except OSError:      except OSError:
66          pass          pass # if we can't get a directory listing just return []
67        else:
68            for file in filter(lambda s: s.endswith(PROJ_EXT), dirlist):
69                try:
70                    filename = os.path.join(dir, file)
71                    list.append(ReadProjFile(filename))
72                except (OSError, IOError, SAXParseException):
73                    pass # just move onto the next file
74    
75      return list      return list
76    
77  def GetSuppliedProjections():  def get_system_proj_files():
78      """Return a list of ProjFile objects from files that are      """Return a list of ProjFile objects from files that are
79      supplied by Thuban.      supplied by Thuban.
80    
81        If no files could not be opened return a list with one
82        empty projection file set to store data in the default file.
83      """      """
84      return GetProjections(projdir)      filename = os.path.join(projdir, "defaults.proj")
85        try:
86            return [ReadProjFile(filename)]
87        except (OSError, IOError, SAXParseException):
88            return [ProjFile(filename)]
89    
90  def GetUserProjections():  def get_user_proj_files():
91      """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)  
92    
93  class ProjFileReader(XMLProcessor):      If no files could not be opened return a list with one
94        empty projection file set to store data in the default file.
95        """
96    
97      def __init__(self, filename):      filename = os.path.join(usrdir, "user.proj")
98          XMLProcessor.__init__(self, os.path.dirname(filename))      try:
99                    return [ReadProjFile(filename)]
100          self.pf = ProjFile(filename)      except (OSError, IOError, SAXParseException):
101            return [ProjFile(filename)]
102    
103    class ProjFileReader(XMLReader):
104    
105        def __init__(self):
106            XMLReader.__init__(self)
107            self.__pf = ProjFile("")
108    
109            XMLReader.AddDispatchers(self,
110                {'projection': ("start_projection", "end_projection"),
111                 'parameter':  ("start_parameter", None)})
112                
113        def read(self, file_or_filename):
114            XMLReader.read(self, file_or_filename)
115    
116            self.__pf.SetFilename(XMLReader.GetFilename(self))
117                    
118      def start_projection(self, name, qname, attrs):      def start_projection(self, name, qname, attrs):
119          self.params = []          self.params = []
120          self.name = attrs.get((None, 'name'), "Unknown")          self.name = self.encode(attrs.get((None, 'name'), _("Unknown")))
     XMLProcessor.start_dispatcher['projection'] = "start_projection"  
121    
122      def end_projection(self, name, qname):      def end_projection(self, name, qname):
123          self.pf.Add(Projection(self.params, self.name))          self.__pf.Add(Projection(self.params, self.name))
     XMLProcessor.end_dispatcher['projection'] = "end_projection"  
124    
125      def start_parameter(self, name, qname, attrs):      def start_parameter(self, name, qname, attrs):
126          s = attrs.get((None, 'value'))          s = attrs.get((None, 'value'))
127          s = str(s) # we can't handle unicode in proj          s = str(s) # we can't handle unicode in proj
128          self.params.append(s)          self.params.append(s)
     XMLProcessor.start_dispatcher['parameter'] = "start_parameter"  
129    
130      def GetProjFile(self):      def GetProjFile(self):
131          return self.pf          return self.__pf
   
132    
133  class ProjFileSaver(XMLSaver):  class ProjFileSaver(XMLWriter):
134    
135      def __init__(self, pf):      def __init__(self, pf):
136          XMLSaver.__init__(self)          XMLWriter.__init__(self)
137          self.pf = pf          self.__pf = pf
138    
139      def write(self, file_or_filename):      def write(self, file_or_filename):
140          XMLSaver.write(self, file_or_filename)          XMLWriter.write(self, file_or_filename)
141    
142          self.write_header("projfile", "thuban.dtd")          self.write_header("projfile", "projfile.dtd")
143          self.write_projfile(self.pf)          self.write_projfile(self.__pf)
144          self.close()          self.close()
145    
146      def write_projfile(self, pf):      def write_projfile(self, pf):
# Line 107  class ProjFileSaver(XMLSaver): Line 150  class ProjFileSaver(XMLSaver):
150          for p in pf.GetProjections():          for p in pf.GetProjections():
151              self.open_element("projection", {"name": p.GetName()})              self.open_element("projection", {"name": p.GetName()})
152    
153              for param in p.GetParameters():              for param in p.GetAllParameters():
154                  self.write_element("parameter", {"value": param})                  self.write_element("parameter", {"value": param})
155    
156              self.close_element("projection")              self.close_element("projection")

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26