Revision af6de846
b/kamaki/cli/__init__.py | ||
---|---|---|
32 | 32 |
# interpreted as representing official policies, either expressed |
33 | 33 |
# or implied, of GRNET S.A. |
34 | 34 |
|
35 |
from __future__ import print_function |
|
35 |
#from __future__ import print_function
|
|
36 | 36 |
|
37 | 37 |
import logging |
38 | 38 |
|
b/kamaki/cli/argument.py | ||
---|---|---|
33 | 33 |
|
34 | 34 |
from kamaki.cli.config import Config |
35 | 35 |
from kamaki.cli.errors import CLISyntaxError |
36 |
from argparse import ArgumentParser, ArgumentError |
|
36 | 37 |
|
37 | 38 |
try: |
38 | 39 |
from progress.bar import IncrementalBar |
... | ... | |
277 | 278 |
for name, arg in arguments.items(): |
278 | 279 |
arg.value = getattr(parsed, name, arg.default) |
279 | 280 |
return parsed, unparsed |
281 |
|
|
282 |
|
|
283 |
def init_parser(exe, arguments): |
|
284 |
parser = ArgumentParser(add_help=False) |
|
285 |
parser.prog = '%s <cmd_group> [<cmd_subbroup> ...] <cmd>' % exe |
|
286 |
update_arguments(parser, arguments) |
|
287 |
return parser |
|
288 |
|
|
289 |
|
|
290 |
def update_arguments(parser, arguments): |
|
291 |
for name, argument in arguments.items(): |
|
292 |
try: |
|
293 |
argument.update_parser(parser, name) |
|
294 |
except ArgumentError: |
|
295 |
pass |
/dev/null | ||
---|---|---|
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.clients.quotaholder import QuotaHolderClient |
|
35 |
from kamaki.cli import command |
|
36 |
from kamaki.cli.commands import _command_init |
|
37 |
|
|
38 |
|
|
39 |
API_DESCRIPTION = dict(quotaholder='Quota Holder commands') |
|
40 |
|
|
41 |
|
|
42 |
class _quotaholder_init(_command_init): |
|
43 |
def main(self): |
|
44 |
self.token = self.config.get('quotaholder', 'token')\ |
|
45 |
or self.config.get('global', 'token') |
|
46 |
self.base_url = self.config.get('quotaholder', 'url')\ |
|
47 |
or self.config.get('global', 'url') |
|
48 |
#self.client = QuotaHolderClient(self.base_url, self.token) |
|
49 |
print(self.__class__) |
|
50 |
|
|
51 |
@command() |
|
52 |
class quotaholder_test_specific(_quotaholder_init): |
|
53 |
"""quotaholder test specific""" |
|
54 |
|
|
55 |
def main(self, specify): |
|
56 |
super(self.__class__, self).main() |
|
57 |
|
|
58 |
@command() |
|
59 |
class quotaholder_test_all(_quotaholder_init): |
|
60 |
"""quotaholder test all""" |
|
61 |
|
|
62 |
def main(self): |
|
63 |
super(self.__class__, self).main() |
|
64 |
|
|
65 |
@command() |
|
66 |
class quotaholder_manage(_quotaholder_init): |
|
67 |
"""quotaholder manage""" |
|
68 |
|
|
69 |
def main(self): |
|
70 |
super(self.__class__, self).main() |
b/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 import command |
|
35 |
from kamaki.cli.commands import _command_init |
|
36 |
from kamaki.cli.command_tree import CommandTree |
|
37 |
|
|
38 |
|
|
39 |
API_DESCRIPTION = dict(test='Test sample') |
|
40 |
|
|
41 |
_commands = CommandTree('test', 'Test sample') |
|
42 |
|
|
43 |
|
|
44 |
class _test_init(_command_init): |
|
45 |
def main(self, *args, **kwargs): |
|
46 |
print(self.__class__) |
|
47 |
|
|
48 |
|
|
49 |
@command() |
|
50 |
class test_cmd0(_test_init): |
|
51 |
""" test cmd""" |
|
52 |
|
|
53 |
def main(self, mant): |
|
54 |
super(self.__class__, self).main() |
|
55 |
|
|
56 |
@command() |
|
57 |
class test_cmd_all(_test_init): |
|
58 |
"""test cmd all""" |
|
59 |
|
|
60 |
def main(self): |
|
61 |
super(self.__class__, self).main() |
|
62 |
|
|
63 |
@command() |
|
64 |
class test_cmd_some(_test_init): |
|
65 |
"""test_cmd_some""" |
|
66 |
|
|
67 |
def main(self, opt='lala'): |
|
68 |
super(self.__class__, self).main() |
b/kamaki/cli/new.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 sys import argv |
|
35 |
from os.path import basename |
|
36 |
from kamaki.cli.argument import _arguments, parse_known_args, init_parser |
|
37 |
|
|
38 |
_help = False |
|
39 |
_debug = False |
|
40 |
_verbose = False |
|
41 |
_colors = False |
|
42 |
|
|
43 |
|
|
44 |
def _init_session(arguments): |
|
45 |
global _help |
|
46 |
_help = arguments['help'].value |
|
47 |
global _debug |
|
48 |
_debug = arguments['debug'].value |
|
49 |
global _verbose |
|
50 |
_verbose = arguments['verbose'].value |
|
51 |
global _colors |
|
52 |
_colors = arguments['config'].get('global', 'colors') |
|
53 |
|
|
54 |
|
|
55 |
def one_cmd(): |
|
56 |
print('ONE COMMAND') |
|
57 |
|
|
58 |
|
|
59 |
def interactive_shell(): |
|
60 |
print('INTERACTIVE SHELL') |
|
61 |
|
|
62 |
|
|
63 |
def main(): |
|
64 |
exe = basename(argv[0]) |
|
65 |
parser = init_parser(exe, _arguments) |
|
66 |
parsed, unparsed = parse_known_args(parser, _arguments) |
|
67 |
|
|
68 |
if _arguments['version'].value: |
|
69 |
exit(0) |
|
70 |
|
|
71 |
_init_session(_arguments) |
|
72 |
|
|
73 |
if unparsed: |
|
74 |
one_cmd() |
|
75 |
elif _help: |
|
76 |
parser.print_help() |
|
77 |
else: |
|
78 |
interactive_shell() |
/dev/null | ||
---|---|---|
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.clients import Client |
|
35 |
|
|
36 |
|
|
37 |
class QuotaHolderClient(Client): |
|
38 |
"""Quota Holder client""" |
|
39 |
|
|
40 |
def test_quota(self): |
|
41 |
return self.get('') |
b/setup.py | ||
---|---|---|
40 | 40 |
|
41 | 41 |
|
42 | 42 |
optional = ['ansicolors', 'progress'] |
43 |
required = ['snf-common>=0.10', 'argparse']
|
|
43 |
required = ['snf-common>=0.10'] |
|
44 | 44 |
|
45 | 45 |
setup( |
46 | 46 |
name='kamaki', |
... | ... | |
52 | 52 |
packages=['kamaki', 'kamaki.clients', 'kamaki.clients.connection', 'kamaki.cli', 'kamaki.cli.commands'], |
53 | 53 |
include_package_data=True, |
54 | 54 |
entry_points={ |
55 |
'console_scripts': ['kamaki = kamaki.cli:main'] |
|
55 |
'console_scripts': ['kamaki = kamaki.cli:main', 'newmaki = kamaki.cli.new:main']
|
|
56 | 56 |
}, |
57 | 57 |
install_requires=required |
58 | 58 |
) |
Also available in: Unified diff