jp: "disco" subcommand, moved into a new "info" subcommand + added "version" subcommand which get software version
This commit is contained in:
parent
647487fc1d
commit
ec08d50aba
2 changed files with 61 additions and 7 deletions
|
|
@ -223,8 +223,8 @@ class Jp(object):
|
|||
"""
|
||||
# FIXME: need better exit codes
|
||||
|
||||
def cant_connect():
|
||||
error(_(u"Can't connect profile"))
|
||||
def cant_connect(failure):
|
||||
error(_(u"Can't connect profile [%s]") % failure)
|
||||
self.quit(1)
|
||||
|
||||
self.profile = self.bridge.getProfileName(self.args.profile)
|
||||
|
|
|
|||
123
frontends/src/jp/cmd_info.py
Normal file
123
frontends/src/jp/cmd_info.py
Normal file
|
|
@ -0,0 +1,123 @@
|
|||
#! /usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# jp: a SAT command line tool
|
||||
# Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 Jérôme Poisson (goffi@goffi.org)
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from logging import debug, info, error, warning
|
||||
|
||||
import base
|
||||
from sat.core.i18n import _
|
||||
|
||||
__commands__ = ["Info"]
|
||||
|
||||
|
||||
class Disco(base.CommandBase):
|
||||
|
||||
def __init__(self, host):
|
||||
super(Disco, self).__init__(host, 'disco', help=_('Service discovery'))
|
||||
|
||||
def add_parser_options(self):
|
||||
self.parser.add_argument("jid", type=str, help=_("Entity to discover"))
|
||||
|
||||
def connected(self):
|
||||
super(Disco, self).connected()
|
||||
self.need_loop=True
|
||||
jids = self.host.check_jids([self.args.jid])
|
||||
jid = jids[0]
|
||||
self.host.bridge.discoInfos(jid, profile_key=self.host.profile, callback=lambda infos: self.gotInfos(infos, jid), errback=self.error)
|
||||
|
||||
def error(self, failure):
|
||||
print (_("Error while doing discovery"))
|
||||
self.host.quit(1)
|
||||
|
||||
def gotInfos(self, infos, jid):
|
||||
self.host.bridge.discoItems(jid, profile_key=self.host.profile, callback=lambda items: self.gotItems(infos, items), errback=self.error)
|
||||
|
||||
def gotItems(self, infos, items):
|
||||
features, identities = infos
|
||||
features.sort()
|
||||
identities.sort(key=lambda identity: identity[2])
|
||||
items.sort(key=lambda item: item[2])
|
||||
identities_lst = []
|
||||
items_lst = []
|
||||
for identity in identities:
|
||||
category, type_, name = identity
|
||||
identities_lst.append(u"%(name)s(%(cat)s/%(type)s)" %
|
||||
{'name': (name+' ') if name else '',
|
||||
'cat': category,
|
||||
'type': type_})
|
||||
for item in items:
|
||||
entity, node_id, name = item
|
||||
items_lst.append(u"%(name)s[%(entity)s%(node_id)s]" %
|
||||
{'name': (name+' ') if name else '',
|
||||
'entity': entity,
|
||||
'node_id': (', ' + node_id) if node_id else ''
|
||||
})
|
||||
|
||||
template = []
|
||||
if features:
|
||||
template.append(_(u"Features:\n\n%(features)s"))
|
||||
if identities:
|
||||
template.append(_(u"Identities:\n\n%(identities)s"))
|
||||
if items:
|
||||
template.append(_(u"Items:\n\n%(items)s"))
|
||||
|
||||
print "\n--\n".join(template) % { 'features': '\n'.join(features),
|
||||
'identities': '\n'.join(identities_lst),
|
||||
'items': '\n'.join(items_lst),
|
||||
}
|
||||
self.host.quit()
|
||||
|
||||
|
||||
class Version(base.CommandBase):
|
||||
|
||||
def __init__(self, host):
|
||||
super(Version, self).__init__(host, 'version', help=_('Client version'))
|
||||
|
||||
def add_parser_options(self):
|
||||
self.parser.add_argument("jid", type=str, help=_("Entity to request"))
|
||||
|
||||
def connected(self):
|
||||
self.need_loop=True
|
||||
super(Version, self).connected()
|
||||
jids = self.host.check_jids([self.args.jid])
|
||||
jid = jids[0]
|
||||
self.host.bridge.getSoftwareVersion(jid, self.host.profile, callback=self.gotVersion, errback=self.error)
|
||||
|
||||
def error(self, failure):
|
||||
print (_("Error while trying to get version [%s]") % failure)
|
||||
self.host.quit(1)
|
||||
|
||||
def gotVersion(self, data):
|
||||
infos = []
|
||||
name, version, os = data
|
||||
if name:
|
||||
infos.append(_("Client name: %s") % name)
|
||||
if version:
|
||||
infos.append(_("Client version: %s") % version)
|
||||
if os:
|
||||
infos.append(_("Operating System: %s") % os)
|
||||
|
||||
print "\n".join(infos)
|
||||
self.host.quit()
|
||||
|
||||
|
||||
class Info(base.CommandBase):
|
||||
subcommands = (Disco, Version)
|
||||
|
||||
def __init__(self, host):
|
||||
super(Info, self).__init__(host, 'info', use_profile=False, help=_('Get various informations on entities'))
|
||||
Loading…
Reference in a new issue