Statistics
| Branch: | Tag: | Revision:

root / kamaki / cli / commands / snf-astakos.py @ 95482dab

History | View | Annotate | Download (24.4 kB)

1 97fc1e06 Stavros Sachtouris
# Copyright 2013 GRNET S.A. All rights reserved.
2 97fc1e06 Stavros Sachtouris
#
3 97fc1e06 Stavros Sachtouris
# Redistribution and use in source and binary forms, with or
4 97fc1e06 Stavros Sachtouris
# without modification, are permitted provided that the following
5 97fc1e06 Stavros Sachtouris
# conditions are met:
6 97fc1e06 Stavros Sachtouris
#
7 97fc1e06 Stavros Sachtouris
#   1. Redistributions of source code must retain the above
8 97fc1e06 Stavros Sachtouris
#      copyright notice, this list of conditions and the following
9 97fc1e06 Stavros Sachtouris
#      disclaimer.
10 97fc1e06 Stavros Sachtouris
#
11 97fc1e06 Stavros Sachtouris
#   2. Redistributions in binary form must reproduce the above
12 97fc1e06 Stavros Sachtouris
#      copyright notice, this list of conditions and the following
13 97fc1e06 Stavros Sachtouris
#      disclaimer in the documentation and/or other materials
14 97fc1e06 Stavros Sachtouris
#      provided with the distribution.
15 97fc1e06 Stavros Sachtouris
#
16 97fc1e06 Stavros Sachtouris
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 97fc1e06 Stavros Sachtouris
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 97fc1e06 Stavros Sachtouris
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 97fc1e06 Stavros Sachtouris
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 97fc1e06 Stavros Sachtouris
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 97fc1e06 Stavros Sachtouris
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 97fc1e06 Stavros Sachtouris
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 97fc1e06 Stavros Sachtouris
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 97fc1e06 Stavros Sachtouris
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 97fc1e06 Stavros Sachtouris
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 97fc1e06 Stavros Sachtouris
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 97fc1e06 Stavros Sachtouris
# POSSIBILITY OF SUCH DAMAGE.
28 97fc1e06 Stavros Sachtouris
#
29 97fc1e06 Stavros Sachtouris
# The views and conclusions contained in the software and
30 97fc1e06 Stavros Sachtouris
# documentation are those of the authors and should not be
31 97fc1e06 Stavros Sachtouris
# interpreted as representing official policies, either expressed
32 97fc1e06 Stavros Sachtouris
# or implied, of GRNET S.A.command
33 97fc1e06 Stavros Sachtouris
34 0ff9b312 Stavros Sachtouris
from json import loads, load
35 0ff9b312 Stavros Sachtouris
from sys import stdin
36 0ff9b312 Stavros Sachtouris
from os.path import abspath
37 84b0517f Stavros Sachtouris
38 d1d0cec9 Stavros Sachtouris
from astakosclient import AstakosClient, AstakosClientException
39 97fc1e06 Stavros Sachtouris
40 97fc1e06 Stavros Sachtouris
from kamaki.cli import command
41 82e32e50 Stavros Sachtouris
from kamaki.cli.errors import CLIBaseUrlError
42 b4f69041 Stavros Sachtouris
from kamaki.cli.commands import (
43 b4f69041 Stavros Sachtouris
    _command_init, errors, _optional_json, addLogSettings)
44 97fc1e06 Stavros Sachtouris
from kamaki.cli.command_tree import CommandTree
45 31618e2a Stavros Sachtouris
from kamaki.cli.utils import print_dict, format_size
46 683335b1 Stavros Sachtouris
from kamaki.cli.argument import FlagArgument, ValueArgument
47 0155548b Stavros Sachtouris
from kamaki.cli.argument import CommaSeparatedListArgument
48 9b47150e Stavros Sachtouris
from kamaki.cli.logger import get_logger
49 97fc1e06 Stavros Sachtouris
50 97fc1e06 Stavros Sachtouris
snfastakos_cmds = CommandTree('astakos', 'astakosclient CLI')
51 0ff9b312 Stavros Sachtouris
snfproject_cmds = CommandTree('project', 'Synnefo project management CLI')
52 0ff9b312 Stavros Sachtouris
_commands = [snfastakos_cmds, snfproject_cmds]
53 97fc1e06 Stavros Sachtouris
54 97fc1e06 Stavros Sachtouris
55 d1d0cec9 Stavros Sachtouris
def astakoserror(foo):
56 d1d0cec9 Stavros Sachtouris
    def _raise(self, *args, **kwargs):
57 d1d0cec9 Stavros Sachtouris
        try:
58 d1d0cec9 Stavros Sachtouris
            return foo(self, *args, **kwargs)
59 d1d0cec9 Stavros Sachtouris
        except AstakosClientException as ace:
60 d1d0cec9 Stavros Sachtouris
            try:
61 d1d0cec9 Stavros Sachtouris
                ace.details = ['%s' % ace.details]
62 d1d0cec9 Stavros Sachtouris
            except Exception:
63 d1d0cec9 Stavros Sachtouris
                pass
64 d1d0cec9 Stavros Sachtouris
            finally:
65 d1d0cec9 Stavros Sachtouris
                raise ace
66 d1d0cec9 Stavros Sachtouris
    return _raise
67 d1d0cec9 Stavros Sachtouris
68 d1d0cec9 Stavros Sachtouris
69 97fc1e06 Stavros Sachtouris
class _astakos_init(_command_init):
70 97fc1e06 Stavros Sachtouris
71 b4f69041 Stavros Sachtouris
    def __init__(self, arguments=dict(), auth_base=None, cloud=None):
72 b4f69041 Stavros Sachtouris
        super(_astakos_init, self).__init__(arguments, auth_base, cloud)
73 683335b1 Stavros Sachtouris
        self['token'] = ValueArgument('Custom token', '--token')
74 683335b1 Stavros Sachtouris
75 97fc1e06 Stavros Sachtouris
    @errors.generic.all
76 d1d0cec9 Stavros Sachtouris
    @astakoserror
77 b4f69041 Stavros Sachtouris
    @addLogSettings
78 97fc1e06 Stavros Sachtouris
    def _run(self):
79 b4f69041 Stavros Sachtouris
        self.cloud = self.cloud if self.cloud else 'default'
80 b4f69041 Stavros Sachtouris
        self.token = self['token'] or self._custom_token('astakos')\
81 144b3551 Stavros Sachtouris
            or self.config.get_cloud(self.cloud, 'token')
82 82e32e50 Stavros Sachtouris
        if getattr(self, 'auth_base', False):
83 82e32e50 Stavros Sachtouris
            astakos_endpoints = self.auth_base.get_service_endpoints(
84 b4f69041 Stavros Sachtouris
                self._custom_type('astakos') or 'identity',
85 b4f69041 Stavros Sachtouris
                self._custom_version('astakos') or '')
86 31618e2a Stavros Sachtouris
            base_url = astakos_endpoints['SNF:uiURL']
87 0155548b Stavros Sachtouris
            base_url = base_url[:-3]
88 0155548b Stavros Sachtouris
            #base_url = ''.join(base_url.split('/ui'))
89 82e32e50 Stavros Sachtouris
        else:
90 b4f69041 Stavros Sachtouris
            base_url = self._custom_url('astakos')
91 82e32e50 Stavros Sachtouris
        if not base_url:
92 82e32e50 Stavros Sachtouris
            raise CLIBaseUrlError(service='astakos')
93 556e6916 Stavros Sachtouris
        self.client = AstakosClient(
94 556e6916 Stavros Sachtouris
            base_url, logger=get_logger('kamaki.clients'))
95 97fc1e06 Stavros Sachtouris
96 97fc1e06 Stavros Sachtouris
    def main(self):
