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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2149 - (hide annotations)
Thu Apr 1 10:17:00 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: 5116 byte(s)
Make this class a specialisation of WMSCapabilitiesParser as well.
Also execute grok() after loading or fetching capabilities, if that
went well, so that subsequent calls can already access the data.

1 joey 2110 # 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 joey 2149 Inherits methods from WMSCapabilitiesParser
23    
24 joey 2110 class WMSCapabilities:
25     __init__ (resource xor filename xor nothing)
26    
27     getErrorMsg()
28    
29 joey 2147 fetchCapabilities(resource)
30 joey 2137 saveCapabilities(filename)
31     loadCapabilities(filename)
32     printCapabilities()
33 joey 2110
34     Requirements:
35     - PyOGCLib <http://www.sourceforge.net/projects/pyogclib>
36    
37     Requires the ogclib installed regularily on the system or checked out
38     next to the Thuban checkout.
39    
40     If this module is executed solitarily, it will fetch the capabilities
41     of the frida service and store them in the local file
42     frida_capabilities.xml for later processing.
43    
44     """
45    
46     __version__ = "$Revision$"
47     # $Source$
48     # $Id$
49    
50     import os
51    
52     # ----------------------------------------------------------------------
53     # FIXME: Temporary code until PyOGCLib is a standard requirement
54    
55     from sys import path
56    
57     # Assume the PyOGCLib to be checked out next to the thuban main directory
58     pyogclib = "../../../PyOGCLib"
59 joey 2137 if os.path.isdir(pyogclib) and os.path.isdir(pyogclib + "/ogclib"):
60     path.insert(0, pyogclib)
61 joey 2110
62     # We use gettext, so we need to import it and hence need to adjust the
63     # path again
64     if __name__ == "__main__":
65 joey 2137 path.insert(0, "../../")
66 joey 2110
67     # ----------------------------------------------------------------------
68    
69     from Thuban import _
70    
71     from ogclib.WMSClient import WMSClient
72 joey 2149 from parser import WMSCapabilitiesParser
73 joey 2110
74 joey 2149 class WMSCapabilities(WMSClient, WMSCapabilitiesParser):
75 joey 2110 """
76     Thuban class to maintain capabilities. This class provides
77     methods to fetch, save and load capabilities as well as methods to
78     retrieve particular information from the fetched or loaded
79     capabilities XML.
80    
81     If an error occured during processing an error text is assigned to
82     self.errorMsg. If everything went fine, this variable is set to
83     None. The current value can be retrieved by the getErrorMsg()
84     method.
85     """
86    
87     capabilities = None
88     errorMsg = None
89     wmsVersion = None
90    
91 joey 2137 def __init__(self, *parm):
92 joey 2110 """
93     Initialises Capabilities with one optional parameter
94    
95 joey 2147 param can be either a URL or a filename:
96    
97 joey 2110 filename -- load capabilities from file
98     url -- fetch capabilities from network
99     """
100    
101     if parm and parm[0]:
102 joey 2137 if os.path.isfile(parm[0]):
103     self.loadCapabilities(parm[0])
104 joey 2110 else:
105 joey 2137 if parm[0].find("http://", 0) == 0:
106     self.fetchCapabilities(parm[0])
107 joey 2110 else:
108 joey 2136 self.errorMsg \
109 joey 2147 = _("Resource '%s' is neither local file nor URL") \
110     % parm[0]
111 joey 2110
112    
113 joey 2137 def getErrorMsg(self):
114 joey 2110 return self.errorMsg
115    
116    
117 joey 2137 def fetchCapabilities(self, resource):
118 joey 2110 """Fetches the WMS capabilities from an Internet resource"""
119    
120     self.wmsVersion = "1.1"
121 joey 2148 self.capabilities = self.getCapabilities(resource, self.wmsVersion)
122 joey 2110 if not self.capabilities:
123     self.wmsVersion = "1.0"
124 joey 2148 self.capabilities = self.getCapabilities(resource, self.wmsVersion)
125 joey 2110
126 joey 2149 if self.capabilities:
127     self.grok(self.capabilities)
128 joey 2110
129 joey 2149
130 joey 2137 def saveCapabilities(self, fname):
131 joey 2110 """Save capabilities to local file"""
132    
133     if self.capabilities is None:
134     self.errorMsg = _("No capabilities available")
135     else:
136     try:
137 joey 2137 out = open(fname, "w")
138     out.write(self.capabilities)
139 joey 2110 out.close()
140 joey 2147 except IOError:
141 joey 2110 self.errorMsg = _("Can't open file '%s' for writing") % fname
142    
143    
144 joey 2137 def loadCapabilities(self, fname):
145 joey 2110 """Load capabilities from a local file"""
146    
147     try:
148 joey 2137 input = open(fname, "r")
149 joey 2148 self.capabilities = input.read()
150 joey 2110 input.close()
151 joey 2149 self.grok(self.capabilities)
152 joey 2147 except IOError:
153 joey 2110 self.errorMsg = _("Can't open file '%s' for reading") % fname
154    
155    
156 joey 2137 def printCapabilities(self):
157 joey 2110 """Prints capabilities to stdout"""
158    
159     print self.capabilities
160    
161    
162    
163     if __name__ == "__main__":
164 joey 2136 capabilities \
165     = WMSCapabilities("http://frida.intevation.org/cgi-bin/frida_wms?")
166 joey 2147 if capabilities.getErrorMsg() is None:
167     capabilities.saveCapabilities("frida_capabilities.xml")
168 joey 2110 else:
169 joey 2147 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