mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2026-11-13 22:26:49 +00:00
The same failure class as 3dee332350, in the places that only became
visible once the louder messages were gone. Nine of them are class
docstrings, which the detector used to find the first round skipped
because it walked modules and functions only.
restart_condition carried a section title inside its docstring, where
docutils allows none, and the indented block below it held a second.
cert_utils indented the closing brace of its example shallower than the
body it closes.
Two are regressions of my own first round: filters lacked the blank line
between its new literal block and the paragraph after it, and
fediwall_active had the wrong one of its two colons corrected.
make i18n-extract domain=docs now finishes with zero warnings under -W.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
59 lines
1.7 KiB
Python
59 lines
1.7 KiB
Python
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
from ansible.errors import AnsibleError
|
|
from ansible.plugins.lookup import LookupBase
|
|
|
|
|
|
class LookupModule(LookupBase):
|
|
"""
|
|
Return a cache-busting string based on the LOCAL file's mtime.
|
|
|
|
Usage (single path → string via Jinja)::
|
|
|
|
{{ lookup('local_mtime_qs', '/path/to/file.css') }}
|
|
-> "?version=1712323456"
|
|
|
|
Options::
|
|
|
|
param (str): query parameter name (default: "version")
|
|
mode (str): "qs" (default) → returns "?<param>=<mtime>"
|
|
"epoch" → returns "<mtime>"
|
|
|
|
Multiple paths (returns list, one result per term)::
|
|
|
|
{{ lookup('local_mtime_qs', '/a.js', '/b.js', param='v') }}
|
|
"""
|
|
|
|
def run(self, terms, variables=None, **kwargs):
|
|
if not terms:
|
|
return []
|
|
|
|
param = kwargs.get("param", "version")
|
|
mode = kwargs.get("mode", "qs")
|
|
|
|
if mode not in ("qs", "epoch"):
|
|
raise AnsibleError("local_mtime_qs: 'mode' must be 'qs' or 'epoch'")
|
|
|
|
results = []
|
|
for term in terms:
|
|
path = str(Path(str(Path(str(term)).expanduser())).resolve())
|
|
|
|
if not Path(path).exists():
|
|
raise AnsibleError(f"local_mtime_qs: file does not exist: {path}")
|
|
if not Path(path).is_file():
|
|
raise AnsibleError(f"local_mtime_qs: not a regular file: {path}")
|
|
|
|
try:
|
|
mtime = int(Path(path).stat().st_mtime)
|
|
except OSError as e:
|
|
raise AnsibleError(f"local_mtime_qs: cannot stat '{path}': {e}") from e
|
|
|
|
if mode == "qs":
|
|
results.append(f"?{param}={mtime}")
|
|
else:
|
|
results.append(str(mtime))
|
|
|
|
return results
|