comparison sat/plugins/plugin_misc_identity.py @ 3257:704dada41df0

plugin identity: fixed update with `get_all` + better new data detection for avatar: - when metadata doesn't exist, update with `get_all` set doesn't crash anymore. - fixed avatarUpdateIsNewData
author Goffi <goffi@goffi.org>
date Sun, 19 Apr 2020 16:38:46 +0200
parents 6cf4bd6972c2
children aa71f1d40300
comparison
equal deleted inserted replaced
3256:df26f1a9020a 3257:704dada41df0
353 try: 353 try:
354 update_is_new_data = metadata["update_is_new_data"] 354 update_is_new_data = metadata["update_is_new_data"]
355 except KeyError: 355 except KeyError:
356 update_is_new_data = self.defaultUpdateIsNewData 356 update_is_new_data = self.defaultUpdateIsNewData
357 357
358 if not update_is_new_data(client, entity, cached_data, data): 358 if data is None:
359 if cached_data is None: 359 if cached_data is None:
360 log.debug( 360 log.debug(
361 f"{metadata_name} for {entity} is already disabled, nothing to " 361 f"{metadata_name} for {entity} is already disabled, nothing to "
362 f"do") 362 f"do")
363 else: 363 return
364 log.debug( 364 elif not update_is_new_data(client, entity, cached_data, data):
365 f"{metadata_name} for {entity} is already in cache, nothing to " 365 log.debug(
366 f"do") 366 f"{metadata_name} for {entity} is already in cache, nothing to "
367 f"do")
367 return 368 return
368 369
369 # we can't use the cache, so we do the update 370 # we can't use the cache, so we do the update
370 371
371 log.debug(f"updating {metadata_name} for {entity}") 372 log.debug(f"updating {metadata_name} for {entity}")
372 373
373 if metadata.get('get_all', False): 374 if metadata.get('get_all', False):
374 # get_all is set, meaning that we have to check all plugins 375 # get_all is set, meaning that we have to check all plugins
375 # so we first delete current cache 376 # so we first delete current cache
376 self.host.memory.delEntityDatum(client, entity, metadata_name) 377 try:
378 self.host.memory.delEntityDatum(client, entity, metadata_name)
379 except KeyError:
380 pass
377 # then fill it again by calling get, which will retrieve all values 381 # then fill it again by calling get, which will retrieve all values
378 await self.get(client, metadata_name, entity) 382 await self.get(client, metadata_name, entity)
379 return 383 return
380 384
381 if data is not None: 385 if data is not None:
450 "path": path, 454 "path": path,
451 "media_type": media_type, 455 "media_type": media_type,
452 "cache_uid": cache_uid, 456 "cache_uid": cache_uid,
453 } 457 }
454 458
455 def avatarUpdateIsNewData(self, client, entity, cached_data, file_path): 459 def avatarUpdateIsNewData(self, client, entity, cached_data, new_data):
456 if cached_data is None: 460 return new_data['path'] != cached_data['path']
457 return file_path is not None
458
459 if file_path is not None and file_path == cached_data['path']:
460 if file_path is None:
461 log.debug(
462 f"Avatar is already disabled for {entity}, nothing to do")
463 else:
464 log.debug(
465 f"Avatar at {file_path} is already used by {entity}, nothing "
466 f"to do")
467 return
468 461
469 async def avatarUpdateDataFilter(self, client, entity, data): 462 async def avatarUpdateDataFilter(self, client, entity, data):
470 if not isinstance(data, dict): 463 if not isinstance(data, dict):
471 raise ValueError(f"Invalid data type ({type(data)}), a dict is expected") 464 raise ValueError(f"Invalid data type ({type(data)}), a dict is expected")
472 mandatory_keys = {'path', 'cache_uid'} 465 mandatory_keys = {'path', 'cache_uid'}