From fc1d47d222e76e1c89b8c022f7f285bddbc17f96 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Guido=20G=C3=BCnther?= Date: Sat, 8 Jan 2011 13:33:31 +0100 Subject: [PATCH] Add Tristate class that allows for on, off and auto Git-Dch: Ignore --- gbp/tristate.py | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 gbp/tristate.py diff --git a/gbp/tristate.py b/gbp/tristate.py new file mode 100644 index 0000000..ae47d03 --- /dev/null +++ b/gbp/tristate.py @@ -0,0 +1,65 @@ +# vim: set fileencoding=utf-8 : +# +# (C) 2011 Guido Guenther +# 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 + +class Tristate(object): + """Tri-state value: on, off or auto""" + AUTO = -1 + ON = True + OFF = False + # We accept true as alias for on and false as alias for off + _VALID_NAMES = [ 'on', 'off', 'true', 'false', 'auto' ] + + def __init__(self, val): + if type(val) in [ type(t) for t in (True, 1) ]: + if val > 0: + self._state = self.ON + elif val < 0: + self._state = self.AUTO + else: + self._state = self.OFF + elif type(val) in [ type(t) for t in ("", u"") ]: + if val.lower() in [ 'on', 'true' ]: + self._state = self.ON + elif val.lower() in [ 'auto' ]: + self._state = self.AUTO + else: + self._state = self.OFF + else: + raise TypeError + + def __repr__(self): + if self._state == ON: + return "on" + elif self._state == AUTO: + return "auto" + else: + return "off" + + @classmethod + def is_valid_state(self, stat): + if state.lower() in self._VALID_NAMES: + return True + + def is_auto(self): + return [False, True][self._state == self.AUTO] + + def is_on(self): + return [False, True][self._state == self.ON] + + def is_off(self): + return [False, True][self._state == self.OFF] + -- 2.7.4