Esempio n. 1
0
    def __init__(self, source=REPO, state=None):
        if not self.initialized():
            self.source = source
            self.initComar()
            self.odb = pisi.db.offlinedb.OfflineDB()
            self.initDB()

        self.offlineparser = OfflineParser()
Esempio n. 2
0
    def __init__(self, source=REPO, state=None):
        if not self.initialized():
            self.source = source
            self.initComar()
            self.odb = pisi.db.offlinedb.OfflineDB()
            self.initDB()

        self.offlineparser = OfflineParser()
Esempio n. 3
0
    def __init__(self):
        QObject.__init__(self)
        self.setExceptionHandler(self.exceptionHandler)
        self.setActionHandler(self.handler)

        self.offlineparser = OfflineParser()
Esempio n. 4
0
class OfflineManager(QObject):
    def __init__(self):
        QObject.__init__(self)
        self.setExceptionHandler(self.exceptionHandler)
        self.setActionHandler(self.handler)

        self.offlineparser = OfflineParser()

    def setActionHandler(self, handler):
        backend.pm.Iface().setHandler(handler)

    def setExceptionHandler(self, handler):
        backend.pm.Iface().setExceptionHandler(handler)

    def updateExportingProgress(self):
        try:
            percent = (self.packageNo * 100) / self.totalPackages
        except ZeroDivisionError:
            percent = 0

        self.emit(SIGNAL("exportingProgress(int)"), percent)

    def updateTotalOperationPercent(self):
        try:
            percent = (self.operationNo * 100) / self.totalOperations
        except ZeroDivisionError:
            percent = 0

        self.emit(SIGNAL("totalProgress(int)"), percent)

    def updateOperationPercent(self):
        try:
            percent = (self.packageNo * 100) / self.totalPackages
        except ZeroDivisionError:
            percent = 0

        self.emit(SIGNAL("currentProgress(int)"), percent)

    def importIndex(self, filename):
        backend.pm.Iface().setIndex(filename)

    def exportIndex(self, filename):
        iface = backend.pm.Iface()

        source = iface.source  # store current source
        iface.setSource(None)  # set source None

        list_installed = iface.getPackageList()  # get installed package list
        packages = []

        self.totalPackages = len(list_installed)
        self.packageNo = 0

        for name in list_installed:
            packages.append(iface.getPackage(name))
            self.packageNo += 1
            self.updateExportingProgress()

        session = SessionManager()
        session.setSession(session.OFFLINE)

        try:
            backend.pm.Iface().writeIndex(packages, filename)
            print "Index file is written successfully."
        except:
            print "Index file could not written!"

        # set source and session to their previous states
        session.setSession(session.NORMAL)
        iface.setSource(source)

    def saveSession(self, filename):
        self.offlineparser.saveArchive(filename)

    def openSession(self, filename):
        self.offlineparser.extractArchive(filename)

        self.initOperations()
        self.getOperation()

    def initOperations(self):
        self.operations = self.offlineparser.parseOperations()
        self.totalOperations = len(self.operations)
        self.operationNo = 0
        self.signalCounter = 0

    def getOperation(self):
        self.updateTotalOperationPercent()
        self.operationNo += 1

        try:
            operation = self.operations[0][0]
            packages = self.operations[0][1]

            self.operations.pop(0)
            self.startOperation(operation, packages)
        except IndexError:
            self.emit(SIGNAL("finished()"))

    def startOperation(self, operation, packages):
        self.totalPackages = len(packages)
        self.packageNo = 0

        if operation == "install":
            backend.pm.Iface().installPackages(packages)

        elif operation == "remove":
            backend.pm.Iface().removePackages(packages)

        else:
            raise Exception("Unknown operation")

    def exceptionHandler(self, exception):
        self.emit(SIGNAL("exception(QString)"), str(exception))

    def handler(self, package, signal, args):
        if signal == "status":
            signal = str(args[0])
            args = args[1:]

            packageName = args[0]

            if signal == "installing":
                self.emit(SIGNAL("operationChanged(QString)"),
                          i18n("Installing %s" % packageName))

            elif signal == "removing":
                self.emit(SIGNAL("operationChanged(QString)"),
                          i18n("Removing %s" % packageName))

            elif signal in ["installed", "removed"]:
                self.packageNo += 1
                self.updateOperationPercent()

        elif signal == "finished":
            # it must wait for second finish signal to start next operation
            if self.signalCounter == 1:
                self.getOperation()
                self.signalCounter = 0
            else:
                self.signalCounter += 1
