from kamaki.cli import command
from kamaki.clients.astakos import AstakosClient
from kamaki.cli.utils import print_dict
-from kamaki.cli.errors import raiseCLIError
+from kamaki.cli.errors import raiseCLIError, CLISyntaxError
from kamaki.cli.commands import _command_init
from kamaki.cli.command_tree import CommandTree
+from kamaki.cli.argument import ValueArgument
astakos_cmds = CommandTree('astakos', 'Astakos API commands')
_commands = [astakos_cmds]
@command(astakos_cmds)
-class astakos_user_byemail(_astakos_init):
- """Get user by e-mail"""
+class astakos_admin_userinfo(_astakos_init):
+ """Get user info, provided you have admin privileges"""
- def main(self, email, token=None):
+ def __init__(self, arguments={}):
+ super(self.__class__, self).__init__(arguments)
+ self.arguments['email'] = ValueArgument('target user email', '--email')
+ self.arguments['username'] = ValueArgument('target username',
+ '--username')
+
+ def main(self, admin_token=None):
super(self.__class__, self).main()
+ email = self.get_argument('email')
+ username = self.get_argument('username')
try:
- reply = self.client.get_user_by_email(email, token)
+ if email and username:
+ raise CLISyntaxError(
+ 'Arguments %s and %s are mutually exclusive' % (
+ self.arguments['email'].parsed_name,
+ self.arguments['username'].parsed_name
+ ), importance=1)
+ elif email:
+ reply = self.client.get_user_by_email(email,
+ admin=True,
+ token=admin_token)
+ elif username:
+ reply = self.client.get_user_by_username(username,
+ admin=True,
+ token=admin_token)
+ else:
+ raise CLISyntaxError(
+ 'Exactly one of %s or %s is obligatory' % (
+ self.arguments['email'].parsed_name,
+ self.arguments['username'].parsed_name
+ ), importance=1)
except Exception as err:
raiseCLIError(err)
print_dict(reply)
@command(astakos_cmds)
-class astakos_user_byusername(_astakos_init):
- """Get user by e-mail"""
+class astakos_service_userinfo(_astakos_init):
+ """Get user by e-mail (with service token)"""
+
+ def __init__(self, arguments={}):
+ super(self.__class__, self).__init__(arguments)
+ self.arguments['email'] = ValueArgument('target user email', '--email')
+ self.arguments['username'] = ValueArgument('target username',
+ '--username')
- def main(self, username, token=None):
+ def main(self, service_token=None):
super(self.__class__, self).main()
+ email = self.get_argument('email')
+ username = self.get_argument('username')
try:
- reply = self.client.get_user_by_username(username, token)
+ if email and username:
+ raise CLISyntaxError(
+ 'Arguments %s and %s are mutually exclusive' % (
+ self.arguments['email'].parsed_name,
+ self.arguments['username'].parsed_name
+ ), importance=1)
+ elif email:
+ reply = self.client.get_user_by_email(email,
+ token=service_token)
+ elif username:
+ reply = self.client.get_user_by_username(username,
+ token=service_token)
+ else:
+ raise CLISyntaxError(
+ 'Exactly one of %s or %s is obligatory' % (
+ self.arguments['email'].parsed_name,
+ self.arguments['username'].parsed_name
+ ), importance=1)
except Exception as err:
raiseCLIError(err)
print_dict(reply)
# or implied, of GRNET S.A.
from kamaki.clients import Client, ClientError
+from kamaki.clients.utils import path4url
class AstakosClient(Client):
r = self.get('/im/authenticate')
return r.json
- def get_user_by_email(self, email, token=None):
+ def get_user_by_email(self, email, admin=False, token=None):
"""
:param email: (str)
if token:
self.token = token
self.set_param('email', email)
- r = self.get('/im/admin/api/2.0/users/')
+
+ path = path4url('im', 'admin' if admin else 'service', 'api/2.0/users')
+ r = self.get(path)
return r.json
- def get_user_by_username(self, username, token=None):
+ def get_user_by_username(self, username, admin=False, token=None):
"""
:param username: (str)
"""
if token:
self.token = token
- r = self.get('/im/admin/api/2.0/users/{%s}' % username)
+ path = path4url('im', 'admin' if admin else 'service', 'api/2.0/users')
+ r = self.get('%s/{%s}' % (path, username))
return r.json