/[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 709 by jonathan, Wed Apr 23 08:45:44 2003 UTC revision 1230 by jonathan, Wed Jun 18 14:46:43 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 XMLReader  from Thuban import _
13  from Thuban.Model.save import XMLWriter  
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    
 usrdir  = os.path.expanduser("~/.thuban")  
24    
25  PROJ_EXT = ".proj"  PROJ_EXT = ".proj"
26    
27  def ReadProjFile(filename):  has_gdal_support = lambda: False
28      """Read a single .proj file and return a ProjFile object."""  try:
29        # first try to see if our extension module is there. if it
30        # wasn't even compiled, we obviously don't have gdal support.
31        import gdalwarp
32    
33        # now try to import the python extension. if this doesn't
34        # exist then we can't do anything.
35        import gdal
36    
37        """Return True if the gdal library is available."""
38        has_gdal_support = lambda: True
39    except ImportError:
40        pass
41    
42    def read_proj_file(filename):
43        """Read a single .proj file and return a ProjFile object.
44        
45        Raises IOError if the file cannot be opened.
46        Raises OSError if the file cannot be read.
47        Raises SAXParseException if the file is not valid XML.
48        """
49    
50        handler = ProjFileReader()
51        handler.read(filename)
52        return handler.GetProjFile()
53    
54      projs = []  def write_proj_file(pf):
55      try:      """Write a single .proj file
         handler = ProjFileReader()  
         handler.read(filename)  
         pf = handler.GetProjFile()  
     except OSError:  
         pass  
56    
57      return pf      Raises IOError if the file cannot be written.
58        """
59    
 def WriteProjFile(pf):  
60      saver = ProjFileSaver(pf)      saver = ProjFileSaver(pf)
61      saver.write(pf.GetFileName())      saver.write(pf.GetFilename())
62    
63  def GetProjFiles(dir):  def get_proj_files(dir):
64      """Read all .proj files in the given directory and      """Read all .proj files in the given directory and
65      return a list of ProjFile objects.      return a list of ProjFile objects.
66      """      """
67    
68      list = []      list = []
69      try:      try:
70          for file in filter(lambda s: s.endswith(PROJ_EXT), os.listdir(dir)):          dirlist = os.listdir(dir)
             filename = os.path.join(dir, file)  
             list.append(ReadProjFile(filename))  
71      except OSError:      except OSError:
72          pass          pass # if we can't get a directory listing just return []
73        else:
74            for file in filter(lambda s: s.endswith(PROJ_EXT), dirlist):
75                try:
76                    filename = os.path.join(dir, file)
77                    list.append(read_proj_file(filename))
78                except (OSError, IOError, SAXParseException):
79                    pass # just move onto the next file
80    
81      return list      return list
82    
83  def GetSystemProjFiles():  def get_system_proj_files():
84      """Return a list of ProjFile objects from files that are      """Return a list of ProjFile objects from files that are
85      supplied by Thuban.      supplied by Thuban.
86    
87        If no files could not be opened return a list with one
88        empty projection file set to store data in the default file.
89      """      """
90      return GetProjFiles(projdir)      filename = os.path.join(projdir, "defaults.proj")
91        try:
92            return [read_proj_file(filename)]
93        except (OSError, IOError, SAXParseException):
94            return [ProjFile(filename)]
95    
96  def GetUserProjFiles():  def get_user_proj_files():
97      """Return a list of ProjFile objects from files that are user-defined."""      """Return a list of ProjFile objects from files that are user-defined.
98      return GetProjFiles(usrdir)  
99        If no files could not be opened return a list with one
100        empty projection file set to store data in the default file.
101        """
102    
103        usrdir  = get_application_dir()
104        filename = os.path.join(usrdir, "user.proj")
105        try:
106            return [read_proj_file(filename)]
107        except (OSError, IOError, SAXParseException):
108            return [ProjFile(filename)]
109    
110  class ProjFileReader(XMLReader):  class ProjFileReader(XMLReader):
111    
# Line 73  class ProjFileReader(XMLReader): Line 120  class ProjFileReader(XMLReader):
120      def read(self, file_or_filename):      def read(self, file_or_filename):
121          XMLReader.read(self, file_or_filename)          XMLReader.read(self, file_or_filename)
122    
123          self.__pf.SetFileName(XMLReader.GetFileName(self))          self.__pf.SetFilename(XMLReader.GetFilename(self))
124                    
125      def start_projection(self, name, qname, attrs):      def start_projection(self, name, qname, attrs):
126          self.params = []          self.params = []
127          self.name = attrs.get((None, 'name'), "Unknown")          self.name = self.encode(attrs.get((None, 'name'), _("Unknown")))
128    
129      def end_projection(self, name, qname):      def end_projection(self, name, qname):
130          self.__pf.Add(Projection(self.params, self.name))          self.__pf.Add(Projection(self.params, self.name))
# Line 90  class ProjFileReader(XMLReader): Line 137  class ProjFileReader(XMLReader):
137      def GetProjFile(self):      def GetProjFile(self):
138          return self.__pf          return self.__pf
139    
   
140  class ProjFileSaver(XMLWriter):  class ProjFileSaver(XMLWriter):
141    
142      def __init__(self, pf):      def __init__(self, pf):
# Line 100  class ProjFileSaver(XMLWriter): Line 146  class ProjFileSaver(XMLWriter):
146      def write(self, file_or_filename):      def write(self, file_or_filename):
147          XMLWriter.write(self, file_or_filename)          XMLWriter.write(self, file_or_filename)
148    
149          self.write_header("projfile", "thuban.dtd")          self.write_header("projfile", "projfile.dtd")
150          self.write_projfile(self.__pf)          self.write_projfile(self.__pf)
151          self.close()          self.close()
152    

Legend:
Removed from v.709  
changed lines
  Added in v.1230

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26