Esempio n. 5
0
class Iface(Singleton):

    (SYSTEM, REPO) = range(2)

    def __init__(self, source=REPO, state=None):
        if not self.initialized():
            self.source = source
            self.initComar()
            self.odb = pisi.db.offlinedb.OfflineDB()
            self.initDB()

        self.offlineparser = OfflineParser()

    def initialized(self):
        return "link" in self.__dict__

    def initComar(self):
        self.link = comar.Link()
        self.link.setLocale()
        self.link.listenSignals("System.Manager", self.signalHandler)

    def initDB(self):
        self.pdb = pisi.db.packagedb.PackageDB()
        self.cdb = pisi.db.componentdb.ComponentDB()
        self.rdb = pisi.db.repodb.RepoDB()
        self.gdb = pisi.db.groupdb.GroupDB()
        self.replaces = self.pdb.get_replaces()

    def setHandler(self, handler):
        self.link.listenSignals("System.Manager", handler)

    def setExceptionHandler(self, handler):
        self.exceptionHandler = handler

    def invalidate_db_caches(self):
        pisi.db.invalidate_caches()
        self.initDB()

    def signalHandler(self, package, signal, args):
        if signal == "finished":
            self.invalidate_db_caches()

    def handler(self, package, exception, args):
        if exception:
            logger.debug("Exception caught by COMAR: %s" % exception)
            self.invalidate_db_caches()
            self.exceptionHandler(exception)

    def installPackages(self, packages):
        all_packages = packages + self.depends_list

        for pkg in all_packages:
            self.odb.add_package(pkg)

        self.offlineparser.saveOperation(all_packages, "install")

    def removePackages(self, packages):
        all_packages = packages + self.requires_list

        for pkg in all_packages:
            self.odb.remove_package(pkg)

        self.offlineparser.saveOperation(all_packages, "remove")

    def upgradePackages(self, packages):
        self.installPackages(packages)

    def updateRepositories(self):
        self.link.System.Manager["pisi"].updateAllRepositories(
            async=self.handler, timeout=2**16 - 1)

    def updateRepository(self, repo):
        self.link.System.Manager["pisi"].updateRepository(repo,
                                                          async=self.handler,
                                                          timeout=2**16 - 1)

    def clearCache(self, limit):
        logger.debug("Clearing cache with limit: %s" % limit)
        self.link.System.Manager["pisi"].clearCache("/var/cache/pisi/packages",
                                                    limit)

    def setRepositories(self, repos):
        logger.debug("Re-setting repositories: %s" % repos)
        self.link.System.Manager["pisi"].setRepositories(repos)

    def setRepoActivities(self, repos):
        logger.debug("Re-setting repo activities: %s" % repos)
        self.link.System.Manager["pisi"].setRepoActivities(repos)

    def __configChanged(self, category, name, value):
        config = self.getConfig()
        return not str(config.get(category, name)) == str(value)

    def setCacheLimit(self, useCache, limit):
        logger.debug("Use cache: %s - change limit to: %s" % (useCache, limit))
        if not self.__configChanged("general", "package_cache",
                                    useCache) and not self.__configChanged(
                                        "general", "package_cache_limit",
                                        limit):
            return
        self.link.System.Manager["pisi"].setCache(useCache, limit)

    def setConfig(self, category, name, value):
        logger.debug("Setting config... Category: %s, Name: %s, Value: %s" %
                     (category, name, value))
        if not self.__configChanged(category, name, value):
            return
        self.link.System.Manager["pisi"].setConfig(category, name, value)

    def setSource(self, source):
        self.source = source

    def getPackageRepository(self, name):
        try:
            return self.pdb.which_repo(name)
        except Exception:
            return "N/A"

    def calculate_download_size(self, packages):
        try:
            total, cached = pisi.api.calculate_download_size(packages)
            return total - cached
        except OSError, e:
            return None
