e7c252c5b1b3061f699bc21dd884394a10c11647
[kamaki] / kamaki / cli / commands / test_cli.py
1 # Copyright 2012-2013 GRNET S.A. All rights reserved.
2 #
3 # Redistribution and use in source and binary forms, with or
4 # without modification, are permitted provided that the following
5 # conditions are met:
6 #
7 #   1. Redistributions of source code must retain the above
8 #      copyright notice, this list of conditions and the following
9 #      disclaimer.
10 #
11 #   2. Redistributions in binary form must reproduce the above
12 #      copyright notice, this list of conditions and the following
13 #      disclaimer in the documentation and/or other materials
14 #      provided with the distribution.
15 #
16 # THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 # POSSIBILITY OF SUCH DAMAGE.
28 #
29 # The views and conclusions contained in the software and
30 # documentation are those of the authors and should not be
31 # interpreted as representing official policies, either expressed
32 # or implied, of GRNET S.A.command
33
34 from kamaki.cli.new import get_cmd_terms  # , command
35 from kamaki.cli.commands import _command_init
36 from kamaki.cli.command_tree import CommandTree
37 from kamaki.cli.argument import FlagArgument
38
39 #API_DESCRIPTION = dict(test='Test sample')
40
41 _commands = [
42     CommandTree('sample', 'Sample commands for developing your own'),
43     CommandTree('test', 'Test commands for testing clients')
44 ]
45
46
47 print('Command Terms: ', get_cmd_terms())
48
49
50 def command(cmd_tree_list, prefix='', descedants_depth=1):
51     def wrap(cls):
52         cls_name = cls.__name__
53
54         cmd_tree = _commands[0] if cls_name.startswith('sample')\
55             else _commands[1]
56         if not cmd_tree:
57             return cls
58
59         cls.description, sep, cls.long_description\
60         = cls.__doc__.partition('\n')
61         from kamaki.cli.new import _construct_command_syntax
62         _construct_command_syntax(cls)
63
64         cmd_tree.add_command(cls_name, cls.description, cls)
65         return cls
66     return wrap
67
68
69 class _test_init(_command_init):
70
71     def main(self, *args, **kwargs):
72         print(self.__class__)
73         for v in args:
74             print('\t\targ: %s' % v)
75         for k, v in kwargs.items():
76             print('\t\tkwarg: %s: %s' % (k, v))
77
78
79 @command(cmd_tree_list=_commands)
80 class sample_cmd0(_test_init):
81     """ test cmd
82     This is the zero command test and this is the long description of it
83     """
84
85     def main(self, mant):
86         super(self.__class__, self).main(mant)
87
88
89 @command(cmd_tree_list=_commands)
90 class sample_cmd_all(_test_init):
91     """test cmd all"""
92
93     def main(self):
94         super(self.__class__, self).main()
95
96
97 @command(cmd_tree_list=_commands)
98 class sample_cmd_some(_test_init):
99     """test_cmd_some"""
100
101     def main(self, opt='lala'):
102         super(self.__class__, self).main(opt=opt)
103
104
105 @command(cmd_tree_list=_commands)
106 class test_cmd0(_test_init):
107     """ test cmd"""
108
109     def main(self, mant):
110         super(self.__class__, self).main(mant)
111
112
113 @command(cmd_tree_list=_commands)
114 class test_cmd_all(_test_init):
115     """test cmd all"""
116
117     def __init__(self, arguments={}):
118         super(self.__class__, self).__init__(arguments)
119         self.arguments['testarg'] = FlagArgument('a test arg', '--test')
120
121     def main(self):
122         super(self.__class__, self).main()
123
124
125 @command(cmd_tree_list=_commands)
126 class test_cmdion(_test_init):
127     """test_cmd_some"""
128
129     def main(self, opt='lala'):
130         super(self.__class__, self).main(opt=opt)
131
132
133 @command(cmd_tree_list=_commands)
134 class test_cmd_cmdion_comedian(_test_init):
135     """test_cmd_some"""
136
137     def main(self, opt='lala'):
138         super(self.__class__, self).main(opt=opt)