#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Integration of package managers into UpdateManager"""
# (c) 2005-2009 Canonical, GPL
import os
import os.path
from gi.repository import GObject
class InstallBackend(GObject.GObject):
"""The abstract backend that can install/remove packages"""
(INSTALL, UPDATE) = range(2)
def __init__(self, window_main):
"""init backend
takes a gtk main window as parameter
"""
GObject.GObject.__init__(self)
self.window_main = window_main
def commit(self, pkgs_install, pkgs_upgrade, close_on_done):
"""Commit the cache changes """
raise NotImplemented
def update(self):
"""Run a update to refresh the package list"""
raise NotImplemented
def get_backend(*args, **kwargs):
"""Select and return a package manager backend."""
# try aptdaemon
if (os.path.exists("/usr/sbin/aptd") and
not "UPDATE_MANAGER_FORCE_BACKEND_SYNAPTIC" in os.environ):
# check if the gtkwidgets are installed as well
try:
from .InstallBackendAptdaemon import InstallBackendAptdaemon
return InstallBackendAptdaemon(*args, **kwargs)
except ImportError:
import logging
logging.exception("importing aptdaemon")
# try synaptic
if (os.path.exists("/usr/sbin/synaptic") and
not "UPDATE_MANAGER_FORCE_BACKEND_APTDAEMON" in os.environ):
from .InstallBackendSynaptic import InstallBackendSynaptic
return InstallBackendSynaptic(*args, **kwargs)
# nothing found, raise
raise Exception("No working backend found, please try installing "
"synaptic or aptdaemon")