codekingpro/portable-devtools
114k
1import json2import time3from typing import (4 Any,5 Dict,6 Hashable,7 Optional,8)9 10from ..base_client import FrameworkIntegration11 12 13class StarletteIntegration(FrameworkIntegration):14 async def _get_cache_data(self, key: Hashable):15 value = await self.cache.get(key)16 if not value:17 return None18 try:19 return json.loads(value)20 except (TypeError, ValueError):21 return None22 23 async def get_state_data(self, session: Optional[Dict[str, Any]], state: str) -> Dict[str, Any]:24 key = f'_state_{self.name}_{state}'25 if self.cache:26 value = await self._get_cache_data(key)27 elif session is not None:28 value = session.get(key)29 else:30 value = None31 32 if value:33 return value.get('data')34 return None35 36 async def set_state_data(self, session: Optional[Dict[str, Any]], state: str, data: Any):37 key = f'_state_{self.name}_{state}'38 if self.cache:39 await self.cache.set(key, json.dumps({'data': data}), self.expires_in)40 elif session is not None:41 now = time.time()42 session[key] = {'data': data, 'exp': now + self.expires_in}43 44 async def clear_state_data(self, session: Optional[Dict[str, Any]], state: str):45 key = f'_state_{self.name}_{state}'46 if self.cache:47 await self.cache.delete(key)48 elif session is not None:49 session.pop(key, None)50 self._clear_session_state(session)51 52 def update_token(self, token, refresh_token=None, access_token=None):53 pass54 55 @staticmethod56 def load_config(oauth, name, params):57 if not oauth.config:58 return {}59 60 rv = {}61 for k in params:62 conf_key = f'{name}_{k}'.upper()63 v = oauth.config.get(conf_key, default=None)64 if v is not None:65 rv[k] = v66 return rv67 