show error for missing argument in gajim-remote
This commit is contained in:
parent
929d565b62
commit
875a875a53
2 changed files with 69 additions and 44 deletions
|
@ -5,6 +5,7 @@
|
||||||
## - Yann Le Boulanger <asterix@lagaule.org>
|
## - Yann Le Boulanger <asterix@lagaule.org>
|
||||||
## - Vincent Hanquez <tab@snarc.org>
|
## - Vincent Hanquez <tab@snarc.org>
|
||||||
## - Nikos Kouremenos <kourem@gmail.com>
|
## - Nikos Kouremenos <kourem@gmail.com>
|
||||||
|
## - Dimitur Kirov <dkirov@gmail.com>
|
||||||
##
|
##
|
||||||
## This file was initially written by Dimitur Kirov
|
## This file was initially written by Dimitur Kirov
|
||||||
##
|
##
|
||||||
|
@ -57,7 +58,14 @@ OBJ_PATH = '/org/gajim/dbus/RemoteObject'
|
||||||
INTERFACE = 'org.gajim.dbus.RemoteInterface'
|
INTERFACE = 'org.gajim.dbus.RemoteInterface'
|
||||||
SERVICE = 'org.gajim.dbus'
|
SERVICE = 'org.gajim.dbus'
|
||||||
|
|
||||||
|
# define commands dict. Prototype :
|
||||||
|
# {
|
||||||
|
# 'command': [comment, [list of arguments] ]
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# each argument is defined as a tuple:
|
||||||
|
# (argument name, help on argument, is mandatory)
|
||||||
|
#
|
||||||
commands = {
|
commands = {
|
||||||
'help':[
|
'help':[
|
||||||
_('show a help on specific command'),
|
_('show a help on specific command'),
|
||||||
|
@ -125,6 +133,8 @@ message using this account'), False),
|
||||||
|
|
||||||
|
|
||||||
def make_arguments_row(args):
|
def make_arguments_row(args):
|
||||||
|
''' return arguments list. Mandatory arguments are enclosed with:
|
||||||
|
'<', '>', optional arguments - with '[', ']' '''
|
||||||
str = ''
|
str = ''
|
||||||
for argument in args:
|
for argument in args:
|
||||||
str += ' '
|
str += ' '
|
||||||
|
@ -138,7 +148,9 @@ def make_arguments_row(args):
|
||||||
else:
|
else:
|
||||||
str += ']'
|
str += ']'
|
||||||
return str
|
return str
|
||||||
|
|
||||||
def help_on_command(command):
|
def help_on_command(command):
|
||||||
|
''' return help message for a given command '''
|
||||||
if command in commands:
|
if command in commands:
|
||||||
str = _('Usage: %s %s %s \n\t') % (sys.argv[0], command, make_arguments_row(commands[command][1]))
|
str = _('Usage: %s %s %s \n\t') % (sys.argv[0], command, make_arguments_row(commands[command][1]))
|
||||||
str += commands[command][0] + '\n\nArguments:\n'
|
str += commands[command][0] + '\n\nArguments:\n'
|
||||||
|
@ -148,6 +160,7 @@ def help_on_command(command):
|
||||||
send_error(_(' %s not found') % command)
|
send_error(_(' %s not found') % command)
|
||||||
|
|
||||||
def compose_help():
|
def compose_help():
|
||||||
|
''' print usage, and list available commands '''
|
||||||
str = _('Usage: %s command [arguments]\nCommand is one of:\n' ) % sys.argv[0]
|
str = _('Usage: %s command [arguments]\nCommand is one of:\n' ) % sys.argv[0]
|
||||||
for command in commands.keys():
|
for command in commands.keys():
|
||||||
str += ' ' + command
|
str += ' ' + command
|
||||||
|
@ -166,7 +179,7 @@ def compose_help():
|
||||||
return str
|
return str
|
||||||
|
|
||||||
def show_vcard_info(*args, **keyword):
|
def show_vcard_info(*args, **keyword):
|
||||||
# more cleaner output
|
# FIXME: more cleaner output
|
||||||
if _version[1] >= 30:
|
if _version[1] >= 30:
|
||||||
print args[0]
|
print args[0]
|
||||||
else:
|
else:
|
||||||
|
@ -181,53 +194,22 @@ def show_vcard_info(*args, **keyword):
|
||||||
|
|
||||||
gtk.main_quit()
|
gtk.main_quit()
|
||||||
|
|
||||||
|
def check_arguments(command):
|
||||||
|
''' Make check if all necessary arguments are given '''
|
||||||
|
argv_len = len(sys.argv) - 2
|
||||||
|
args = commands[command][1]
|
||||||
|
if len(args) > argv_len:
|
||||||
|
if args[argv_len][2]:
|
||||||
|
send_error(_('Argument <%s> is not specified. \n\
|
||||||
|
Type \'%s help %s\' for more info') % \
|
||||||
|
(args[argv_len][0], sys.argv[0], command))
|
||||||
|
|
||||||
def gtk_quit():
|
def gtk_quit():
|
||||||
if _version[1] >= 41:
|
if _version[1] >= 41:
|
||||||
sbus.remove_signal_receiver(show_vcard_info, 'VcardInfo', INTERFACE,
|
sbus.remove_signal_receiver(show_vcard_info, 'VcardInfo', INTERFACE,
|
||||||
SERVICE, OBJ_PATH)
|
SERVICE, OBJ_PATH)
|
||||||
gtk.main_quit()
|
gtk.main_quit()
|
||||||
|
|
||||||
|
|
||||||
argv_len = len(sys.argv)
|
|
||||||
|
|
||||||
if argv_len < 2 or sys.argv[1] not in commands.keys(): # no args or bad args
|
|
||||||
send_error(compose_help())
|
|
||||||
|
|
||||||
command = sys.argv[1]
|
|
||||||
|
|
||||||
if command == 'help':
|
|
||||||
if argv_len == 3:
|
|
||||||
print help_on_command(sys.argv[2])
|
|
||||||
else:
|
|
||||||
print compose_help()
|
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
try:
|
|
||||||
sbus = dbus.SessionBus()
|
|
||||||
except:
|
|
||||||
send_error('Session bus is not available.\n')
|
|
||||||
|
|
||||||
|
|
||||||
if _version[1] >= 30 and _version[1] <= 42:
|
|
||||||
object = sbus.get_object(SERVICE, OBJ_PATH)
|
|
||||||
interface = dbus.Interface(object, INTERFACE)
|
|
||||||
elif _version[1] < 30:
|
|
||||||
service = sbus.get_service(SERVICE)
|
|
||||||
interface = service.get_object(OBJ_PATH, INTERFACE)
|
|
||||||
else:
|
|
||||||
send_error('Unknow dbus version: '+ _version)
|
|
||||||
|
|
||||||
method = interface.__getattr__(sys.argv[1]) # get the function asked
|
|
||||||
|
|
||||||
if command == 'contact_info':
|
|
||||||
if argv_len < 3:
|
|
||||||
send_error('Missing argument \'contact_jid\'')
|
|
||||||
try:
|
|
||||||
id = sbus.add_signal_receiver(show_vcard_info, 'VcardInfo',
|
|
||||||
INTERFACE, SERVICE, OBJ_PATH)
|
|
||||||
except:
|
|
||||||
send_error('Service not available')
|
|
||||||
|
|
||||||
#FIXME - didn't find more clever way for the below 8 lines of code.
|
#FIXME - didn't find more clever way for the below 8 lines of code.
|
||||||
# method(sys.argv[2:]) doesn't work, cos sys.argv[2:] is a tuple
|
# method(sys.argv[2:]) doesn't work, cos sys.argv[2:] is a tuple
|
||||||
def call_remote_method(method):
|
def call_remote_method(method):
|
||||||
|
@ -246,6 +228,48 @@ def call_remote_method(method):
|
||||||
send_error(_('Service not available'))
|
send_error(_('Service not available'))
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
argv_len = len(sys.argv)
|
||||||
|
|
||||||
|
if argv_len < 2 or sys.argv[1] not in commands.keys(): # no args or bad args
|
||||||
|
send_error(compose_help())
|
||||||
|
|
||||||
|
command = sys.argv[1]
|
||||||
|
|
||||||
|
if command == 'help':
|
||||||
|
if argv_len == 3:
|
||||||
|
print help_on_command(sys.argv[2])
|
||||||
|
else:
|
||||||
|
print compose_help()
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
try:
|
||||||
|
sbus = dbus.SessionBus()
|
||||||
|
except:
|
||||||
|
send_error(_('Session bus is not available.\n'))
|
||||||
|
|
||||||
|
|
||||||
|
if _version[1] >= 30 and _version[1] <= 42:
|
||||||
|
object = sbus.get_object(SERVICE, OBJ_PATH)
|
||||||
|
interface = dbus.Interface(object, INTERFACE)
|
||||||
|
elif _version[1] < 30:
|
||||||
|
service = sbus.get_service(SERVICE)
|
||||||
|
interface = service.get_object(OBJ_PATH, INTERFACE)
|
||||||
|
else:
|
||||||
|
send_error(_('Unknow dbus version: %s') % _version)
|
||||||
|
|
||||||
|
method = interface.__getattr__(sys.argv[1]) # get the function asked
|
||||||
|
|
||||||
|
check_arguments(command)
|
||||||
|
if command == 'contact_info':
|
||||||
|
if argv_len < 3:
|
||||||
|
send_error(_('Missing argument \'contact_jid\''))
|
||||||
|
try:
|
||||||
|
id = sbus.add_signal_receiver(show_vcard_info, 'VcardInfo',
|
||||||
|
INTERFACE, SERVICE, OBJ_PATH)
|
||||||
|
except:
|
||||||
|
send_error(_('Service not available'))
|
||||||
|
|
||||||
res = call_remote_method(method)
|
res = call_remote_method(method)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -229,7 +229,8 @@ class SignalObject(DbusPrototype):
|
||||||
You have to register the 'VcardInfo' signal to get the real vcard. '''
|
You have to register the 'VcardInfo' signal to get the real vcard. '''
|
||||||
if self.disabled:
|
if self.disabled:
|
||||||
return
|
return
|
||||||
jid = self._get_real_arguments(args, 1)
|
|
||||||
|
[jid] = self._get_real_arguments(args, 1)
|
||||||
if not jid:
|
if not jid:
|
||||||
# FIXME: raise exception for missing argument (0.3+)
|
# FIXME: raise exception for missing argument (0.3+)
|
||||||
return None
|
return None
|
||||||
|
|
Loading…
Add table
Reference in a new issue