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 Fluendo, S.L. (www.fluendo.com). 
 6  # All rights reserved. 
 7   
 8  # This file may be distributed and/or modified under the terms of 
 9  # the GNU General Public License version 2 as published by 
10  # the Free Software Foundation. 
11  # This file is distributed without any warranty; without even the implied 
12  # warranty of merchantability or fitness for a particular purpose. 
13  # See "LICENSE.GPL" in the source distribution for more information. 
14   
15  # Licensees having purchased or holding a valid Flumotion Advanced 
16  # Streaming Server license may use this file in accordance with the 
17  # Flumotion Advanced Streaming Server Commercial License Agreement. 
18  # See "LICENSE.Flumotion" in the source distribution for more information. 
19   
20  # Headers in this file shall remain intact. 
21   
22  # this class is a bit of an experiment 
23  # editor's note: "experiment" is an excuse for undocumented and uncommented 
24   
25   
26 -class StateWatcher(object):
27
28 - def __init__(self, state, setters, appenders, removers, 29 setitemers=None, delitemers=None):
30 self.state = state 31 self.setters = setters 32 self.appenders = appenders 33 self.removers = removers 34 self.setitemers = setitemers 35 self.delitemers = delitemers 36 self.shown = False 37 38 state.addListener(self, set_=self.onSet, append=self.onAppend, 39 remove=self.onRemove, setitem=self.onSetItem, 40 delitem=self.onDelItem) 41 42 for k in appenders: 43 for v in state.get(k): 44 self.onAppend(state, k, v)
45
46 - def hide(self):
47 if self.shown: 48 for k in self.setters: 49 self.onSet(self.state, k, None) 50 self.shown = False
51
52 - def show(self):
53 # "show" the watcher by triggering all the registered setters 54 if not self.shown: 55 self.shown = True 56 for k in self.setters: 57 self.onSet(self.state, k, self.state.get(k))
58
59 - def onSet(self, obj, k, v):
60 if self.shown and k in self.setters: 61 self.setters[k](self.state, v)
62
63 - def onAppend(self, obj, k, v):
64 if k in self.appenders: 65 self.appenders[k](self.state, v)
66
67 - def onRemove(self, obj, k, v):
68 if k in self.removers: 69 self.removers[k](self.state, v)
70
71 - def onSetItem(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 onDelItem(self, obj, k, sk, v):
76 if self.shown and k in self.setitemers: 77 self.setitemers[k](self.state, sk, v)
78
79 - def unwatch(self):
80 if self.state: 81 self.hide() 82 for k in self.removers: 83 for v in self.state.get(k): 84 self.onRemove(self.state, k, v) 85 self.state.removeListener(self) 86 self.state = None
87