Package flumotion :: Package component :: Package base :: Module statewatcher
[hide private]

Source Code for Module flumotion.component.base.statewatcher

 1  # -*- Mode: Python; test-case-name: flumotion.test.test_feedcomponent010 -*- 
 2  # vi:si:et:sw=4:sts=4:ts=4 
 3   
 4  # Flumotion - a streaming media server 
 5  # Copyright (C) 2004,2005,2006,2007,2008,2009 Fluendo, S.L. 
 6  # Copyright (C) 2010,2011 Flumotion Services, S.A. 
 7  # All rights reserved. 
 8  # 
 9  # This file may be distributed and/or modified under the terms of 
10  # the GNU Lesser General Public License version 2.1 as published by 
11  # the Free Software Foundation. 
12  # This file is distributed without any warranty; without even the implied 
13  # warranty of merchantability or fitness for a particular purpose. 
14  # See "LICENSE.LGPL" in the source distribution for more information. 
15  # 
16  # Headers in this file shall remain intact. 
17   
18  # this class is a bit of an experiment 
19  # editor's note: "experiment" is an excuse for undocumented and uncommented 
20   
21   
22 -class StateWatcher(object):
23
24 - def __init__(self, state, setters, appenders, removers, 25 setitemers=None, delitemers=None):
26 self.state = state 27 self.setters = setters 28 self.appenders = appenders 29 self.removers = removers 30 self.setitemers = setitemers 31 self.delitemers = delitemers 32 self.shown = False 33 34 state.addListener(self, set_=self.onSet, append=self.onAppend, 35 remove=self.onRemove, setitem=self.onSetItem, 36 delitem=self.onDelItem) 37 38 for k in appenders: 39 for v in state.get(k): 40 self.onAppend(state, k, v)
41
42 - def hide(self):
43 if self.shown: 44 for k in self.setters: 45 self.onSet(self.state, k, None) 46 self.shown = False
47
48 - def show(self):
49 # "show" the watcher by triggering all the registered setters 50 if not self.shown: 51 self.shown = True 52 for k in self.setters: 53 self.onSet(self.state, k, self.state.get(k))
54
55 - def onSet(self, obj, k, v):
56 if self.shown and k in self.setters: 57 self.setters[k](self.state, v)
58
59 - def onAppend(self, obj, k, v):
60 if k in self.appenders: 61 self.appenders[k](self.state, v)
62
63 - def onRemove(self, obj, k, v):
64 if k in self.removers: 65 self.removers[k](self.state, v)
66
67 - def onSetItem(self, obj, k, sk, v):
68 if self.shown and k in self.setitemers: 69 self.setitemers[k](self.state, sk, v)
70
71 - def onDelItem(self, obj, k, sk, v):
72 if self.shown and k in self.setitemers: 73 self.setitemers[k](self.state, sk, v)
74
75 - def unwatch(self):
76 if self.state: 77 self.hide() 78 for k in self.removers: 79 for v in self.state.get(k): 80 self.onRemove(self.state, k, v) 81 self.state.removeListener(self) 82 self.state = None
83