예제 #1
0
 def __init__(self):
     if sys.platform == 'win32':
         from qt import QMutex
         self.mutex = QMutex(True)
     elif sys.platform == 'darwin':
         from Foundation import NSRecursiveLock
         self.mutex = NSRecursiveLock.alloc().init()
예제 #2
0
class ThreadLock:

    def __init__(self):
        if sys.platform == 'win32':
            from qt import QMutex
            self.mutex = QMutex(True)
        elif sys.platform == 'darwin':
            from Foundation import NSRecursiveLock
            self.mutex = NSRecursiveLock.alloc().init()

    def lock(self): self.mutex.lock()
    def unlock(self): self.mutex.unlock()
예제 #3
0
class SpellThread(QThread):
    def __init__(self,parent):
        self.parent = parent
        self.mutex = QMutex()
        QThread.__init__(self)
                
    def run(self):
        self.mutex.lock()
        scin = self.parent.sourceEditor
        text = unicode ( scin.text() )
        if text :
            self.parent.speller_result = self.parent.speller.load( unicode ( text ) )
        else:
            self.parent.speller_result = {}
        self.postEvent(self.parent, OpCompleteEvent(doneSpell,self.parent))
        self.mutex.unlock()
예제 #4
0
파일: ComarIface.py 프로젝트: Tayyib/uludag
 def __init__(self, handler=None, errHandler=None):
     self.errHandler = errHandler
     self.handler = handler
     # package-manager sync
     self.com_lock = QMutex()
     if self.setupBusses():
         self.setupSignals()
     else:
         self.errHandler()
         return
예제 #5
0
파일: ComarIface.py 프로젝트: Tayyib/uludag
    def __init__(self,parent):
        self.parent = parent
        self.com = comar.Link()

        # tray and package-manager synchronization
        self.com_lock = QMutex()

        # Notification
        self.com.ask_notify("System.Manager.progress")
        self.com.ask_notify("System.Manager.error")
        self.com.ask_notify("System.Manager.warning")
        self.com.ask_notify("System.Manager.info")
        self.com.ask_notify("System.Manager.notify")
        self.com.ask_notify("System.Manager.finished")
        self.com.ask_notify("System.Manager.updatingRepo")

        self.notifier = QSocketNotifier(self.com.sock.fileno(), QSocketNotifier.Read)

        self.parent.connect(self.notifier, SIGNAL("activated(int)"), self.parent.slotComar)
예제 #6
0
파일: PisiIface.py 프로젝트: Tayyib/uludag
 def __init__(self, source=REPO):
     if not self.initialized():
         self.source = source
         self.com_lock = QMutex()
         self.initComar()
         self.initDB()
예제 #7
0
파일: PisiIface.py 프로젝트: Tayyib/uludag
class Iface(Singleton):

    (SYSTEM, REPO) = range(2)

    def __init__(self, source=REPO):
        if not self.initialized():
            self.source = source
            self.com_lock = QMutex()
            self.initComar()
            self.initDB()

    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.idb  = pisi.db.installdb.InstallDB()
        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):
        logger.debug("Installing packages: %s" % packages)
        packages = string.join(packages,",")
        self.com_lock.lock()
        self.link.System.Manager["pisi"].installPackage(packages, async=self.handler, timeout=2**16-1)

    def removePackages(self, packages):
        logger.debug("Removing packages: %s" % packages)
        packages = string.join(packages,",")
        self.com_lock.lock()
        self.link.System.Manager["pisi"].removePackage(packages, async=self.handler, timeout=2**16-1)

    def upgradePackages(self, packages):
        logger.debug("Upgrading packages: %s" % packages)
        packages = string.join(packages,",")
        self.com_lock.lock()
        self.link.System.Manager["pisi"].updatePackage(packages, async=self.handler, timeout=2**16-1)

    def removeRepository(self, repo):
        logger.debug("Removing repository: %s" % repo)
        self.com_lock.lock()
        self.link.System.Manager["pisi"].removeRepository(repo, async=self.handler, timeout=2**16-1)

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

    def updateRepository(self, repo):
        logger.debug("Updating %s..." % repo)
        self.com_lock.lock()
        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.com_lock.lock()
        self.link.System.Manager["pisi"].clearCache("/var/cache/pisi/packages", limit)

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

    def setRepoActivities(self, repos):
        logger.debug("Re-setting repo activities: %s" % repos)
        self.com_lock.lock()
        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 getUpdateType(self, pkg):
        (version, release, build) = self.idb.get_version(pkg.name)
        update_types = [i.type for i in pkg.history if pisi.version.Version(i.release) > pisi.version.Version(release)]
        if "security" in update_types:
            return "security"
        elif "critical" in update_types:
            return "critical"
        return "normal"

    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
예제 #8
0
 def __init__(self,parent):
     self.parent = parent
     self.mutex = QMutex()
     QThread.__init__(self)
