From d91e57c44e923b6b65396515ff878199d43763a1 Mon Sep 17 00:00:00 2001 From: Chris Larson Date: Tue, 7 Dec 2004 20:55:41 +0000 Subject: Initial import. --- build/lib/bb/event.py | 204 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 204 insertions(+) create mode 100644 build/lib/bb/event.py (limited to 'build/lib/bb/event.py') diff --git a/build/lib/bb/event.py b/build/lib/bb/event.py new file mode 100644 index 000000000..dd86e2f44 --- /dev/null +++ b/build/lib/bb/event.py @@ -0,0 +1,204 @@ +#!/usr/bin/env python +# ex:ts=4:sw=4:sts=4:et +# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +""" +BitBake 'Event' implementation + +Classes and functions for manipulating 'events' in the +BitBake build tools. + +Copyright (C) 2003, 2004 Chris Larson + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place, Suite 330, Boston, MA 02111-1307 USA. +""" + +import os, re +class Event: + """Base class for events""" + type = "Event" + +NotHandled = 0 +Handled = 1 +handlers = [] + +def tmpHandler(event): + """Default handler for code events""" + return NotHandled + +def defaultTmpHandler(): + tmp = "def tmpHandler(e):\n\t\"\"\"heh\"\"\"\n\treturn 0" + comp = compile(tmp, "tmpHandler(e)", "exec") + return comp + +def fire(event): + """Fire off an Event""" + for h in handlers: + if type(h).__name__ == "code": + exec(h) + if tmpHandler(event) == Handled: + return Handled + else: + if h(event) == Handled: + return Handled + return NotHandled + +def register(handler): + """Register an Event handler""" + if handler is not None: +# handle string containing python code + if type(handler).__name__ == "str": + return registerCode(handler) +# prevent duplicate registration + if not handler in handlers: + handlers.append(handler) + +def registerCode(handlerStr): + """Register a 'code' Event. + Deprecated interface; call register instead. + + Expects to be passed python code as a string, which will + be passed in turn to compile() and then exec(). Note that + the code will be within a function, so should have had + appropriate tabbing put in place.""" + tmp = "def tmpHandler(e):\n%s" % handlerStr + comp = compile(tmp, "tmpHandler(e)", "exec") +# prevent duplicate registration + if not comp in handlers: + handlers.append(comp) + +def remove(handler): + """Remove an Event handler""" + for h in handlers: + if type(handler).__name__ == "str": + return removeCode(handler) + + if handler is h: + handlers.remove(handler) + +def removeCode(handlerStr): + """Remove a 'code' Event handler + Deprecated interface; call remove instead.""" + tmp = "def tmpHandler(e):\n%s" % handlerStr + comp = compile(tmp, "tmpHandler(e)", "exec") + handlers.remove(comp) + +def getName(e): + """Returns the name of a class or class instance""" + if getattr(e, "__name__", None) == None: + return e.__class__.__name__ + else: + return e.__name__ + + +class PkgBase(Event): + """Base class for package events""" + + def __init__(self, t, d = {}): + self.pkg = t + self.data = d + + def getPkg(self): + return self._pkg + + def setPkg(self, pkg): + self._pkg = pkg + + def getData(self): + return self._data + + def setData(self, data): + self._data = data + + pkg = property(getPkg, setPkg, None, "pkg property") + data = property(getData, setData, None, "data property") + + +class BuildBase(Event): + """Base class for bbmake run events""" + + def __init__(self, n, p, c): + self.name = n + self.pkgs = p + self.cfg = c + + def getPkgs(self): + return self._pkgs + + def setPkgs(self, pkgs): + self._pkgs = pkgs + + def getName(self): + return self._name + + def setName(self, name): + self._name = name + + def getCfg(self): + return self._cfg + + def setCfg(self, cfg): + self._cfg = cfg + + pkgs = property(getPkgs, setPkgs, None, "pkgs property") + name = property(getName, setName, None, "name property") + cfg = property(getCfg, setCfg, None, "cfg property") + + +class DepBase(PkgBase): + """Base class for dependency events""" + + def __init__(self, t, data, d): + self.dep = d + PkgBase.__init__(self, t, data) + + def getDep(self): + return self._dep + + def setDep(self, dep): + self._dep = dep + + dep = property(getDep, setDep, None, "dep property") + + +class PkgStarted(PkgBase): + """Package build started""" + + +class PkgFailed(PkgBase): + """Package build failed""" + + +class PkgSucceeded(PkgBase): + """Package build completed""" + + +class BuildStarted(BuildBase): + """bbmake build run started""" + + +class BuildCompleted(BuildBase): + """bbmake build run completed""" + + +class UnsatisfiedDep(DepBase): + """Unsatisfied Dependency""" + + +class RecursiveDep(DepBase): + """Recursive Dependency""" + + +class MultipleProviders(PkgBase): + """Multiple Providers""" + -- cgit 1.2.3-korg