/[thuban]/branches/WIP-pyshapelib-bramz/Extensions/wms/capabilities.py
ViewVC logotype

Contents of /branches/WIP-pyshapelib-bramz/Extensions/wms/capabilities.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2734 - (show annotations)
Thu Mar 1 12:42:59 2007 UTC (18 years ago) by bramz
File MIME type: text/x-python
File size: 5862 byte(s)
made a copy
1 # Copyright (c) 2004 by Intevation GmbH
2 # Authors:
3 # Martin Schulze <[email protected]>
4 #
5 # This program is free software; you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 2 of the License, or
8 # (at your option) any later version.
9 #
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, write to the Free Software
17 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
19 """
20 Maintain WMS Capabilities
21
22 Inherits methods from WMSCapabilitiesParser
23
24 class WMSCapabilities:
25 __init__ (resource xor filename xor nothing)
26
27 getErrorMsg()
28
29 fetchCapabilities(resource)
30 saveCapabilities(filename)
31 loadCapabilities(filename)
32 printCapabilities()
33
34 getVersion()
35
36 Requirements:
37 - PyOGCLib <http://www.sourceforge.net/projects/pyogclib>
38
39 Requires the ogclib installed regularily on the system or checked out
40 next to the Thuban checkout.
41
42 If this module is executed solitarily, it will fetch the capabilities
43 of the frida service and store them in the local file
44 frida_capabilities.xml for later processing.
45
46 """
47
48 __version__ = "$Revision$"
49 # $Source$
50 # $Id$
51
52 import os
53
54 # ----------------------------------------------------------------------
55 # FIXME: Temporary code until PyOGCLib is a standard requirement
56
57 from sys import path
58
59 # Assume the PyOGCLib to be checked out next to the thuban main directory
60 pyogclib = "../../../PyOGCLib"
61 if os.path.isdir(pyogclib) and os.path.isdir(pyogclib + "/ogclib"):
62 path.insert(0, pyogclib)
63
64 # We use gettext, so we need to import it and hence need to adjust the
65 # path again
66 if __name__ == "__main__":
67 path.insert(0, "../../")
68
69 # ----------------------------------------------------------------------
70
71 from Thuban import _
72
73 from ogclib.WMSClient import WMSClient
74 from parser import WMSCapabilitiesParser
75
76 class WMSCapabilities(WMSClient, WMSCapabilitiesParser):
77 """
78 Thuban class to maintain capabilities. This class provides
79 methods to fetch, save and load capabilities as well as methods to
80 retrieve particular information from the fetched or loaded
81 capabilities XML.
82
83 If an error occured during processing an error text is assigned to
84 self.errorMsg. If everything went fine, this variable is set to
85 None. The current value can be retrieved by the getErrorMsg()
86 method.
87 """
88
89 capabilities = None
90 errorMsg = None
91 wmsVersion = None
92
93 def __init__(self, *parm):
94 """
95 Initialises Capabilities with one optional parameter
96
97 param can be either a URL or a filename:
98
99 filename -- load capabilities from file
100 url -- fetch capabilities from network
101 """
102
103 if parm and parm[0]:
104 if os.path.isfile(parm[0]):
105 self.loadCapabilities(parm[0])
106 else:
107 if parm[0].find("http://", 0) == 0:
108 self.fetchCapabilities(parm[0])
109 else:
110 self.errorMsg \
111 = _("Resource '%s' is neither local file nor URL") \
112 % parm[0]
113
114
115 def getErrorMsg(self):
116 return self.errorMsg
117
118
119 def fetchCapabilities(self, resource):
120 """
121 Fetches the WMS capabilities from an Internet resource
122
123 WMS Protocol version 1.1 is tried first, then 1.0. The
124 protocol version used can be queried by the getVersion()
125 method for later use. If both tries fail, errorMsg will be
126 set accordingly, which can be fetched with getErrorMsg().
127 """
128
129 self.wmsVersion = "1.1"
130 self.capabilities = self.getCapabilities(resource, self.wmsVersion)
131 if not self.capabilities:
132 self.wmsVersion = "1.0"
133 self.capabilities = self.getCapabilities(resource, self.wmsVersion)
134 if not self.capabilities:
135 self.wmsVersion = None
136 self.errorMsg \
137 = _("Resource '%s' "
138 "does support neither WMS version 1.1 nor 1.0") \
139 % resource
140
141 if self.capabilities:
142 self.grok(self.capabilities)
143
144
145 def saveCapabilities(self, fname):
146 """Save capabilities to local file"""
147
148 if self.capabilities is None:
149 self.errorMsg = _("No capabilities available")
150 else:
151 try:
152 out = open(fname, "w")
153 out.write(self.capabilities)
154 out.close()
155 except IOError:
156 self.errorMsg = _("Can't open file '%s' for writing") % fname
157
158
159 def loadCapabilities(self, fname):
160 """Load capabilities from a local file"""
161
162 try:
163 input = open(fname, "r")
164 self.capabilities = input.read()
165 input.close()
166 self.grok(self.capabilities)
167 except IOError:
168 self.errorMsg = _("Can't open file '%s' for reading") % fname
169
170
171 def printCapabilities(self):
172 """Prints capabilities to stdout"""
173
174 print self.capabilities
175
176
177 def getVersion(self):
178 """
179 Returns the WMS protocol version
180
181 If no capabilities could be fetched, None is returned.
182 """
183 return self.wmsVersion
184
185
186 if __name__ == "__main__":
187 capabilities \
188 = WMSCapabilities("http://frida.intevation.org/cgi-bin/frida_wms?")
189 if capabilities.getErrorMsg() is None:
190 capabilities.saveCapabilities("frida_capabilities.xml")
191 else:
192 print "Error: " + capabilities.getErrorMsg()

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26