changeset 1596:b7ee113183fc

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.
author Goffi <goffi@goffi.org>
date Sat, 14 Nov 2015 19:18:10 +0100
parents a3d0cfa5b7a6
children 91a605feed8c
files frontends/src/jp/cmd_profile.py
diffstat 1 files changed, 26 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/frontends/src/jp/cmd_profile.py	Sat Nov 14 19:18:10 2015 +0100
+++ b/frontends/src/jp/cmd_profile.py	Sat Nov 14 19:18:10 2015 +0100
@@ -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 @@
 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 @@
     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 @@
     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 @@
         """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 @@
             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'))