starcontrol/blocklists.py
Nicole O'Connor d4186e0e43 state sync: contains
* adafruit screen test script
* mainloop with threads
* a mostly finished screen thread
* a partly finished blocklist update thread
2024-11-04 19:25:23 -08:00

57 lines
1.5 KiB
Python

import atexit
import logging
import os
import pathlib
import time
import requests
import config
import screen
log = logging.getLogger("blocklists")
running = True
blocklist_data_src = "https://github.com/hagezi/dns-blocklists/archive/refs/heads/main.zip"
blocklist_data_src_path = "dnsmasq"
blocklist_lib_path = "/var/lib/starcontrol"
log.debug("preparing cache directories")
pth_cache_root = pathlib.Path(config.cparse["internal"]["cache_root"])
pth_cache_root.mkdir(exist_ok=True, parents=True)
pth_blocklist_lib = pathlib.Path(blocklist_lib_path)
pth_blocklist_lib.mkdir(exist_ok=True, parents=True)
def blocklist_check():
log.debug("checking blocklist mtimes and updating if needed")
try:
ts_payload = os.path.getmtime(pth_blocklist_lib / "dns-blocklists-main.zip")
ts_now = time.time()
if (ts_now - ts_payload) >= 604800:
update_blocklists()
except OSError:
update_blocklists()
def update_blocklists():
log.info("blocklist update in progress")
screen.download_state = 1
fd_listpayload = open(pth_blocklist_lib / "dns-blocklists-main.zip", "wb")
hnd_download = requests.get(blocklist_data_src, stream=True)
for chunk in hnd_download.iter_content(chunk_size=256):
fd_listpayload.write(chunk)
hnd_download.close()
fd_listpayload.close()
screen.download_state = 0
def blocklist_thread():
while running:
blocklist_check()
time.sleep(3600) # 1 hour
@atexit.register
def stop_blocklist():
global running
running = False