jp: better profile commands:

- new "profile/default" command
    - info doesn't show password anymore by default, need to be explicitly requested
    - info and modify don't need to connect anymore
    - modify can now set default profile. As use_profile is set, at least a profile session need to be started when it would not be mandatory technicaly (if just setting the profile as default is needed). But this option should not be used often, and it's not a big side effect, so I don't feel the need to create a new dedicated command, or to do complicated checks to avoid the session start.
This commit is contained in:
Goffi 2015-11-14 19:18:10 +01:00
commit 1aecdcf2e9

View file

@ -20,7 +20,7 @@
"""This module permits to manage profiles. It can list, create, delete
and retrieve information about a profile."""
from logging import debug, info, error, warning
import logging as log
from sat.core.i18n import _
from sat_frontends.jp import base
@ -29,9 +29,20 @@ __commands__ = ["Profile"]
PROFILE_HELP = _('The name of the profile')
class ProfileDefault(base.CommandBase):
def __init__(self, host):
super(ProfileDefault, self).__init__(host, 'default', use_profile=False, help=_('print default profile'))
def add_parser_options(self):
pass
def run(self):
print self.host.bridge.getProfileName('@DEFAULT@')
class ProfileDelete(base.CommandBase):
def __init__(self, host):
super(ProfileDelete, self).__init__(host, 'delete', use_profile=False, help=_('Delete a profile'))
super(ProfileDelete, self).__init__(host, 'delete', use_profile=False, help=_('delete a profile'))
def add_parser_options(self):
self.parser.add_argument('profile', type=str, help=PROFILE_HELP)
@ -39,22 +50,20 @@ class ProfileDelete(base.CommandBase):
def run(self):
super(ProfileDelete, self).run()
if self.args.profile not in self.host.bridge.getProfilesList():
error("Profile %s doesn't exist." % self.args.profile)
log.error("Profile %s doesn't exist." % self.args.profile)
self.host.quit(1)
self.host.bridge.asyncDeleteProfile(self.args.profile, callback=lambda dummy: None)
class ProfileInfo(base.CommandBase):
def __init__(self, host):
super(ProfileInfo, self).__init__(host, 'info', help=_('Get information about a profile'))
self.to_show = [(_(u"jid"), "Connection", "JabberID"),
(_(u"XMPP password"), "Connection", "Password"),
]
super(ProfileInfo, self).__init__(host, 'info', need_connect=False, help=_('get information about a profile'))
self.to_show = [(_(u"jid"), "Connection", "JabberID"),]
self.largest = max([len(item[0]) for item in self.to_show])
def add_parser_options(self):
pass
self.parser.add_argument('--show-password', action='store_true', help=_(u'show the XMPP password IN CLEAR TEXT'))
def showNextValue(self, label=None, category=None, value=None):
"""Show next value from self.to_show and quit on last one"""
@ -71,12 +80,14 @@ class ProfileInfo(base.CommandBase):
def connected(self):
self.need_loop = True
super(ProfileInfo, self).connected()
if self.args.show_password:
self.to_show.append((_(u"XMPP password"), "Connection", "Password"))
self.showNextValue()
class ProfileList(base.CommandBase):
def __init__(self, host):
super(ProfileList, self).__init__(host, 'list', use_profile=False, help=_('List profiles'))
super(ProfileList, self).__init__(host, 'list', use_profile=False, help=_('list profiles'))
def add_parser_options(self):
pass
@ -110,20 +121,21 @@ class ProfileCreate(base.CommandBase):
"""Create a new profile"""
self.need_loop = True
if self.args.profile in self.host.bridge.getProfilesList():
error("Profile %s already exists." % self.args.profile)
log.error("Profile %s already exists." % self.args.profile)
self.host.quit(1)
self.host.bridge.asyncCreateProfile(self.args.profile, self.args.password, callback=self._profile_created, errback=None)
class ProfileModify(base.CommandBase):
def __init__(self, host):
super(ProfileModify, self).__init__(host, 'modify', help=_('Modify an existing profile'))
super(ProfileModify, self).__init__(host, 'modify', need_connect=False, help=_('Modify an existing profile'))
def add_parser_options(self):
self.parser.add_argument('-w', '--password', type=str, default='', help=_('the password of the profile'))
self.parser.add_argument('-j', '--jid', type=str, help=_('the jid of the profile'))
self.parser.add_argument('-x', '--xmpp-password', type=str, help=_('the password of the XMPP account'),
metavar='PASSWORD')
self.parser.add_argument('-D', '--default', action='store_true', help=_(u'set as default profile'))
def _profile_created(self):
if self.args.jid:
@ -141,10 +153,12 @@ class ProfileModify(base.CommandBase):
self.host.bridge.setParam("JabberID", self.args.jid, "Connection", profile_key=self.host.profile)
if self.args.xmpp_password is not None:
self.host.bridge.setParam("Password", self.args.xmpp_password, "Connection", profile_key=self.host.profile)
if self.args.default:
self.host.bridge.profileSetDefault(self.host.profile)
class Profile(base.CommandBase):
subcommands = (ProfileDelete, ProfileInfo, ProfileList, ProfileCreate, ProfileModify)
subcommands = (ProfileCreate, ProfileDefault, ProfileDelete, ProfileInfo, ProfileList, ProfileModify)
def __init__(self, host):
super(Profile, self).__init__(host, 'profile', use_profile=False, help=_('Profile commands'))