Mercurial > libervia-backend
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'} |