#!/usr/bin/python # save the contents of this file to your computer and save with the .py extension # This script uses the phospho.ELM database webservice (wsdl at: http://phospho.elm.eu.org/webservice/phosphoELMdb.wsdl) to demonstrate # by example the full functionality of the phospho.ELM db webservice. # (Note: As an initial starting point it is recommended that first time users of the web-service should load the WSDL file above to SoapUI and investigate the Web Service # operations in that environment. SoapUI is a desktop application for inspecting, invoking, developing and functional/load/compliance testing of Web Services over HTTP. # It can be downloaded free of charge from http://www.soapui.org/.) # script written by: Kate Gould (gould@embl.de) # Installation of ZSI-2.0 from http://pywebsvcs.sourceforge.net/ is a prerequisite for # this script to work # following im[orted modules generated via ZSI command: # wsdl2py --url=http://phospho.elm.eu.org/webservice/phosphoELMdb.wsdl from phosphoELMdb_services import phosphoELMdbLocator, phosphoELMdbBindingSOAP, getKinaseListRequestMsg, getBindingDomainListRequestMsg, getInstancesByProteinSequenceAccessionSearchWithAllThroughputDataRequestMsg, getInstancesByProteinSequenceAccessionSearchWithLowThroughputDataOnlyRequestMsg, getInstancesByProteinSequenceAccessionSearchForAllRelatedSpeciesWithAllThroughputDataRequestMsg, getInstancesByProteinSequenceAccessionSearchForAllRelatedSpeciesWithLowThroughputDataOnlyRequestMsg, getInstancesByKinaseTextSearchRequestMsg, getInstancesByBindingDomainTextSearchRequestMsg, getSubstrateByIdentifierRequestMsg, getInstanceByIdentifierRequestMsg, getInstancesWithPdbEntryAssignedRequestMsg, getInstancesByPubMedIdRequestMsg, getSubstratesByNameSearchRequestMsg, getSubstratesByGeneNameSearchRequestMsg import time def writeInstancesInfo(result, outputFile): """ writes the instance object(s) to the specified output file. """ # determine if we are dealing with an Instance object or a list of Instance objects if (isinstance(result._Instance, list) == True): initialLoop = True for instance in result._Instance: if initialLoop == True: outputFile.write("\n") initialLoop = False else: # instance list separator outputFile.write("\n****************************************************************************\n") writeIndividualInstanceInfo(instance, outputFile) # else it is an individual instance object else: writeIndividualInstanceInfo(result._Instance, outputFile) def writeIndividualInstanceInfo(instance, outputFile): """ writes an instance object to the specified output file. """ for sequence in instance._SequenceReference: outputFile.write("sequence identifier database: " + sequence._Database + "\n") outputFile.write("sequence identifier: " + sequence._Accession + "\n") outputFile.write("UniPROT is primary acc: " + str(instance._UniPROTIsPrimaryAcc) + "\n") otherAccessions = '' firstLoop = True for otherAccession in instance._OtherAccession: if firstLoop == True: otherAccessions = otherAccession._Database + " : " + otherAccession._Accession firstLoop = False else: otherAccessions = otherAccessions + ',' + otherAccession._Database + " : " + otherAccession._Accession outputFile.write("other accession(s): " + otherAccessions + "\n\n") outputFile.write("instance identifier: " + instance._attrs['Accession'] + "\n") outputFile.write("entry date: " + time.strftime("%d %b %Y", instance._attrs['EntryDate']) + "\n") # str(instance._attrs['EntryDate']) + "\n") outputFile.write("substrate identifier: " + instance._Substrate + "\n\n") outputFile.write("phospho position: " + str(instance._Position) + "\n") outputFile.write("phospho residue: " + instance._Residue + "\n") outputFile.write("sequence: " + instance._Sequence + "\n") outputFile.write("species: " + instance._Species + "\n") domainRefDatabase = '' domainRefDomain = '' if instance._DomainReference != None: domainRefDatabase = instance._DomainReference._Database domainRefDomain = instance._DomainReference._Domain outputFile.write("\ndomain reference database: " + domainRefDatabase + " \n") outputFile.write("domain reference domain: " + domainRefDomain + "\n\n") note = '' if instance._Note != None: note = instance._Note outputFile.write("Note: " + note + "\n") reliabilityId = '' if instance._ReliabilityId != None: reliabilityId = str(instance._ReliabilityId) outputFile.write("Reliability Id: " + reliabilityId + "\n") bindingDomains = '' firstLoop = True for bindingDomain in instance._BindingDomain: if firstLoop == True: bindingDomains = bindingDomain firstLoop = False else: bindingDomains = bindingDomains + ',' + bindingDomain outputFile.write("binding domain(s): " + bindingDomains + "\n") elmAccessions = '' firstLoop = True for elmAccession in instance._ELMAccession: if firstLoop == True: elmAccessions = elmAccession firstLoop = False else: elmAccessions = elmAccessions + ',' + elmAccession outputFile.write("elm(s): " + elmAccessions + "\n") kinases = '' firstLoop = True for kinase in instance._Kinase: if firstLoop == True: kinases = kinase firstLoop = False else: kinases = kinases + ',' + kinase outputFile.write("kinase(s): " + kinases + "\n") pdbIds = '' firstLoop = True for pdbId in instance._PdbId: if firstLoop == True: pdbIds = pdbId firstLoop = False else: pdbIds = pdbIds + ',' + pdbId outputFile.write("\npdb ids(s): " + pdbIds + "\n") evidenceReferences = '' outputFile.write("\nLiterature reference(s): \n") for evidenceRef in instance._EvidenceReference: evidenceReferences = evidenceRef._LiteratureReference._Database + " : " + evidenceRef._LiteratureReference._Accession + "\n" evidenceReferences = evidenceReferences + "Method: " + evidenceRef._Method + "\nSource: " + evidenceRef._Source + "\n" outputFile.write("\n" + evidenceReferences) outputFile.write("\n") def writeSubstratesInfo(result, outputFile): """ writes the substrate object(s) to the specified output file. """ # determine if we are dealing with a Substrate object or a list of Substrate objects if (isinstance(result._Substrate, list) == True): initialLoop = True for substrate in result._Substrate: if initialLoop == True: outputFile.write("\n") initialLoop = False else: # substrate list separator outputFile.write("\n****************************************************************************\n") writeIndividualSubstrateInfo(substrate, outputFile) else: writeIndividualSubstrateInfo(result._Substrate, outputFile) def writeIndividualSubstrateInfo(substrate, outputFile): """ writes an instance object to the specified output file. """ outputFile.write("name: " + substrate._Name + "\n") outputFile.write("substrate identifier: " + substrate._attrs['Accession'] + "\n") outputFile.write("description: " + substrate._Description + "\n") synonyms = '' firstLoop = True for synonym in substrate._Synonym: if firstLoop == True: synonyms = synonym firstLoop = False else: synonyms = synonyms + ', ' + synonym outputFile.write("synonym(s): " + synonyms + "\n") expressionList = '' initialLoop = True for expression in substrate._Expression: if initialLoop == True: expressionList = expression initialLoop = False else: expressionList = expressionList + ", " + expression outputFile.write("expression: " + expressionList + "\n") instances = '' firstLoop = True for instance in substrate._Instance: if firstLoop == True: instances = instance firstLoop = False else: instances = instances + ', ' + instance outputFile.write("Instance identifier(s): " + instances + "\n") databaseURL = '' if substrate._DatabaseURL != '': databaseURL = "http://www.biocarta.com/pathfiles/" + substrate._DatabaseURL outputFile.write("Database URL to Biocarta: " + databaseURL + "\n") if len(substrate._Interaction) > 0: outputFile.write("\nSubstrate Interaction Partner(s):\n\n") for interaction in substrate._Interaction: outputFile.write("Interaction Database : " + interaction._MintID._Database + "\n") outputFile.write("Interaction ID: " + interaction._MintID._Accession + "\n") outputFile.write("Interactor Database: " + interaction._InteractorReference._Database + "\n") outputFile.write("Interactor ID: " + interaction._InteractorReference._Accession + "\n") outputFile.write("Interactor Identifier: " + interaction._InteractorIdentifier + "\n\n") if len(substrate._GOterm) > 0: outputFile.write("\nSubstrate GO term(s):\n\n") for goterm in substrate._GOterm: outputFile.write("Ontology : " + goterm._Ontology + "\n") outputFile.write("GO Accession: " + goterm._GOAccession + "\n") outputFile.write("GO Term: " + goterm._Term + "\n") def main(): pelmdbws = phosphoELMdbLocator().getphosphoELMdb() # example entries for the various methods proteinSequenceAccessionNumber = 'P12931' kinaseQueryText = 'ALK' bindingDomainQueryText = 'Lyn SH2' substrateIdentifier = 's000212' instanceIdentifier = 'I004550' substrateName = 'creb' pubmedId = '92065884' queryGeneName = 'PRKG1' # 1.getKinaseList method req = getKinaseListRequestMsg() result = pelmdbws.getKinaseList(req); kinaseListFile = open("getKinaseListResults", "w") kinaseListFile.write('List of kinases in phospho.ELM database: \n\n') for name in result._Kinase: kinaseListFile.write(name + "\n") kinaseListFile.close() # 2. getBindingDomainList method req = getBindingDomainListRequestMsg() result = pelmdbws.getBindingDomainList(req); bindingDomainListFile = open("getBindingDomainListResults", "w") bindingDomainListFile.write('List of binding domains in phospho.ELM database: \n\n') for name in result._BindingDomain: bindingDomainListFile.write(name + "\n") bindingDomainListFile.close() # 3. getInstancesByProteinSequenceAccessionSearchWithAllThroughputData method req = getInstancesByProteinSequenceAccessionSearchWithAllThroughputDataRequestMsg() req._ProteinSequenceAccession = proteinSequenceAccessionNumber result = pelmdbws.getInstancesByProteinSequenceAccessionSearchWithAllThroughputData(req) instancesByProteinSequenceAccessionSearchWithAllThroughputDataFile = open("getInstancesByProteinSequenceAccessionSearchWithAllThroughputDataResults", "w") instancesByProteinSequenceAccessionSearchWithAllThroughputDataFile.write("results for getInstancesByProteinSequenceAccessionSearchWithAllThroughputData method\n\n") writeInstancesInfo(result, instancesByProteinSequenceAccessionSearchWithAllThroughputDataFile) instancesByProteinSequenceAccessionSearchWithAllThroughputDataFile.close() # 4. getInstancesByProteinSequenceAccessionSearchWithLowThroughputDataOnly method req = getInstancesByProteinSequenceAccessionSearchWithLowThroughputDataOnlyRequestMsg() req._ProteinSequenceAccession = proteinSequenceAccessionNumber result = pelmdbws.getInstancesByProteinSequenceAccessionSearchWithLowThroughputDataOnly(req) instancesByProteinSequenceAccessionSearchWithLowThroughputDataOnlyFile = open("getInstancesByProteinSequenceAccessionSearchWithLowThroughputDataOnlyResults", "w") instancesByProteinSequenceAccessionSearchWithLowThroughputDataOnlyFile.write("results for getInstancesByProteinSequenceAccessionSearchWithLowThroughputDataOnly method\n\n") writeInstancesInfo(result, instancesByProteinSequenceAccessionSearchWithLowThroughputDataOnlyFile) instancesByProteinSequenceAccessionSearchWithLowThroughputDataOnlyFile.close() # 5. getInstancesByProteinSequenceAccessionSearchForAllRelatedSpeciesWithAllThroughputData method req = getInstancesByProteinSequenceAccessionSearchForAllRelatedSpeciesWithAllThroughputDataRequestMsg() req._ProteinSequenceAccession = proteinSequenceAccessionNumber result = pelmdbws.getInstancesByProteinSequenceAccessionSearchForAllRelatedSpeciesWithAllThroughputData(req) instancesByProteinSequenceAccessionSearchForAllRelatedSpeciesWithAllThroughputDataFile = open("getInstancesByProteinSequenceAccessionSearchForAllRelatedSpeciesWithAllThroughputDataResults", "w") instancesByProteinSequenceAccessionSearchForAllRelatedSpeciesWithAllThroughputDataFile.write("results for getInstancesByProteinSequenceAccessionSearchForAllRelatedSpeciesWithAllThroughputData method\n\n") writeInstancesInfo(result, instancesByProteinSequenceAccessionSearchForAllRelatedSpeciesWithAllThroughputDataFile) instancesByProteinSequenceAccessionSearchForAllRelatedSpeciesWithAllThroughputDataFile.close() # 6. getInstancesByProteinSequenceAccessionSearchForAllRelatedSpeciesWithLowThroughputDataOnly method req = getInstancesByProteinSequenceAccessionSearchForAllRelatedSpeciesWithLowThroughputDataOnlyRequestMsg() req._ProteinSequenceAccession = proteinSequenceAccessionNumber result = pelmdbws.getInstancesByProteinSequenceAccessionSearchForAllRelatedSpeciesWithLowThroughputDataOnly(req) instancesByProteinSequenceAccessionSearchForAllRelatedSpeciesWithLowThroughputDataOnlyFile = open("getInstancesByProteinSequenceAccessionSearchForAllRelatedSpeciesWithLowThroughputDataOnlyResults", "w") instancesByProteinSequenceAccessionSearchForAllRelatedSpeciesWithLowThroughputDataOnlyFile.write("results for getInstancesByProteinSequenceAccessionSearchForAllRelatedSpeciesWithLowThroughputDataOnly method\n\n") writeInstancesInfo(result, instancesByProteinSequenceAccessionSearchForAllRelatedSpeciesWithLowThroughputDataOnlyFile) instancesByProteinSequenceAccessionSearchForAllRelatedSpeciesWithLowThroughputDataOnlyFile.close() # 7. getInstancesByKinaseTextSearch method req = getInstancesByKinaseTextSearchRequestMsg() req._QueryText = kinaseQueryText result = pelmdbws.getInstancesByKinaseTextSearch(req) instancesByKinaseTextSearchFile = open("getInstancesByKinaseTextSearchResults", "w") instancesByKinaseTextSearchFile.write("results for getInstancesByKinaseTextSearch method:\n\n") writeInstancesInfo(result, instancesByKinaseTextSearchFile) instancesByKinaseTextSearchFile.close() # 8. getInstancesByBindingDomainTextSearch method req = getInstancesByBindingDomainTextSearchRequestMsg() req._QueryText = bindingDomainQueryText result = pelmdbws.getInstancesByBindingDomainTextSearch(req) instancesByBindingDomainTextSearchFile = open("getInstancesByBindingDomainTextSearchResults", "w") instancesByBindingDomainTextSearchFile.write("results for getInstancesByBindingDomainTextSearch method:\n\n") writeInstancesInfo(result, instancesByBindingDomainTextSearchFile) instancesByBindingDomainTextSearchFile.close() # 9. getSubstrateByIdentifier method req = getSubstrateByIdentifierRequestMsg() req._SubstrateIdentifier = substrateIdentifier result = pelmdbws.getSubstrateByIdentifier(req) substrateByIdentifierFile = open("getSubstrateByIdentifierResults", "w") substrateByIdentifierFile.write("results for substrateByIdentifier method: \n\n") writeSubstratesInfo(result, substrateByIdentifierFile) substrateByIdentifierFile.close() # 10. getInstanceByIdentifierRequest method req = getInstanceByIdentifierRequestMsg() req._InstanceIdentifier = instanceIdentifier result = pelmdbws.getInstanceByIdentifier(req) instanceByIdentifierFile = open("getInstanceByIdentifierResults", "w") instanceByIdentifierFile.write("results for instanceByIdentifier method: \n\n") writeInstancesInfo(result, instanceByIdentifierFile) instanceByIdentifierFile.close() # 11. getInstancesWithPdbEntryAssigned method req = getInstancesWithPdbEntryAssignedRequestMsg() result = pelmdbws.getInstancesWithPdbEntryAssigned(req) instancesWithPdbEntryAssignedFile = open("getInstancesWithPdbEntryAssignedResults" , "w") instancesWithPdbEntryAssignedFile.write("results for getInstancesWithPdbEntryAssigned method: \n\n") writeInstancesInfo(result, instancesWithPdbEntryAssignedFile) instancesWithPdbEntryAssignedFile.close() # 12. getInstancesByPubMedId method req = getInstancesByPubMedIdRequestMsg() req._pubmedId = pubmedId result = pelmdbws.getInstancesByPubMedId(req) instancesByPubMedIdFile = open("getInstancesByPubMedIdResults" , "w") instancesByPubMedIdFile.write("results for getInstancesByPubMedId method: \n\n") writeInstancesInfo(result, instancesByPubMedIdFile) instancesByPubMedIdFile.close() # 13. getSubstratesByNameSearch method req = getSubstratesByNameSearchRequestMsg() req._SubstrateName = substrateName result = pelmdbws.getSubstratesByNameSearch(req); substratesByNameSearchFile = open("getSubstratesByNameSearchResults", "w") substratesByNameSearchFile.write("results for getSubstratesByNameSearch method: \n\n") writeSubstratesInfo(result, substratesByNameSearchFile) substratesByNameSearchFile.close() # 14. getSubstratesByGeneNameSearchRequestMsg method req = getSubstratesByGeneNameSearchRequestMsg() req._GeneName = queryGeneName result = pelmdbws.getSubstratesByGeneNameSearch(req) substratesByGeneNameSearchFile = open("getSubstratesByGeneNameSearchResults", "w") substratesByGeneNameSearchFile.write("results for getSubstratesByGeneNameSearch method: \n\n") writeSubstratesInfo(result, substratesByGeneNameSearchFile) substratesByGeneNameSearchFile.close() if __name__ == '__main__': main()