Source code for heedy.apps

from typing import Dict
from .base import APIObject, APIList, Session, getSessionType, DEFAULT_URL
from .kv import KV

from . import users
from . import objects
from .notifications import Notifications

from functools import partial


[docs]class App(APIObject): props = {"name", "description", "icon", "settings", "settings_schema"} def __init__( self, access_token: str, url: str = DEFAULT_URL, session="sync", cached_data={} ): appid = "self" if isinstance(session, Session): # Treat the session as already initialized, meaning that the access token is actually # the app id appid = access_token super().__init__( f"api/apps/{appid}", {"app": appid}, session, cached_data=cached_data ) else: # Initialize the app object as a direct API s = getSessionType(session, "self", url) s.setAccessToken(access_token) super().__init__("api/apps/self", {"app": appid}, s) # The objects belonging to the app self.objects = objects.Objects({"app": appid}, self.session) # Key-value store associated with the app self.kv = KV(f"api/kv/apps/{appid}", self.session) @property def owner(self): return self.session.f( self.read(), lambda x: users.User(x["owner"], self.session) )
[docs]class Apps(APIList): def __init__(self, constraints: Dict, session: Session): super().__init__("api/apps", constraints, session) def __getitem__(self, item): return self._getitem( item, f=lambda x: App(x["id"], session=self.session, cached_data=x) ) def __call__(self, **kwargs): return self._call( f=lambda x: [ App(xx["id"], session=self.session, cached_data=xx) for xx in x ], **kwargs, )
[docs] def create(self, name, **kwargs): return self._create( f=lambda x: App(x["id"], session=self.session, cached_data=x), **{"name": name, **kwargs}, )