/[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 1161 by jonathan, Thu Jun 12 12:41:01 2003 UTC revision 1786 by bh, Wed Oct 8 10:39:11 2003 UTC
# Line 5  Line 5 
5  # This program is free software under the GPL (>=v2)  # This program is free software under the GPL (>=v2)
6  # Read the file COPYING coming with Thuban for details.  # Read the file COPYING coming with Thuban for details.
7    
8    """Handle resources loaded from files such as projections"""
9    
10    __version__ = "$Revision$"
11    # $Source$
12    # $Id$
13    
14    
15  import os  import os
16  import os.path  import os.path
17    
# Line 21  from xml.sax import SAXParseException Line 28  from xml.sax import SAXParseException
28  projdir = \  projdir = \
29          os.path.join(Thuban.__path__[0], os.pardir, "Resources", "Projections")          os.path.join(Thuban.__path__[0], os.pardir, "Resources", "Projections")
30    
 usrdir  = get_application_dir()  
31    
32  PROJ_EXT = ".proj"  PROJ_EXT = ".proj"
33    
34  has_gdal_support = lambda: False  has_gdal_support = lambda: False
35  try:  try:
36        # first try to see if our extension module is there. if it
37        # wasn't even compiled, we obviously don't have gdal support.
38        import gdalwarp
39    
40        # now try to import the python extension. if this doesn't
41        # exist then we can't do anything.
42      import gdal      import gdal
43    
44      """Return True if the gdal library is available."""      """Return True if the gdal library is available."""
45      has_gdal_support = lambda: True      has_gdal_support = lambda: True
46  except ImportError:  except ImportError:
47      pass      pass
48    
49  def read_proj_file(filename):  def read_proj_file(filename):
50      """Read a single .proj file and return a ProjFile object.      """Read a .proj file and return a ProjFile object and warnings
51        
52      Raises IOError if the file cannot be opened.      The return value is a tuple with the ProjFile object and a list of
53      Raises OSError if the file cannot be read.      strings with warnings messages that might have been generated by the
54      Raises SAXParseException if the file is not valid XML.      proj ifle parser.
     """  
55    
56        Raises IOError if the file cannot be opened, OSError if the file
57        cannot be read and SAXParseException if the file is not valid XML.
58        """
59      handler = ProjFileReader()      handler = ProjFileReader()
60      handler.read(filename)      handler.read(filename)
61      return handler.GetProjFile()      return handler.GetProjFile(), handler.GetWarnings()
62    
63  def write_proj_file(pf):  def write_proj_file(pf):
64      """Write a single .proj file      """Write a single .proj file
# Line 54  def write_proj_file(pf): Line 69  def write_proj_file(pf):
69      saver = ProjFileSaver(pf)      saver = ProjFileSaver(pf)
70      saver.write(pf.GetFilename())      saver.write(pf.GetFilename())
71    
 def get_proj_files(dir):  
     """Read all .proj files in the given directory and  
     return a list of ProjFile objects.  
     """  
72    
73      list = []  def get_system_proj_file():
74      try:      """Return the standard projections and a list with warnings
         dirlist = os.listdir(dir)  
     except OSError:  
         pass # if we can't get a directory listing just return []  
     else:  
         for file in filter(lambda s: s.endswith(PROJ_EXT), dirlist):  
             try:  
                 filename = os.path.join(dir, file)  
                 list.append(ReadProjFile(filename))  
             except (OSError, IOError, SAXParseException):  
                 pass # just move onto the next file  
   
     return list  
   
 def get_system_proj_files():  
     """Return a list of ProjFile objects from files that are  
     supplied by Thuban.  
75    
76      If no files could not be opened return a list with one      The projections read from the default thuban projection file
77      empty projection file set to store data in the default file.      (usually in Resources/Projections/defaults.proj). The return value
78        is a tuple with the projections in a ProjFile object and a list of
79        strings with warning messages. The warnings list is usually empty
80        but may contain messages about ignored errors.
81    
82        If the file could could not be opened return an empty projection
83        file object set to store data in the default file.
84      """      """
85      filename = os.path.join(projdir, "defaults.proj")      filename = os.path.join(projdir, "defaults.proj")
86      try:      try:
87          return [ReadProjFile(filename)]          return read_proj_file(filename)
88      except (OSError, IOError, SAXParseException):      except (OSError, IOError, SAXParseException), val:
89          return [ProjFile(filename)]          msg = _('Could not read "%s": %s') % (filename, str(val))
90            return ProjFile(filename), [msg]
91  def get_user_proj_files():  
92      """Return a list of ProjFile objects from files that are user-defined.  def get_user_proj_file():
93        """Return the user's projections and a list with warnings
94    
95        The projections read from the user's thuban projection file (usually
96        in ~/.thuban/user.proj). The return value is a tuple with the
97        projections in a ProjFile object and a list of strings with warning
98        messages. The warnings list is usually empty but may contain
99        messages about ignored errors.
100    
101      If no files could not be opened return a list with one      If the file could could not be opened return an empty projection
102      empty projection file set to store data in the default file.      file object set to store data in the default file.
103      """      """
104        usrdir  = get_application_dir()
105      filename = os.path.join(usrdir, "user.proj")      filename = os.path.join(usrdir, "user.proj")
106      try:      try:
107          return [ReadProjFile(filename)]          return read_proj_file(filename)
108      except (OSError, IOError, SAXParseException):      except (OSError, IOError, SAXParseException):
109          return [ProjFile(filename)]          msg = _('Could not read "%s": %s') % (filename, str(val))
110            return ProjFile(filename), [msg]
111    
112    
113  class ProjFileReader(XMLReader):  class ProjFileReader(XMLReader):
114    
115      def __init__(self):      def __init__(self):
116          XMLReader.__init__(self)          XMLReader.__init__(self)
117          self.__pf = ProjFile("")          self.projfile = ProjFile("")
118            self.warnings = []
119    
120          XMLReader.AddDispatchers(self,          XMLReader.AddDispatchers(self,
121              {'projection': ("start_projection", "end_projection"),              {'projection': ("start_projection", "end_projection"),
122               'parameter':  ("start_parameter", None)})               'parameter':  ("start_parameter", None)})
123                
124      def read(self, file_or_filename):      def read(self, file_or_filename):
125          XMLReader.read(self, file_or_filename)          XMLReader.read(self, file_or_filename)
126    
127          self.__pf.SetFilename(XMLReader.GetFilename(self))          self.projfile.SetFilename(XMLReader.GetFilename(self))
128            
129      def start_projection(self, name, qname, attrs):      def start_projection(self, name, qname, attrs):
130          self.params = []          self.params = []
131          self.name = self.encode(attrs.get((None, 'name'), _("Unknown")))          name = self.encode(attrs.get((None, 'name')))
132            if name is None:
133                name = _("Unknown")
134            self.name = name
135    
136      def end_projection(self, name, qname):      def end_projection(self, name, qname):
137          self.__pf.Add(Projection(self.params, self.name))          try:
138                proj = Projection(self.params, self.name)
139            except IOError, val:
140                self.warnings.append(_('Error in projection "%s": %s')
141                                     % (self.name, str(val)))
142            else:
143                self.projfile.Add(proj)
144    
145      def start_parameter(self, name, qname, attrs):      def start_parameter(self, name, qname, attrs):
146          s = attrs.get((None, 'value'))          s = attrs.get((None, 'value'))
# Line 128  class ProjFileReader(XMLReader): Line 148  class ProjFileReader(XMLReader):
148          self.params.append(s)          self.params.append(s)
149    
150      def GetProjFile(self):      def GetProjFile(self):
151          return self.__pf          return self.projfile
152    
153        def GetWarnings(self):
154            """Return the list of warning messages that may have been produced"""
155            return self.warnings
156    
157    
158  class ProjFileSaver(XMLWriter):  class ProjFileSaver(XMLWriter):
159    
# Line 139  class ProjFileSaver(XMLWriter): Line 164  class ProjFileSaver(XMLWriter):
164      def write(self, file_or_filename):      def write(self, file_or_filename):
165          XMLWriter.write(self, file_or_filename)          XMLWriter.write(self, file_or_filename)
166    
167          self.write_header("projfile", "projfile.dtd")          self.write_header("projectionlist", "projfile.dtd")
168          self.write_projfile(self.__pf)          self.write_projfile(self.__pf)
169          self.close()          self.close()
170    

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26