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

Source Code for Module osh.command.f

 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{f FUNCTION} 
19   
20  The result obtained by applying C{FUNCTION} to an input sequence is 
21  written as output. 
22   
23  B{Example}: If input contains the sequences C{(1, 2), (3, 4), (5, 6)} 
24  then this command:: 
25   
26      f 'x, y: x + y' 
27   
28  generates the output C{(3,), (7,), (11,)}. 
29  """ 
30   
31  import types 
32   
33  import osh.function 
34  import osh.core 
35   
36  # CLI 
37 -def _f():
38 return _F()
39 40 # API
41 -def f(function):
42 """The result obtained by applying C{FUNCTION} to an input sequence is 43 written as output. 44 """ 45 return _F().process_args(function)
46 47 # f can be used as a generator (function with no args) or 48 # downstream. That's why receive and execute are both defined. 49
50 -class _F(osh.core.Generator):
51 52 _function = None 53 54 55 # object interface 56
57 - def __init__(self):
58 osh.core.Generator.__init__(self, '', (1, 1))
59 60 61 # BaseOp interface 62
63 - def doc(self):
64 return __doc__
65
66 - def setup(self):
67 args = self.args() 68 self._function = args.next_function() 69 if self._function is None or args.has_next(): 70 self.usage()
71
72 - def receive(self, object):
73 # core ensures that we get a tuple (see wrap_if_necessary) 74 self.send(self._function(*object))
75 76 77 # Generator interface 78
79 - def execute(self):
80 self.send(self._function())
81