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

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26