97 97fc1e06 Stavros Sachtouris
        self._run()
98 97fc1e06 Stavros Sachtouris
99 97fc1e06 Stavros Sachtouris
100 97fc1e06 Stavros Sachtouris
@command(snfastakos_cmds)
101 d1d0cec9 Stavros Sachtouris
class astakos_user_info(_astakos_init, _optional_json):
102 97fc1e06 Stavros Sachtouris
    """Authenticate a user
103 97fc1e06 Stavros Sachtouris
    Get user information (e.g. unique account name) from token
104 97fc1e06 Stavros Sachtouris
    Token should be set in settings:
105 144b3551 Stavros Sachtouris
    *  check if a token is set    /config get cloud.default.token
106 144b3551 Stavros Sachtouris
    *  permanently set a token    /config set cloud.default.token <token>
107 97fc1e06 Stavros Sachtouris
    Token can also be provided as a parameter
108 144b3551 Stavros Sachtouris
    (To use a named cloud, use its name instead of "default")
109 97fc1e06 Stavros Sachtouris
    """
110 97fc1e06 Stavros Sachtouris
111 97fc1e06 Stavros Sachtouris
    arguments = dict(
112 97fc1e06 Stavros Sachtouris
        usage=FlagArgument('also return usage information', ('--with-usage'))
113 97fc1e06 Stavros Sachtouris
    )
114 97fc1e06 Stavros Sachtouris
115 d1d0cec9 Stavros Sachtouris
    @errors.generic.all
116 d1d0cec9 Stavros Sachtouris
    @astakoserror
117 683335b1 Stavros Sachtouris
    def _run(self):
118 97fc1e06 Stavros Sachtouris
        self._print(
119 e1c18867 Stavros Sachtouris
            self.client.get_user_info(self.token, self['usage']), print_dict)
120 97fc1e06 Stavros Sachtouris
121 683335b1 Stavros Sachtouris
    def main(self):
122 683335b1 Stavros Sachtouris
        super(self.__class__, self)._run()
123 683335b1 Stavros Sachtouris
        self._run()
124 683335b1 Stavros Sachtouris
125 683335b1 Stavros Sachtouris
126 683335b1 Stavros Sachtouris
@command(snfastakos_cmds)
127 d1d0cec9 Stavros Sachtouris
class astakos_user_name(_astakos_init, _optional_json):
128 683335b1 Stavros Sachtouris
    """Get username(s) from uuid(s)"""
129 683335b1 Stavros Sachtouris
130 683335b1 Stavros Sachtouris
    arguments = dict(
131 683335b1 Stavros Sachtouris
        service_token=ValueArgument(
132 683335b1 Stavros Sachtouris
            'Use service token instead', '--service-token')
133 683335b1 Stavros Sachtouris
    )
134 683335b1 Stavros Sachtouris
135 d1d0cec9 Stavros Sachtouris
    @errors.generic.all
136 d1d0cec9 Stavros Sachtouris
    @astakoserror
137 683335b1 Stavros Sachtouris
    def _run(self, uuids):
138 683335b1 Stavros Sachtouris
        assert uuids and isinstance(uuids, list), 'No valid uuids'
139 683335b1 Stavros Sachtouris
        if 1 == len(uuids):
140 683335b1 Stavros Sachtouris
            self._print(self.client.get_username(self.token, uuids[0]))
141 683335b1 Stavros Sachtouris
        else:
142 683335b1 Stavros Sachtouris
            self._print(
143 9d3cd179 Stavros Sachtouris
                self.client.get_usernames(self.token, uuids), print_dict)
144 683335b1 Stavros Sachtouris
145 683335b1 Stavros Sachtouris
    def main(self, uuid, *more_uuids):
146 683335b1 Stavros Sachtouris
        super(self.__class__, self)._run()
147 683335b1 Stavros Sachtouris
        self._run([uuid] + list(more_uuids))
148 683335b1 Stavros Sachtouris
149 683335b1 Stavros Sachtouris
150 683335b1 Stavros Sachtouris
@command(snfastakos_cmds)
151 d1d0cec9 Stavros Sachtouris
class astakos_user_uuid(_astakos_init, _optional_json):
152 683335b1 Stavros Sachtouris
    """Get uuid(s) from username(s)"""
153 683335b1 Stavros Sachtouris
154 d1d0cec9 Stavros Sachtouris
    @errors.generic.all
155 d1d0cec9 Stavros Sachtouris
    @astakoserror
156 683335b1 Stavros Sachtouris
    def _run(self, usernames):
157 683335b1 Stavros Sachtouris
        assert usernames and isinstance(usernames, list), 'No valid usernames'
158 683335b1 Stavros Sachtouris
        if 1 == len(usernames):
159 683335b1 Stavros Sachtouris
            self._print(self.client.get_uuid(self.token, usernames[0]))
160 683335b1 Stavros Sachtouris
        else:
161 683335b1 Stavros Sachtouris
            self._print(
162 683335b1 Stavros Sachtouris
                self.client.get_uuids(self.token, usernames), print_dict)
163 683335b1 Stavros Sachtouris
164 683335b1 Stavros Sachtouris
    def main(self, usernames, *more_usernames):
165 683335b1 Stavros Sachtouris
        super(self.__class__, self)._run()
166 683335b1 Stavros Sachtouris
        self._run([usernames] + list(more_usernames))
167 683335b1 Stavros Sachtouris
168 683335b1 Stavros Sachtouris
169 683335b1 Stavros Sachtouris
@command(snfastakos_cmds)
170 683335b1 Stavros Sachtouris
class astakos_quotas(_astakos_init, _optional_json):
171 683335b1 Stavros Sachtouris
    """Get user (or service) quotas"""
172 683335b1 Stavros Sachtouris
173 31618e2a Stavros Sachtouris
    @staticmethod
174 31618e2a Stavros Sachtouris
    def _print_with_format(d):
175 31618e2a Stavros Sachtouris
        """ Print d with size formating when needed
176 31618e2a Stavros Sachtouris
        :param d: (dict) {system: {<service>: {usage: ..., limit: ..., }, ...}}
177 31618e2a Stavros Sachtouris
        """
178 31618e2a Stavros Sachtouris
        newd = dict()
179 31618e2a Stavros Sachtouris
        for k, service in d['system'].items():
180 31618e2a Stavros Sachtouris
            newd[k] = dict(service)
181 31618e2a Stavros Sachtouris
            for term in ('usage', 'limit'):
182 31618e2a Stavros Sachtouris
                if term in service:
183 31618e2a Stavros Sachtouris
                    newd[k][term] = format_size(service[term])
184 31618e2a Stavros Sachtouris
        print_dict(newd)
185 31618e2a Stavros Sachtouris
186 d1d0cec9 Stavros Sachtouris
    @errors.generic.all
187 d1d0cec9 Stavros Sachtouris
    @astakoserror
188 683335b1 Stavros Sachtouris
    def _run(self):
189 31618e2a Stavros Sachtouris
            self._print(
190 31618e2a Stavros Sachtouris
                self.client.get_quotas(self.token), self._print_with_format)
191 683335b1 Stavros Sachtouris
192 683335b1 Stavros Sachtouris
    def main(self):
193 683335b1 Stavros Sachtouris
        super(self.__class__, self)._run()
194 683335b1 Stavros Sachtouris
        self._run()
195 683335b1 Stavros Sachtouris
196 683335b1 Stavros Sachtouris
197 683335b1 Stavros Sachtouris
@command(snfastakos_cmds)
198 683335b1 Stavros Sachtouris
class astakos_services(_astakos_init):
199 683335b1 Stavros Sachtouris
    """Astakos operations filtered by services"""
