Source code for i3pystatus.updates.dnf
from i3pystatus.core.command import run_through_shell
from i3pystatus.updates import Backend
from re import split, sub
[docs]class Dnf(Backend):
"""
Gets updates for RPM-based distributions with `dnf check-update`.
The notification body consists of the status line followed by the package
name and version for each update.
https://dnf.readthedocs.org/en/latest/command_ref.html#check-update-command
"""
@property
def updates(self):
command = ["dnf", "check-update"]
dnf = run_through_shell(command)
if dnf.err:
return "?", dnf.err
raw = dnf.out
update_count = 0
if dnf.rc == 100:
lines = raw.splitlines()[2:]
lines = [l for l in lines if len(split("\s+", l.rstrip())) == 3]
update_count = len(lines)
notif_body = sub(r"(\S+)\s+(\S+)\s+\S+\s*\n", r"\1: \2\n", raw)
return update_count, notif_body
Backend = Dnf
if __name__ == "__main__":
"""
Call this module directly; Print the update count and notification body.
"""
print("Updates: {}\n\n{}".format(*Backend().updates))