OSE -- I EAT Penguins !!!!

General Information

Project Resources

User Documentation

Developer Resources

For a printable version of this page, go here.

Copyright © 2001-2002
Dumpleton Software Consulting.
http://www.dscpl.com.au
http://ose.sourceforge.net

SourceForge Logo

# COPYRIGHT 2001-2003 DUMPLETON SOFTWARE CONSULTING PTY LIMITED
#
# This program also requires:
#
#   Python Mega Widgets library (http://pmw.sourceforge.net)
#

import time
import types
import Tkinter
import Pmw
import sys
import string

import netrpc.soap
RemoteService = netrpc.soap.RemoteService

RemoteService._debug = 1

class RemoteServiceView:

  def __init__(self,root=None,**kw):

    if root == None:
      root = Pmw.MegaToplevel()

    self._root = root
    self._root.withdraw()

    server = "http://localhost:8000"
    namespace = ""
    soapaction = "\"\""
    method = "echo"

    if kw.has_key("title"):
      self._root.title(kw["title"])

    if kw.has_key("server"):
      server = kw["server"]
    if kw.has_key("ns"):
      namespace = kw["ns"]
    if kw.has_key("soapaction"):
      namespace = kw["soapaction"]
    if kw.has_key("method"):
      method = kw["method"]

    f1 = Tkinter.Frame(self._root)
    f1.pack(side="top",padx=4,pady=4)

    f2 = Tkinter.Frame(f1)
    f2.pack(side="left",padx=8,pady=8)

    self._serverField = Pmw.EntryField(f2,labelpos='w',entry_width=50,
        label_text="Service URL:",validate=None,value=server)
    self._serverField.pack(side="top",padx=4,pady=4)

    self._methodField = Pmw.EntryField(f2,labelpos='w',entry_width=50,
        label_text="Method Name:",validate=None,value=method)
    self._methodField.pack(side="top",padx=4,pady=4)

    self._namespaceField = Pmw.EntryField(f2,labelpos='w',entry_width=50,
        label_text="Method URI:",validate=None,value=namespace)
    self._namespaceField.pack(side="top",padx=4,pady=4)

    self._soapactionField = Pmw.EntryField(f2,labelpos='w',entry_width=50,
        label_text="SOAPAction:",validate=None,value=soapaction)
    self._soapactionField.pack(side="top",padx=4,pady=4)

    Pmw.alignlabels((self._serverField,self._methodField,
        self._namespaceField,self._soapactionField))

    b1 = Pmw.ButtonBox(f1,orient="vertical")
    b1.pack(side="right")
    b1.add("Execute",command=self._executeMethod)

    self._methodParams = Pmw.ScrolledText(self._root,labelpos='nw',
        label_text="Params:",text_padx=4,text_pady=4,text_wrap="char",
	text_height=8,borderframe=1,vscrollmode="static")
    self._methodParams.insert("end","()")
    self._methodParams.pack(side="top",padx=8,pady=8,fill="both",
        expand="true")

    self._methodResult = Pmw.ScrolledText(self._root,labelpos='nw',
        label_text="Result:",text_padx=4,text_pady=4,text_wrap="char",
	text_height=16,borderframe=1,vscrollmode="static")
    self._methodResult.pack(side="top",padx=8,pady=8,fill="both",
        expand="true")

    self._methodResult.tag_configure("HEADING",underline=1)

    self._root.update()
    self._root.deiconify()
    self._root.update_idletasks()

  def _executeMethod(self):
    try:
      params = string.strip(self._methodParams.get())
      if params == "":
        params = ()
      else:
        locals = {}
	locals["time"] = time
	locals["Boolean"] = netrpc.Boolean
	locals["False"] = netrpc.False
	locals["True"] = netrpc.True
	locals["DateTime"] = netrpc.DateTime
	locals["Time"] = netrpc.Time
	locals["Binary"] = netrpc.Binary
	locals["Date"] = netrpc.Date
	locals["Duration"] = netrpc.Duration
	#locals["Opaque"] = netrpc.Opaque
        params = eval(params,locals)
    except:
	info = sys.exc_info()
	exc_type = info[0]
	exc_value = info[1]
	exc_traceback = info[2]
	error = str(exc_type) + ": " + str(exc_value)
	self._methodResult.clear()
	self._methodResult.insert("end","Parameter Error\n","HEADING")
	self._methodResult.insert("end","\n")
	self._methodResult.insert("end",error)
    else:
      try:
	url = self._serverField.get()
	ns = self._namespaceField.get()
	if ns == "":
	  ns = None
	soapaction = self._soapactionField.get()
	if soapaction == "":
	  soapaction = None
	server = RemoteService(url,ns=ns,soapaction=soapaction)
	result = apply(server.__getattr__(self._methodField.get()),params)
      except netrpc.ServiceFailure,exception:
	self._methodResult.clear()
	self._methodResult.insert("end","Call Failure\n","HEADING")
	self._methodResult.insert("end","\n")
	self._methodResult.insert("end","Error: ")
	self._methodResult.insert("end",str(exception.error))
	self._methodResult.insert("end","\n")
	self._methodResult.insert("end","Description: ")
	self._methodResult.insert("end",exception.description)
	self._methodResult.insert("end","\n")
	if exception.origin != "":
	  self._methodResult.insert("end","Origin: ")
	  self._methodResult.insert("end",exception.origin)
	  self._methodResult.insert("end","\n")
	if exception.details != "":
	  self._methodResult.insert("end","\n")
	  self._methodResult.insert("end","Failure Details\n","HEADING")
	  self._methodResult.insert("end","\n")
	  self._methodResult.insert("end",exception.details)
	  self._methodResult.insert("end","\n")
	if RemoteService._request != "":
	  self._methodResult.insert("end","\n")
	  self._methodResult.insert("end","HTTP Request\n","HEADING")
	  self._methodResult.insert("end","\n")
	  self._methodResult.insert("end",RemoteService._request)
	if RemoteService._response != "":
	  self._methodResult.insert("end","\n")
	  self._methodResult.insert("end","HTTP Response\n","HEADING")
	  self._methodResult.insert("end","\n")
	  self._methodResult.insert("end",RemoteService._response)
      except:
	info = sys.exc_info()
	exc_type = info[0]
	exc_value = info[1]
	exc_traceback = info[2]
	error = str(exc_type) + ": " + str(exc_value)
	self._methodResult.clear()
	self._methodResult.insert("end","Error Occurred\n","HEADING")
	self._methodResult.insert("end","\n")
	self._methodResult.insert("end",error)
	self._methodResult.insert("end","\n")
      else:
	self._methodResult.clear()
	self._methodResult.insert("end","Call Successful\n","HEADING")
	self._methodResult.insert("end","\n")
	self._methodResult.insert("end",str(repr(result)))
	self._methodResult.insert("end","\n")
	if RemoteService._request != "":
	  self._methodResult.insert("end","\n")
	  self._methodResult.insert("end","HTTP Request\n","HEADING")
	  self._methodResult.insert("end","\n")
	  self._methodResult.insert("end",RemoteService._request)
	if RemoteService._response != "":
	  self._methodResult.insert("end","\n")
	  self._methodResult.insert("end","HTTP Response\n","HEADING")
	  self._methodResult.insert("end","\n")
	  self._methodResult.insert("end",RemoteService._response)


root = Pmw.initialise()
title = "SOAP Debugger"
main = RemoteServiceView(root,title=title)
root.mainloop()