[GRASS-SVN] r47478 - grass-addons/grass7/gui/wxpython/wx.wms
svn_grass at osgeo.org
svn_grass at osgeo.org
Sun Aug 7 10:11:59 EDT 2011
Author: sudeepsingh
Date: 2011-08-07 07:11:59 -0700 (Sun, 07 Aug 2011)
New Revision: 47478
Modified:
grass-addons/grass7/gui/wxpython/wx.wms/ServerInfoAPIs.py
grass-addons/grass7/gui/wxpython/wx.wms/ServersList.xml
grass-addons/grass7/gui/wxpython/wx.wms/TODO
grass-addons/grass7/gui/wxpython/wx.wms/addserver.py
grass-addons/grass7/gui/wxpython/wx.wms/config
grass-addons/grass7/gui/wxpython/wx.wms/wmsmenu.py
Log:
UUID now being used as an id for saves
Modified: grass-addons/grass7/gui/wxpython/wx.wms/ServerInfoAPIs.py
===================================================================
--- grass-addons/grass7/gui/wxpython/wx.wms/ServerInfoAPIs.py 2011-08-07 13:11:34 UTC (rev 47477)
+++ grass-addons/grass7/gui/wxpython/wx.wms/ServerInfoAPIs.py 2011-08-07 14:11:59 UTC (rev 47478)
@@ -31,11 +31,20 @@
return soup, True
+def ifServerNameExists(soup,servername):
+ servers = soup.findAll('servername')
+ for server in servers:
+ name = server.string.strip()
+ if(name == servername):
+ return True
+ else:
+ return False
+ return False
+
-def addServerInfo(soup, serverinfo, snamevalue, urlvalue, unamevalue, passwordvalue):
+def addServerInfo(soup, serverinfo, uid, snamevalue, urlvalue, unamevalue, passwordvalue):
snamevalue = unicode(snamevalue)
- elements = soup.findAll(id = snamevalue)
- if(len(elements)!=0):
+ if(ifServerNameExists(soup, snamevalue)):
return False
else:
server = Tag(soup, "server")
@@ -55,7 +64,7 @@
#Adding attribute to server tag
- server['id'] = snamevalue
+ server['id'] = uid
#Adding text values to the server info fields
servername.insert(0,snamevalue)
@@ -74,10 +83,10 @@
element.extract()
return True
-def updateServerInfo(soup, serverinfo, snamevalue, urlvalue, unamevalue, passwordvalue):
+def updateServerInfo(soup, serverinfo, uid, snamevalue, urlvalue, unamevalue, passwordvalue):
snamevalue = unicode(snamevalue)
- if(removeServerInfo(soup, snamevalue)):
- if(addServerInfo(soup, serverinfo, snamevalue, urlvalue, unamevalue, passwordvalue)):
+ if(removeServerInfo(soup, uid)):
+ if(addServerInfo(soup, serverinfo, uid, snamevalue, urlvalue, unamevalue, passwordvalue)):
return True
else:
return False
@@ -87,7 +96,9 @@
def getAllRows(soup):
elements = soup.findAll('server')
servers = {}
+ map_servernameTouid = {}
for element in elements:
+ uid = element['id']
servername = element.findAll('servername')[0]
serverurl = element.findAll('serverurl')[0]
username = element.findAll('username')[0]
@@ -97,6 +108,6 @@
serverdata.url = serverurl.contents[0].strip()
serverdata.username = username.contents[0].strip()
serverdata.password = password.contents[0].strip()
- servers[serverdata.servername] = serverdata
-
- return servers
\ No newline at end of file
+ servers[uid] = serverdata
+ map_servernameTouid[serverdata.servername] = uid
+ return servers, map_servernameTouid
\ No newline at end of file
Modified: grass-addons/grass7/gui/wxpython/wx.wms/ServersList.xml
===================================================================
--- grass-addons/grass7/gui/wxpython/wx.wms/ServersList.xml 2011-08-07 13:11:34 UTC (rev 47477)
+++ grass-addons/grass7/gui/wxpython/wx.wms/ServersList.xml 2011-08-07 14:11:59 UTC (rev 47478)
@@ -1,4 +1,32 @@
<serverinfo>
+ <server id="aad1ec6f-25c7-489e-acc3-238c25d8a8c9">
+ <servername>
+ yahoo
+ </servername>
+ <serverurl>
+ http://www.yahoo.com
+ </serverurl>
+ <username>
+ asdkjasdkjsad
+ </username>
+ <password>
+ asdkjasdkjasdkasdkjas
+ </password>
+ </server>
+ <server id="GISNetServer">
+ <servername>
+ GISNetServer
+ </servername>
+ <serverurl>
+ http://www.gisnet.lv/cgi-bin/topo
+ </serverurl>
+ <username>
+ unameq
+ </username>
+ <password>
+ password
+ </password>
+ </server>
<server id="asd">
<servername>
asd
@@ -37,18 +65,4 @@
<password>
</password>
</server>
- <server id="GISNetServer">
- <servername>
- GISNetServer
- </servername>
- <serverurl>
- http://www.gisnet.lv/cgi-bin/topo
- </serverurl>
- <username>
- uname
- </username>
- <password>
- password
- </password>
- </server>
</serverinfo>
Modified: grass-addons/grass7/gui/wxpython/wx.wms/TODO
===================================================================
--- grass-addons/grass7/gui/wxpython/wx.wms/TODO 2011-08-07 13:11:34 UTC (rev 47477)
+++ grass-addons/grass7/gui/wxpython/wx.wms/TODO 2011-08-07 14:11:59 UTC (rev 47478)
@@ -20,6 +20,7 @@
8.The Save/Dont Save/Cancel popup works fine for the first time, but for the 2nd time leads to PyDeadObjectError error. This bug is known and is of serious nature. Fix to be done soon.
Some other issues detected with this popup. Like when adding a new server name "</servername>" , and then click on save and then on quit, the popup appears, now click on cancel. After clicking on cancel, another popup appears and this continues. Serious issue. This popups code needs to be checked throughly.
+9.On quiting the application it leads to segmentation error or even after quiting application the console doesnot quits. Need to use ctrl-c right now.
More to be added...
@@ -32,6 +33,7 @@
1.[Fixed]Username checked for delimeter presence
2.[Fixed]On closing add server window, main window also closes.
3.[Fixed]In addserver.py when pressing the quit button or closing it, main wmsmenu window closes, and it gives an error of maximum recurssion depth reached error.
+4.[Fixed]Reply from wms server on getmap should be an image or a service exception, Now this check is being made.
@@ -45,7 +47,6 @@
-
Following are issues reported by Maris and their current status. (Issues marked with [done] are fixed).
@@ -70,15 +71,15 @@
This is important! Use copy on success trick (save to temporary file;
in case of success, copy temporary file over original one).
*[done] All fields should accept non-ascii characters.
-* TODO: validate user provided URL by doing getCapabilities request.
-* When server is removed, it should switch dropdown server list to
+* TODO: validate user provided URL by doing getCapabilities request.[Can it be validated ?, sometimes a server might be down, so instead we leave it at user to decide if he gives a valid url, as in case he gives something like www.google.com or any other website, the application can handle the wrong responses recieved]
+*[Need help in this, could not figure out the function to preselect something] When server is removed, it should switch dropdown server list to
other entry to indicate it's removal.
wmsmenu:
*[done] Code makes assumptions that serverlist files are readable and
writable. This might not be true. Just chmod -r serverlist* to see how
it affects program.
-* TODO: server list storage in Location OR users preferences. This
+*[?] TODO: server list storage in Location OR users preferences. This
should be offered as a choice to user.
*[done] "AddServer" should be called "Edit server list" or some of edit
icons on button should be used.
Modified: grass-addons/grass7/gui/wxpython/wx.wms/addserver.py
===================================================================
--- grass-addons/grass7/gui/wxpython/wx.wms/addserver.py 2011-08-07 13:11:34 UTC (rev 47477)
+++ grass-addons/grass7/gui/wxpython/wx.wms/addserver.py 2011-08-07 14:11:59 UTC (rev 47478)
@@ -4,6 +4,7 @@
import wx
import os
+import uuid
from wx.lib.pubsub import Publisher
from BeautifulSoup import BeautifulSoup, Tag, NavigableString, BeautifulStoneSoup
from ServerInfoAPIs import addServerInfo, removeServerInfo, updateServerInfo, initServerInfoBase, getAllRows
@@ -72,6 +73,7 @@
Publisher().subscribe(self.OnPopupNotSaveRequest, ("PopupNotSaveRequest"))
Publisher().subscribe(self.OnPopupCancelRequest, ("PopupCancelRequest"))
self.editOn = False
+ self.selectedUid = None
#sudeep code ends
def __set_properties(self):
@@ -131,53 +133,59 @@
self.SetSizer(sizer_1)
self.Layout()
# end wxGlade
-
+ def valueExists(self,dict, newServerName):
+ print 'Enter here'
+ print newServerName
+ try:
+ for key, value in dict.items():
+ #print key, value.servername
+ if(value.servername == newServerName):
+ print 'returning true'
+ return True
+ print 'returning False'
+ return False
+ except:
+ print 'Exception while iterating dictionary elements'
+ return False
def OnSave(self, event): # wxGlade: ServerAdd.<event_handler>
#print "Event handler `OnSave' not implemented"
+ print '-------------------------------------------------------------------> OnSave'
newServerName = unicode(self.ServerNameText.GetValue())
newUrl = self.URLText.GetValue()
newUserName = self.UsernameText.GetValue()
newPassword = self.PasswordText.GetValue()
-
- if(newServerName.count(self.name_url_delimiter)>0):
- print "Warning: UserName cannot consist of "+self.name_url_delimiter
- print "Please give another username, save failed..."
- return
-
- if(newUrl.count(self.name_url_delimiter)>0):
- print "Warning: URL cannot consist of "+self.name_url_delimiter
- print "Change in config file required to use different character as delimeter which doesnot appears in url"
- return
-
- character = '>'
- if(newServerName.count(character) > 0 or newUrl.count(character) > 0 or newUserName.count(character) > 0 or newPassword.count(character) > 0):
- print character+' is not allowed in a Field'
+ if(not self.allFieldsValid(newServerName, newUrl, newUserName, newPassword)):
return
-
- character = '<'
- if(newServerName.count(character) > 0 or newUrl.count(character) > 0 or newUserName.count(character) > 0 or newPassword.count(character) > 0):
- print character+' is not allowed in a Field'
- return
- character = '&'
- if(newServerName.count(character) > 0 or newUrl.count(character) > 0 or newUserName.count(character) > 0 or newPassword.count(character) > 0):
- print character+' is not allowed in a Field'
- return
- print 'before '+newUrl
if(not newUrl.startswith('http://')):
newUrl = 'http://'+newUrl
- print 'after '+newUrl
+
print newServerName
print 'check12'
- if(self.servers.has_key(newServerName)):
+
+ if(self.selectedUid == None):
+ update = False
+ else:
update = True
+ '''print newServerName
+ print self.map_servernameTouid
+ if(self.map_servernameTouid.has_key(newServerName)):
+ CurrentUid = self.map_servernameTouid[newServerName]
+ update = True
+ print 'key present'
+ else:
+ print 'key not present'
+ CurrentUid = None
+ update = False
+ if(self.servers.has_key(Uid)):
+ update = True
#print 'Server Name already exists'
#return
else:
- update = False
+ update = False'''
@@ -187,22 +195,38 @@
url = newUrl.split()
#if(len(newUrl) != 0 and len(newServerName) != 0 and len(newUserName) !=0 and len(newPassword) != 0 ):
if(len(newUrl) != 0 and len(newServerName) != 0):
+ if(not self.selectedServer.servername == newServerName):
+ if(self.valueExists(self.servers, newServerName)):
+ print 'Please Enter a different Servername'
+ return
+ #del self.servers[self.selectedUid]
serverData.servername = newServerName
serverData.url = newUrl
serverData.username = newUserName
serverData.password = newPassword
- self.servers[newServerName] = serverData
+
+
if(update):
- if(updateServerInfo(self.soup, self.soup.serverinfo, newServerName, newUrl, newUserName, newPassword)):
+ if(updateServerInfo(self.soup, self.soup.serverinfo, self.selectedUid, newServerName, newUrl, newUserName, newPassword)):
print 'update save successful'
+ self.servers[self.selectedUid] = serverData
+ del self.map_servernameTouid[self.selectedServer.servername]
+ self.selectedServer = serverData
+ self.map_servernameTouid[newServerName] = self.selectedUid
self.saveXMLData()
msg = self.servers
Publisher().sendMessage(("update.serverList"), msg)
else:
print 'update save not successful'
else:
- if(addServerInfo(self.soup, self.soup.serverinfo, newServerName, newUrl, newUserName, newPassword)):
+ uid = str(uuid.uuid4())
+
+ if(addServerInfo(self.soup, self.soup.serverinfo, uid, newServerName, newUrl, newUserName, newPassword)):
print 'soup save successfully'
+ self.selectedUid = uid
+ self.servers[self.selectedUid] = serverData
+ self.selectedServer = serverData
+ self.map_servernameTouid[newServerName] = uid
self.saveXMLData()
msg = self.servers
Publisher().sendMessage(("update.serverList"), msg)
@@ -225,16 +249,21 @@
event.Skip()
def OnRemove(self, event): # wxGlade: ServerAdd.<event_handler>
- serverName = unicode(self.ServerNameText.GetValue())
- if(len(serverName) > 0):
- if(removeServerInfo(self.soup, serverName)):
+ print '-------------------------------------------------------------------> OnRemove'
+ if(self.selectedUid == None):
+ print 'No Uid is selected....Remove Unsuccessful'
+ return
+ else:
+ if(removeServerInfo(self.soup, self.selectedUid)):
print 'remove successful'
+ del self.map_servernameTouid[self.selectedServer.servername]
else:
print 'remove unsuccessful'
return
#print self.servers
- del self.servers[serverName]
+ del self.servers[self.selectedUid]
+ self.selectedUid = None
self.__update_URL_List()
self.ServerNameText.Clear()
@@ -245,14 +274,15 @@
self.saveXMLData()
msg = self.servers
Publisher().sendMessage(("update.serverList"), msg)
- else:
- print 'No server selected'
+
#print "Event handler `OnRemove' not implemented"
self.editOn = False
event.Skip()
def OnAddNew(self, event): # wxGlade: ServerAdd.<event_handler>
+ print '-------------------------------------------------------------------> OnAddNew'
#print "Event handler `OnAddNew' not implemented"
+ self.selectedUid = None
self.ServerNameText.Clear()
self.PasswordText.Clear()
self.URLText.Clear()
@@ -261,6 +291,7 @@
event.Skip()
def OnQuit(self, event): # wxGlade: ServerAdd.<event_handler>
+ print '-------------------------------------------------------------------> OnQuit'
print 'onQuit pressed'
if(self.editOn):
print "Do you want to save the unsaved changes ?"
@@ -280,6 +311,7 @@
event.Skip()
def OnServerList(self, event): # wxGlade: ServerAdd.<event_handler>
+ print '-------------------------------------------------------------------> OnServerList'
#print self.ServerList.CurrentSelection
url = self.ServerList.GetValue()
print 'here'
@@ -288,7 +320,9 @@
print urlarr
#print self.servers
if(len(urlarr)==2):
- self.selectedServer = self.servers[unicode(urlarr[0])]
+ uid = self.map_servernameTouid[urlarr[0]]
+ self.selectedUid = uid
+ self.selectedServer = self.servers[uid]
print self.selectedServer
self.ServerNameText.SetValue(self.selectedServer.servername)
self.URLText.SetValue(self.selectedServer.url)
@@ -307,7 +341,7 @@
#Sudeeps methods start
def __populate_URL_List(self, ComboBox):
- self.servers = getAllRows(self.soup)
+ self.servers, self.map_servernameTouid = getAllRows(self.soup)
for key, value in self.servers.items():
ComboBox.Append(value.servername+self.name_url_delimiter+value.url)
#ComboBox.Append(value.servername+" "+value.url)
@@ -340,7 +374,37 @@
print 'Save not successful'
return False
return True
+
+ def allFieldsValid(self, newServerName, newUrl, newUserName, newPassword):
+ if(newServerName.count(self.name_url_delimiter)>0):
+ print "Warning: UserName cannot consist of "+self.name_url_delimiter
+ print "Please give another username, save failed..."
+ return False
+
+ if(newUrl.count(self.name_url_delimiter)>0):
+ print "Warning: URL cannot consist of "+self.name_url_delimiter
+ print "Change in config file required to use different character as delimeter which doesnot appears in url"
+ return False
+
+ character = '>'
+ if(newServerName.count(character) > 0 or newUrl.count(character) > 0 or newUserName.count(character) > 0 or newPassword.count(character) > 0):
+ print character+' is not allowed in a Field'
+ return False
+
+ character = '<'
+ if(newServerName.count(character) > 0 or newUrl.count(character) > 0 or newUserName.count(character) > 0 or newPassword.count(character) > 0):
+ print character+' is not allowed in a Field'
+ return False
+ character = '&'
+ if(newServerName.count(character) > 0 or newUrl.count(character) > 0 or newUserName.count(character) > 0 or newPassword.count(character) > 0):
+ print character+' is not allowed in a Field'
+ return False
+
+ return True
+
+
+
def OnWMSMenuClose(self, msg):
self.Close()
self.Destroy()
Modified: grass-addons/grass7/gui/wxpython/wx.wms/config
===================================================================
--- grass-addons/grass7/gui/wxpython/wx.wms/config 2011-08-07 13:11:34 UTC (rev 47477)
+++ grass-addons/grass7/gui/wxpython/wx.wms/config 2011-08-07 14:11:59 UTC (rev 47478)
@@ -1 +1 @@
-delimeter_servername_url >
+delimeter_servername_url #
Modified: grass-addons/grass7/gui/wxpython/wx.wms/wmsmenu.py
===================================================================
--- grass-addons/grass7/gui/wxpython/wx.wms/wmsmenu.py 2011-08-07 13:11:34 UTC (rev 47477)
+++ grass-addons/grass7/gui/wxpython/wx.wms/wmsmenu.py 2011-08-07 14:11:59 UTC (rev 47478)
@@ -4,6 +4,7 @@
import wx
from wxPython.wx import *
+import imghdr
from wx.lib.pubsub import Publisher
from urllib2 import Request, urlopen, URLError, HTTPError
from parse import parsexml, isServiceException, populateLayerTree, isValidResponse
@@ -67,6 +68,7 @@
self.Bind(wx.EVT_CLOSE, self.OnQuit)
self.AddServerisClosed = True
+ self.layerName = ""
#items = ["a", "b", "c"]
#itemId = self.LayerTree.AppendItem(self.layerTreeRoot, "item")
@@ -117,7 +119,7 @@
def __populate_Url_List(self, ComboBox):
- self.servers = getAllRows(self.soup)
+ self.servers, self.map_servernameTouid = getAllRows(self.soup)
for key, value in self.servers.items():
ComboBox.Append(value.servername+self.name_url_delimiter+value.url)
#ComboBox.Append(value.servername+" "+self.name_url_delimiter+" "+value.url)
@@ -212,12 +214,19 @@
response = urlopen(req)
image = response.read()
#print image
+
if(isServiceException(image)):
print 'Service Exception has occured'
else:
outfile = open('map.png','wb')
outfile.write(image)
outfile.close()
+ if(imghdr.what('./map.png') != 'png'):
+ print 'uiui'
+ print imghdr.what('./map.png')
+ print 'Not a valid PNG Image, Unable to display, returning'
+ return
+
NewImageFrame()
@@ -274,7 +283,8 @@
#self.printDict(self.servers)
print "OnServerList: done"
if(len(urlarr)==2):
- self.selectedURL = self.servers[urlarr[0]].url
+ uid = self.map_servernameTouid[urlarr[0]]
+ self.selectedURL = self.servers[uid].url
print self.selectedURL
else:
print "Wrong format of URL selected"
More information about the grass-commit
mailing list