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