http://code.google.com/p/spade2/source/detail?r=2226
Added:
/trunk/examples/unittests/aidTestCase.py
/trunk/examples/unittests/dadTestCase.py
Modified:
/trunk/examples/unittests/dfTestCase.py
/trunk/examples/unittests/unittests.py
/trunk/setup.py
/trunk/spade/AID.py
/trunk/spade/Agent.py
/trunk/spade/DF.py
/trunk/spade/SL0Parser.py
/trunk/spade/fipa.py
=======================================
--- /dev/null
+++ /trunk/examples/unittests/aidTestCase.py Sun Jul 11 16:13:46 2010
@@ -0,0 +1,190 @@
+import os
+import sys
+import time
+import unittest
+
+sys.path.append('../..')
+
+import spade
+import xmpp
+
+import xml.dom.minidom
+
+
+class AidTestCase(unittest.TestCase):
+
+ def setUp(self):
+ pass
+ def tearDown(self):
+ pass
+
+
+ def testCreateAid(self):
+ aid = spade.AID.aid()
+
+ self.assertEqual(aid.getName(),None)
+ self.assertEqual(aid.getAddresses(),[])
+ self.assertEqual(aid.getResolvers(),[])
+ self.assertEqual(aid.getProperties(),[])
+
+ aid.setName("aidname")
+ self.assertEqual(aid.getName(),"aidname")
+ aid.addAddress("add...@server.com")
+ self.assertEqual(len(aid.getAddresses()),1)
+ self.assertEqual(aid.getAddresses()[0],"add...@server.com")
+ aid.addResolvers("reso...@server.com")
+ self.assertEqual(len(aid.getResolvers()),1)
+ self.assertEqual(aid.getResolvers()[0],"reso...@server.com")
+ aid.addProperty("prop1")
+ self.assertEqual(len(aid.getProperties()),1)
+ self.assertEqual(aid.getProperties()[0],"prop1")
+
+
+ def testEqual(self):
+ a1 =
spade.AID.aid(name="name1",addresses=["addr1","addresses2"],resolvers=["resolver1"])
+ a2 = spade.AID.aid()
+ a2.setName("name1")
+ a2.addAddress("addr1")
+ a2.addAddress("addresses2")
+ a2.addResolvers("resolver1")
+ self.assertEqual(a1, a2)
+
+ a1.addAddress("address3")
+ self.assertNotEqual(a1,a2)
+ a1 =
spade.AID.aid(name="name1",addresses=["addr1"],resolvers=["resolver1"])
+ self.assertNotEqual(a1,a2)
+ a1 =
spade.AID.aid(name="name1_1",addresses=["addr1","addresses2"],resolvers=["resolver1"])
+ self.assertNotEqual(a1,a2)
+
+ def testMatch(self):
+ a1 =
spade.AID.aid(name="name1",addresses=["addr1","addresses2"],resolvers=["resolver1"])
+ a2 =
spade.AID.aid(name="name1",addresses=["addr1"],resolvers=["resolver1"])
+
+ self.assertEqual(a1.match(a2),True)
+
+ a2 =
spade.AID.aid(name="nam",addresses=["addr1","addresses2"],resolvers=["resolver1"])
+ self.assertEqual(a1.match(a2),True)
+
+ a2 = spade.AID.aid(addresses=["addresses2"])
+ self.assertEqual(a1.match(a2),True)
+
+ a2 =
spade.AID.aid(name="other",addresses=["addr1","addresses2"],resolvers=["resolver1"])
+ self.assertEqual(a1.match(a2),False)
+
+ a2 =
spade.AID.aid(name="name1",addresses=["addr2"],resolvers=["resolver1"])
+ self.assertEqual(a1.match(a2),False)
+
+
+ def testXML(self):
+
xml1='<agent-identifier>\n\t<name>name1</name>\n\t<addresses>\n\t\t<url>addr1</url>\n\t\t<url>addresses2</url>\n\t</addresses>\n</agent-identifier>\n'
+ aid1 =
spade.AID.aid(name="name1",addresses=["addr1","addresses2"],resolvers=["resolver1"])
+ xml2=aid1.asXML()
+
+ assert isEqualXML(xml1,xml2)
+
+ def testContentObject(self):
+
+ aid1 =
spade.AID.aid(name="name1",addresses=["addr1","addresses2"],resolvers=["resolver1"])
+
+ co = spade.content.ContentObject()
+ co["name"] ="name1"
+ co["addresses"] = ["addr1","addresses2"]
+ co["resolvers"] = ["resolver1"]
+ co["properties"] = []
+
+ assert aid1.asContentObject() == co
+
+ def testCO2XML(self):
+ co = spade.content.ContentObject()
+ co["name"]="name1"
+ co["addresses"] = ["addr1","addresses2"]
+
+ aid1 = spade.AID.aid(co=co)
+ xml1 = aid1.asXML()
+
xml2='<agent-identifier>\n\t<name>name1</name>\n\t<addresses>\n\t\t<url>addr1</url>\n\t\t<url>addresses2</url>\n\t</addresses>\n</agent-identifier>\n'
+
+ assert isEqualXML(xml1,xml2)
+
+ def testCOSanity(self):
+ aid1 =
spade.AID.aid(name="name1",addresses=["addr1","addresses2"],resolvers=["resolver1"])
+ co = aid1.asContentObject()
+ aid2 = spade.AID.aid(co=co)
+ assert aid1 == aid2
+
+ co2 = aid2.asContentObject()
+ assert co == co2
+
+ def testLoadSL0(self):
+ parser = spade.SL0Parser.SL0Parser()
+ sl0="((agent-identifier\n:name name1\n:addresses
\n(sequence\naddr1\naddresses2\n)\n:resolvers
\n(sequence\nresolver1\n)\n)\n)"
+ content = parser.parse(sl0)
+ self.assertNotEqual(content,None)
+
+ aid1 =
spade.AID.aid(name="name1",addresses=["addr1","addresses2"],resolvers=["resolver1"])
+ aid2 = spade.AID.aid()
+ aid2.loadSL0(content)
+
+ assert aid1 == aid2
+
+ assert sl0 == "("+str(aid2)+")"
+ assert str(aid1) == str(aid2)
+
+ def testSL2XMLSanity(self):
+ parser = spade.SL0Parser.SL0Parser()
+ sl0="""((agent-identifier :name name1 :addresses (sequence addr1
addresses2 ) :resolvers (sequence resolver1)))"""
+ content = parser.parse(sl0)
+ self.assertNotEqual(content,None)
+
+
xml1='<agent-identifier>\n\t<name>name1</name>\n\t<addresses>\n\t\t<url>addr1</url>\n\t\t<url>addresses2</url>\n\t</addresses>\n</agent-identifier>\n'
+ aid2 = spade.AID.aid()
+ aid2.loadSL0(content)
+
+ assert isEqualXML(xml1,aid2.asXML())
+
+
+def isEqualXML(a, b):
+ da,db = xmpp.simplexml.NodeBuilder(a),xmpp.simplexml.NodeBuilder(b)
+ return isEqualElement(da.getDom(),db.getDom())
+
+def isEqualElement(a, b):
+ if a.getName()!=b.getName():
+ return False
+ if sorted(a.getAttrs().items())!=sorted(b.getAttrs().items()):
+ return False
+ if len(a.getChildren())!=len(b.getChildren()):
+ return False
+ if a.getData() and b.getData() and a.getData() != b.getData():
+ return False
+ for ac in a.getChildren():
+ l = []
+ for bc in b.getChildren():
+ if ac.getName() == bc.getName():
+ l.append(bc)
+ if len(l) == 0:
+ return False
+ r = False
+ for n in l:
+ if len(ac.kids)==len(n.kids): r = True
+ if not r:
+ return False
+
+ if ac.getData():
+ for n in l:
+ if n.getData()==ac.getData(): r = True
+ if not r:
+ return False
+
+ if not ac.getData() and (len(ac.kids)>0):
+ for n in l:
+ if isEqualElement(ac,n): r = True
+ if not r:
+ return False
+
+ return True
+
+
+if __name__ == "__main__":
+ unittest.main()
+
+
+
=======================================
--- /dev/null
+++ /trunk/examples/unittests/dadTestCase.py Sun Jul 11 16:13:46 2010
@@ -0,0 +1,406 @@
+import os
+import sys
+import time
+import unittest
+
+sys.path.append('../..')
+
+import spade
+import xmpp
+
+import xml.dom.minidom
+
+
+def CreateSD(s=""):
+ sd = spade.DF.ServiceDescription()
+ sd.setName("servicename1"+s)
+ sd.setType("type1"+s)
+ sd.addProtocol("sdprotocol1"+s)
+ sd.addOntologies("sdontology1"+s)
+ sd.addLanguage("sdlanguage1"+s)
+ sd.setOwnership("agent1"+s)
+ sd.addProperty("P","valueP"+s)
+ sd.addProperty("Q","valueQ"+s)
+
+ return sd
+
+def CreateDAD(s=""):
+ dad = spade.DF.DfAgentDescription()
+ aid = spade.AID.aid()
+ aid.setName("aidname"+s)
+ dad.setAID(aid)
+
+ dad.addProtocol("protocol1"+s)
+ dad.addOntologies("ontology1"+s)
+ dad.addLanguage("language1"+s)
+ dad.setLeaseTime(1000)
+ dad.addScope("scope1"+s)
+
+ return dad
+
+def CreateCO(s=""):
+ co = spade.content.ContentObject()
+ co["name"] = spade.AID.aid(name="aidname"+s).asContentObject()
+ co["lease-time"] = 1000
+ co["protocols"] = ["protocol1"+s,"sdprotocol1"+s]
+ co["ontologies"] = ["ontology1"+s,"sdontology1"+s]
+ co["languages"] = ["language1"+s, "sdlanguage1"+s]
+ co["scope"] = "scope1"+s
+
+ sdco = spade.content.ContentObject()
+ sdco["name"] = "servicename1"+s
+ sdco["type"] = "type1"+s
+ sdco["protocols"] = ["sdprotocol1"+s]
+ sdco["languages"] = ["sdlanguage1"+s]
+ sdco["ontologies"] = ["sdontology1"+s]
+ sdco["ownership"] = "agent1"+s
+ sdco["properties"] = spade.content.ContentObject()
+ sdco["properties"]["P"] = "valueP"+s
+ sdco["properties"]["Q"] = "valueQ"+s
+
+ co["services"] = [sdco]
+
+ return co
+
+class DadTestCase(unittest.TestCase):
+
+ def setUp(self):
+ pass
+ def tearDown(self):
+ pass
+
+
+ def testCreateDad(self):
+ dad = spade.DF.DfAgentDescription()
+
+ self.assertEqual(dad.getName(),spade.AID.aid())
+ self.assertEqual(dad.getServices(),[])
+ self.assertEqual(dad.getProtocols(),[])
+ self.assertEqual(dad.getOntologies(),[])
+ self.assertEqual(dad.getLanguages(),[])
+ self.assertEqual(dad.getLeaseTime(),None)
+ self.assertEqual(dad.getScope(),[])
+
+ aid = spade.AID.aid()
+ aid.setName("aidname")
+ dad.setAID(aid)
+ self.assertEqual(dad.getName(),"aidname")
+
+ dad.addProtocol("protocol1")
+ self.assertEqual(dad.getProtocols(),["protocol1"])
+ dad.addOntologies("ontology1")
+ self.assertEqual(dad.getOntologies(),["ontology1"])
+ dad.addLanguage("language1")
+ self.assertEqual(dad.getLanguages(), ["language1"])
+ dad.setLeaseTime(1000)
+ self.assertEqual(dad.getLeaseTime(),1000)
+ dad.addScope("scope1")
+ self.assertEqual(dad.getScope(),"scope1")
+
+
+ def testAddService(self):
+ dad = CreateDAD()
+ sd1 = CreateSD("a")
+ sd2 = CreateSD("b")
+
+ dad.addService(sd1)
+ self.assertEqual(len(dad.getServices()),1)
+ self.assertEqual(dad.getServices()[0].getName(),"servicename1a")
+ self.assertEqual(dad.getProtocols() , ["protocol1","sdprotocol1a"])
+ self.assertEqual(dad.getLanguages() , ["language1","sdlanguage1a"])
+ self.assertEqual(dad.getOntologies() ,
["ontology1","sdontology1a"])
+
+ dad.addService(sd2)
+ self.assertEqual(len(dad.getServices()),2)
+ self.failIf(dad.getServices()[0].getName() not in
["servicename1a","servicename1b"])
+ self.failIf(dad.getServices()[1].getName() not in
["servicename1a","servicename1b"])
+ self.assertEqual(dad.getProtocols() ,
["protocol1","sdprotocol1a","sdprotocol1b"])
+ self.assertEqual(dad.getLanguages() ,
["language1","sdlanguage1a","sdlanguage1b"])
+ self.assertEqual(dad.getOntologies() ,
["ontology1","sdontology1a","sdontology1b"])
+
+ def testDelService(self):
+ dad = CreateDAD()
+ sd1 = CreateSD("a")
+ sd2 = CreateSD("b")
+
+ dad.addService(sd1)
+ dad.addService(sd2)
+ self.assertEqual(len(dad.getServices()),2)
+
+ delsd1 = CreateSD("a")
+ r = dad.delService(delsd1)
+ self.assertEqual(r,True)
+ self.assertEqual(len(dad.getServices()),1)
+ self.failIf(dad.getServices()[0].getName() != "servicename1b")
+ self.failIf("sdprotocol1a" in dad.getProtocols())
+ self.failIf("sdlanguage1a" in dad.getLanguages())
+ self.failIf("sdontology1a" in dad.getOntologies())
+
+ delsd2 = CreateSD("b")
+ dad.delService(delsd2)
+ self.assertEqual(len(dad.getServices()),0)
+ self.failIf("sdprotocol1b" in dad.getProtocols())
+ self.failIf("sdlanguage1b" in dad.getLanguages())
+ self.failIf("sdontology1b" in dad.getOntologies())
+
+ def testUpdateService(self):
+ dad = CreateDAD()
+ sd1 = CreateSD("a")
+ dad.addService(sd1)
+
+ sd2 = CreateSD("a")
+ sd2.setType("updated_type")
+
+ r = dad.updateService(sd2)
+ self.assertEqual(r,True)
+ self.assertEqual(len(dad.getServices()),1)
+ self.assertEqual(dad.getServices()[0].getType(),"updated_type")
+ self.assertEqual(dad.getServices()[0].getName(),"servicename1a")
+
+ def testCreateSD(self):
+ sd = spade.DF.ServiceDescription()
+ self.assertEqual(sd.getName(),None)
+ self.assertEqual(sd.getType(),None)
+ self.assertEqual(sd.getProtocols(),[])
+ self.assertEqual(sd.getOntologies(),[])
+ self.assertEqual(sd.getLanguages(),[])
+ self.assertEqual(sd.getOwnership(),None)
+ self.assertEqual(sd.getProperties(),{})
+
+ sd.setName("servicename1")
+ self.assertEqual(sd.getName(),"servicename1")
+ sd.setType("type1")
+ self.assertEqual(sd.getType(),"type1")
+ sd.addProtocol("protocol1")
+ self.assertEqual(sd.getProtocols(),["protocol1"])
+ sd.addOntologies("ontology1")
+ self.assertEqual(sd.getOntologies(),["ontology1"])
+ sd.addLanguage("language1")
+ self.assertEqual(sd.getLanguages(), ["language1"])
+ sd.setOwnership("agent1")
+ self.assertEqual(sd.getOwnership(),"agent1")
+ sd.addProperty("key1","value1")
+ self.assertEqual(sd.getProperty("key1"),"value1")
+ sd.addProperty("key2","value2")
+ self.assertEqual(sd.getProperty("key2"),"value2")
+
self.assertEqual(sd.getProperties(),{'key1':'value1','key2':'value2'})
+
+ def testMatchSD(self):
+
+ sd1 = CreateSD("a")
+ sd2 = spade.DF.ServiceDescription()
+ sd2.setName("servicename1a")
+
+ self.assertEqual(sd1.match(sd2),True)
+
+ sd2.setType("type1a")
+ self.assertEqual(sd1.match(sd2),True)
+
+ sd1.addOntologies("sdontology2a")
+ sd2.addOntologies("sdontology1a")
+ self.assertEqual(sd1.match(sd2),True)
+
+ sd2.setType("modified_type")
+ self.assertEqual(sd1.match(sd2),False)
+
+ sd2.addOntologies("sdontology3")
+ self.assertEqual(sd1.match(sd2),False)
+
+ def testMatchDAD(self):
+
+ dad1 = CreateDAD("a")
+ dad2 = spade.DF.DfAgentDescription()
+ aid = spade.AID.aid()
+ aid.setName("aidnamea")
+ dad2.setAID(aid)
+ self.assertEqual(dad1.match(dad2),True)
+
+ dad2.addLanguage("language1a")
+ self.assertEqual(dad1.match(dad2),True)
+
+ dad1.addLanguage("language2a")
+ self.assertEqual(dad1.match(dad2),True)
+
+ dad2.addLanguage("language3a")
+ self.assertEqual(dad1.match(dad2),False)
+
+ dad1 = CreateDAD("a")
+ dad2 = spade.DF.DfAgentDescription()
+ aid = spade.AID.aid()
+ aid.setName("aidnamea")
+ dad2.setAID(aid)
+ sd1 = CreateSD("a")
+ dad1.addService(sd1)
+ dad2.addService(sd1)
+ self.assertEqual(dad1.match(dad2),True)
+
+ sd2 = CreateSD("b")
+ dad2.addService(sd2)
+ self.assertEqual(dad1.match(dad2),False)
+ dad1.addService(sd2)
+ self.assertEqual(dad1.match(dad2),True)
+
+ def testXML(self):
+ xml1='<name><resolvers list="true"></resolvers><properties
list="true"></properties><name>aidname1</name><addresses
list="true"></addresses></name><lease-time>1000</lease-time><languages
list="true"><languages>language11</languages><languages>sdlanguage11</languages></languages><services
list="true"><services><name>servicename11</name><properties><Q>valueQ1</Q><P>valueP1</P></properties><languages
list="true"><languages>sdlanguage11</languages></languages><ownership>agent11</ownership><type>type11</type><ontologies
list="true"><ontologies>sdontology11</ontologies></ontologies><protocols
list="true"><protocols>sdprotocol11</protocols></protocols></services></services><scope>scope11</scope><ontologies
list="true"><ontologies>ontology11</ontologies><ontologies>sdontology11</ontologies></ontologies><protocols
list="true"><protocols>protocol11</protocols><protocols>sdprotocol11</protocols></protocols>'
+ dad = CreateDAD("1")
+ sd = CreateSD("1")
+ dad.addService(sd)
+ xml2=dad.asRDFXML()
+
+ assert xml1 == xml2
+
+ def testContentObject(self):
+
+ dad = CreateDAD("1")
+ sd = CreateSD("1")
+ dad.addService(sd)
+
+ co = CreateCO("1")
+
+ assert str(dad.asContentObject()) == str(co)
+
+ def testCO2XML(self):
+ co = CreateCO("1")
+ dad = spade.DF.DfAgentDescription(co=co)
+
+ xml1 = dad.asRDFXML()
+ xml2='<name><resolvers list="true"></resolvers><properties
list="true"></properties><name>aidname1</name><addresses
list="true"></addresses></name><lease-time>1000</lease-time><languages
list="true"><languages>language11</languages><languages>sdlanguage11</languages></languages><services
list="true"><services><name>servicename11</name><properties><Q>valueQ1</Q><P>valueP1</P></properties><languages
list="true"><languages>sdlanguage11</languages></languages><ownership>agent11</ownership><type>type11</type><ontologies
list="true"><ontologies>sdontology11</ontologies></ontologies><protocols
list="true"><protocols>sdprotocol11</protocols></protocols></services></services><scope>scope11</scope><ontologies
list="true"><ontologies>ontology11</ontologies><ontologies>sdontology11</ontologies></ontologies><protocols
list="true"><protocols>protocol11</protocols><protocols>sdprotocol11</protocols></protocols>'
+
+ assert xml1==xml2
+
+ def testCOSanity(self):
+ dad1 = CreateDAD("1")
+ sd1 = CreateSD("1")
+ dad1.addService(sd1)
+ co1 = dad1.asContentObject()
+
+ co2 = CreateCO("1")
+ dad2 = spade.DF.DfAgentDescription(co=co2)
+ assert dad1.match(dad2)
+
+ co3 = dad2.asContentObject()
+
+ assert str(co2) == str(co3)
+
+ def DISABLEDtestLoadSL0(self):
+ parser = spade.SL0Parser.SL0Parser()
+ sl0="""(df-agent-description
+ :name (agent-identifier
+ :name aidname1
+ )
+
+ :protocols
+ (set
+ protocol11
+ sdprotocol11
+ )
+ :ontologies
+ (set
+ ontology11
+ sdontology11
+ )
+ :languages
+ (set
+ language11
+ sdlanguage11
+ )
+ :services
+ (set
+ (service-description
+ :name servicename11
+ :type type11
+ :protocols
+ (set
+ sdprotocol11 )
+ :ontologies
+ (set
+ sdontology11 )
+ :languages
+ (set
+ sdlanguage11 )
+ :ownership agent11
+ :properties
+ (set
+ (property :name Q :value valueQ1)
+ (property :name P :value valueP1)
+ )
+ )
+
+ )
+ :lease-time 1000
+ :scope scope11
+ )
+ """
+ content = parser.parse(sl0)
+ self.assertNotEqual(content,None)
+
+ dad1 = CreateDAD("1")
+ sd = CreateSD("1")
+ dad1.addService(sd)
+ dad2 = spade.DF.DfAgentDescription()
+ dad2.loadSL0(content)
+
+ assert dad1.match(dad2)
+
+ assert sl0 == "("+dad2.asSL0()+")"
+ assert dad1.asSL0() == dad2.asSL0()
+
+ def DISABLEDtestSL2XMLSanity(self):
+ parser = spade.SL0Parser.SL0Parser()
+ sl0='((df-agent-description \n:name (agent-identifier\n:name
aidname1\n)\n\n:services \n(set\n(service-description\n:name
servicename11\n:type type11\n:protocols \n(set\nsdprotocol11 )\n:ontologies
\n(set\nsdontology11 )\n:languages \n(set\nsdlanguage11
):ownershipagent11\n:properties \n (set\n (property :name Q :value
valueQ1)\n (property :name P :value valueP1)\n)\n)\n\n)\n:protocols
\n(set\nprotocol11\nsdprotocol11\n)\n:ontologies
\n(set\nontology11\nsdontology11\n)\n:languages
\n(set\nlanguage11\nsdlanguage11\n)\n:lease-time 1000\n:scope scope11\n)\n)'
+ content = parser.parse(sl0)
+ self.assertNotEqual(content,None)
+
+ xml='<name><resolvers list="true"></resolvers><properties
list="true"></properties><name>aidname1</name><addresses
list="true"></addresses></name><lease-time>1000</lease-time><languages
list="true"><languages>language11</languages><languages>sdlanguage11</languages></languages><services
list="true"><services><name>servicename11</name><properties><Q>valueQ1</Q><P>valueP1</P></properties><languages
list="true"><languages>sdlanguage11</languages></languages><ownership>agent11</ownership><type>type11</type><ontologies
list="true"><ontologies>sdontology11</ontologies></ontologies><protocols
list="true"><protocols>sdprotocol11</protocols></protocols></services></services><scope>scope11</scope><ontologies
list="true"><ontologies>ontology11</ontologies><ontologies>sdontology11</ontologies></ontologies><protocols
list="true"><protocols>protocol11</protocols><protocols>sdprotocol11</protocols></protocols>'
+ dad = spade.DF.DfAgentDescription()
+ dad.loadSL0(content)
+
+ assert isEqualXML(xml,dad.asXML())
+
+
+def isEqualXML(a, b):
+ da,db = xmpp.simplexml.NodeBuilder(a),xmpp.simplexml.NodeBuilder(b)
+ return isEqualElement(da.getDom(),db.getDom())
+
+def isEqualElement(a, b):
+ if a.getName()!=b.getName():
+ return False
+ if sorted(a.getAttrs().items())!=sorted(b.getAttrs().items()):
+ return False
+ if len(a.getChildren())!=len(b.getChildren()):
+ return False
+ if a.getData() and b.getData() and a.getData() != b.getData():
+ return False
+ for ac in a.getChildren():
+ l = []
+ for bc in b.getChildren():
+ if ac.getName() == bc.getName():
+ l.append(bc)
+ if len(l) == 0:
+ return False
+ r = False
+ for n in l:
+ if len(ac.kids)==len(n.kids): r = True
+ if not r:
+ return False
+
+ if ac.getData():
+ for n in l:
+ if n.getData()==ac.getData(): r = True
+ if not r:
+ return False
+
+ if not ac.getData() and (len(ac.kids)>0):
+ for n in l:
+ if isEqualElement(ac,n): r = True
+ if not r:
+ return False
+
+ return True
+
+
+if __name__ == "__main__":
+ unittest.main()
+
+
+
=======================================
--- /trunk/examples/unittests/dfTestCase.py Fri Jul 2 08:25:14 2010
+++ /trunk/examples/unittests/dfTestCase.py Sun Jul 11 16:13:46 2010
@@ -988,7 +988,7 @@
sys.exit()
suite = unittest.TestSuite()
- suite.addTest(DFTestCase('testDoubleRegister'))
+ suite.addTest(DFTestCase('testRegisterService'))
result = unittest.TestResult()
suite.run(result)
=======================================
--- /trunk/examples/unittests/unittests.py Sun Jun 27 14:08:22 2010
+++ /trunk/examples/unittests/unittests.py Sun Jul 11 16:13:46 2010
@@ -4,5 +4,7 @@
from coTestCase import *
from p2pTestCase import *
from rpcTestCase import *
+from aidTestCase import *
+from dadTestCase import *
from eventbehavTestCase import *
unittest.main()
=======================================
--- /trunk/setup.py Wed Dec 10 10:04:26 2008
+++ /trunk/setup.py Sun Jul 11 16:13:46 2010
@@ -4,7 +4,7 @@
from distutils.core import setup, Extension
import glob
-from runspade import VERSION
+from runspade import __version__
#if os.name != "posix":
# import py2exe
@@ -27,23 +27,23 @@
if os.name == "posix":
#if sys.platform != "darwin":
setup(name='SPADE',
- version=VERSION,
+ version=__version__,
description='Smart Python multi-Agent Development Environment',
- author='Javier Palanca, Miguel Escriva, Gustavo Aranda, Natalia Criado',
- author_email='jpal...@dsic.upv.es',
- url='http://spade.gti-ia.dsic.upv.es',
+ author='Javier Palanca, Gustavo Aranda, Miguel Escriva, Natalia Criado',
+ author_email='jpal...@gmail.com',
+ url='http://spade2.googlecode.com',
package_dir={'spade': 'spade'},
#packages=['spade', 'xmpp', 'xmppd', 'xmppd.modules', 'xmppd.locale', 'xmppd.socker', 'tlslite', 'tlslite.utils', 'tlslite.integration'],
packages=['spade', 'xmpp', 'xmppd', 'xmppd.modules', 'xmppd.socker', 'tlslite', 'tlslite.utils', 'tlslite.integration'],
#scripts=['spade.sh','gspade.sh','gspade.py', 'runspade.py',"tlslite/scripts/tls.py", "tlslite/scripts/tlsdb.py"],
-
scripts=['runspade.py',"tlslite/scripts/tls.py", "tlslite/scripts/tlsdb.py"],
+
scripts=['runspade.py'],#,"tlslite/scripts/tls.py", "tlslite/scripts/tlsdb.py"],
data_files=[
('/etc/spade',['etc/spade.xml']),
('/etc/spade',['etc/xmppd.xml']),
#('/usr/share/spade',['usr/share/spade/rma.glade']),
- ('/usr/share/spade/mtp',glob.glob('usr/share/spade/mtp/*.py')),
- ('/usr/share/doc/spade',['readme.txt']),
- ('/usr/share/doc/spade/',['doc/api.tar.gz']),
+ #('/usr/share/spade/mtp',glob.glob('usr/share/spade/mtp/*.py')),
+ #('/usr/share/doc/spade',['readme.txt']),
+ #('/usr/share/doc/spade/',['doc/api.tar.gz']),
#('/usr/share/spade/jabberd',['usr/share/spade/jabberd/jabberd','usr/share/spade/jabberd/jabber.xml']),
#('/usr/share/spade/jabberd/libs',glob.glob('usr/share/spade/jabberd/libs/*.so')),
#('/usr/share/spade/jabberd/spool',['usr/share/spade/jabberd/spool/.spool'])
@@ -54,28 +54,28 @@
# GUS: What is this case? Meesa not understand :-?
setup(name='SPADE',
- version=VERSION,
+ version=__version__,
description='Smart Python multi-Agent Development Environment',
- author='Javier Palanca, Miguel Escriva, Gustavo Aranda, Natalia Criado',
- author_email='jpal...@dsic.upv.es',
- url='http://spade.gti-ia.dsic.upv.es',
+ author='Javier Palanca, Gustavo Aranda, Miguel Escriva, Natalia Criado',
+ author_email='jpal...@gmail.com',
+ url='http://spade2.googlecode.com',
package_dir={'spade': 'spade'},
#packages=['spade', 'xmpp', 'xmppd', 'xmppd.filters', 'tlslite', 'tlslite.utils', 'tlslite.integration'],
packages=['spade', 'xmpp', 'xmppd', 'xmppd.modules', 'xmppd.socker', 'tlslite', 'tlslite.utils', 'tlslite.integration'],
#scripts=['spade-rma.py', 'runspade.py'],
-
scripts=['runspade.py',"tlslite/scripts/tls.py", "tlslite/scripts/tlsdb.py"],
+
scripts=['runspade.py'],#,"tlslite/scripts/tls.py", "tlslite/scripts/tlsdb.py"],
#console=['gspade.py', 'runspade.py','configure.py',"tlslite/scripts/tls.py", "tlslite/scripts/tlsdb.py"],
data_files=[
('etc',[]),
#('usr/share/spade',['usr/share/spade/rma.glade']),
- ('.',['readme.txt']),
+ #('.',['readme.txt']),
#('doc/private',glob.glob('doc/api/private/*')),
#('doc/public',glob.glob('doc/api/public/*')),
#('doc',['doc/api/index.html','doc/api/epydoc.css']),
#('usr/share/spade/jabberd',['usr/share/spade/jabberd/jabberd.exe']),
#('usr/share/spade/jabberd/libs',glob.glob('usr/share/spade/jabberd/libs/*.dll')),
#('usr/share/spade/jabberd/spool',[])
- ('usr/share/spade/xmppd/spool',[])
+ #('usr/share/spade/xmppd/spool',[])
],
ext_modules=exts
)
=======================================
--- /trunk/spade/AID.py Mon Jul 5 13:51:29 2010
+++ /trunk/spade/AID.py Sun Jul 11 16:13:46 2010
@@ -19,9 +19,13 @@
self.__addresses = []
if co.addresses:
self.__addresses.append(co.addresses)
- self.__resolvers = list()
+ if "list" in str(type(co.resolvers)):
+ self.__resolvers = copy.copy(co.resolvers)
+ else:
+ self.__resolvers = []
+ if co.resolvers:
+ self.__resolvers.append(co.resolvers)
self.__userDefinedProperties = list()
- #print "AID:",str(self.asXML())
return
if name != None:
@@ -84,21 +88,39 @@
self.__userDefinedProperties.append(prop)
def match(self, other):
- """
- returns True if two AIDs are similar
- else returns False
- """
- if other != None:
- if (self.getName() != None and other.getName() != None \
- and not (other.getName() in self.getName()) ):
- return False
- if (len(self.getAddresses())>0 and len(other.getAddresses())>0):
- for oaddr in other.getAddresses():
- for saddr in self.getAddresses():
- if not (oaddr in saddr): return False
- return True
-
- else: return False
+ """
+ returns True if two AIDs are similar
+ else returns False
+ """
+
+ if other==None: return True
+
+ if (self.getName() != None and other.getName() != None \
+ and not (other.getName() in self.getName()) ):
+ return False
+ if (len(self.getAddresses())>0 and len(other.getAddresses())>0):
+ for oaddr in other.getAddresses():
+ found=False
+ for saddr in self.getAddresses():
+ if (oaddr in saddr): found=True
+ if not found:
+ return False
+ if (len(self.getResolvers())>0 and len(other.getResolvers())>0):
+ for oaddr in other.getResolvers():
+ found=False
+ for saddr in self.getResolvers():
+ if (oaddr in saddr): found=True
+ if not found:
+ return False
+ if (len(self.getProperties())>0 and len(other.getProperties())>0):
+ for oaddr in other.getProperties():
+ found=False
+ for saddr in self.getProperties():
+ if (oaddr in saddr): found=True
+ if not found:
+ return False
+ return True
+
def __eq__(self, other):
"""
@@ -106,16 +128,26 @@
returns True if two AIDs are equal
else returns False
"""
- if other != None:
- if (self.getName() != None and other.getName() != None \
- and self.getName() != other.getName()):
- return False
- if (len(self.getAddresses())>0 and len(other.getAddresses())>0 \
- and self.getAddresses().sort() != other.getAddresses().sort()):
- return False
-
- return True
- else: return False
+ if other==None: return False
+
+ if (self.getName() != None and other.getName() != None \
+ and self.getName() != other.getName()):
+ return False
+ addr1 = self.getAddresses()
+ addr2 = other.getAddresses()
+ addr1.sort()
+ addr2.sort()
+ if addr1 != addr2:
+ return False
+
+ res1 = self.getResolvers()
+ res2 = other.getResolvers()
+ res1.sort()
+ res2.sort()
+ if res1 != res2:
+ return False
+
+ return True
def __ne__(self,other):
"""
@@ -124,7 +156,7 @@
else returns True
"""
- return not self == other
+ return not (self == other)
def __hash__(self):
@@ -170,6 +202,12 @@
co["addresses"] = []
for addr in self.getAddresses():
co["addresses"].append(addr)
+ co["resolvers"] = []
+ for r in self.getResolvers():
+ co["resolvers"].append(r)
+ co["properties"] = []
+ for p in self.getProperties():
+ co["properties"].append(p)
return co
def asXML(self):
@@ -184,6 +222,7 @@
sb = sb + "\t\t" + self.encodeTag( "url", addr ) + "\n"
sb = sb + "\t</addresses>\n"
+
sb = sb + "</agent-identifier>\n"
return sb
@@ -218,7 +257,7 @@
if "resolvers" in content["agent-identifier"]:
for res in content["agent-identifier"].resolvers.sequence:
- self.addResolvers(self.loadSL0(res))#[0]))
+ self.addResolvers(res)#[0]))
else: return -1
=======================================
--- /trunk/spade/Agent.py Tue Jul 6 17:55:23 2010
+++ /trunk/spade/Agent.py Sun Jul 11 16:13:46 2010
@@ -80,7 +80,7 @@
inits an agent with a JID (user@server) and a platform JID
(acc.platformserver)
"""
MessageReceiver.MessageReceiver.__init__(self)
- self._agent_log = {} # Log system
+ self._agent_log = [] # Log system
self._aid = AID.aid(name=agentjid, addresses=["xmpp://"+agentjid])
self._jabber = None
self._serverplatform = serverplatform
@@ -96,6 +96,7 @@
self._debug = False
self._debug_filename = ""
self._debug_file = None
+ self._debug_mutex = thread.allocate_lock()
self._messages=[]
self._messages_mutex = thread.allocate_lock()
@@ -372,12 +373,14 @@
def DEBUG(self, dmsg, typ="info", component="spade"):
# Record at log
- t = time.time()
+ t = time.ctime()
dmsg = dmsg.replace(">",">")
dmsg = dmsg.replace("<","<")
dmsg = dmsg.replace(""",'"')
- self._agent_log[t] = (typ,dmsg,component,time.ctime(t))
+ self._debug_mutex.acquire()
+ self._agent_log.append((typ,dmsg,component,t))
+ self._debug_mutex.release()
if self._debug:
# Print on screen
@@ -393,13 +396,13 @@
# Log to file
if self._debug_file:
if typ == "info":
- self._debug_file.write( self._agent_log[t][3] + ": [" +
component + "] " + dmsg + " , info\n")
+ self._debug_file.write( t + ": [" + component + "] " +
dmsg + " , info\n")
elif typ == "err":
- self._debug_file.write( self._agent_log[t][3] + ": [" +
component + "] " + dmsg + " , error\n")
+ self._debug_file.write( t + ": [" + component + "] " +
dmsg + " , error\n")
elif typ == "ok":
- self._debug_file.write( self._agent_log[t][3] + ": [" +
component + "] " + dmsg + " , ok\n")
+ self._debug_file.write( t + ": [" + component + "] " +
dmsg + " , ok\n")
elif typ == "warn":
- self._debug_file.write( self._agent_log[t][3] + ": [" +
component + "] " + dmsg + " , warn\n")
+ self._debug_file.write( t + ": [" + component + "] " +
dmsg + " , warn\n")
self._debug_file.flush()
def setDebug(self, activate = True):
@@ -423,6 +426,10 @@
self.DEBUG("Could not open file " + self._debug_filename + "
as log file", "err")
def getLog(self):
+ l = copy.copy(self._agent_log)
+ l.reverse()
+ return l
+ '''
keys = self._agent_log.keys()
keys.sort()
keys.reverse()
@@ -430,6 +437,7 @@
for k in keys:
l.append(self._agent_log[k])
return l
+ '''
def newMessage(self):
"""Creates and returns an empty ACL message"""
=======================================
--- /trunk/spade/DF.py Mon Jul 5 13:51:29 2010
+++ /trunk/spade/DF.py Sun Jul 11 16:13:46 2010
@@ -8,6 +8,7 @@
from SL0Parser import *
from content import ContentObject
import copy
+import thread
class DF(PlatformAgent):
"""
@@ -147,7 +148,9 @@
if self.content.action == "register":
if not
self.myAgent.servicedb.has_key(dad.getAID().getName()):
+ self.myAgent.db_mutex.acquire()
self.myAgent.servicedb[dad.getAID().getName()] =
dad
+ self.myAgent.db_mutex.release()
else:
#check if already-registered
for ss in dad.getServices():
@@ -165,7 +168,9 @@
try:
for s in dad.getServices():
+ self.myAgent.db_mutex.acquire()
self.myAgent.servicedb[dad.getAID().getName()].addService(s)
+ self.myAgent.db_mutex.release()
self.myAgent.DEBUG("Service successfully
registered: "+str(s),'ok')
except Exception, err:
reply.setPerformative("failure")
@@ -207,12 +212,16 @@
try:
services =
copy.copy(self.myAgent.servicedb[dad.getAID().getName()])
if dad.getServices() == []:
+ self.myAgent.db_mutex.acquire()
del
self.myAgent.servicedb[dad.getAID().getName()]
+ self.myAgent.db_mutex.release()
else:
for ss in dad.getServices():
for s in services.getServices():
if ss.match(s):
+ self.myAgent.db_mutex.acquire()
self.myAgent.servicedb[dad.getAID().getName()].delService(s)
+ self.myAgent.db_mutex.release()
except Exception, err:
reply.setPerformative("failure")
reply.setContent("("+self.msg.getContent()
+ '(internal-error "could not deregister service"))')
@@ -259,7 +268,9 @@
if co["fipa:action"]["fipa:act"] == "register":
if not
self.myAgent.servicedb.has_key(dad.getAID().getName()):
+ self.myAgent.db_mutex.acquire()
self.myAgent.servicedb[dad.getAID().getName()] =
dad
+ self.myAgent.db_mutex.release()
else:
#check if already-registered
for ss in dad.getServices():
@@ -276,11 +287,13 @@
self.myAgent.send(reply)
self.myAgent.DEBUG("FAILURE: Service
already registered! ",'warn')
return -1
-
+
try:
for s in dad.getServices():
+ self.myAgent.db_mutex.acquire()
self.myAgent.servicedb[dad.getAID().getName()].addService(s)
+ self.myAgent.db_mutex.release()
self.myAgent.DEBUG("Service successfully
registered: "+str(s),'ok')
except Exception, err:
reply.setPerformative("failure")
@@ -290,8 +303,8 @@
self.myAgent.send(reply)
self.myAgent.DEBUG("FAILURE: Service could not
be registered: "+str(err),'error')
return -1
-
-
+
+
reply.setPerformative("inform")
co_rep =
ContentObject(namespaces={"http://www.fipa.org/schemas/fipa-rdf0#":"fipa:"})
co_rep["fipa:done"] = "true"
@@ -329,12 +342,16 @@
services =
copy.copy(self.myAgent.servicedb[dad.getAID().getName()])
self.myAgent.DEBUG("Deregistering "+str(services)
+ " AND " + str(dad.getServices()))
if dad.getServices() == []:
+ self.myAgent.db_mutex.acquire()
del
self.myAgent.servicedb[dad.getAID().getName()]
+ self.myAgent.db_mutex.release()
else:
for ss in dad.getServices():
for s in services.getServices():
if ss.match(s):
+ self.myAgent.db_mutex.acquire()
self.myAgent.servicedb[dad.getAID().getName()].delService(s)
+ self.myAgent.db_mutex.release()
except Exception, err:
reply.setPerformative("failure")
co_error =
ContentObject(namespaces={"http://www.fipa.org/schemas/fipa-rdf0#":"fipa:"})
@@ -402,11 +419,11 @@
except Exception, err:
self.myAgent.DEBUG("FAILURE: Could not extract
DfAgentDescription from content: "+str(err),'error')
-
+ self.myAgent.db_mutex.acquire()
if max in [-1, 0]:
# No limit
for agentid,dads in self.myAgent.servicedb.items():
- if dad.match(dads):
+ if dads.match(dad):
d = copy.copy(dads)
if dad.services == []:
d.services = dads.getServices()
@@ -414,14 +431,14 @@
d.services=[]
for ss in dad.getServices():
for s in dads.getServices():
- if ss.match(s):
+ if s.match(ss):
d.addService(s)
result.append(d)
else:
max = abs(max)
for agentid,dads in self.myAgent.servicedb.items():
if max >= 0:
- if dad.match(dads):
+ if dads.match(dad):
d = copy.copy(dads)
if dad.services == []:
d.services = dads.getServices()
@@ -429,12 +446,13 @@
d.services=[]
for ss in dad.getServices():
for s in dads.getServices():
- if ss.match(s):
+ if s.match(ss):
d.addService(s)
result.append(d)
max -= 1
else: break
+ self.myAgent.db_mutex.release()
content = "((result " +
self.msg.getContent().strip("\n")[1:-1]
if len(result)>0:
content += " (sequence "
@@ -478,13 +496,16 @@
if self.content.action.argument.df_agent_description:
try:
dad = DfAgentDescription(co =
self.content.action.argument.df_agent_description)
+ self.myAgent.DEBUG("Searching for: " +str(dad)
+ " in ServiceDB: " + str(map(lambda s: str(s),
self.myAgent.servicedb.values())) )
except Exception, err:
self.myAgent.DEBUG("FAILURE: Could not extract
DfAgentDescription from content: "+str(err),'error')
+ self.myAgent.db_mutex.acquire()
if max in [-1, 0]:
# No limit
for agentid,dads in
self.myAgent.servicedb.items():
- if dad.match(dads):
+ self.myAgent.DEBUG("Comparing " + str(dad)
+ " WITH " + str(dads) + " ==> " + str(dads.match(dad)),'ok')
+ if dads.match(dad):
d = copy.copy(dads)
if dad.services == []:
d.services = dads.getServices()
@@ -492,14 +513,14 @@
d.services=[]
for ss in dad.getServices():
for s in dads.getServices():
- if ss.match(s):
+ if s.match(ss):
d.addService(s)
result.append(d)
else:
max = abs(max)
for agentid,dads in
self.myAgent.servicedb.items():
if max >= 0:
- if dad.match(dads):
+ if dads.match(dad):
d = copy.copy(dads)
if dad.services == []:
d.services = dads.getServices()
@@ -507,11 +528,12 @@
d.services=[]
for ss in dad.getServices():
for s in dads.getServices():
- if ss.match(s):
+ if s.match(ss):
d.addService(s)
result.append(d)
max -= 1
else: break
+ self.myAgent.db_mutex.release()
content =
ContentObject(namespaces={"http://www.fipa.org/schemas/fipa-rdf0#":"fipa:"})
content["fipa:result"] = []
@@ -589,7 +611,9 @@
try:
for ss in dad.getServices():
+ self.myAgent.db_mutex.acquire()
result=self.myAgent.servicedb[dad.getAID().getName()].updateService(ss)
+ self.myAgent.db_mutex.release()
if not result:
reply.setPerformative("failure")
co_error =
ContentObject(namespaces={"http://www.fipa.org/schemas/fipa-rdf0#":"fipa:"})
@@ -658,7 +682,9 @@
try:
for ss in dad.getServices():
+ self.myAgent.db_mutex.acquire()
result=self.myAgent.servicedb[dad.getAID().getName()].updateService(ss)
+ self.myAgent.db_mutex.release()
if not result:
reply.setPerformative("failure")
reply.setContent("("+self.msg.getContent()
+ "(not-registered))")
@@ -695,6 +721,7 @@
self.wui.start()
self.servicedb = dict()
+ self.db_mutex = thread.allocate_lock()
self.setDefaultBehaviour(self.DefaultBehaviour())
@@ -715,10 +742,8 @@
self.loadSL0(content)
if co:
- #print "DAD FROM:\n",co.pprint()
if co.name:
self.name = AID.aid(co = co.name)
- #print "DAD NAME:",str(self.name.asContentObject())
if co.services:
self.services = []
if "ContentObject" in str(type(co.services)):
@@ -728,7 +753,9 @@
for s in co.services:
self.services.append(ServiceDescription(co = s))
if co.lease_time:
- self.name = co.lease_time
+ self.lease_time = co.lease_time
+ if co.has_key("lease-time"):
+ self.lease_time = co["lease-time"]
if co.protocols:
self.protocols = copy.copy(co.protocols)
if co.ontologies:
@@ -737,7 +764,6 @@
self.languages = copy.copy(co.languages)
if co.scope:
self.scope = copy.copy(co.scope)
- #print "DAD DONE:", self.asRDFXML()
def asContentObject(self):
@@ -789,7 +815,7 @@
def addService(self, s):
#FIX
for ss in self.services:
- assert not s.match(ss)
+ assert not ss.match(s)
self.services.append(s)
for p in s.getProtocols():
if p not in self.protocols: self.addProtocol(p)
@@ -804,23 +830,16 @@
if self.services[i].match(s):
index = i
break
- if index: self.services.pop(i)
+ if index!=None: self.services.pop(i)
else: return False
for p in s.getProtocols():
- found = False
- for pp in self.protocols:
- if p ==pp: found = True
- if not found: self.protocols.remove(pp)
+ if p in self.protocols:
+ self.protocols.remove(p)
for p in s.getOntologies():
- found = False
- for pp in self.ontologies:
- if p ==pp: found = True
- if not found: self.ontologies.remove(pp)
+ if p in self.ontologies: self.ontologies.remove(p)
for p in s.getLanguages():
- found = False
- for pp in self.languages:
- if p ==pp: found = True
- if not found: self.languages.remove(pp)
+ if p in self.languages: self.languages.remove(p)
+ return True
def updateService(self,s):
found = False
@@ -881,32 +900,38 @@
#def __eq__(self,y):
def match(self,y):
- if self.name:
- if self.name != y.getAID():
+ if y.name:
+ if not self.getAID().match(y.name):
return False
- if self.protocols:
- if self.protocols.sort() != y.getProtocols().sort():
+ if y.protocols:
+ for p in y.protocols:
+ if not (p in self.protocols):
+ return False
+ if y.ontologies:
+ for o in y.ontologies:
+ if not (o in self.ontologies):
+ return False
+ if y.languages:
+ for l in y.languages:
+ if not (l in self.languages):
+ return False
+ if y.lease_time:
+ if self.lease_time != y.getLeaseTime():
return False
- if self.ontologies:
- if self.ontologies.sort() != y.getOntologies().sort():
+ if y.scope:
+ if self.scope != y.getScope():
return False
- if self.languages:
- if self.languages.sort() != y.getLanguages().sort():
- return False
- if self.lease_time:
- if self.lease_time != None and y.getLeaseTime() != None:
- return False
- if self.scope:
- if self.scope.sort() != y.getScope().sort():
- return False
if len(self.services)>0 and len(y.getServices())>0:
- for i in self.services:
- for j in y.getServices():
+ for i in y.services:
+ matched = False
+ for j in self.getServices():
#if i == j:
- if i.match(j):
- return True
- return False
+ if j.match(i):
+ matched=True
+ break
+ if not matched: return False
+ return True
else:
return True
@@ -942,7 +967,7 @@
self.lease_time = content["lease-time"][0]
if "scope" in content:
- self.scope = content.scope.set.asList()
+ self.scope = content["scope"][0]
def __str__(self):
return self.asRDFXML()
@@ -953,12 +978,6 @@
if self.name != None:
sb = sb + ":name " + str(self.name) + "\n"
- if len(self.services) > 0:
- sb = sb + ":services \n(set\n"
- for i in self.services:
- sb = sb + str(i) + '\n'
- sb = sb + ")\n"
-
if len(self.protocols) > 0:
sb = sb + ":protocols \n(set\n"
for i in self.protocols:
@@ -978,12 +997,15 @@
sb = sb + ")\n"
if self.lease_time != None:
- sb = sb + ":lease-time " + str(self.lease_time)
-
- if len(self.scope) > 0:
- sb = sb + ":scope \n(set\n"
- for i in self.scope:
- sb = sb + str(i) + '\n'
+ sb = sb + ":lease-time " + str(self.lease_time) + '\n'
+
+ if self.scope != None:
+ sb = sb + ":scope " + str(self.scope) + '\n'
+
+ if len(self.services) > 0:
+ sb = sb + ":services \n(set\n"
+ for i in self.services:
+ sb = sb + str(i.asSL0()) +'\n'
sb = sb + ")\n"
sb = "(df-agent-description \n" + sb + ")\n"
@@ -1083,28 +1105,32 @@
def match(self,y):
- if self.name:
+ if y.name:
if self.name != y.getName():
return False
- if self.type:
+ if y.type:
if self.type != y.getType():
return False
- if self.protocols:
- if self.protocols.sort() != y.getProtocols().sort():
- return False
- if self.ontologies:
- if self.ontologies.sort() != y.getOntologies().sort():
- return False
- if self.languages:
- if self.languages.sort() != y.getLanguages().sort():
- return False
- if self.ownership:
+ if y.protocols:
+ for p in y.protocols:
+ if not (p in self.protocols):
+ return False
+ if y.ontologies:
+ for o in y.ontologies:
+ if not (o in self.ontologies):
+ return False
+ if y.languages:
+ for l in y.languages:
+ if not (l in self.languages):
+ return False
+ if y.ownership:
if self.ownership != y.getOwnership():
return False
#properties
- for k,v in self.properties.items():
- if y.getProperties().has_key(k):
+ for k,v in y.properties.items():
+ if self.getProperties().has_key(k):
if y.getProperty(k) != v: return False
+ else: return False
return True
def __ne__(self,y):
@@ -1131,10 +1157,6 @@
self.ownership = content.ownership
if "properties" in content:
- #print "##########"
- #print "PROPERTIES"
- #print str(content.properties.set)
- #print "##########"
for p in content.properties.set.asDict().values():
self.properties[str(p['name']).lower().strip("[']")] =
str(p['value']).lower().strip("[']")
@@ -1165,10 +1187,10 @@
sb = sb + ":languages \n(set\n"
for i in self.languages:
sb += str(i) + " "
- sb += ")"
+ sb += ")\n"
if self.ownership:
- sb += ":ownership" + str(self.ownership) + "\n"
+ sb += ":ownership " + str(self.ownership) + "\n"
if len(self.properties) > 0:
sb += ":properties \n (set\n"
=======================================
--- /trunk/spade/SL0Parser.py Thu May 22 09:44:31 2008
+++ /trunk/spade/SL0Parser.py Sun Jul 11 16:13:46 2010
@@ -42,6 +42,7 @@
returns a pyparsing.ParseResults
"""
+ m = None
try:
m = self.bnf.parseString(str(string))
except ParseException, err:
=======================================
--- /trunk/spade/fipa.py Thu Jul 8 05:33:24 2010
+++ /trunk/spade/fipa.py Sun Jul 11 16:13:46 2010
@@ -31,18 +31,18 @@
msg = self._receive(True,10)
if msg == None or str(msg.getPerformative()) != 'agree':
try:
- addname = str(self.AAD.getAID().getName())
+ aadname = str(self.AAD.getAID().getName())
except:
- addname = "<unknown>"
+ aadname = "<unknown>"
self.myAgent.DEBUG("There was an error searching the Agent " +
aadname + "(not agree)","warn")
self.finished = True
return None
msg = self._receive(True,20)
if msg == None or msg.getPerformative() != 'inform':
try:
- addname = str(self.AAD.getAID().getName())
+ aadname = str(self.AAD.getAID().getName())
except:
- addname = "<unknown>"
+ aadname = "<unknown>"
self.myAgent.DEBUG("There was an error searching the Agent " +
aadname + "(not inform)","warn")
self.finished = True
return None