Mercurial > libervia-backend
view frontends/src/jp/cmd_disco.py @ 966:9cae72da1b95
jp: added disco subcommand
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 01 Apr 2014 21:16:39 +0200 |
parents | |
children |
line wrap: on
line source
#! /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__ = ["Disco"] 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=lambda ignore: ignore) def gotInfos(self, infos, jid): self.host.bridge.discoItems(jid, profile_key=self.host.profile, callback=lambda items: self.gotItems(infos, items), errback=lambda ignore: ignore) 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()