4
from twisted.internet.utils import getProcessOutput
5
from twisted.internet.defer import succeed
7
from landscape.package.store import PackageStore
8
from landscape.package.changer import find_changer_command
9
from landscape.manager.manager import ManagerPlugin
12
class PackageManager(ManagerPlugin):
16
def __init__(self, package_store_filename=None):
17
super(PackageManager, self).__init__()
18
if package_store_filename:
19
self._package_store = PackageStore(package_store_filename)
21
self._package_store = None
22
self._changer_command = find_changer_command()
24
def register(self, registry):
25
super(PackageManager, self).register(registry)
26
self.config = registry.config
28
if not self._package_store:
29
filename = os.path.join(registry.config.data_path,
31
self._package_store = PackageStore(filename)
33
registry.register_message("change-packages",
34
self._enqueue_message_as_changer_task)
38
def _enqueue_message_as_changer_task(self, message):
39
self._package_store.add_task("changer", message)
43
result = self.registry.broker.get_accepted_message_types()
44
result.addCallback(self._got_message_types)
47
def _got_message_types(self, message_types):
48
if "change-packages-result" in message_types:
51
def spawn_changer(self):
53
if self.config.config:
54
args.extend(["-c", self.config.config])
55
if self._package_store.get_next_task("changer"):
56
# path is set to None so that getProcessOutput does not
57
# chdir to "." see bug #211373
58
result = getProcessOutput(self._changer_command,
59
args=args, env=os.environ,
62
result.addCallback(self._got_changer_output)
64
result = succeed(None)
67
def _got_changer_output(self, output):
69
logging.warning("Package changer output:\n%s" % output)