/[thuban]/branches/WIP-pyshapelib-bramz/Thuban/Model/resource.py
ViewVC logotype

Contents of /branches/WIP-pyshapelib-bramz/Thuban/Model/resource.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 709 - (show annotations)
Wed Apr 23 08:45:44 2003 UTC (21 years, 10 months ago) by jonathan
Original Path: trunk/thuban/Thuban/Model/resource.py
File MIME type: text/x-python
File size: 3166 byte(s)
Use XMLReader and XMLWriter.
(GetProjFiles): Renamed from GetProjections. Now returns a list
        of ProjFile objects.
(GetSystemProjFiles): Renamed from GetSuppliedProjections. Returns
        a list of ProjFile objects whose files are not user defined.
(GetUserProjFiles): Renamed from GetUserProjections. Returns a
        list of ProjFile objects whose files are user defined.
(ProjFileReader): Extend new XMLReader.

1 # Copyright (c) 2003 by Intevation GmbH
2 # Authors:
3 # Jonathan Coles <[email protected]>
4 #
5 # This program is free software under the GPL (>=v2)
6 # Read the file COPYING coming with Thuban for details.
7
8 import os
9 import Thuban
10 from Thuban.Model.load import XMLReader
11 from Thuban.Model.save import XMLWriter
12 from Thuban.Model.proj import Projection, ProjFile
13
14 projdir = \
15 os.path.join(Thuban.__path__[0], os.pardir, "Resources", "Projections")
16
17 usrdir = os.path.expanduser("~/.thuban")
18
19 PROJ_EXT = ".proj"
20
21 def ReadProjFile(filename):
22 """Read a single .proj file and return a ProjFile object."""
23
24 projs = []
25 try:
26 handler = ProjFileReader()
27 handler.read(filename)
28 pf = handler.GetProjFile()
29 except OSError:
30 pass
31
32 return pf
33
34 def WriteProjFile(pf):
35 saver = ProjFileSaver(pf)
36 saver.write(pf.GetFileName())
37
38 def GetProjFiles(dir):
39 """Read all .proj files in the given directory and
40 return a list of ProjFile objects.
41 """
42
43 list = []
44 try:
45 for file in filter(lambda s: s.endswith(PROJ_EXT), os.listdir(dir)):
46 filename = os.path.join(dir, file)
47 list.append(ReadProjFile(filename))
48 except OSError:
49 pass
50
51 return list
52
53 def GetSystemProjFiles():
54 """Return a list of ProjFile objects from files that are
55 supplied by Thuban.
56 """
57 return GetProjFiles(projdir)
58
59 def GetUserProjFiles():
60 """Return a list of ProjFile objects from files that are user-defined."""
61 return GetProjFiles(usrdir)
62
63 class ProjFileReader(XMLReader):
64
65 def __init__(self):
66 XMLReader.__init__(self)
67 self.__pf = ProjFile("")
68
69 XMLReader.AddDispatchers(self,
70 {'projection': ("start_projection", "end_projection"),
71 'parameter': ("start_parameter", None)})
72
73 def read(self, file_or_filename):
74 XMLReader.read(self, file_or_filename)
75
76 self.__pf.SetFileName(XMLReader.GetFileName(self))
77
78 def start_projection(self, name, qname, attrs):
79 self.params = []
80 self.name = attrs.get((None, 'name'), "Unknown")
81
82 def end_projection(self, name, qname):
83 self.__pf.Add(Projection(self.params, self.name))
84
85 def start_parameter(self, name, qname, attrs):
86 s = attrs.get((None, 'value'))
87 s = str(s) # we can't handle unicode in proj
88 self.params.append(s)
89
90 def GetProjFile(self):
91 return self.__pf
92
93
94 class ProjFileSaver(XMLWriter):
95
96 def __init__(self, pf):
97 XMLWriter.__init__(self)
98 self.__pf = pf
99
100 def write(self, file_or_filename):
101 XMLWriter.write(self, file_or_filename)
102
103 self.write_header("projfile", "thuban.dtd")
104 self.write_projfile(self.__pf)
105 self.close()
106
107 def write_projfile(self, pf):
108
109 self.open_element("projectionlist")
110
111 for p in pf.GetProjections():
112 self.open_element("projection", {"name": p.GetName()})
113
114 for param in p.GetAllParameters():
115 self.write_element("parameter", {"value": param})
116
117 self.close_element("projection")
118
119 self.close_element("projectionlist")
120
121

Properties

Name Value
svn:eol-style native
svn:keywords Author Date Id Revision

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26