예제 #9
0
파일: ComarIface.py 프로젝트: Tayyib/uludag
class ComarIface:
    """ Comar Interface to communicate with Comar """
    def __init__(self, handler=None, errHandler=None):
        self.errHandler = errHandler
        self.handler = handler
        # package-manager sync
        self.com_lock = QMutex()
        if self.setupBusses():
            self.setupSignals()
        else:
            self.errHandler()
            return

    def setupBusses(self):
        try:
            # get system and session busses
            self.sysBus = dbus.SystemBus()
            self.sesBus = dbus.SessionBus()
        except dbus.DBusException:
            self.errHandler(i18n("Cannot connect to dbus"))
            return False
        return True

    def setupSignals(self):
        self.sysBus.add_signal_receiver(self.handleSignals, dbus_interface="tr.org.pardus.comar.System.Manager", member_keyword="signal", path_keyword="path")

    def handleSignals(self, *args, **kwargs):
        signal = kwargs["signal"]
        if self.handler:
            self.handler(signal, args)

    def busError(self, exception):
        message = i18n("D-Bus Error") + str(exception)
        self.setupBusses()
        self.errHandler(message)

    def comarAuthError(self, exception):
        self.errHandler(i18n("COMAR Auth Error") + str(exception))

    def comarError(self, exception):
        message = ""
        if not "urlopen error" in exception.message:
            message += i18n("COMAR Error")
        self.errHandler(message + "<br>" + str(exception))

    def cancelError(self):
        message = i18n("You are not authorized for this operation.")
        self.errHandler(message)

    def callMethod(self, method, action, handler, handleErrors, *args):
        ch = CallHandler("System.Manager", method, action, self.sysBus, self.sesBus)

        if handleErrors:
            ch.registerError(self.comarError)
            ch.registerAuthError(self.comarAuthError)
            ch.registerDBusError(self.busError)
            ch.registerCancel(self.cancelError)
        if handler:
            ch.registerDone(handler)

        ch.call(*args)

    def takeSnapshot(self):
        self.com_lock.lock()
        self.callMethod("takeSnapshot", "tr.org.pardus.comar.system.manager.takesnapshot", self.handler, True)

    def takeBack(self, operation):
        self.com_lock.lock()
        self.callMethod("takeBack", "tr.org.pardus.comar.system.manager.takeback", None, True, int(operation))

    def cancel(self):
        obj = self.sysBus.get_object("tr.org.pardus.comar", "/", introspect=False)
        obj.cancel(dbus_interface="tr.org.pardus.comar")
예제 #10
0
파일: ComarIface.py 프로젝트: Tayyib/uludag
class ComarIface:
    def __init__(self,parent):
        self.parent = parent
        self.com = comar.Link()

        # tray and package-manager synchronization
        self.com_lock = QMutex()

        # Notification
        self.com.ask_notify("System.Manager.progress")
        self.com.ask_notify("System.Manager.error")
        self.com.ask_notify("System.Manager.warning")
        self.com.ask_notify("System.Manager.info")
        self.com.ask_notify("System.Manager.notify")
        self.com.ask_notify("System.Manager.finished")
        self.com.ask_notify("System.Manager.updatingRepo")

        self.notifier = QSocketNotifier(self.com.sock.fileno(), QSocketNotifier.Read)

        self.parent.connect(self.notifier, SIGNAL("activated(int)"), self.parent.slotComar)

    def installPackage(self, package):
        self.com_lock.lock()
        self.com.call("System.Manager.installPackage", ["package",package])

    def removePackage(self, package):
        self.com_lock.lock()
        self.com.call("System.Manager.removePackage", ["package",package])

    def updatePackage(self, package):
        self.com_lock.lock()
        self.com.call("System.Manager.updatePackage", ["package",package])

    def updateRepo(self, repo):
        self.com_lock.lock()
        self.com.call("System.Manager.updateRepository", ["repository",repo])

    def updateAllRepos(self, id=0):
        self.com_lock.lock()
        self.com.call("System.Manager.updateAllRepositories", id=id)

    def addRepo(self, name, uri):
        self.com_lock.lock()
        self.com.call("System.Manager.addRepository", ["name",name,"uri",uri])

    def removeRepo(self, repo):
        self.com_lock.lock()
        self.com.call("System.Manager.removeRepo", ["repository",repo])

    def setRepositories(self, repos):
        self.com_lock.lock()
        self.com.call("System.Manager.setRepositories", ["repos",repos])

    def clearCache(self, cacheDir, limit):
        self.com.call("System.Manager.clearCache", ["cacheDir",cacheDir,"limit",limit])

    def setCache(self, enabled=None, limit=None):
        self.com.call("System.Manager.setCache", ["enabled",enabled,"limit",limit])

    def cancel(self):
        self.com.cancel()