Version 2.8.38: eine Rechnung fuer die Resttage, Module benannt

This commit is contained in:
alientim committed 2026-09-17 09:26:31 +02:00
1 parent 970f45cdf7
commit f481a91773
6 files changed
+39 -5

No files matched your search

@@ -46,6 +46,7 @@ from .license import (
key_id,
license_status,
parse_iso,
tage_bis,
split_bundle,
utcnow,
verify_license,
@@ -103,6 +104,7 @@ __all__ = [
"machine_identity",
"new_nonce",
"parse_iso",
"tage_bis",
"sign",
"split_bundle",
"system_fingerprint",
@@ -221,6 +221,27 @@ def verify_license(
)
def tage_bis(expires_at: datetime, *, now: datetime | None = None) -> int:
"""Restlaufzeit in **angefangenen** Tagen.
Aufgerundet, und das ist eine Entscheidung: eine Lizenz, die in zwei
Stunden ablaeuft, hat "1 Tag" und nicht "0". Null bedeutet hier
ausschliesslich *abgelaufen* -- eine gueltige Lizenz, die mit "0 Tage"
dasteht, liest sich wie eine tote.
**Es gibt genau diese eine Rechnung.** Der Lizenzserver hatte eine zweite,
abgerundete: dieselbe Lizenz zeigte in seiner Oberflaeche "21 Tage" und im
Abruf beim Kunden "22". Zwei Zahlen fuer dieselbe Frage sind schlimmer als
eine ungenaue -- sie kosten jemanden einen Nachmittag mit der Suche nach
einem Fehler, den es nicht gibt.
"""
moment = now or utcnow()
sekunden = int((expires_at - moment).total_seconds())
if sekunden <= 0:
return 0
return -(-sekunden // 86400)
def license_status(
document: Mapping[str, Any],
*,
@@ -278,7 +299,7 @@ def license_status(
days_left = 0
days_since_expiry = int((moment - expires_at).total_seconds() // 86400)
else:
days_left = -(-int(delta.total_seconds()) // 86400)
days_left = tage_bis(expires_at, now=moment)
days_since_expiry = None
grace_active = bool(