200 683335b1 Stavros Sachtouris
201 683335b1 Stavros Sachtouris
202 683335b1 Stavros Sachtouris
@command(snfastakos_cmds)
203 e1c18867 Stavros Sachtouris
class astakos_services_list(_astakos_init, _optional_json):
204 683335b1 Stavros Sachtouris
    """List available services"""
205 683335b1 Stavros Sachtouris
206 d1d0cec9 Stavros Sachtouris
    @errors.generic.all
207 d1d0cec9 Stavros Sachtouris
    @astakoserror
208 683335b1 Stavros Sachtouris
    def _run(self):
209 683335b1 Stavros Sachtouris
        self._print(self.client.get_services())
210 683335b1 Stavros Sachtouris
211 683335b1 Stavros Sachtouris
    def main(self):
212 683335b1 Stavros Sachtouris
        super(self.__class__, self)._run()
213 683335b1 Stavros Sachtouris
        self._run()
214 683335b1 Stavros Sachtouris
215 683335b1 Stavros Sachtouris
216 683335b1 Stavros Sachtouris
@command(snfastakos_cmds)
217 683335b1 Stavros Sachtouris
class astakos_services_username(_astakos_init, _optional_json):
218 683335b1 Stavros Sachtouris
    """Get service username(s) from uuid(s)"""
219 683335b1 Stavros Sachtouris
220 d1d0cec9 Stavros Sachtouris
    @errors.generic.all
221 d1d0cec9 Stavros Sachtouris
    @astakoserror
222 683335b1 Stavros Sachtouris
    def _run(self, stoken, uuids):
223 683335b1 Stavros Sachtouris
        assert uuids and isinstance(uuids, list), 'No valid uuids'
224 683335b1 Stavros Sachtouris
        if 1 == len(uuids):
225 683335b1 Stavros Sachtouris
            self._print(self.client.service_get_username(stoken, uuids[0]))
226 683335b1 Stavros Sachtouris
        else:
227 683335b1 Stavros Sachtouris
            self._print(
228 683335b1 Stavros Sachtouris
                self.client.service_get_usernames(stoken, uuids), print_dict)
229 683335b1 Stavros Sachtouris
230 683335b1 Stavros Sachtouris
    def main(self, service_token, uuid, *more_uuids):
231 683335b1 Stavros Sachtouris
        super(self.__class__, self)._run()
232 683335b1 Stavros Sachtouris
        self._run(service_token, [uuid] + list(more_uuids))
233 683335b1 Stavros Sachtouris
234 683335b1 Stavros Sachtouris
235 683335b1 Stavros Sachtouris
@command(snfastakos_cmds)
236 683335b1 Stavros Sachtouris
class astakos_services_uuid(_astakos_init, _optional_json):
237 683335b1 Stavros Sachtouris
    """Get service uuid(s) from username(s)"""
238 683335b1 Stavros Sachtouris
239 d1d0cec9 Stavros Sachtouris
    @errors.generic.all
240 d1d0cec9 Stavros Sachtouris
    @astakoserror
241 683335b1 Stavros Sachtouris
    def _run(self, stoken, usernames):
242 683335b1 Stavros Sachtouris
        assert usernames and isinstance(usernames, list), 'No valid usernames'
243 683335b1 Stavros Sachtouris
        if 1 == len(usernames):
244 683335b1 Stavros Sachtouris
            self._print(self.client.service_get_uuid(self.token, usernames[0]))
245 683335b1 Stavros Sachtouris
        else:
246 683335b1 Stavros Sachtouris
            self._print(
247 683335b1 Stavros Sachtouris
                self.client.service_get_uuids(self.token, usernames),
248 683335b1 Stavros Sachtouris
                print_dict)
249 683335b1 Stavros Sachtouris
250 683335b1 Stavros Sachtouris
    def main(self, service_token, usernames, *more_usernames):
251 683335b1 Stavros Sachtouris
        super(self.__class__, self)._run()
252 683335b1 Stavros Sachtouris
        self._run(service_token, [usernames] + list(more_usernames))
253 683335b1 Stavros Sachtouris
254 683335b1 Stavros Sachtouris
255 683335b1 Stavros Sachtouris
@command(snfastakos_cmds)
256 683335b1 Stavros Sachtouris
class astakos_services_quotas(_astakos_init, _optional_json):
257 683335b1 Stavros Sachtouris
    """Get user (or service) quotas"""
258 683335b1 Stavros Sachtouris
259 683335b1 Stavros Sachtouris
    arguments = dict(
260 683335b1 Stavros Sachtouris
        uuid=ValueArgument('A user unique id to get quotas for', '--uuid')
261 683335b1 Stavros Sachtouris
    )
262 683335b1 Stavros Sachtouris
263 d1d0cec9 Stavros Sachtouris
    @errors.generic.all
264 d1d0cec9 Stavros Sachtouris
    @astakoserror
265 683335b1 Stavros Sachtouris
    def _run(self, stoken):
266 683335b1 Stavros Sachtouris
        self._print(self.client.service_get_quotas(stoken, self['uuid']))
267 683335b1 Stavros Sachtouris
268 683335b1 Stavros Sachtouris
    def main(self, service_token):
269 97fc1e06 Stavros Sachtouris
        super(self.__class__, self)._run()
270 683335b1 Stavros Sachtouris
        self._run(service_token)
271 d1d0cec9 Stavros Sachtouris
272 d1d0cec9 Stavros Sachtouris
273 d1d0cec9 Stavros Sachtouris
@command(snfastakos_cmds)
274 d1d0cec9 Stavros Sachtouris
class astakos_resources(_astakos_init, _optional_json):
275 d1d0cec9 Stavros Sachtouris
    """List user resources"""
276 d1d0cec9 Stavros Sachtouris
277 d1d0cec9 Stavros Sachtouris
    @errors.generic.all
278 d1d0cec9 Stavros Sachtouris
    @astakoserror
279 d1d0cec9 Stavros Sachtouris
    def _run(self):
280 d1d0cec9 Stavros Sachtouris
        self._print(self.client.get_resources(), print_dict)
281 d1d0cec9 Stavros Sachtouris
282 d1d0cec9 Stavros Sachtouris
    def main(self):
283 d1d0cec9 Stavros Sachtouris
        super(self.__class__, self)._run()
284 d1d0cec9 Stavros Sachtouris
        self._run()
285 d1d0cec9 Stavros Sachtouris
286 d1d0cec9 Stavros Sachtouris
287 d1d0cec9 Stavros Sachtouris
@command(snfastakos_cmds)
288 d1d0cec9 Stavros Sachtouris
class astakos_feedback(_astakos_init):
289 d1d0cec9 Stavros Sachtouris
    """Send feedback to astakos server"""
290 d1d0cec9 Stavros Sachtouris
291 d1d0cec9 Stavros Sachtouris
    @errors.generic.all
292 d1d0cec9 Stavros Sachtouris
    @astakoserror
293 d1d0cec9 Stavros Sachtouris
    def _run(self, msg, more_info=None):
294 0155548b Stavros Sachtouris
        self.client.send_feedback(self.token, msg, more_info or '')
295 d1d0cec9 Stavros Sachtouris
296 d1d0cec9 Stavros Sachtouris
    def main(self, message, more_info=None):
297 d1d0cec9 Stavros Sachtouris
        super(self.__class__, self)._run()
298 d1d0cec9 Stavros Sachtouris
        self._run(message, more_info)
299 d1d0cec9 Stavros Sachtouris
300 d1d0cec9 Stavros Sachtouris
301 d1d0cec9 Stavros Sachtouris
@command(snfastakos_cmds)
302 d1d0cec9 Stavros Sachtouris
class astakos_endpoints(_astakos_init, _optional_json):
303 d1d0cec9 Stavros Sachtouris
    """Get endpoints service endpoints"""