Esempio n. 6
0
class Iface(Singleton):

    (SYSTEM, REPO) = range(2)

    def __init__(self, source=REPO, state=None):
        if not self.initialized():
            self.source = source
            self.initComar()
            self.odb = pisi.db.offlinedb.OfflineDB()
            self.initDB()

        self.offlineparser = OfflineParser()

    def initialized(self):
        return "link" in self.__dict__

    def initComar(self):
        self.link = comar.Link()
        self.link.setLocale()
        self.link.listenSignals("System.Manager", self.signalHandler)

    def initDB(self):
        self.pdb  = pisi.db.packagedb.PackageDB()
        self.cdb  = pisi.db.componentdb.ComponentDB()
        self.rdb  = pisi.db.repodb.RepoDB()
        self.gdb  = pisi.db.groupdb.GroupDB()
        self.replaces = self.pdb.get_replaces()

    def setHandler(self, handler):
        self.link.listenSignals("System.Manager", handler)

    def setExceptionHandler(self, handler):
        self.exceptionHandler = handler

    def invalidate_db_caches(self):
        pisi.db.invalidate_caches()
        self.initDB()

    def signalHandler(self, package, signal, args):
        if signal == "finished":
            self.invalidate_db_caches()

    def handler(self, package, exception, args):
        if exception:
            logger.debug("Exception caught by COMAR: %s" % exception)
            self.invalidate_db_caches()
            self.exceptionHandler(exception)

    def installPackages(self, packages):
        all_packages = packages + self.depends_list

        for pkg in all_packages:
            self.odb.add_package(pkg)

        self.offlineparser.saveOperation(all_packages, "install")

    def removePackages(self, packages):
        all_packages = packages + self.requires_list

        for pkg in all_packages:
            self.odb.remove_package(pkg)

        self.offlineparser.saveOperation(all_packages, "remove")

    def upgradePackages(self, packages):
        self.installPackages(packages)

    def updateRepositories(self):
        self.link.System.Manager["pisi"].updateAllRepositories(async=self.handler, timeout=2**16-1)

    def updateRepository(self, repo):
        self.link.System.Manager["pisi"].updateRepository(repo, async=self.handler, timeout=2**16-1)

    def clearCache(self, limit):
        logger.debug("Clearing cache with limit: %s" % limit)
        self.link.System.Manager["pisi"].clearCache("/var/cache/pisi/packages", limit)

    def setRepositories(self,  repos):
        logger.debug("Re-setting repositories: %s" % repos)
        self.link.System.Manager["pisi"].setRepositories(repos)

    def setRepoActivities(self, repos):
        logger.debug("Re-setting repo activities: %s" % repos)
        self.link.System.Manager["pisi"].setRepoActivities(repos)

    def __configChanged(self, category, name, value):
        config = self.getConfig()
        return not str(config.get(category, name)) == str(value)

    def setCacheLimit(self, useCache, limit):
        logger.debug("Use cache: %s - change limit to: %s" % (useCache, limit))
        if not self.__configChanged("general", "package_cache", useCache) and not self.__configChanged("general", "package_cache_limit", limit):
            return
        self.link.System.Manager["pisi"].setCache(useCache, limit)

    def setConfig(self, category, name, value):
        logger.debug("Setting config... Category: %s, Name: %s, Value: %s" % (category, name, value))
        if not self.__configChanged(category, name, value):
            return
        self.link.System.Manager["pisi"].setConfig(category, name, value)

    def setSource(self, source):
        self.source = source

    def getPackageRepository(self, name):
        try:
            return self.pdb.which_repo(name)
        except Exception:
            return "N/A"

    def calculate_download_size(self, packages):
        try:
            total, cached = pisi.api.calculate_download_size(packages)
            return total - cached
        except OSError, e:
            return None
