Coverage for microservice_websocket/app/utils/sync_cache.py: 26%

20 statements  

« prev     ^ index     » next       coverage.py v7.0.0, created at 2022-12-20 18:11 +0000

1from datetime import datetime, timedelta 

2 

3from beanie import PydanticObjectId 

4 

5from ..config import config as Config 

6from ..services.database import Reading 

7from .external_archiviation import send_payload 

8 

9 

10def add_to_cache(readingObjectID: str): 

11 from .. import redis_client 

12 

13 redis_client.sadd("idCache", readingObjectID) 

14 

15 

16async def sync_cached(): 

17 from .. import redis_client 

18 

19 ids: set[bytes] = redis_client.smembers("idCache") 

20 

21 # Loop set items 

22 for reading_object_id in [x.decode() for x in ids]: 

23 reading: Reading | None = await Reading.get(PydanticObjectId(reading_object_id)) 

24 if reading is None: 

25 redis_client.srem("idCache", reading_object_id) 

26 continue 

27 

28 publishedAt = reading.publishedAt 

29 

30 if datetime.now() - publishedAt > timedelta( 

31 seconds=Config.app.READING_SYNC_WAIT 

32 ): 

33 await send_payload(reading) 

34 redis_client.srem("idCache", reading_object_id)