"""Freeze r14's mobile layout and linked brand/shop filters on the public r13 baseline.""" import argparse from concurrent.futures import ThreadPoolExecutor from datetime import datetime, timezone import difflib import hashlib import json from pathlib import Path import re from urllib.error import HTTPError from urllib.request import Request, urlopen import zipfile ROOT = Path(__file__).resolve().parents[1] RELEASE = 'ksf-board-mobile-filters-20261108-r14' OUT = ROOT / 'artifacts' / RELEASE PACK = OUT / 'package' WORK = ROOT / 'work' / RELEASE HOME = 'dfeb6a6d0b63e8e1190f9308bf6619a5ca523a5a2f91af5f7ca5ad5fc9642db3' def sha(raw): return hashlib.sha256(raw).hexdigest() def normal(raw): return raw.replace(b'\r\n', b'\n') def save(path, value): path.parent.mkdir(parents=True, exist_ok=True) path.write_text(json.dumps(value, ensure_ascii=False, indent=2) + '\n', encoding='utf-8') def copy(source, relative): target = PACK / relative target.parent.mkdir(parents=True, exist_ok=True) target.write_bytes(source.read_bytes()) def capture(name): try: with urlopen(Request('https://kangshifu.fmode.cn/' + name, headers={'Cache-Control': 'no-cache'}), timeout=35) as response: raw = response.read(3_000_001) content_type = response.headers.get('Content-Type', '') assert len(raw) < 3_000_001 exists = name == 'index.html' or 'javascript' in content_type or 'text/css' in content_type if not exists: assert b'