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

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26