/[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 2150 - (show annotations)
Thu Apr 1 14:39:39 2004 UTC (20 years, 11 months ago) by joey
Original Path: trunk/thuban/Extensions/wms/capabilities.py
File MIME type: text/x-python
File size: 5398 byte(s)
Export the used version of the GetCapabilities request, so we can use
it for subsequent calls, i.e. for GetMap requests.

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 """Fetches the WMS capabilities from an Internet resource"""
121
122 self.wmsVersion = "1.1"
123 self.capabilities = self.getCapabilities(resource, self.wmsVersion)
124 if not self.capabilities:
125 self.wmsVersion = "1.0"
126 self.capabilities = self.getCapabilities(resource, self.wmsVersion)
127 if not self.capabilities:
128 self.wmsVersion = None
129
130 if self.capabilities:
131 self.grok(self.capabilities)
132
133
134 def saveCapabilities(self, fname):
135 """Save capabilities to local file"""
136
137 if self.capabilities is None:
138 self.errorMsg = _("No capabilities available")
139 else:
140 try:
141 out = open(fname, "w")
142 out.write(self.capabilities)
143 out.close()
144 except IOError:
145 self.errorMsg = _("Can't open file '%s' for writing") % fname
146
147
148 def loadCapabilities(self, fname):
149 """Load capabilities from a local file"""
150
151 try:
152 input = open(fname, "r")
153 self.capabilities = input.read()
154 input.close()
155 self.grok(self.capabilities)
156 except IOError:
157 self.errorMsg = _("Can't open file '%s' for reading") % fname
158
159
160 def printCapabilities(self):
161 """Prints capabilities to stdout"""
162
163 print self.capabilities
164
165
166 def getVersion(self):
167 """
168 Returns the WMS protocol version
169
170 If no capabilities could be fetched, None is returned.
171 """
172 return self.wmsVersion
173
174
175 if __name__ == "__main__":
176 capabilities \
177 = WMSCapabilities("http://frida.intevation.org/cgi-bin/frida_wms?")
178 if capabilities.getErrorMsg() is None:
179 capabilities.saveCapabilities("frida_capabilities.xml")
180 else:
181 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