From 8596645de446d750a46c52f8db75916e85d99907 Mon Sep 17 00:00:00 2001 From: Jonathan Voss Date: Thu, 17 Apr 2025 10:32:48 -0500 Subject: [PATCH 1/3] feat: update API endpoint BREAKING CHANGE: nodes() call arguments and response change --- routedbits/routedbits.py | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/routedbits/routedbits.py b/routedbits/routedbits.py index a69320e..480c372 100644 --- a/routedbits/routedbits.py +++ b/routedbits/routedbits.py @@ -8,7 +8,7 @@ class RoutedBits(object): - BASE = "https://dn42.routedbits.com" + BASE = "https://dn42.routedbits.io/api" def __init__(self): self._session = Session() @@ -21,24 +21,22 @@ def _request(self, method, path, params=None, data=None): resp.raise_for_status() return resp - def nodes(self, minimal=False, sort_by="city"): - path = "/nodes.json" - resp = self._request("GET", path).json()["regions"] + def nodes(self, sort_by="city"): + path = "/routers.json" - nodes = resp - if minimal: - nodes = [] - for region in resp: - nodes.extend(region["sites"]) - nodes = sorted(nodes, key=lambda node: node[sort_by]) + nodes = [] - return nodes + for name, router in self._request("GET", path).json().items(): + router["name"] = name + nodes.append(router) + + return sorted(nodes, key=lambda node: node[sort_by]) def node(self, hostname=None, name=None): if hostname and name: raise TooManyArguments() - nodes = self.nodes(minimal=True) + nodes = self.nodes() for node in nodes: if hostname: if node["hostname"] == hostname: From d14dc5e201ee4fe2242cc5af0fe4892d29b38177 Mon Sep 17 00:00:00 2001 From: Jonathan Voss Date: Thu, 17 Apr 2025 10:44:58 -0500 Subject: [PATCH 2/3] feat: return namespaced node objects --- README.md | 8 +++++++- routedbits/routedbits.py | 10 +++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index b7078c8..c6380c5 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,13 @@ a.node(name="dal1") print(a) """ -{'city': 'Dallas, TX, US', 'flag': '🇺🇸', 'fqdn': 'router.dal1.routedbits.com', 'hostname': 'router.dal1', 'name': 'dal1', 'tunnel_ipv4_address': '172.20.19.68', 'tunnel_ipv6_address': {'link_local': 'fe80::207', 'ula': 'fdb1:e72a:343d::5'}, 'wireguard_public_key': '8clbJPxK5ylOhFDNGdn/CL5zRWQdf7rXbLeF7j8czFI='} +namespace(city='Dallas, TX, US', region='US Central', flag='🇺🇸', fqdn='router.dal1.routedbits.com', hostname='router.dal1', latitude='32.818072', longitude='-97.061721', tunnel_ipv4_address='172.20.19.68', tunnel_ipv6_address={'link_local': 'fe80::207', 'ula': 'fdb1:e72a:343d::5'}, type='dual-stack', wireguard_public_key='8clbJPxK5ylOhFDNGdn/CL5zRWQdf7rXbLeF7j8czFI=', name='dal1') +""" + +print(a.fqdn) + +""" +'router.dal1.routedbits.com' """ ``` diff --git a/routedbits/routedbits.py b/routedbits/routedbits.py index 480c372..e39f25e 100644 --- a/routedbits/routedbits.py +++ b/routedbits/routedbits.py @@ -3,6 +3,7 @@ # from requests import Session +from types import SimpleNamespace from routedbits.exceptions import NotFound, TooManyArguments @@ -23,14 +24,13 @@ def _request(self, method, path, params=None, data=None): def nodes(self, sort_by="city"): path = "/routers.json" - nodes = [] for name, router in self._request("GET", path).json().items(): router["name"] = name - nodes.append(router) + nodes.append(SimpleNamespace(**router)) - return sorted(nodes, key=lambda node: node[sort_by]) + return sorted(nodes, key=lambda node: node.__dict__[sort_by]) def node(self, hostname=None, name=None): if hostname and name: @@ -39,11 +39,11 @@ def node(self, hostname=None, name=None): nodes = self.nodes() for node in nodes: if hostname: - if node["hostname"] == hostname: + if node.hostname == hostname: return node if name: - if node["name"] == name: + if node.name == name: return node raise NotFound() From e8ca9fb5a838ffd5d915b204894ee3785f406879 Mon Sep 17 00:00:00 2001 From: Jonathan Voss Date: Thu, 17 Apr 2025 10:45:43 -0500 Subject: [PATCH 3/3] chore: version bump project to 2.0.0 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 60b2320..42d5779 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "routedbits" description = "RoutedBits Python Library" -version = "1.0.0" +version = "2.0.0" authors = [ { name = "RoutedBits", email = "noc@routedbits.com" } ]