[modules/dnf] DNF module was not updating properly

Due to name-clashing of the datetime module's "time" alias, time.sleep
didn't work (as it was looked up from the i3bumblebee module),
consequently, the DNF poll thread exited.

While at it, "beautify" the thread cancelling a bit by waiting until
the main thread is not running anymore.
This commit is contained in:
Tobias Witek 2016-11-04 18:50:38 +01:00
parent 6e8acc2765
commit fb6337c625

View file

@ -1,3 +1,5 @@
from __future__ import absolute_import
import time import time
import shlex import shlex
import threading import threading
@ -16,12 +18,26 @@ def description():
return "Checks DNF for updated packages and displays the number of <security>/<bugfixes>/<enhancements>/<other> pending updates." return "Checks DNF for updated packages and displays the number of <security>/<bugfixes>/<enhancements>/<other> pending updates."
def get_dnf_info(obj): def get_dnf_info(obj):
while True:
loops = 0
for thread in threading.enumerate():
if thread.name == "MainThread":
main = thread
while main.is_alive():
try: try:
res = subprocess.check_output(shlex.split("dnf updateinfo")) res = subprocess.check_output(shlex.split("dnf updateinfo"))
except Exception as e: except Exception as e:
break break
loops += 1
time.sleep(1)
if loops < obj.interval():
continue
loops = 0
security = 0 security = 0
bugfixes = 0 bugfixes = 0
enhancements = 0 enhancements = 0
@ -47,13 +63,11 @@ def get_dnf_info(obj):
obj.set("enhancements", enhancements) obj.set("enhancements", enhancements)
obj.set("other", other) obj.set("other", other)
time.sleep(obj.interval())
class Module(bumblebee.module.Module): class Module(bumblebee.module.Module):
def __init__(self, output, args): def __init__(self, output, args):
super(Module, self).__init__(args) super(Module, self).__init__(args)
self._interval = args[0] if args else 30*60
self._interval = int(args[0]) if args else 30*60
self._counter = {} self._counter = {}
self._thread = threading.Thread(target=get_dnf_info, args=(self,)) self._thread = threading.Thread(target=get_dnf_info, args=(self,))
self._thread.start() self._thread.start()