Coverage for polar/customer_meter/tasks.py: 50%

22 statements  

« prev     ^ index     » next       coverage.py v7.10.6, created at 2025-12-05 15:52 +0000

1import uuid 1a

2 

3from polar.customer.repository import CustomerRepository 1a

4from polar.exceptions import PolarTaskError 1a

5from polar.locker import Locker 1a

6from polar.worker import AsyncSessionMaker, RedisMiddleware, TaskPriority, actor 1a

7 

8from .service import customer_meter as customer_meter_service 1a

9 

10 

11class CustomerMeterTaskError(PolarTaskError): ... 1a

12 

13 

14class CustomerDoesNotExist(CustomerMeterTaskError): 1a

15 def __init__(self, customer_id: uuid.UUID) -> None: 1a

16 self.customer_id = customer_id 

17 message = f"The customer with id {customer_id} does not exist." 

18 super().__init__(message) 

19 

20 

21@actor( 1a

22 actor_name="customer_meter.update_customer", 

23 priority=TaskPriority.LOW, 

24 max_retries=1, 

25 min_backoff=30_000, 

26) 

27async def update_customer(customer_id: uuid.UUID) -> None: 1a

28 async with AsyncSessionMaker() as session: 

29 repository = CustomerRepository.from_session(session) 

30 customer = await repository.get_by_id(customer_id) 

31 if customer is None: 

32 raise CustomerDoesNotExist(customer_id) 

33 

34 redis = RedisMiddleware.get() 

35 locker = Locker(redis) 

36 

37 await customer_meter_service.update_customer(session, locker, customer)