Package spade :: Module AID
[hide private]
[frames] | no frames]

Source Code for Module spade.AID

  1  from content import ContentObject 
  2  import copy 
  3  
 
4 -class aid:
5 - def __init__(self, name = None, addresses = None, resolvers = None, userDefinedProperties= None, co = None):
6 """ 7 Agent Identifier Class 8 Optional parameters: 9 String name 10 String[] addresses 11 String[] resolvers 12 ContentObject co 13 """ 14 if co: 15 self.__name = co.name 16 if "list" in str(type(co.addresses)): 17 self.__addresses = copy.copy(co.addresses) 18 else: 19 self.__addresses = [] 20 if co.addresses: 21 self.__addresses.append(co.addresses) 22 if "list" in str(type(co.resolvers)): 23 self.__resolvers = copy.copy(co.resolvers) 24 else: 25 self.__resolvers = [] 26 if co.resolvers: 27 self.__resolvers.append(co.resolvers) 28 self.__userDefinedProperties = list() 29 return 30 31 if name != None: 32 self.__name = name 33 else: 34 self.__name = None #string 35 if addresses != None: 36 self.__addresses = addresses 37 else: 38 self.__addresses = list() #string 39 if resolvers != None: 40 self.__resolvers = resolvers 41 else: 42 self.__resolvers = list() #aid 43 if userDefinedProperties != None: 44 self.__userDefinedProperties = userDefinedProperties 45 else: 46 self.__userDefinedProperties = list() #properties
47
48 - def getName(self):
49 """ 50 returns name of the agent (string) 51 """ 52 return self.__name
53
54 - def setName(self,name):
55 """ 56 sets name of the agent (string) 57 """ 58 self.__name = name
59
60 - def getAddresses(self):
61 """ 62 returns a list of addreses 63 """ 64 return self.__addresses
65
66 - def addAddress(self,addr):
67 """ 68 adds a new address to the addresses list 69 """ 70 self.__addresses.append(addr)
71
72 - def getResolvers(self):
73 """ 74 returns a list of resolvers 75 """ 76 return self.__resolvers
77
78 - def addResolvers(self,resolver):
79 """ 80 adds a new resolver to the resolvers list 81 """ 82 self.__resolvers.append(resolver)
83
84 - def getProperties(self):
85 return self.__userDefinedProperties
86
87 - def addProperty(self,prop):
88 self.__userDefinedProperties.append(prop)
89
90 - def match(self, other):
91 """ 92 returns True if two AIDs are similar 93 else returns False 94 """ 95 96 if other==None: return True 97 98 if (self.getName() != None and other.getName() != None \ 99 and not (other.getName() in self.getName()) ): 100 return False 101 if (len(self.getAddresses())>0 and len(other.getAddresses())>0): 102 for oaddr in other.getAddresses(): 103 found=False 104 for saddr in self.getAddresses(): 105 if (oaddr in saddr): found=True 106 if not found: 107 return False 108 if (len(self.getResolvers())>0 and len(other.getResolvers())>0): 109 for oaddr in other.getResolvers(): 110 found=False 111 for saddr in self.getResolvers(): 112 if (oaddr in saddr): found=True 113 if not found: 114 return False 115 if (len(self.getProperties())>0 and len(other.getProperties())>0): 116 for oaddr in other.getProperties(): 117 found=False 118 for saddr in self.getProperties(): 119 if (oaddr in saddr): found=True 120 if not found: 121 return False 122 return True
123 124
125 - def __eq__(self, other):
126 """ 127 Comparision operator (==) 128 returns True if two AIDs are equal 129 else returns False 130 """ 131 if other==None: return False 132 133 if (self.getName() != None and other.getName() != None \ 134 and self.getName() != other.getName()): 135 return False 136 addr1 = self.getAddresses() 137 addr2 = other.getAddresses() 138 addr1.sort() 139 addr2.sort() 140 if addr1 != addr2: 141 return False 142 143 res1 = self.getResolvers() 144 res2 = other.getResolvers() 145 res1.sort() 146 res2.sort() 147 if res1 != res2: 148 return False 149 150 return True
151
152 - def __ne__(self,other):
153 """ 154 != operator 155 returns False if two AIDs are equal 156 else returns True 157 """ 158 159 return not (self == other)
160 161
162 - def __hash__(self):
163 h = hash(self.__name) 164 for i in self.__addresses: 165 h = h + hash(i) 166 for i in self.__resolvers: 167 h = h + hash(i) 168 for i in self.__userDefinedProperties: 169 h = h + hash(i) 170 return h
171
172 - def __str__(self):
173 """ 174 returns a printable version of an AID 175 """ 176 sb = "" 177 if self.getName() != None: 178 sb = sb + ":name " + str(self.getName()) + "\n" 179 if self.getAddresses() != []: 180 sb = sb + ":addresses \n(sequence\n" 181 for i in self.getAddresses(): 182 sb = sb + str(i) + '\n' 183 sb = sb + ")\n" 184 if self.getResolvers() != []: 185 sb = sb + ":resolvers \n(sequence\n" 186 for i in self.getResolvers(): 187 sb = sb + str(i) + '\n' 188 sb = sb + ")\n" 189 if sb != "": 190 sb = "(agent-identifier\n" + sb + ")\n" 191 else: 192 sb = "None" 193 194 return sb
195
196 - def asContentObject(self):
197 """ 198 returns a version of an AID in ContentObject format 199 """ 200 co = ContentObject() 201 co["name"] = self.getName() 202 if self.getAddresses()!=[]: 203 co["addresses"] = [] 204 for addr in self.getAddresses(): 205 co["addresses"].append(addr) 206 if self.getResolvers()!=[]: 207 co["resolvers"] = [] 208 for r in self.getResolvers(): 209 co["resolvers"].append(r) 210 if self.getProperties()!=[]: 211 co["properties"] = [] 212 for p in self.getProperties(): 213 co["properties"].append(p) 214 return co
215
216 - def asXML(self):
217 """ 218 returns a printable version of an AID in XML 219 """ 220 sb = "<agent-identifier>\n\t" + self.encodeTag( "name", self.getName() ) + "\n" 221 sb = sb + "\t<addresses>\n" 222 223 addresses = self.getAddresses() 224 for addr in addresses: 225 sb = sb + "\t\t" + self.encodeTag( "url", addr ) + "\n" 226 227 sb = sb + "\t</addresses>\n" 228 229 sb = sb + "</agent-identifier>\n" 230 231 return sb
232
233 - def encodeTag( self, tag, content ):
234 """ 235 encodes a content between 2 XML tags using the tag parameter 236 237 <tag>content</tag> 238 239 return string 240 """ 241 sb = "<" + tag + ">" + content + "</" + tag + ">" 242 243 return sb
244 245
246 - def loadSL0(self, content):
247 """ 248 initialices an AID class using a string content encoded in SLO 249 """ 250 251 if "agent-identifier" in content: 252 if "name" in content["agent-identifier"]: 253 self.setName(content["agent-identifier"].name[0]) 254 else: 255 return -1 256 257 if "addresses" in content["agent-identifier"]: 258 for addr in content["agent-identifier"].addresses.sequence: 259 self.addAddress(addr)#[0]) 260 261 if "resolvers" in content["agent-identifier"]: 262 for res in content["agent-identifier"].resolvers.sequence: 263 self.addResolvers(res)#[0])) 264 265 else: return -1
266