304 d1d0cec9 Stavros Sachtouris
305 0155548b Stavros Sachtouris
    arguments = dict(uuid=ValueArgument('User uuid', '--uuid'))
306 0155548b Stavros Sachtouris
307 0155548b Stavros Sachtouris
    @errors.generic.all
308 0155548b Stavros Sachtouris
    @astakoserror
309 0155548b Stavros Sachtouris
    def _run(self):
310 0155548b Stavros Sachtouris
        self._print(
311 0155548b Stavros Sachtouris
            self.client.get_endpoints(self.token, self['uuid']),
312 0155548b Stavros Sachtouris
            print_dict)
313 0155548b Stavros Sachtouris
314 0155548b Stavros Sachtouris
    def main(self):
315 0155548b Stavros Sachtouris
        super(self.__class__, self)._run()
316 0155548b Stavros Sachtouris
        self._run()
317 0155548b Stavros Sachtouris
318 0155548b Stavros Sachtouris
319 0155548b Stavros Sachtouris
@command(snfastakos_cmds)
320 0155548b Stavros Sachtouris
class astakos_commission(_astakos_init):
321 0155548b Stavros Sachtouris
    """Manage commissions (special privileges required)"""
322 0155548b Stavros Sachtouris
323 0155548b Stavros Sachtouris
324 0155548b Stavros Sachtouris
@command(snfastakos_cmds)
325 0155548b Stavros Sachtouris
class astakos_commission_pending(_astakos_init, _optional_json):
326 0155548b Stavros Sachtouris
    """List pending commissions (special privileges required)"""
327 0155548b Stavros Sachtouris
328 0155548b Stavros Sachtouris
    @errors.generic.all
329 0155548b Stavros Sachtouris
    @astakoserror
330 0155548b Stavros Sachtouris
    def _run(self):
331 0155548b Stavros Sachtouris
        self._print(self.client.get_pending_commissions(self.token))
332 0155548b Stavros Sachtouris
333 0155548b Stavros Sachtouris
    def main(self):
334 0155548b Stavros Sachtouris
        super(self.__class__, self)._run()
335 0155548b Stavros Sachtouris
        self._run()
336 0155548b Stavros Sachtouris
337 0155548b Stavros Sachtouris
338 0155548b Stavros Sachtouris
@command(snfastakos_cmds)
339 0155548b Stavros Sachtouris
class astakos_commission_info(_astakos_init, _optional_json):
340 0155548b Stavros Sachtouris
    """Get commission info (special privileges required)"""
341 0155548b Stavros Sachtouris
342 0155548b Stavros Sachtouris
    @errors.generic.all
343 0155548b Stavros Sachtouris
    @astakoserror
344 0155548b Stavros Sachtouris
    def _run(self, commission_id):
345 0155548b Stavros Sachtouris
        commission_id = int(commission_id)
346 0155548b Stavros Sachtouris
        self._print(
347 0155548b Stavros Sachtouris
            self.client.get_commission_info(self.token, commission_id),
348 0155548b Stavros Sachtouris
            print_dict)
349 0155548b Stavros Sachtouris
350 0155548b Stavros Sachtouris
    def main(self, commission_id):
351 0155548b Stavros Sachtouris
        super(self.__class__, self)._run()
352 0155548b Stavros Sachtouris
        self._run(commission_id)
353 0155548b Stavros Sachtouris
354 0155548b Stavros Sachtouris
355 0155548b Stavros Sachtouris
@command(snfastakos_cmds)
356 0155548b Stavros Sachtouris
class astakos_commission_action(_astakos_init, _optional_json):
357 0155548b Stavros Sachtouris
    """Invoke an action in a commission (special privileges required)
358 0155548b Stavros Sachtouris
    Actions can be accept or reject
359 0155548b Stavros Sachtouris
    """
360 0155548b Stavros Sachtouris
361 0155548b Stavros Sachtouris
    actions = ('accept', 'reject')
362 0155548b Stavros Sachtouris
363 0155548b Stavros Sachtouris
    @errors.generic.all
364 0155548b Stavros Sachtouris
    @astakoserror
365 0155548b Stavros Sachtouris
    def _run(self, commission_id, action):
366 0155548b Stavros Sachtouris
        commission_id = int(commission_id)
367 0155548b Stavros Sachtouris
        action = action.lower()
368 0155548b Stavros Sachtouris
        assert action in self.actions, 'Actions can be %s' % (
369 0155548b Stavros Sachtouris
            ' or '.join(self.actions))
370 0155548b Stavros Sachtouris
        self._print(
371 0155548b Stavros Sachtouris
            self.client.commission_acction(self.token, commission_id, action),
372 0155548b Stavros Sachtouris
            print_dict)
373 0155548b Stavros Sachtouris
374 0155548b Stavros Sachtouris
    def main(self, commission_id, action):
375 0155548b Stavros Sachtouris
        super(self.__class__, self)._run()
376 0155548b Stavros Sachtouris
        self._run(commission_id, action)
377 0155548b Stavros Sachtouris
378 0155548b Stavros Sachtouris
379 0155548b Stavros Sachtouris
@command(snfastakos_cmds)
380 0155548b Stavros Sachtouris
class astakos_commission_accept(_astakos_init):
381 0155548b Stavros Sachtouris
    """Accept a pending commission  (special privileges required)"""
382 0155548b Stavros Sachtouris
383 0155548b Stavros Sachtouris
    @errors.generic.all
384 0155548b Stavros Sachtouris
    @astakoserror
385 0155548b Stavros Sachtouris
    def _run(self, commission_id):
386 0155548b Stavros Sachtouris
        commission_id = int(commission_id)
387 0155548b Stavros Sachtouris
        self.client.accept_commission(self.token, commission_id)
388 0155548b Stavros Sachtouris
389 0155548b Stavros Sachtouris
    def main(self, commission_id):
390 0155548b Stavros Sachtouris
        super(self.__class__, self)._run()
391 0155548b Stavros Sachtouris
        self._run(commission_id)
392 0155548b Stavros Sachtouris
393 0155548b Stavros Sachtouris
394 0155548b Stavros Sachtouris
@command(snfastakos_cmds)
395 0155548b Stavros Sachtouris
class astakos_commission_reject(_astakos_init):
396 0155548b Stavros Sachtouris
    """Reject a pending commission  (special privileges required)"""
397 0155548b Stavros Sachtouris
398 0155548b Stavros Sachtouris
    @errors.generic.all
399 0155548b Stavros Sachtouris
    @astakoserror
400 0155548b Stavros Sachtouris
    def _run(self, commission_id):
401 0155548b Stavros Sachtouris
        commission_id = int(commission_id)
402 0155548b Stavros Sachtouris
        self.client.reject_commission(self.token, commission_id)
403 0155548b Stavros Sachtouris
404 0155548b Stavros Sachtouris
    def main(self, commission_id):
405 0155548b Stavros Sachtouris
        super(self.__class__, self)._run()
406 0155548b Stavros Sachtouris
        self._run(commission_id)
407 0155548b Stavros Sachtouris
408 0155548b Stavros Sachtouris
409 0155548b Stavros Sachtouris
@command(snfastakos_cmds)
410 0155548b Stavros Sachtouris
class astakos_commission_resolve(_astakos_init, _optional_json):
411 0155548b Stavros Sachtouris
    """Resolve multiple commissions  (special privileges required)"""
412 0155548b Stavros Sachtouris
413 d1d0cec9 Stavros Sachtouris
    arguments = dict(
414 0155548b Stavros Sachtouris
        accept=CommaSeparatedListArgument(
415 0155548b Stavros Sachtouris
            'commission ids to accept (e.g. --accept=11,12,13,...',
416 0155548b Stavros Sachtouris
            '--accept'),
417 0155548b Stavros Sachtouris
        reject=CommaSeparatedListArgument(
418 0155548b Stavros Sachtouris
            'commission ids to reject (e.g. --reject=11,12,13,...',
419 0155548b Stavros Sachtouris
            '--reject'),
420 d1d0cec9 Stavros Sachtouris
    )
