#!/usr/bin/env python # bring in the ZSI-generated interface from PUG_services import * # other modules/functions from time import sleep import webbrowser def MFSearch(): # get a PUG SOAP port instance loc = PUGLocator() port = loc.getPUGSoap() # Initialize molecular formula search; no limits req = MFSearchSoapIn(); req.set_element_MF('C6H11N') req.set_element_mfOptions(req.new_mfOptions()) # ZSI booleans are 0,1 req.get_element_mfOptions().set_element_AllowOtherElements(0) listKey = port.MFSearch(req).get_element_ListKey() print 'ListKey =', listKey # call GetOperationStatus until the operation is finished req = GetOperationStatusSoapIn() req.set_element_AnyKey(listKey) status = port.GetOperationStatus(req).get_element_status() while (status == 'eStatus_Queued' or status == 'eStatus_Running'): print 'Waiting for operation to finish...' sleep(10) status = port.GetOperationStatus(req).get_element_status() # check status if (status == 'eStatus_Success' or status == 'eStatus_TimeLimit' or status == 'eStatus_HitLimit'): if (status == 'eStatus_TimeLimit'): print 'Warning: time limit reached before entire db searched' elif (status == 'eStatus_HitLimit'): print 'Warning: hit limit reached before entire db searched' # get Entrez key req = GetEntrezKeySoapIn() req.set_element_ListKey(listKey); entrezKey = port.GetEntrezKey(req).get_element_EntrezKey() # get URL req = GetEntrezUrlSoapIn() req.set_element_EntrezKey(entrezKey) url = port.GetEntrezUrl(req).get_element_url() print 'Success! Entrez URL =', url # may or may not work depending on platform... webbrowser.open(url) else: # status indicates error # see if there's some explanatory message req = GetStatusMessageSoapIn() req.set_element_AnyKey(listKey) print 'Error:', port.GetStatusMessage(req).get_element_message() if __name__ == '__main__': MFSearch() # $Id: MFSearch.py 127862 2008-05-16 15:34:19Z thiessen $