MCPcopy Create free account
hub / github.com/Flagsmith/flagsmith / ChargebeeCache

Class ChargebeeCache

api/organisations/chargebee/cache.py:12–49  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

10
11
12class ChargebeeCache:
13 def __init__(self): # type: ignore[no-untyped-def]
14 self._cache = caches[settings.CHARGEBEE_CACHE_LOCATION]
15
16 def refresh(self): # type: ignore[no-untyped-def]
17 plans = self.fetch_plans()
18 addons = self.fetch_addons()
19 self._cache.set(CHARGEBEE_CACHE_KEY, {"plans": plans, "addons": addons})
20
21 @property
22 def plans(self) -> Dict[str, ChargebeeObjMetadata]:
23 return self._get_items()["plans"] # type: ignore[no-any-return]
24
25 @property
26 def addons(self) -> Dict[str, ChargebeeObjMetadata]:
27 return self._get_items()["addons"] # type: ignore[no-any-return]
28
29 def _get_items(self) -> dict: # type: ignore[type-arg]
30 chargebee_items = self._cache.get(CHARGEBEE_CACHE_KEY)
31 if chargebee_items is None:
32 self.refresh() # type: ignore[no-untyped-call]
33 return self._cache.get(CHARGEBEE_CACHE_KEY) # type: ignore[no-any-return]
34
35 def fetch_plans(self) -> dict: # type: ignore[type-arg]
36 plans = {}
37 for entry in get_item_generator(ChargebeeItem.PLAN):
38 plan = entry.plan
39 plan_metadata = plan.meta_data or {}
40 plans[plan.id] = ChargebeeObjMetadata(**plan_metadata)
41 return plans
42
43 def fetch_addons(self) -> dict: # type: ignore[type-arg]
44 addons = {}
45 for entry in get_item_generator(ChargebeeItem.ADDON):
46 addon = entry.addon
47 addon_metadata = addon.meta_data or {}
48 addons[addon.id] = ChargebeeObjMetadata(**addon_metadata)
49 return addons
50
51
52def get_item_generator(item: ChargebeeItem) -> Generator[Any, None, None]:

Calls

no outgoing calls

Used in the wild real call sites across dependent graphs

searching dependent graphs…