Compare commits

...

4 Commits
v0.0.6 ... main

@ -9,6 +9,7 @@ import urllib.parse
from os import environ, mkdir from os import environ, mkdir
from os.path import isdir, isfile, join from os.path import isdir, isfile, join
from typing import Union from typing import Union
from urllib.parse import urlparse
import argcomplete import argcomplete
import requests import requests
@ -41,9 +42,8 @@ def nested_out(input, tabs="") -> str:
string += "{}\n".format(input) string += "{}\n".format(input)
elif isinstance(input, dict): elif isinstance(input, dict):
for key, value in input.items(): for key, value in input.items():
string += "{}{}: {}".format( string += "{}{}: {}".format(tabs, key,
tabs, key, nested_out(value, tabs + " ") nested_out(value, tabs + " "))
)
elif isinstance(input, list): elif isinstance(input, list):
for entry in input: for entry in input:
string += "{}\n{}".format(tabs, nested_out(entry, tabs + " ")) string += "{}\n{}".format(tabs, nested_out(entry, tabs + " "))
@ -62,9 +62,18 @@ def output(response: list[dict], jsonout: bool = False):
# Define the runner for each command # Define the runner for each command
def run_add(url: str, jsonout: bool, headers: dict): def run_add(url: str, jsonout: bool, headers: dict):
print(url) parsed = split_url(url)
response = requests.put(url, headers=headers) response = requests.put(url, headers=headers)
output(response.json(), jsonout) out = response.json()
if isinstance(out, list):
for record in out:
if (record["data"] == parsed["data"]
and record["name"] == parsed["name"]
and record["rtype"] == parsed["rtype"]):
output(record, jsonout)
break
else:
output(out, jsonout)
def run_complete(shell: Union[None, str]): def run_complete(shell: Union[None, str]):
@ -94,8 +103,7 @@ def run_config(
error( error(
"Can not configure without {}".format(need), "Can not configure without {}".format(need),
"No {}".format(need), "No {}".format(need),
) ))
)
sys.exit(1) sys.exit(1)
config[need] = input("Enter {}: ".format(need)) config[need] = input("Enter {}: ".format(need))
@ -119,9 +127,10 @@ def run_delete(url: str, jsonout: bool, headers: dict):
output(reply, jsonout) output(reply, jsonout)
def run_list( def run_list(url: str,
url: str, jsonout: bool, headers: dict, ret=False jsonout: bool,
) -> Union[None, str]: headers: dict,
ret=False) -> Union[None, str]:
response = requests.get(url, headers=headers) response = requests.get(url, headers=headers)
string = response.json() string = response.json()
if ret: if ret:
@ -171,16 +180,14 @@ def setup_url(
error( error(
"ttl only makes sense with rtype, name and zone", "ttl only makes sense with rtype, name and zone",
"Missing parameter", "Missing parameter",
) ))
)
sys.exit(1) sys.exit(1)
if rtype and (not name or not zone): if rtype and (not name or not zone):
output( output(
error( error(
"rtype only makes sense with name and zone", "rtype only makes sense with name and zone",
"Missing parameter", "Missing parameter",
) ))
)
sys.exit(1) sys.exit(1)
if name and not zone: if name and not zone:
output(error("name only makes sense with a zone", "Missing parameter")) output(error("name only makes sense with a zone", "Missing parameter"))
@ -188,6 +195,38 @@ def setup_url(
return url return url
def split_url(url: str) -> dict:
parsed = urlparse(url, allow_fragments=False)
path = parsed.path
query = parsed.query
arguments: Union[None, list[str]] = query.split("&")
path_arr = path.split("/")
data: Union[None, str] = None
name: Union[None, str] = None
rtype: Union[None, str] = None
ttl: Union[None, str] = None
zone: Union[None, str] = None
if len(path_arr) > 2:
zone = path_arr[2]
if len(path_arr) > 4:
name = path_arr[4]
if len(path_arr) > 5:
rtype = path_arr[5]
if len(path_arr) > 6:
data = path_arr[6]
if len(path_arr) > 7:
ttl = path_arr[7]
return {
"arguments": arguments,
"data": data,
"name": name,
"rtype": rtype,
"ttl": ttl,
"zone": zone,
}
# Entry point to program # Entry point to program
def main() -> int: def main() -> int:
# Grab user input # Grab user input
@ -269,6 +308,10 @@ def main() -> int:
except KeyError: except KeyError:
output(response.json()) output(response.json())
return 1 return 1
except requests.exceptions.JSONDecodeError:
output(
error("Could not decode api response as JSON", "Could not decode"))
return 1
headers = {"Authorization": "Bearer {}".format(token)} headers = {"Authorization": "Bearer {}".format(token)}
# Route based on command # Route based on command
@ -311,8 +354,7 @@ def main() -> int:
run_update(url, args.json, headers) run_update(url, args.json, headers)
except (RequestsJSONDecodeError, SimplejsonJSONDecodeError): except (RequestsJSONDecodeError, SimplejsonJSONDecodeError):
output( output(
error("Could not decode api response as JSON", "Could not decode") error("Could not decode api response as JSON", "Could not decode"))
)
return 0 return 0

Loading…
Cancel
Save