diff --git a/hook_launcher.py b/hook_launcher.py index a4c0b3e..39fc835 100755 --- a/hook_launcher.py +++ b/hook_launcher.py @@ -1,3 +1,4 @@ #!/usr/bin/env python3 from nyacme.hook import main + main() diff --git a/nyacme/__main__.py b/nyacme/__main__.py index fb646d5..000f235 100644 --- a/nyacme/__main__.py +++ b/nyacme/__main__.py @@ -1,8 +1,8 @@ import argparse -import os.path -import subprocess import logging +import os.path import shutil +import subprocess from datetime import datetime from pathlib import Path @@ -35,7 +35,8 @@ def main() -> None: cert_path = output_dir / domain / 'cert.pem' if cert_path.is_file(): - out = subprocess.run([ 'openssl', 'x509', '-enddate', '-noout', '-in', cert_path ], stdout=subprocess.PIPE, check=True).stdout.decode('utf-8').strip() + cmd = [ 'openssl', 'x509', '-enddate', '-noout', '-in', cert_path ] + out = subprocess.run(cmd, stdout=subprocess.PIPE, check=True).stdout.decode('utf-8').strip() date = datetime.strptime(out, 'notAfter=%b %d %H:%M:%S %Y %Z') # if more than 1 month, skip delta = date - datetime.now() diff --git a/nyacme/config.py b/nyacme/config.py index 0848982..dd6d7ce 100644 --- a/nyacme/config.py +++ b/nyacme/config.py @@ -1,8 +1,9 @@ -from typing import Optional -import tomllib import logging -import sys import os +import sys +from typing import Optional + +import tomllib log = logging.getLogger(__name__) diff --git a/nyacme/handlers/base.py b/nyacme/handlers/base.py index 356b852..09147c1 100644 --- a/nyacme/handlers/base.py +++ b/nyacme/handlers/base.py @@ -2,6 +2,7 @@ import logging from ..config import Config + class Handler: zone: str config: Config diff --git a/nyacme/handlers/hetzner.py b/nyacme/handlers/hetzner.py index 609b248..546efba 100644 --- a/nyacme/handlers/hetzner.py +++ b/nyacme/handlers/hetzner.py @@ -1,9 +1,10 @@ -import urllib.request import json -from typing import Optional, Any +import urllib.request +from typing import Any, Optional -from .base import Handler from ..config import Config +from .base import Handler + class HetznerHandler(Handler): # discovered @@ -41,7 +42,7 @@ class HetznerHandler(Handler): raise Exception(json.loads(res)['error']) except Exception: raise Exception(res) - + def create(self, record_name: str, record_value: str) -> None: self.remove(record_name) self.log.info('creating %s with value %s', record_name, record_value) diff --git a/nyacme/handlers/http.py b/nyacme/handlers/http.py index 2495b69..5c505ce 100644 --- a/nyacme/handlers/http.py +++ b/nyacme/handlers/http.py @@ -1,7 +1,8 @@ import os -from .base import Handler from ..config import Config +from .base import Handler + class HTTPHandler(Handler): def __init__(self, zone: str, config: Config, token: str) -> None: diff --git a/nyacme/hook.py b/nyacme/hook.py index ba196f2..5f203a1 100644 --- a/nyacme/hook.py +++ b/nyacme/hook.py @@ -1,15 +1,14 @@ import argparse import logging -from itertools import chain -import time import sys +import time +from itertools import chain import dns.resolver from .config import read_config from .handlers import HetznerHandler - logging.basicConfig(level=logging.INFO, format='> [%(levelname)s] %(name)s: %(message)s') log = logging.getLogger('nyacme_hook') @@ -49,7 +48,9 @@ def main() -> None: if args.type == 'dns-01': resolver = dns.resolver.Resolver('', configure=False) - resolver.nameservers = list(chain.from_iterable(list(map(resolve4, handler.nameservers)) + list(map(resolve6, handler.nameservers)))) + ns4 = list(map(resolve4, handler.nameservers)) + ns6 = list(map(resolve6, handler.nameservers)) + resolver.nameservers = list(chain.from_iterable(ns4 + ns6)) for i in range(5): log.info('checking DNS (attempt %d/5)', i+1) try: diff --git a/ruff.toml b/ruff.toml new file mode 100644 index 0000000..a9fbb4a --- /dev/null +++ b/ruff.toml @@ -0,0 +1,22 @@ +line-length = 120 + +# https://docs.astral.sh/ruff/rules/ +[lint] +extend-select = [ + "Q", # quotes + "PT", # pytest + "I", # isort + "F", # pyflakes + "E", # pycodestyle (errors) + "W", # pycodestyle (warnings) + "UP", # pyupgrade + "ISC", # implicit string concat + + "T20", # no print/pprint + "G001", # no str.format in logging + "C901", # check for complexity +] + +[lint.flake8-quotes] +inline-quotes = "single" +docstring-quotes = "single"