Initial version

This commit is contained in:
Kumi 2020-10-24 11:12:12 +02:00
commit b2b4b097bb

51
__init__.py Normal file
View file

@ -0,0 +1,51 @@
import urllib.request
import urllib.parse
import json
URL = "https://kumisms.com/api/v1/"
class InvalidCredentials(Exception):
pass
class SendFailed(Exception):
pass
class RateUnavailable(Exception):
pass
class KumiSMS:
def __init__(self, key, endpoint=URL):
self.key = key
self.endpoint = endpoint
self.check()
def send(self, recipient, text):
endpoint = urllib.parse.urljoin(self.endpoint, "send/")
content = self._request(endpoint, {"recipient": recipient, "text": text})
if content["status"] == "error":
raise SendFailed(content["error_message"])
return True
def balance(self):
endpoint = urllib.parse.urljoin(self.endpoint, "balance/")
return self._request(endpoint)["balance"]
def rate(self, recipient, text=""):
endpoint = urllib.parse.urljoin(self.endpoint, "rate/")
content = self._request(endpoint, {"recipient": recipient, "text": text})
if content["status"] == "error":
raise RateUnavailable(content["error_message"])
return content["rate"]
def check(self):
return bool(self.balance())
def _request(self, url, data=None):
data = {"key": self.key}.update(data)
body = json.dumps(data)
request = urllib.request.urlopen(url, body)
content = json.loads(request.read())
if content["status"] == "error":
if content["error_message"] == "Incorrect API key":
raise InvalidCredentials(content["error_message"])
return content