python-sdk/happydomain/api.py

101 lines
2.4 KiB
Python

"""Handle administration tasks through happyDomain's admin API"""
from datetime import datetime
import json
import os
from urllib.parse import quote_plus
import requests
from .error import HappyError
from .domain import Domain
from .provider import Provider
COOKIE_NAME = "happydomain_session"
class HappyDomain:
def __init__(self, scheme="http", host="127.0.0.1", port=8081, baseurl="", token=None):
self.session = requests.Session()
self.baseurl = scheme + "://" + host + ":" + str(port) + baseurl
self.token = token
def login(self, username, password):
r = self.session.post(
self.baseurl + "/api/auth",
data=json.dumps({
"email": username,
"password": password,
})
)
if r.status_code != 200:
raise HappyError(r.status_code, **json.loads(r.text))
self.token = r.cookies[COOKIE_NAME]
return json.loads(r.text)
# Domains
def domain_list(self):
r = self.session.get(
self.baseurl + "/api/domains",
)
if r.status_code != 200:
raise HappyError(r.status_code, **json.loads(r.text))
ret = []
val = json.loads(r.text)
if val is not None:
for au in val:
ret.append(Domain(self, **au))
return ret
# Providers
def provider_list(self):
r = self.session.get(
self.baseurl + "/api/providers",
)
if r.status_code != 200:
raise HappyError(r.status_code, **json.loads(r.text))
ret = []
val = json.loads(r.text)
if val is not None:
for au in val:
ret.append(Provider(self, **au))
return ret
def provider_get(self, id):
r = self.session.get(
self.baseurl + "/api/providers/" + quote_plus(id),
)
if r.status_code != 200:
raise HappyError(r.status_code, **r.json())
return Provider(self, **r.json())
def provider_add(self, type, name, data):
r = self.session.post(
self.baseurl + "/api/providers",
data=json.dumps({
"Provider": data,
"_comment": name,
"_srctype": type,
})
)
if r.status_code != 200:
raise HappyError(r.status_code, **json.loads(r.text))
return Provider(self, **json.loads(r.text))