Coverage for functions \ flipdare \ config_key.py: 98%

57 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2026-05-08 12:22 +1000

1#!/usr/bin/env python 

2# Copyright (c) 2026 Flipdare Pty Ltd. All rights reserved. 

3# 

4# This file is part of Flipdare's proprietary software and contains 

5# confidential and copyrighted material. Unauthorised copying, 

6# modification, distribution, or use of this file is strictly 

7# prohibited without prior written permission from Flipdare Pty Ltd. 

8# 

9# This software includes third-party components licensed under MIT, 

10# BSD, and Apache 2.0 licences. See THIRD_PARTY_NOTICES for details. 

11# 

12 

13 

14from enum import StrEnum 

15from typing import Self 

16 

17__all__ = ["ConfigKey"] 

18 

19type ConfigType = int | float | bool | str 

20 

21 

22class ConfigKey(StrEnum): 

23 """Config keys""" 

24 

25 # Declared here so type-checkers know these attributes exist. 

26 # They are populated per-member inside __new__. 

27 _default_value: ConfigType | None 

28 _value_type: type[ConfigType] 

29 _is_trigger: bool 

30 

31 def __new__( 

32 cls, 

33 code: str, 

34 default_value: ConfigType | None, 

35 value_type: type[ConfigType], 

36 is_trigger: bool | None = None, 

37 ) -> Self: 

38 obj = str.__new__(cls, code) 

39 obj._value_ = code 

40 obj._value_type = value_type 

41 obj._default_value = default_value 

42 if is_trigger is not None: 

43 obj._is_trigger = is_trigger 

44 return obj 

45 

46 # ---- Members -------------------------------------------------------- 

47 # fmt: off 

48 # 

49 # runtime triggers 

50 # 

51 JOB_CONFIG = ("JOB_CONFIG", None, bool, True) 

52 AVATAR_CONFIG = ("AVATAR_CONFIG", None, bool, True) 

53 # 

54 # runtime options/variables 

55 # 

56 CHANGE_SCORE_THRESHOLD = ("CHANGE_SCORE_THRESHOLD", 0.5, float, False) 

57 # 

58 # config 

59 # 

60 GCLOUD_PROJECT = ("FLIP_GCLOUD_PROJECT", None, str, False) 

61 STORAGE_BUCKET = ("FLIP_STORAGE_BUCKET", None, str, False) 

62 API_KEY = ("FLIP_API", None, str, False) 

63 BACKEND_API = ("FLIP_BACKEND_API", None, str, False) 

64 STRIPE_CURRENCY_CONVERSION_ACCOUNT_ID = ("FLIP_STRIPE_CURRENCY_CONVERSION_ACCOUNT_ID", None, str, False) 

65 STRIPE_PLATFORM_ACCOUNT_ID = ("FLIP_STRIPE_PLATFORM_ACCOUNT_ID", None, str, False) 

66 STRIPE_PUBLIC = ("FLIP_STRIPE_PUBLIC", None, str, False) 

67 STRIPE_SECRET = ("FLIP_STRIPE_SECRET", None, str, False) 

68 STRIPE_CLIENT_ID = ("FLIP_STRIPE_CLIENT_ID", None, str, False) 

69 STRIPE_REFRESH_WEBHOOK_URL = ("FLIP_STRIPE_REFRESH_URL", None, str, False) 

70 STRIPE_RETURN_WEBHOOK_URL = ("FLIP_STRIPE_RETURN_URL", None, str, False) 

71 STRIPE_PAY_WEBHOOK_URL = ("FLIP_STRIPE_PAY_URL", None, str, False) 

72 STRIPE_WEBHOOK_KEY = ("FLIP_STRIPE_CALLBACK_KEY", None, str, False) 

73 SMTP_TIMEOUT = ("FLIP_SMTP_TIMEOUT", 10, int, False) 

74 SMTP_GATEWAY = ("FLIP_SMTP_GATEWAY", None, str, False) 

75 SMTP_PORT = ("FLIP_SMTP_PORT", 465, int, False) 

76 SMTP_USERNAME = ("FLIP_SMTP_USERNAME", None, str, False) 

77 SMTP_PASSWORD = ("FLIP_SMTP_PASSWORD", None, str, False) 

78 SEARCH_IP = ("FLIP_SEARCH_IP", None, str, False) 

79 SEARCH_PORT = ("FLIP_SEARCH_PORT", 8108, int, False) 

80 SEARCH_API = ("FLIP_SEARCH_API", None, str, False) 

81 SEARCH_TIMEOUT = ("FLIP_SEARCH_TIMEOUT", 2, int, False) 

82 SEARCH_ENABLE_NAT_LANG = ("FLIP_SEARCH_ENABLE_NAT_LANG", None, str, False) 

83 EXCHANGE_RATE_API = ("FLIP_EXCHANGE_RATE_API", None, str, False) 

84 GEMINI_API = ("FLIP_GEMINI_API", None, str, False) 

85 CREDENTIAL = ("FLIP_CREDENTIAL", None, str, False) 

86 # fmt: on 

87 

88 # ---- Properties ----------------------------------------------------- 

89 

90 @property 

91 def default_value(self) -> ConfigType | None: 

92 return self._default_value 

93 

94 @property 

95 def is_trigger(self) -> bool: 

96 return self._is_trigger 

97 

98 @property 

99 def is_config(self) -> bool: 

100 return not self.is_trigger and self != ConfigKey.CREDENTIAL 

101 

102 @property 

103 def value_type(self) -> type[ConfigType]: 

104 return self._value_type