def put_static(id, static): service = helpers.get_entity(Service, id) field = static.get("field") service.statics = filter(lambda x: x.get("field") != field, service.statics) + [static] service.put() return service
def call(id, action, body): service = helpers.get_entity(Service, id, urlsafe=True) if not _is_service_authorized(service, body.get("key")): raise ServiceUnauthorized() provider = service.provider.get() method = provider.get_method(action) if not method: raise ServiceMethodNotFound( "Action '{}' is unregistered".format(action)) if not service.unlimit and service.balance <= 0: raise ServiceBalanceDepleted() msg = request(service.vendor_key, service.statics, provider.config, method, body) if msg.get("status") == "success": if not service.unlimit: service.balance -= msg.get("cost", 0) service.put() if msg.get("balance"): provider.balance = msg.get("balance") provider.put() return messages.create(service.key, msg)
def put_config(id, config): provider = helpers.get_entity(Provider, id) provider.config = merge(provider.config or {}, config) provider.put() return provider
def remove_method(id, action): provider = helpers.get_entity(Provider, id) provider.methods = dissoc(provider.methods or {}, action) provider.put() return provider
def put_method(id, method): provider = helpers.get_entity(Provider, id) action = method.get("action") provider.methods = merge(provider.methods or {}, {action: method}) provider.put() return provider
def generate_api_key(id): account = helpers.get_entity(Account, id) return account.generate_api_key()
def remove_static(id, field): service = helpers.get_entity(Service, id) service.statics = filter(lambda x: x.get("field") != field, service.statics) service.put() return service
def load_balance(id, amount): service = helpers.get_entity(Service, id, urlsafe=True) service.balance += amount service.put() return service
def reset_balance(id): service = helpers.get_entity(Service, id, urlsafe=True) service.balance = service.quota service.put() return service
def get_balance(id): service = helpers.get_entity(Service, id, urlsafe=True) return pick(["id", "balance", "quota"], service.to_dict())