421 d1d0cec9 Stavros Sachtouris
422 d1d0cec9 Stavros Sachtouris
    @errors.generic.all
423 d1d0cec9 Stavros Sachtouris
    @astakoserror
424 d1d0cec9 Stavros Sachtouris
    def _run(self):
425 0155548b Stavros Sachtouris
        print 'accepted ', self['accept']
426 0155548b Stavros Sachtouris
        print 'rejected ', self['reject']
427 d1d0cec9 Stavros Sachtouris
        self._print(
428 0155548b Stavros Sachtouris
            self.client.resolve_commissions(
429 0155548b Stavros Sachtouris
                self.token, self['accept'], self['reject']),
430 d1d0cec9 Stavros Sachtouris
            print_dict)
431 d1d0cec9 Stavros Sachtouris
432 d1d0cec9 Stavros Sachtouris
    def main(self):
433 d1d0cec9 Stavros Sachtouris
        super(self.__class__, self)._run()
434 d1d0cec9 Stavros Sachtouris
        self._run()
435 d1d0cec9 Stavros Sachtouris
436 84b0517f Stavros Sachtouris
437 84b0517f Stavros Sachtouris
@command(snfastakos_cmds)
438 84b0517f Stavros Sachtouris
class astakos_commission_issue(_astakos_init, _optional_json):
439 84b0517f Stavros Sachtouris
    """Issue commissions as a json string (special privileges required)
440 84b0517f Stavros Sachtouris
    Parameters:
441 84b0517f Stavros Sachtouris
    holder      -- user's id (string)
442 84b0517f Stavros Sachtouris
    source      -- commission's source (ex system) (string)
443 84b0517f Stavros Sachtouris
    provisions  -- resources with their quantity (json-dict from string to int)
444 84b0517f Stavros Sachtouris
    name        -- description of the commission (string)
445 84b0517f Stavros Sachtouris
    """
446 84b0517f Stavros Sachtouris
447 84b0517f Stavros Sachtouris
    arguments = dict(
448 84b0517f Stavros Sachtouris
        force=FlagArgument('Force commission', '--force'),
449 84b0517f Stavros Sachtouris
        accept=FlagArgument('Do not wait for verification', '--accept')
450 84b0517f Stavros Sachtouris
    )
451 84b0517f Stavros Sachtouris
452 84b0517f Stavros Sachtouris
    @errors.generic.all
453 84b0517f Stavros Sachtouris
    @astakoserror
454 84b0517f Stavros Sachtouris
    def _run(
455 84b0517f Stavros Sachtouris
            self, holder, source, provisions, name=''):
456 84b0517f Stavros Sachtouris
        provisions = loads(provisions)
457 84b0517f Stavros Sachtouris
        self._print(self.client.issue_one_commission(
458 84b0517f Stavros Sachtouris
            self.token, holder, source, provisions, name,
459 84b0517f Stavros Sachtouris
            self['force'], self['accept']))
460 84b0517f Stavros Sachtouris
461 84b0517f Stavros Sachtouris
    def main(self, holder, source, provisions, name=''):
462 84b0517f Stavros Sachtouris
        super(self.__class__, self)._run()
463 84b0517f Stavros Sachtouris
        self._run(holder, source, provisions, name)
464 84b0517f Stavros Sachtouris
465 84b0517f Stavros Sachtouris
466 84b0517f Stavros Sachtouris
@command(snfastakos_cmds)
467 84b0517f Stavros Sachtouris
class astakos_commission_issuejson(_astakos_init, _optional_json):
468 84b0517f Stavros Sachtouris
    """Issue commissions as a json string (special privileges required)"""
469 84b0517f Stavros Sachtouris
470 84b0517f Stavros Sachtouris
    @errors.generic.all
471 84b0517f Stavros Sachtouris
    @astakoserror
472 84b0517f Stavros Sachtouris
    def _run(self, info_json):
473 84b0517f Stavros Sachtouris
        infodict = loads(info_json)
474 84b0517f Stavros Sachtouris
        self._print(self.client.issue_commission(self.token, infodict))
475 84b0517f Stavros Sachtouris
476 84b0517f Stavros Sachtouris
    def main(self, info_json):
477 84b0517f Stavros Sachtouris
        super(self.__class__, self)._run()
478 84b0517f Stavros Sachtouris
        self._run(info_json)
479 0155548b Stavros Sachtouris
480 0155548b Stavros Sachtouris
# XXX issue_commission, issue_one_commission
481 0155548b Stavros Sachtouris
482 d1d0cec9 Stavros Sachtouris
483 0ff9b312 Stavros Sachtouris
# Project commands
484 0ff9b312 Stavros Sachtouris
485 0ff9b312 Stavros Sachtouris
486 0ff9b312 Stavros Sachtouris
_project_specs = """
487 0ff9b312 Stavros Sachtouris
    {
488 0ff9b312 Stavros Sachtouris
        "name": name,
489 0ff9b312 Stavros Sachtouris
        "owner": uuid,
490 0ff9b312 Stavros Sachtouris
        "homepage": homepage,         # optional
491 0ff9b312 Stavros Sachtouris
        "description": description,   # optional
492 0ff9b312 Stavros Sachtouris
        "comments": comments,         # optional
493 0ff9b312 Stavros Sachtouris
        "start_date": date,           # optional
494 0ff9b312 Stavros Sachtouris
        "end_date": date,
495 0ff9b312 Stavros Sachtouris
        "join_policy": "auto" | "moderated" | "closed",  # default: "moderated"
496 0ff9b312 Stavros Sachtouris
        "leave_policy": "auto" | "moderated" | "closed", # default: "auto"
497 0ff9b312 Stavros Sachtouris
        "resources": {
498 0ff9b312 Stavros Sachtouris
            "cyclades.vm": {
499 0ff9b312 Stavros Sachtouris
                "project_capacity": int or null,
500 0ff9b312 Stavros Sachtouris
                 "member_capacity": int
501 0ff9b312 Stavros Sachtouris
            }
502 0ff9b312 Stavros Sachtouris
        }
503 0ff9b312 Stavros Sachtouris
  }
504 0ff9b312 Stavros Sachtouris
  """
505 0ff9b312 Stavros Sachtouris
506 0ff9b312 Stavros Sachtouris
507 0ff9b312 Stavros Sachtouris
def apply_notification(foo):
508 0ff9b312 Stavros Sachtouris
    def wrap(self, *args, **kwargs):
509 0ff9b312 Stavros Sachtouris
        r = foo(self, *args, **kwargs)
510 0ff9b312 Stavros Sachtouris
        print 'Application is submitted successfully'
511 0ff9b312 Stavros Sachtouris
        return r
512 0ff9b312 Stavros Sachtouris
    return wrap
513 0ff9b312 Stavros Sachtouris
514 0ff9b312 Stavros Sachtouris
515 0ff9b312 Stavros Sachtouris
@command(snfproject_cmds)
516 0ff9b312 Stavros Sachtouris
class project_list(_astakos_init, _optional_json):
517 0ff9b312 Stavros Sachtouris
    """List all projects"""
518 0ff9b312 Stavros Sachtouris
519 0ff9b312 Stavros Sachtouris
    arguments = dict(
520 0ff9b312 Stavros Sachtouris
        name=ValueArgument('Filter by name', ('--with-name', )),
521 0ff9b312 Stavros Sachtouris
        state=ValueArgument('Filter by state', ('--with-state', )),
522 0ff9b312 Stavros Sachtouris
        owner=ValueArgument('Filter by owner', ('--with-owner', ))
523 0ff9b312 Stavros Sachtouris
    )
