1 from content import ContentObject
2 import copy
3
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
35 if addresses != None:
36 self.__addresses = addresses
37 else:
38 self.__addresses = list()
39 if resolvers != None:
40 self.__resolvers = resolvers
41 else:
42 self.__resolvers = list()
43 if userDefinedProperties != None:
44 self.__userDefinedProperties = userDefinedProperties
45 else:
46 self.__userDefinedProperties = list()
47
49 """
50 returns name of the agent (string)
51 """
52 return self.__name
53
55 """
56 sets name of the agent (string)
57 """
58 self.__name = name
59
61 """
62 returns a list of addreses
63 """
64 return self.__addresses
65
67 """
68 adds a new address to the addresses list
69 """
70 self.__addresses.append(addr)
71
73 """
74 returns a list of resolvers
75 """
76 return self.__resolvers
77
79 """
80 adds a new resolver to the resolvers list
81 """
82 self.__resolvers.append(resolver)
83
85 return self.__userDefinedProperties
86
88 self.__userDefinedProperties.append(prop)
89
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
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
153 """
154 != operator
155 returns False if two AIDs are equal
156 else returns True
157 """
158
159 return not (self == other)
160
161
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
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
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
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
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)
260
261 if "resolvers" in content["agent-identifier"]:
262 for res in content["agent-identifier"].resolvers.sequence:
263 self.addResolvers(res)
264
265 else: return -1
266