-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
example.py
82 lines (68 loc) · 2.86 KB
/
example.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
"""Example of usage."""
import asyncio
import logging
from dataclasses import astuple
from aiohttp import ClientConnectorError, ClientSession
from tenacity import RetryError
from nextdns import ApiError, InvalidApiKeyError, NextDns
API_KEY = "xxx"
logging.basicConfig(level=logging.DEBUG)
async def main() -> None:
"""Run main function."""
async with ClientSession() as websession:
try:
nextdns = await NextDns.create(websession, API_KEY)
profile_id, profile_fingerprint, profile_name = astuple(nextdns.profiles[0])
status = await nextdns.get_analytics_status(profile_id)
dnssec = await nextdns.get_analytics_dnssec(profile_id)
encryption = await nextdns.get_analytics_encryption(profile_id)
ip_versions = await nextdns.get_analytics_ip_versions(profile_id)
protocols = await nextdns.get_analytics_protocols(profile_id)
connection_status = await nextdns.connection_status(profile_id)
settings = await nextdns.get_settings(profile_id)
# set logs retention to 1 month (30 days)
# allowed values are: 1, 6, 24, 168, 720, 960, 4320, 8760, 17520
# await nextdns.set_logs_retention(profile_id, 720)
# set logs location to Switzerland
# allowed values are: ch, eu, gb, us
# await nextdns.set_logs_location(profile_id, "ch")
# clear logs
# await nextdns.clear_logs(profile_id)
# get CSV logs and save to file
# logs = await nextdns.get_logs(profile_id)
# with open(
# f"nextdns_{profile_id}_logs.csv", "w", encoding="utf-8"
# ) as file:
# file.write(logs)
# enable block page
# await nextdns.set_setting(profile_id, "block_page", True)
except ValueError as error:
print(error)
except InvalidApiKeyError:
print("Invalid API Key")
except ApiError as error:
print(f"API Error: {error.status}")
except ClientConnectorError as error:
print(f"ClientConnectorError: {error}")
except TimeoutError as error:
print(f"TimeoutError: {error}")
except RetryError as error:
print(f"RetryError: {error}")
else:
print(
f"Profile: {profile_name} "
f"(id: {profile_id}, fingerprint: {profile_fingerprint})"
)
print(
f"Does this device use NextDNS?: {connection_status.connected}, "
f"using profile: {connection_status.profile_id}"
)
print(status)
print(dnssec)
print(encryption)
print(ip_versions)
print(protocols)
print(settings)
loop = asyncio.new_event_loop()
loop.run_until_complete(main())
loop.close()