524 0ff9b312 Stavros Sachtouris
525 0ff9b312 Stavros Sachtouris
    @errors.generic.all
526 0ff9b312 Stavros Sachtouris
    @astakoserror
527 0ff9b312 Stavros Sachtouris
    def _run(self):
528 0ff9b312 Stavros Sachtouris
        self._print(self.client.get_projects(
529 0ff9b312 Stavros Sachtouris
            self.token, self['name'], self['state'], self['owner']))
530 0ff9b312 Stavros Sachtouris
531 0ff9b312 Stavros Sachtouris
    def main(self):
532 0ff9b312 Stavros Sachtouris
        super(self.__class__, self)._run()
533 0ff9b312 Stavros Sachtouris
        self._run()
534 0ff9b312 Stavros Sachtouris
535 0ff9b312 Stavros Sachtouris
536 0ff9b312 Stavros Sachtouris
@command(snfproject_cmds)
537 0ff9b312 Stavros Sachtouris
class project_info(_astakos_init, _optional_json):
538 0ff9b312 Stavros Sachtouris
    """Get details for a project"""
539 0ff9b312 Stavros Sachtouris
540 0ff9b312 Stavros Sachtouris
    @errors.generic.all
541 0ff9b312 Stavros Sachtouris
    @astakoserror
542 0ff9b312 Stavros Sachtouris
    def _run(self, project_id):
543 0ff9b312 Stavros Sachtouris
        self._print(
544 01413001 Giorgos Korfiatis
            self.client.get_project(self.token, project_id), print_dict)
545 0ff9b312 Stavros Sachtouris
546 0ff9b312 Stavros Sachtouris
    def main(self, project_id):
547 0ff9b312 Stavros Sachtouris
        super(self.__class__, self)._run()
548 0ff9b312 Stavros Sachtouris
        self._run(project_id)
549 0ff9b312 Stavros Sachtouris
550 0ff9b312 Stavros Sachtouris
551 0ff9b312 Stavros Sachtouris
@command(snfproject_cmds)
552 0ff9b312 Stavros Sachtouris
class project_create(_astakos_init, _optional_json):
553 0ff9b312 Stavros Sachtouris
    """Apply for a new project (input a json-dict)
554 0ff9b312 Stavros Sachtouris
    Project details must be provided as a json-formated dict from the standard
555 0ff9b312 Stavros Sachtouris
    input, or through a file
556 0ff9b312 Stavros Sachtouris
    """
557 0ff9b312 Stavros Sachtouris
558 0ff9b312 Stavros Sachtouris
    __doc__ += _project_specs
559 0ff9b312 Stavros Sachtouris
560 0ff9b312 Stavros Sachtouris
    arguments = dict(
561 0ff9b312 Stavros Sachtouris
        specs_path=ValueArgument(
562 0ff9b312 Stavros Sachtouris
            'Specification file path (content must be in json)', '--spec-file')
563 0ff9b312 Stavros Sachtouris
    )
564 0ff9b312 Stavros Sachtouris
565 0ff9b312 Stavros Sachtouris
    @errors.generic.all
566 0ff9b312 Stavros Sachtouris
    @astakoserror
567 0ff9b312 Stavros Sachtouris
    @apply_notification
568 0ff9b312 Stavros Sachtouris
    def _run(self):
569 0ff9b312 Stavros Sachtouris
        input_stream = open(abspath(self['specs_path'])) if (
570 0ff9b312 Stavros Sachtouris
            self['specs_path']) else stdin
571 0ff9b312 Stavros Sachtouris
        specs = load(input_stream)
572 0ff9b312 Stavros Sachtouris
        self._print(self.client.create_project(self.token, specs), print_dict)
573 0ff9b312 Stavros Sachtouris
574 0ff9b312 Stavros Sachtouris
    def main(self):
575 0ff9b312 Stavros Sachtouris
        super(self.__class__, self)._run()
576 0ff9b312 Stavros Sachtouris
        self._run()
577 0ff9b312 Stavros Sachtouris
578 0ff9b312 Stavros Sachtouris
579 0ff9b312 Stavros Sachtouris
@command(snfproject_cmds)
580 0ff9b312 Stavros Sachtouris
class project_modify(_astakos_init, _optional_json):
581 0ff9b312 Stavros Sachtouris
    """Modify a project (input a json-dict)
582 0ff9b312 Stavros Sachtouris
    Project details must be provided as a json-formated dict from the standard
583 0ff9b312 Stavros Sachtouris
    input, or through a file
584 0ff9b312 Stavros Sachtouris
    """
585 0ff9b312 Stavros Sachtouris
586 0ff9b312 Stavros Sachtouris
    __doc__ += _project_specs
587 0ff9b312 Stavros Sachtouris
588 0ff9b312 Stavros Sachtouris
    arguments = dict(
589 0ff9b312 Stavros Sachtouris
        specs_path=ValueArgument(
590 0ff9b312 Stavros Sachtouris
            'Specification file path (content must be in json)', '--spec-file')
591 0ff9b312 Stavros Sachtouris
    )
592 0ff9b312 Stavros Sachtouris
593 0ff9b312 Stavros Sachtouris
    @errors.generic.all
594 0ff9b312 Stavros Sachtouris
    @astakoserror
595 0ff9b312 Stavros Sachtouris
    @apply_notification
596 0ff9b312 Stavros Sachtouris
    def _run(self, project_id):
597 0ff9b312 Stavros Sachtouris
        input_stream = open(abspath(self['specs_path'])) if (
598 0ff9b312 Stavros Sachtouris
            self['specs_path']) else stdin
599 0ff9b312 Stavros Sachtouris
        specs = load(input_stream)
600 0ff9b312 Stavros Sachtouris
        self._print(
601 0ff9b312 Stavros Sachtouris
            self.client.modify_project(self.token, project_id, specs),
602 0ff9b312 Stavros Sachtouris
            print_dict)
603 0ff9b312 Stavros Sachtouris
604 0ff9b312 Stavros Sachtouris
    def main(self, project_id):
605 0ff9b312 Stavros Sachtouris
        super(self.__class__, self)._run()
606 0ff9b312 Stavros Sachtouris
        self._run(project_id)
607 0ff9b312 Stavros Sachtouris
608 0ff9b312 Stavros Sachtouris
609 0ff9b312 Stavros Sachtouris
class _project_action(_astakos_init):
610 0ff9b312 Stavros Sachtouris
611 0ff9b312 Stavros Sachtouris
    action = ''
612 0ff9b312 Stavros Sachtouris
613 0ff9b312 Stavros Sachtouris
    @errors.generic.all
614 0ff9b312 Stavros Sachtouris
    @astakoserror
615 0ff9b312 Stavros Sachtouris
    @apply_notification
616 0ff9b312 Stavros Sachtouris
    def _run(self, project_id, quote_a_reason):
617 0ff9b312 Stavros Sachtouris
        self.client.project_action(
618 0ff9b312 Stavros Sachtouris
            self.token, project_id, self.action, quote_a_reason)
619 0ff9b312 Stavros Sachtouris
620 0ff9b312 Stavros Sachtouris
    def main(self, project_id, quote_a_reason=''):
621 0ff9b312 Stavros Sachtouris
        super(_project_action, self)._run()
622 0ff9b312 Stavros Sachtouris
        self._run(project_id, quote_a_reason)
623 0ff9b312 Stavros Sachtouris
624 0ff9b312 Stavros Sachtouris
625 0ff9b312 Stavros Sachtouris
@command(snfproject_cmds)
626 0ff9b312 Stavros Sachtouris
class project_suspend(_project_action):
627 0ff9b312 Stavros Sachtouris
    """Apply for a project suspension"""
