Source code for pinn.api.app

"""
:copyright: (c) 2019 Pinn Technologies, Inc.
:license: MIT
"""

import json
from ..requester import Requester
from .list import List


[docs]class App(object): """App resource and interface. Attributes: response (dict): Underlying dictionary response object (str): Identifier for the resource app_id (str): Unique ID for the app created_at (int): Unix timestamp in seconds for when the app was created updated_at (int): Unix timestamp in seconds for when the app was last updated publishable_key (str): Non-secret key that is embedded to configure the SDK app_type (str): Either `ios`, `android` or `web` name (str): Name of the app description (str): Optional app description text """ OBJECT_NAME = 'app' endpoint = '/v1/apps' def __init__(self, response): """Initialize a app model with an API response.""" self.response = response self.object = response['object'] self.app_id = response['app_id'] self.created_at = response['created_at'] self.updated_at = response['updated_at'] self.publishable_key = response['publishable_key'] self.app_type = response['app_type'] self.name = response['name'] self.description = response['description'] def __str__(self): data = self.dump() return json.dumps(data, indent=4, sort_keys=True, separators=(',', ': ')) def dump(self): """Dump the model to a dictionary, method matches to json.dump() behavior""" return {'app_id': self.app_id, 'created_at': self.created_at, 'object': self.object, 'publishable_key': self.publishable_key, 'app_type': self.app_type, 'name': self.name, 'description': self.description}
[docs] @classmethod def create(cls, app_type, name, description=None): """Create a new Pinn iOS/Android/Web app. Args: app_type (str): Either `ios`, `android` or `web` name (str): Human readable name for the app description (str, optional): Descriptive text for the app Returns: App: Newly created app resource Raises: pinn.errors.APIError: Internal server error pinn.errors.APIConnectionError: API is unreachable [501-503] """ assert app_type in ("android", "ios", "web"), "App must be android, ios, or web" data = {'name': name, 'description': description} return App(Requester.post(cls.endpoint + '/' + app_type, data=data))
@classmethod def list(cls, limit=None, starting_after=None): """List created Pinn apps.""" response = Requester.get(cls.endpoint, params={'limit': limit, 'starting_after': starting_after}) return List(response, App, limit)
[docs] @classmethod def retrieve(cls, app_id): """Retrieve a Pinn iOS/Android/Web app. Args: app_id (str): ID of the app to query. Returns: App: The queried app resource Raises: pinn.errors.RequestFailedError: App not found pinn.errors.APIError: Internal server error pinn.errors.APIConnectionError: API is unreachable [501-503] """ return App(Requester.get(cls.endpoint + '/' + app_id))
[docs] @classmethod def delete(cls, app_id): """Delete a Pinn iOS/Android/Web app. Note: This may break your integration if app is currently in use live. Args: app_id (str): ID of the app to delete. Returns: Deleted: A deleted response Raises: pinn.errors.RequestFailedError: App not found pinn.errors.APIError: Internal server error pinn.errors.APIConnectionError: API is unreachable [501-503] """ return Requester.delete(cls.endpoint + '/' + app_id)