From 692ec851261084ee207052267f3c153e8b88e0d3 Mon Sep 17 00:00:00 2001 From: LIghtJUNction Date: Fri, 23 Oct 2026 09:30:32 +0800 Subject: [PATCH] fix(ci): satisfy Python quality gate --- deploy/check_home_seo.py | 56 ++++++++++++++++++++++++++++------------ 1 file changed, 39 insertions(+), 17 deletions(-) diff --git a/deploy/check_home_seo.py b/deploy/check_home_seo.py index 07ba705f..c585b3cf 100644 --- a/deploy/check_home_seo.py +++ b/deploy/check_home_seo.py @@ -1,6 +1,5 @@ """Verify homepage metadata without changing Markdown or non-home resources.""" -from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer -from pathlib import Path + import socket import subprocess import tempfile @@ -8,9 +7,13 @@ import time import urllib.error import urllib.request +from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer +from pathlib import Path HTML = b'msgPublic home' MARKDOWN = b'# msg\n\nAgent-readable public home.\n' + + class Backend(BaseHTTPRequestHandler): def do_GET(self): browser = 'text/html' in self.headers.get('Accept', '') @@ -19,41 +22,58 @@ def do_GET(self): self.send_header('Content-Security-Policy', "default-src 'none'") self.end_headers() self.wfile.write(HTML if browser else MARKDOWN) + def log_message(self, *args): pass + + backend = ThreadingHTTPServer(('127.0.0.1', 0), Backend) thread = threading.Thread(target=backend.serve_forever, daemon=True) thread.start() with socket.socket() as sock: sock.bind(('127.0.0.1', 0)) port = sock.getsockname()[1] + + def get(path, accept): - with urllib.request.urlopen(urllib.request.Request( - f'http://127.0.0.1:{port}{path}', headers={'Accept': accept}), timeout=3) as response: + with urllib.request.urlopen( + urllib.request.Request(f'http://127.0.0.1:{port}{path}', headers={'Accept': accept}), + timeout=3, + ) as response: return response.headers, response.read() + + try: with tempfile.TemporaryDirectory(prefix='msg-home-seo-') as temp: directory = Path(temp) conf = directory / 'nginx.conf' snippet = Path(__file__).with_name('nginx-home-seo.conf').read_text() - conf.write_text(f'pid {directory}/nginx.pid; error_log {directory}/error.log; daemon off; master_process off; events {{}}\n' - 'http { access_log off;\n' - + ''.join(f'{kind}_temp_path {directory}/{kind};\n' for kind in ['client_body','proxy','fastcgi','uwsgi','scgi']) - + f'upstream msg_lmm_best {{ server 127.0.0.1:{backend.server_port}; }}\n' - 'map $uri $msg_browser_cache_control { default "private, no-cache"; }\n' - 'map $uri $msg_browser_referrer_policy { default "no-referrer"; }\n' - + f'server {{ listen 127.0.0.1:{port};\n' + snippet - + 'location / { proxy_pass http://msg_lmm_best; }\n}}\n') - process = subprocess.Popen(['nginx', '-p', temp, '-c', str(conf)], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + conf.write_text( + f'pid {directory}/nginx.pid; error_log {directory}/error.log; daemon off; master_process off; events {{}}\n' + 'http { access_log off;\n' + + ''.join( + f'{kind}_temp_path {directory}/{kind};\n' + for kind in ['client_body', 'proxy', 'fastcgi', 'uwsgi', 'scgi'] + ) + + f'upstream msg_lmm_best {{ server 127.0.0.1:{backend.server_port}; }}\n' + 'map $uri $msg_browser_cache_control { default "private, no-cache"; }\n' + 'map $uri $msg_browser_referrer_policy { default "no-referrer"; }\n' + + f'server {{ listen 127.0.0.1:{port};\n' + + snippet + + 'location / { proxy_pass http://msg_lmm_best; }\n}}\n' + ) + process = subprocess.Popen( + ['nginx', '-p', temp, '-c', str(conf)], stdout=subprocess.PIPE, stderr=subprocess.PIPE + ) try: - for attempt in range(40): + for _attempt in range(40): try: get('/', 'text/html') break except urllib.error.URLError: if process.poll() is not None: - raise RuntimeError(process.communicate()[1].decode()) - time.sleep(.05) + raise RuntimeError(process.communicate()[1].decode()) from None + time.sleep(0.05) else: raise RuntimeError('Nginx did not start') headers, body = get('/', 'text/html') @@ -64,7 +84,9 @@ def get(path, accept): headers, body = get('/', 'text/markdown') assert body == MARKDOWN and headers['Content-Type'].startswith('text/markdown') assert get('/another-resource', 'text/html')[1] == HTML - print('HTML metadata, canonical header, CSP/cache, unchanged Markdown and other resources passed') + print( + 'HTML metadata, canonical header, CSP/cache, unchanged Markdown and other resources passed' + ) finally: if process.poll() is None: process.terminate()