628 0ff9b312 Stavros Sachtouris
    action = 'suspend'
629 0ff9b312 Stavros Sachtouris
630 0ff9b312 Stavros Sachtouris
631 0ff9b312 Stavros Sachtouris
@command(snfproject_cmds)
632 0ff9b312 Stavros Sachtouris
class project_unsuspend(_project_action):
633 0ff9b312 Stavros Sachtouris
    """Apply for a project un-suspension"""
634 0ff9b312 Stavros Sachtouris
    action = 'unsuspend'
635 0ff9b312 Stavros Sachtouris
636 0ff9b312 Stavros Sachtouris
637 0ff9b312 Stavros Sachtouris
@command(snfproject_cmds)
638 0ff9b312 Stavros Sachtouris
class project_terminate(_project_action):
639 0ff9b312 Stavros Sachtouris
    """Apply for a project termination"""
640 0ff9b312 Stavros Sachtouris
    action = 'terminate'
641 0ff9b312 Stavros Sachtouris
642 0ff9b312 Stavros Sachtouris
643 0ff9b312 Stavros Sachtouris
@command(snfproject_cmds)
644 0ff9b312 Stavros Sachtouris
class project_reinstate(_project_action):
645 0ff9b312 Stavros Sachtouris
    """Apply for a project reinstatement"""
646 0ff9b312 Stavros Sachtouris
    action = 'reinstate'
647 0ff9b312 Stavros Sachtouris
648 0ff9b312 Stavros Sachtouris
649 0ff9b312 Stavros Sachtouris
@command(snfproject_cmds)
650 0ff9b312 Stavros Sachtouris
class project_application(_project_action):
651 0ff9b312 Stavros Sachtouris
    """Application management commands"""
652 0ff9b312 Stavros Sachtouris
653 0ff9b312 Stavros Sachtouris
654 0ff9b312 Stavros Sachtouris
@command(snfproject_cmds)
655 0ff9b312 Stavros Sachtouris
class project_application_list(_astakos_init, _optional_json):
656 0ff9b312 Stavros Sachtouris
    """List all applications (old and new)"""
657 0ff9b312 Stavros Sachtouris
658 0ff9b312 Stavros Sachtouris
    arguments = dict(
659 0ff9b312 Stavros Sachtouris
        project=ValueArgument('Filter by project id', '--with-project-id')
660 0ff9b312 Stavros Sachtouris
    )
661 0ff9b312 Stavros Sachtouris
662 0ff9b312 Stavros Sachtouris
    @errors.generic.all
663 0ff9b312 Stavros Sachtouris
    @astakoserror
664 0ff9b312 Stavros Sachtouris
    def _run(self):
665 0ff9b312 Stavros Sachtouris
        self._print(self.client.get_applications(self.token, self['project']))
666 0ff9b312 Stavros Sachtouris
667 0ff9b312 Stavros Sachtouris
    def main(self):
668 0ff9b312 Stavros Sachtouris
        super(self.__class__, self)._run()
669 0ff9b312 Stavros Sachtouris
        self._run()
670 0ff9b312 Stavros Sachtouris
671 0ff9b312 Stavros Sachtouris
672 0ff9b312 Stavros Sachtouris
@command(snfproject_cmds)
673 0ff9b312 Stavros Sachtouris
class project_application_info(_astakos_init, _optional_json):
674 0ff9b312 Stavros Sachtouris
    """Get details on an application"""
675 0ff9b312 Stavros Sachtouris
676 0ff9b312 Stavros Sachtouris
    @errors.generic.all
677 0ff9b312 Stavros Sachtouris
    @astakoserror
678 0ff9b312 Stavros Sachtouris
    def _run(self, app_id):
679 0ff9b312 Stavros Sachtouris
        self._print(
680 0ff9b312 Stavros Sachtouris
            self.client.get_application(self.token, app_id), print_dict)
681 0ff9b312 Stavros Sachtouris
682 0ff9b312 Stavros Sachtouris
    def main(self, application_id):
683 0ff9b312 Stavros Sachtouris
        super(self.__class__, self)._run()
684 0ff9b312 Stavros Sachtouris
        self._run(application_id)
685 0ff9b312 Stavros Sachtouris
686 0ff9b312 Stavros Sachtouris
687 0ff9b312 Stavros Sachtouris
class _application_action(_astakos_init):
688 0ff9b312 Stavros Sachtouris
689 0ff9b312 Stavros Sachtouris
    action = ''
690 0ff9b312 Stavros Sachtouris
691 0ff9b312 Stavros Sachtouris
    @errors.generic.all
692 0ff9b312 Stavros Sachtouris
    @astakoserror
693 0ff9b312 Stavros Sachtouris
    def _run(self, app_id, quote_a_reason):
694 0ff9b312 Stavros Sachtouris
        self.client.application_action(
695 0ff9b312 Stavros Sachtouris
            self.token, app_id, self.action, quote_a_reason)
696 0ff9b312 Stavros Sachtouris
697 0ff9b312 Stavros Sachtouris
    def main(self, application_id, quote_a_reason=''):
698 0ff9b312 Stavros Sachtouris
        super(_application_action, self)._run()
699 0ff9b312 Stavros Sachtouris
        self._run(application_id, quote_a_reason)
700 0ff9b312 Stavros Sachtouris
701 0ff9b312 Stavros Sachtouris
702 0ff9b312 Stavros Sachtouris
@command(snfproject_cmds)
703 0ff9b312 Stavros Sachtouris
class project_application_approve(_application_action):
704 0ff9b312 Stavros Sachtouris
    """Approve an application (special privileges needed)"""
705 0ff9b312 Stavros Sachtouris
    action = 'approve'
706 0ff9b312 Stavros Sachtouris
707 0ff9b312 Stavros Sachtouris
708 0ff9b312 Stavros Sachtouris
@command(snfproject_cmds)
709 0ff9b312 Stavros Sachtouris
class project_application_deny(_application_action):
710 0ff9b312 Stavros Sachtouris
    """Deny an application (special privileges needed)"""
711 0ff9b312 Stavros Sachtouris
    action = 'deny'
712 0ff9b312 Stavros Sachtouris
713 0ff9b312 Stavros Sachtouris
714 0ff9b312 Stavros Sachtouris
@command(snfproject_cmds)
715 0ff9b312 Stavros Sachtouris
class project_application_dismiss(_application_action):
716 0ff9b312 Stavros Sachtouris
    """Dismiss your denied application"""
717 0ff9b312 Stavros Sachtouris
    action = 'dismiss'
718 0ff9b312 Stavros Sachtouris
719 0ff9b312 Stavros Sachtouris
720 0ff9b312 Stavros Sachtouris
@command(snfproject_cmds)
721 0ff9b312 Stavros Sachtouris
class project_application_cancel(_application_action):
722 0ff9b312 Stavros Sachtouris
    """Cancel your application"""
723 0ff9b312 Stavros Sachtouris
    action = 'cancel'
724 0ff9b312 Stavros Sachtouris
725 0ff9b312 Stavros Sachtouris
726 0ff9b312 Stavros Sachtouris
@command(snfproject_cmds)
727 0ff9b312 Stavros Sachtouris
class project_membership(_astakos_init):
728 0ff9b312 Stavros Sachtouris
    """Project membership management commands"""
729 0ff9b312 Stavros Sachtouris
730 0ff9b312 Stavros Sachtouris
731 0ff9b312 Stavros Sachtouris
@command(snfproject_cmds)
732 0ff9b312 Stavros Sachtouris
class project_membership_list(_astakos_init, _optional_json):
733 0ff9b312 Stavros Sachtouris
    """List all memberships"""