Esempio n. 7
0
 def __init__(self):
     QObject.__init__(self)
     self.setExceptionHandler(self.exceptionHandler)
     self.setActionHandler(self.handler)
     
     self.offlineparser = OfflineParser()
Esempio n. 8
0
class OfflineManager(QObject):
    def __init__(self):
        QObject.__init__(self)
        self.setExceptionHandler(self.exceptionHandler)
        self.setActionHandler(self.handler)
        
        self.offlineparser = OfflineParser()

    def setActionHandler(self, handler):
        backend.pm.Iface().setHandler(handler)

    def setExceptionHandler(self, handler):
        backend.pm.Iface().setExceptionHandler(handler)

    def updateExportingProgress(self):
        try:
            percent = (self.packageNo * 100) / self.totalPackages
        except ZeroDivisionError:
            percent = 0

        self.emit(SIGNAL("exportingProgress(int)"), percent)

    def updateTotalOperationPercent(self):
        try:
            percent = (self.operationNo * 100) / self.totalOperations
        except ZeroDivisionError:
            percent = 0

        self.emit(SIGNAL("totalProgress(int)"), percent)

    def updateOperationPercent(self):
        try:
            percent = (self.packageNo * 100) / self.totalPackages
        except ZeroDivisionError:
            percent = 0

        self.emit(SIGNAL("currentProgress(int)"), percent)

    def importIndex(self, filename):        
        backend.pm.Iface().setIndex(filename)

    def exportIndex(self, filename):
        iface = backend.pm.Iface()

        source = iface.source  # store current source
        iface.setSource(None)  # set source None

        list_installed = iface.getPackageList()  # get installed package list
        packages = []

        self.totalPackages = len(list_installed)
        self.packageNo = 0

        for name in list_installed:
            packages.append(iface.getPackage(name))
            self.packageNo += 1
            self.updateExportingProgress()

        session = SessionManager()
        session.setSession(session.OFFLINE)

        try:
            backend.pm.Iface().writeIndex(packages, filename)
            print "Index file is written successfully."
        except:
            print "Index file could not written!"

        # set source and session to their previous states
        session.setSession(session.NORMAL)
        iface.setSource(source)

    def saveSession(self, filename):
        self.offlineparser.saveArchive(filename)

    def openSession(self, filename):
        self.offlineparser.extractArchive(filename)
        
        self.initOperations()
        self.getOperation()

    def initOperations(self):
        self.operations = self.offlineparser.parseOperations()
        self.totalOperations = len(self.operations)
        self.operationNo = 0
        self.signalCounter = 0

    def getOperation(self):
        self.updateTotalOperationPercent()
        self.operationNo += 1

        try:
            operation = self.operations[0][0]
            packages = self.operations[0][1]

            self.operations.pop(0)
            self.startOperation(operation, packages)
        except IndexError:
            self.emit(SIGNAL("finished()"))

    def startOperation(self, operation, packages):
        self.totalPackages = len(packages)
        self.packageNo = 0

        if operation == "install":
            backend.pm.Iface().installPackages(packages)

        elif operation == "remove":
            backend.pm.Iface().removePackages(packages)

        else:
            raise Exception("Unknown operation")

    def exceptionHandler(self, exception):
        self.emit(SIGNAL("exception(QString)"), str(exception))

    def handler(self, package, signal, args):
        if signal == "status":
            signal = str(args[0])
            args = args[1:]

            packageName = args[0]

            if signal == "installing":
                self.emit(SIGNAL("operationChanged(QString)"), i18n("Installing %s" % packageName))

            elif signal == "removing":
                self.emit(SIGNAL("operationChanged(QString)"), i18n("Removing %s" % packageName))

            elif signal in ["installed", "removed"]:
                self.packageNo += 1
                self.updateOperationPercent()

        elif signal == "finished":
            # it must wait for second finish signal to start next operation
            if self.signalCounter == 1:
                self.getOperation()
                self.signalCounter = 0
            else:
                self.signalCounter += 1