#!/usr/bin/env python # bring in the ZSI-generated interface from PUG_services import * # other modules/functions from time import sleep def SubstructureSearch(): # get a PUG SOAP port instance loc = PUGLocator() port = loc.getPUGSoap() # input labeled flurorobenzene in SMILES format req = InputStructureSoapIn() req.set_element_structure('c1cc([18F])ccc1') req.set_element_format('eFormat_SMILES'); strKey = port.InputStructure(req).get_element_StrKey() print 'StrKey =', strKey # Initialize substructure search req = SubstructureSearchSoapIn(); req.set_element_StrKey(strKey) # set some options, others are default req.set_element_ssOptions(req.new_ssOptions()) req.get_element_ssOptions().set_element_MatchIsotopes(1) # limit to 60 seconds, 1500 records req.set_element_limits(req.new_limits()) req.get_element_limits().set_element_seconds(60) req.get_element_limits().set_element_maxRecords(1500) listKey = port.SubstructureSearch(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 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__': SubstructureSearch() # $Id: SubstructureSearch.py 128041 2008-05-19 20:54:23Z thiessen $