Coverage for polar/benefit/registry.py: 93%

15 statements  

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

1from typing import Any 1a

2 

3from polar.models.benefit import BenefitType 1a

4from polar.postgres import AsyncSession 1a

5from polar.redis import Redis 1a

6 

7from .strategies import ( 1a

8 BenefitActionRequiredError, 

9 BenefitGrantProperties, 

10 BenefitProperties, 

11 BenefitPropertiesValidationError, 

12 BenefitRetriableError, 

13 BenefitServiceError, 

14 BenefitServiceProtocol, 

15) 

16from .strategies.custom.service import BenefitCustomService 1a

17from .strategies.discord.service import BenefitDiscordService 1a

18from .strategies.downloadables.service import BenefitDownloadablesService 1a

19from .strategies.github_repository.service import BenefitGitHubRepositoryService 1a

20from .strategies.license_keys.service import BenefitLicenseKeysService 1a

21from .strategies.meter_credit.service import BenefitMeterCreditService 1a

22 

23_STRATEGY_CLASS_MAP: dict[ 1a

24 BenefitType, 

25 type[BenefitServiceProtocol[Any, Any]], 

26] = { 

27 BenefitType.custom: BenefitCustomService, 

28 BenefitType.discord: BenefitDiscordService, 

29 BenefitType.github_repository: BenefitGitHubRepositoryService, 

30 BenefitType.downloadables: BenefitDownloadablesService, 

31 BenefitType.license_keys: BenefitLicenseKeysService, 

32 BenefitType.meter_credit: BenefitMeterCreditService, 

33} 

34 

35 

36def get_benefit_strategy( 1a

37 type: BenefitType, session: AsyncSession, redis: Redis 

38) -> BenefitServiceProtocol[BenefitProperties, BenefitGrantProperties]: 

39 return _STRATEGY_CLASS_MAP[type](session, redis) 

40 

41 

42__all__ = [ 1a

43 "BenefitActionRequiredError", 

44 "BenefitServiceProtocol", 

45 "BenefitPropertiesValidationError", 

46 "BenefitRetriableError", 

47 "BenefitServiceError", 

48 "get_benefit_strategy", 

49]