annotate sat_frontends/jp/cmd_ping.py @ 2809:00d905e1b0ef

core (patches): partially fixed jid caching: jid caching in Twisted use a dict (__internJIDs) which associate a jid as string to its jid.JID instance. But this caching doesn't handle mutability of the objects, resulting wrong jid returned when a modification is done (e.g. if resource is changed). This is a temporary workaround until the patch is proposed and merged upstream. note: this is a partial fix because the caching is also leaking memory (cf. https://twistedmatrix.com/trac/ticket/5122)
author Goffi <goffi@goffi.org>
date Sun, 24 Feb 2019 14:09:44 +0100
parents 003b8b4b56a7
children ab2696e34d29
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2690
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
1 #!/usr/bin/env python2
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
3
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
4 # jp: a SAT command line tool
2771
003b8b4b56a7 date update
Goffi <goffi@goffi.org>
parents: 2690
diff changeset
5 # Copyright (C) 2009-2019 Jérôme Poisson (goffi@goffi.org)
2690
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
6
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
7 # This program is free software: you can redistribute it and/or modify
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
8 # it under the terms of the GNU Affero General Public License as published by
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
10 # (at your option) any later version.
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
11
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
12 # This program is distributed in the hope that it will be useful,
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
15 # GNU Affero General Public License for more details.
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
16
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
17 # You should have received a copy of the GNU Affero General Public License
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
19
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
20 import base
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
21 from sat.core.i18n import _
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
22
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
23 __commands__ = ["Ping"]
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
24
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
25
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
26 class Ping(base.CommandBase):
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
27
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
28 def __init__(self, host):
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
29 super(Ping, self).__init__(host, 'ping', help=_('ping XMPP entity'))
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
30 self.need_loop=True
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
31
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
32 def add_parser_options(self):
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
33 self.parser.add_argument(
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
34 "jid", type=base.unicode_decoder, help=_(u"jid to ping")
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
35 )
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
36 self.parser.add_argument(
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
37 "-d", "--delay-only", action="store_true", help=_(u"output delay only (in s)")
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
38 )
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
39
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
40 def _pingCb(self, pong_time):
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
41 fmt = u"{time}" if self.args.delay_only else u"PONG ({time} s)"
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
42 self.disp(fmt.format(time=pong_time))
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
43 self.host.quit()
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
44
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
45 def start(self):
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
46 self.host.bridge.ping(self.args.jid, self.profile,
56bfe1b79204 jp: new command "ping"
Goffi <goffi@goffi.org>
parents:
diff changeset
47 callback=self._pingCb, errback=self.errback)