Package osh :: Package command :: Module select
[frames] | no frames]

Source Code for Module osh.command.select

 1  # osh 
 2  # Copyright (C) Jack Orenstein <jao@geophile.com> 
 3  # 
 4  # This program is free software; you can redistribute it and/or modify 
 5  # it under the terms of the GNU General Public License as published by 
 6  # the Free Software Foundation; either version 2 of the License, or 
 7  # (at your option) any later version. 
 8  # 
 9  # This program is distributed in the hope that it will be useful, 
10  # but WITHOUT ANY WARRANTY; without even the implied warranty of 
11  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
12  # GNU General Public License for more details. 
13  # 
14  # You should have received a copy of the GNU General Public License 
15  # along with this program; if not, write to the Free Software 
16  # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 
17   
18  """C{select FUNCTION} 
19   
20  C{FUNCTION} is applied to input objects. Objects for which C{FUNCTION} 
21  evaluates to true are sent to the output stream. 
22   
23  B{Example}: For the input C{(1,), (2,), (3,), (4,)}, this command:: 
24   
25      select 'x: (x % 2) == 0' 
26   
27  generates the output C{(2,), (4,)}. 
28  """ 
29   
30  import osh.function 
31  import osh.core 
32   
33  # CLI 
34 -def _select():
35 return _Select()
36 37 # API
38 -def select(function):
39 """Input objects for which C{function} evaluates to true are sent to the output stream. 40 """ 41 return _Select().process_args(function)
42
43 -class _Select(osh.core.Op):
44 45 _function = None 46 47 48 # object interface 49
50 - def __init__(self):
51 osh.core.Op.__init__(self, '', (1, 1))
52 53 54 # OshCommand interface 55
56 - def doc(self):
57 return __doc__
58
59 - def setup(self):
60 args = self.args() 61 self._function = args.next_function() 62 if self._function is None or args.has_next(): 63 self.usage()
64 65 66 # Receiver interface 67
68 - def receive(self, object):
69 # core ensures that we get a tuple (see wrap_if_necessary) 70 if self._function(*object): 71 self.send(object)
72