start writing my own API wrapper
This commit is contained in:
parent
1b2cf55857
commit
fe1077bfce
5
pdnsapi/README.md
Normal file
5
pdnsapi/README.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# PowerDNS API wrapper library
|
||||||
|
|
||||||
|
Following [this tutorial](https://www.pretzellogix.net/2021/12/08/how-to-write-a-python3-sdk-library-module-for-a-json-rest-api/)
|
||||||
|
|
||||||
|
Michael Hinz, 2025-04-29
|
29
pdnsapi/__init__.py
Normal file
29
pdnsapi/__init__.py
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
import requests
|
||||||
|
import requests.packages
|
||||||
|
from typing import List, Dict
|
||||||
|
|
||||||
|
|
||||||
|
class PdnsRestAdapter:
|
||||||
|
def __init__(self, hostname: str, api_key: str = '', ver: str = 'v1'):
|
||||||
|
self.url = f"http://{hostname}/api/{ver}/"
|
||||||
|
self._api_key = api_key
|
||||||
|
|
||||||
|
def get(self, endpoint: str) -> List[Dict]:
|
||||||
|
full_url = self.url + endpoint
|
||||||
|
headers = {'X-API-key': self._api_key}
|
||||||
|
response = requests.get(url=full_url, headers=headers)
|
||||||
|
data_out = response.json()
|
||||||
|
return data_out
|
||||||
|
if response.status.code >= 200 and response.status.code <= 299:
|
||||||
|
return data_out
|
||||||
|
raise Exception(data_out['message']) # TODO: raise custom exception later
|
||||||
|
|
||||||
|
def post(self, endpoint: str, params: Dict = None, data: Dict = None):
|
||||||
|
full_url = self.url + endpoint
|
||||||
|
headers = {'X-API-key': self._api_key}
|
||||||
|
response = requests.post(url=full_url, params=params, headers=headers, json=data)
|
||||||
|
data_out = response.json()
|
||||||
|
return data_out
|
||||||
|
if response.status.code >= 200 and response.status.code <= 299:
|
||||||
|
return
|
||||||
|
raise Exception(data_out['message']) # TODO: raise custom exception later
|
39
testapi.py
Normal file
39
testapi.py
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
# import requests # unused for now
|
||||||
|
from pdnsapi import PdnsRestAdapter
|
||||||
|
|
||||||
|
api = PdnsRestAdapter('localhost:8081/', 'pdns-supersecret')
|
||||||
|
output = api.get('servers/localhost/zones/test1.nhn.no')
|
||||||
|
|
||||||
|
print(f"{output}")
|
||||||
|
|
||||||
|
# NOTE: doesn't work yet. Maybe wrong arguments?
|
||||||
|
# api.post('servers/localhost/zones/test1.nhn.no/test.txt', {'type': 'A'}, {'type': 'A'})
|
||||||
|
|
||||||
|
# copy of error message:
|
||||||
|
# Traceback (most recent call last):
|
||||||
|
# File "/home/michael/projects/pdns_dnssec/.venv/lib/python3.12/site-packages/requests/models.py", line 974, in json
|
||||||
|
# return complexjson.loads(self.text, **kwargs)
|
||||||
|
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
# File "/home/michael/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/__init__.py", line 346, in loads
|
||||||
|
# return _default_decoder.decode(s)
|
||||||
|
# ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
# File "/home/michael/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/decoder.py", line 338, in decode
|
||||||
|
# obj, end = self.raw_decode(s, idx=_w(s, 0).end())
|
||||||
|
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
# File "/home/michael/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/json/decoder.py", line 356, in raw_decode
|
||||||
|
# raise JSONDecodeError("Expecting value", s, err.value) from None
|
||||||
|
# json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
|
||||||
|
#
|
||||||
|
# During handling of the above exception, another exception occurred:
|
||||||
|
#
|
||||||
|
# Traceback (most recent call last):
|
||||||
|
# File "/home/michael/projects/pdns_dnssec/testapi.py", line 11, in <module>
|
||||||
|
# api.post('servers/localhost/zones/test1.nhn.no/test.txt', {'type': 'A'}, {'type': 'A'})
|
||||||
|
# File "/home/michael/projects/pdns_dnssec/pdnsapi/__init__.py", line 25, in post
|
||||||
|
# data_out = response.json()
|
||||||
|
# ^^^^^^^^^^^^^^^
|
||||||
|
# File "/home/michael/projects/pdns_dnssec/.venv/lib/python3.12/site-packages/requests/models.py", line 978, in json
|
||||||
|
# raise RequestsJSONDecodeError(e.msg, e.doc, e.pos)
|
||||||
|
# requests.exceptions.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
|
Loading…
x
Reference in New Issue
Block a user