734 0ff9b312 Stavros Sachtouris
735 0ff9b312 Stavros Sachtouris
    arguments = dict(
736 0ff9b312 Stavros Sachtouris
        project=ValueArgument('Filter by project id', '--with-project-id')
737 0ff9b312 Stavros Sachtouris
    )
738 0ff9b312 Stavros Sachtouris
739 0ff9b312 Stavros Sachtouris
    @errors.generic.all
740 0ff9b312 Stavros Sachtouris
    @astakoserror
741 0ff9b312 Stavros Sachtouris
    def _run(self):
742 95482dab Giorgos Korfiatis
        project = self['project']
743 95482dab Giorgos Korfiatis
        if project is not None:
744 95482dab Giorgos Korfiatis
            project = int(project)
745 95482dab Giorgos Korfiatis
        self._print(self.client.get_memberships(self.token, project))
746 0ff9b312 Stavros Sachtouris
747 0ff9b312 Stavros Sachtouris
    def main(self):
748 0ff9b312 Stavros Sachtouris
        super(self.__class__, self)._run()
749 0ff9b312 Stavros Sachtouris
        self._run()
750 0ff9b312 Stavros Sachtouris
751 0ff9b312 Stavros Sachtouris
752 0ff9b312 Stavros Sachtouris
@command(snfproject_cmds)
753 0ff9b312 Stavros Sachtouris
class project_membership_info(_astakos_init, _optional_json):
754 0ff9b312 Stavros Sachtouris
    """Details on a membership"""
755 d1d0cec9 Stavros Sachtouris
756 d1d0cec9 Stavros Sachtouris
    @errors.generic.all
757 d1d0cec9 Stavros Sachtouris
    @astakoserror
758 0ff9b312 Stavros Sachtouris
    def _run(self, memb_id):
759 8f984bae Giorgos Korfiatis
        self._print(self.client.get_membership(self.token, memb_id),
760 8f984bae Giorgos Korfiatis
                    print_dict)
761 d1d0cec9 Stavros Sachtouris
762 0ff9b312 Stavros Sachtouris
    def main(self, membership_id):
763 d1d0cec9 Stavros Sachtouris
        super(self.__class__, self)._run()
764 0ff9b312 Stavros Sachtouris
        self._run(membership_id)
765 0ff9b312 Stavros Sachtouris
766 0ff9b312 Stavros Sachtouris
767 0ff9b312 Stavros Sachtouris
class _membership_action(_astakos_init, _optional_json):
768 0ff9b312 Stavros Sachtouris
769 0ff9b312 Stavros Sachtouris
    action = ''
770 0ff9b312 Stavros Sachtouris
771 0ff9b312 Stavros Sachtouris
    @errors.generic.all
772 0ff9b312 Stavros Sachtouris
    @astakoserror
773 0ff9b312 Stavros Sachtouris
    def _run(self, memb_id, quote_a_reason):
774 0ff9b312 Stavros Sachtouris
        self._print(
775 0ff9b312 Stavros Sachtouris
            self.client.membership_action(
776 0ff9b312 Stavros Sachtouris
                self.token, memb_id, self.action, quote_a_reason),
777 0ff9b312 Stavros Sachtouris
            print_dict)
778 0ff9b312 Stavros Sachtouris
779 0ff9b312 Stavros Sachtouris
    def main(self, membership_id, quote_a_reason=''):
780 0ff9b312 Stavros Sachtouris
        super(_membership_action, self)._run()
781 0ff9b312 Stavros Sachtouris
        self._run(membership_id, quote_a_reason)
782 0ff9b312 Stavros Sachtouris
783 0ff9b312 Stavros Sachtouris
784 0ff9b312 Stavros Sachtouris
@command(snfproject_cmds)
785 0ff9b312 Stavros Sachtouris
class project_membership_leave(_membership_action):
786 0ff9b312 Stavros Sachtouris
    """Leave a project you have membership to"""
787 0ff9b312 Stavros Sachtouris
    action = 'leave'
788 0ff9b312 Stavros Sachtouris
789 0ff9b312 Stavros Sachtouris
790 0ff9b312 Stavros Sachtouris
@command(snfproject_cmds)
791 0ff9b312 Stavros Sachtouris
class project_membership_cancel(_membership_action):
792 0ff9b312 Stavros Sachtouris
    """Cancel your (probably pending) membership to a project"""
793 0ff9b312 Stavros Sachtouris
    action = 'cancel'
794 0ff9b312 Stavros Sachtouris
795 0ff9b312 Stavros Sachtouris
796 0ff9b312 Stavros Sachtouris
@command(snfproject_cmds)
797 0ff9b312 Stavros Sachtouris
class project_membership_accept(_membership_action):
798 0ff9b312 Stavros Sachtouris
    """Accept a membership for a project you manage"""
799 0ff9b312 Stavros Sachtouris
    action = 'accept'
800 0ff9b312 Stavros Sachtouris
801 0ff9b312 Stavros Sachtouris
802 0ff9b312 Stavros Sachtouris
@command(snfproject_cmds)
803 0ff9b312 Stavros Sachtouris
class project_membership_reject(_membership_action):
804 0ff9b312 Stavros Sachtouris
    """Reject a membership for project you manage"""
805 0ff9b312 Stavros Sachtouris
    action = 'reject'
806 0ff9b312 Stavros Sachtouris
807 0ff9b312 Stavros Sachtouris
808 0ff9b312 Stavros Sachtouris
@command(snfproject_cmds)
809 0ff9b312 Stavros Sachtouris
class project_membership_remove(_membership_action):
810 0ff9b312 Stavros Sachtouris
    """Remove a membership for a project you manage"""
811 0ff9b312 Stavros Sachtouris
    action = 'remove'
812 0ff9b312 Stavros Sachtouris
813 0ff9b312 Stavros Sachtouris
814 0ff9b312 Stavros Sachtouris
@command(snfproject_cmds)
815 0ff9b312 Stavros Sachtouris
class project_membership_join(_astakos_init):
816 0ff9b312 Stavros Sachtouris
    """Get a membership to a project"""
817 0ff9b312 Stavros Sachtouris
818 0ff9b312 Stavros Sachtouris
    @errors.generic.all
819 0ff9b312 Stavros Sachtouris
    @astakoserror
820 0ff9b312 Stavros Sachtouris
    def _run(self, project_id):
821 0ff9b312 Stavros Sachtouris
        print self.client.join_project(self.token, project_id)
822 0ff9b312 Stavros Sachtouris
823 0ff9b312 Stavros Sachtouris
    def main(self, project_id):
824 0ff9b312 Stavros Sachtouris
        super(_membership_action, self)._run()
825 0ff9b312 Stavros Sachtouris
        self._run(project_id)
826 0ff9b312 Stavros Sachtouris
827 0ff9b312 Stavros Sachtouris
828 0ff9b312 Stavros Sachtouris
@command(snfproject_cmds)
829 0ff9b312 Stavros Sachtouris
class project_membership_enroll(_astakos_init):
830 0ff9b312 Stavros Sachtouris
    """Enroll somebody to a project you manage"""
831 0ff9b312 Stavros Sachtouris
832 0ff9b312 Stavros Sachtouris
    @errors.generic.all
833 0ff9b312 Stavros Sachtouris
    @astakoserror
834 0ff9b312 Stavros Sachtouris
    def _run(self, project_id, email):
835 0ff9b312 Stavros Sachtouris
        print self.client.enroll_member(self.token, project_id, email)
836 0ff9b312 Stavros Sachtouris
837 0ff9b312 Stavros Sachtouris
    def main(self, project_id, email):
838 0ff9b312 Stavros Sachtouris
        super(_membership_action, self)._run()
839 0ff9b312 Stavros Sachtouris
        self._run(project_id, email)