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

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26