Revision 76a13815 snf-common/synnefo/lib/astakos.py
b/snf-common/synnefo/lib/astakos.py | ||
---|---|---|
239 | 239 |
pass |
240 | 240 |
|
241 | 241 |
return None |
242 |
|
|
243 |
|
|
244 |
class UserCache(object): |
|
245 |
"""uuid<->displayname user 'cache'""" |
|
246 |
|
|
247 |
def __init__(self, astakos_url, astakos_token, split=100): |
|
248 |
self.astakos_token = astakos_token |
|
249 |
self.astakos_url = astakos_url |
|
250 |
self.user_catalog_url = astakos_url.replace("im/authenticate", |
|
251 |
"service/api/user_catalogs") |
|
252 |
self.users = {} |
|
253 |
|
|
254 |
self.split = split |
|
255 |
assert(self.split > 0), "split must be positive" |
|
256 |
|
|
257 |
def fetch_names(self, uuid_list): |
|
258 |
total = len(uuid_list) |
|
259 |
split = self.split |
|
260 |
|
|
261 |
for start in range(0, total, split): |
|
262 |
end = start + split |
|
263 |
try: |
|
264 |
names = get_displaynames(token=self.astakos_token, |
|
265 |
url=self.user_catalog_url, |
|
266 |
uuids=uuid_list[start:end]) |
|
267 |
self.users.update(names) |
|
268 |
except Exception as e: |
|
269 |
logger.error("Failed to fetch names: %s", e) |
|
270 |
|
|
271 |
def get_uuid(self, name): |
|
272 |
if not name in self.users: |
|
273 |
try: |
|
274 |
self.users[name] = get_user_uuid(token=self.astakos_token, |
|
275 |
url=self.user_catalog_url, |
|
276 |
displayname=name) |
|
277 |
except Exception as e: |
|
278 |
logger.error("Can not get uuid for name %s: %s", name, e) |
|
279 |
self.users[name] = name |
|
280 |
|
|
281 |
return self.users[name] |
|
282 |
|
|
283 |
def get_name(self, uuid): |
|
284 |
"""Do the uuid-to-email resolving""" |
|
285 |
|
|
286 |
if not uuid in self.users: |
|
287 |
try: |
|
288 |
self.users[uuid] = get_displayname(token=self.astakos_token, |
|
289 |
url=self.user_catalog_url, |
|
290 |
uuid=uuid) |
|
291 |
except Exception as e: |
|
292 |
logging.error("Can not get display name for uuid %s: %s", |
|
293 |
uuid, e) |
|
294 |
self.users[uuid] = "-" |
|
295 |
|
|
296 |
return self.users[uuid] |
Also available in: Unified diff