<div dir="ltr"><div>Hi ,</div><div><br></div><div>I have a server test with <br></div><div><br></div><div>Debian Buster 10.9</div><div>kamailio 5.4.5 </div><div>kamcli 2.0.0 (similar result with 3.0.0)<br></div><div><br></div><div>I'm not able to use kamcli <br></div><div>with sqlite  : insert and select doesn't work <br></div><div>with pgsql :  insert works , select of empty table works , select table with entry doesn't work<br></div><div><br></div><div><br></div><div>TEST WITH SQLITE</div><div>root@kamailio-BT:~# kamcli -c /etc/kamcli/kamcli.ini.sqlite subscriber add test password<br>Traceback (most recent call last):<br>  File "/usr/local/lib/python3.7/dist-packages/sqlalchemy/engine/base.py", line 1706, in _execute_context<br>    cursor, statement, parameters, context<br>  File "/usr/local/lib/python3.7/dist-packages/sqlalchemy/engine/default.py", line 716, in do_execute<br>    cursor.execute(statement, parameters)<br>sqlite3.OperationalError: near "%": syntax error<br><br>The above exception was the direct cause of the following exception:<br><br>Traceback (most recent call last):<br>  File "/usr/bin/kamcli", line 11, in <module><br>    load_entry_point('kamcli==2.0.0', 'console_scripts', 'kamcli')()<br>  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 829, in __call__<br>    return self.main(*args, **kwargs)<br>  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 782, in main<br>    rv = self.invoke(ctx)<br>  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 1259, in invoke<br>    return _process_result(sub_ctx.command.invoke(sub_ctx))<br>  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 1259, in invoke<br>    return _process_result(sub_ctx.command.invoke(sub_ctx))<br>  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 1066, in invoke<br>    return ctx.invoke(self.callback, **ctx.params)<br>  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 610, in invoke<br>    return callback(*args, **kwargs)<br>  File "/usr/local/lib/python3.7/dist-packages/click/decorators.py", line 73, in new_func<br>    return ctx.invoke(f, obj, *args, **kwargs)<br>  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 610, in invoke<br>    return callback(*args, **kwargs)<br>  File "/usr/lib/python3/dist-packages/kamcli/commands/cmd_subscriber.py", line 43, in subscriber_add<br>    e.execute('insert into subscriber (username, domain, password, ha1, ha1b) values (%s, %s, %s, %s, %s)', udata['username'], udata['domain'], password, ha1, ha1b)<br>  File "<string>", line 2, in execute<br>  File "/usr/local/lib/python3.7/dist-packages/sqlalchemy/util/deprecations.py", line 390, in warned<br>    return fn(*args, **kwargs)<br>  File "/usr/local/lib/python3.7/dist-packages/sqlalchemy/engine/base.py", line 3037, in execute<br>    return connection.execute(statement, *multiparams, **params)<br>  File "/usr/local/lib/python3.7/dist-packages/sqlalchemy/engine/base.py", line 1190, in execute<br>    future=False,<br>  File "/usr/local/lib/python3.7/dist-packages/sqlalchemy/engine/base.py", line 1491, in _exec_driver_sql<br>    distilled_parameters,<br>  File "/usr/local/lib/python3.7/dist-packages/sqlalchemy/engine/base.py", line 1749, in _execute_context<br>    e, statement, parameters, cursor, context<br>  File "/usr/local/lib/python3.7/dist-packages/sqlalchemy/engine/base.py", line 1930, in _handle_dbapi_exception<br>    sqlalchemy_exception, with_traceback=exc_info[2], from_=e<br>  File "/usr/local/lib/python3.7/dist-packages/sqlalchemy/util/compat.py", line 211, in raise_<br>    raise exception<br>  File "/usr/local/lib/python3.7/dist-packages/sqlalchemy/engine/base.py", line 1706, in _execute_context<br>    cursor, statement, parameters, context<br>  File "/usr/local/lib/python3.7/dist-packages/sqlalchemy/engine/default.py", line 716, in do_execute<br>    cursor.execute(statement, parameters)<br>sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) near "%": syntax error<br>[SQL: insert into subscriber (username, domain, password, ha1, ha1b) values (%s, %s, %s, %s, %s)]<br>[parameters: ('test', '<a href="http://sip.test.dev">sip.test.dev</a>', 'password', '4380ea9069e888b5fc92996495a0f481', '3a36aeb0df7f4504cc5d9b97dab540e5')]<br>(Background on this error at: <a href="http://sqlalche.me/e/14/e3q8">http://sqlalche.me/e/14/e3q8</a>)</div><div><br></div><div>root@kamailio-BT:~# kamctl add  test password<br>-e sqlite_query: /usr/bin/sqlite3  /etc/kamailio/kamailio.db insert into subscriber (username,                           domain,ha1,ha1b,password)                               values ('test','<a href="http://sip.test.dev">sip.test.dev</a>','4380ea9069e888b5fc92996495a0f481','3a36aeb0df7f4504cc5d9b97dab540e5','password');<br>-e new user 'test' added</div><div><br></div><div>root@kamailio-BT:~# kamcli -c /etc/kamcli/kamcli.ini.sqlite subscriber show<br>Traceback (most recent call last):<br>  File "/usr/bin/kamcli", line 11, in <module><br>    load_entry_point('kamcli==2.0.0', 'console_scripts', 'kamcli')()<br>  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 829, in __call__<br>    return self.main(*args, **kwargs)<br>  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 782, in main<br>    rv = self.invoke(ctx)<br>  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 1259, in invoke<br>    return _process_result(sub_ctx.command.invoke(sub_ctx))<br>  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 1259, in invoke<br>    return _process_result(sub_ctx.command.invoke(sub_ctx))<br>  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 1066, in invoke<br>    return ctx.invoke(self.callback, **ctx.params)<br>  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 610, in invoke<br>    return callback(*args, **kwargs)<br>  File "/usr/local/lib/python3.7/dist-packages/click/decorators.py", line 73, in new_func<br>    return ctx.invoke(f, obj, *args, **kwargs)<br>  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 610, in invoke<br>    return callback(*args, **kwargs)<br>  File "/usr/lib/python3/dist-packages/kamcli/commands/cmd_subscriber.py", line 118, in subscriber_show<br>    ioutils_dbres_print(ctx, oformat, ostyle, res)<br>  File "/usr/lib/python3/dist-packages/kamcli/ioutils.py", line 45, in ioutils_dbres_print<br>    gstring = tabulate(allrows, headers=res.keys(), tablefmt=ostyle)<br>  File "/usr/local/lib/python3.7/dist-packages/tabulate.py", line 1529, in tabulate<br>    tabular_data, headers, showindex=showindex<br>  File "/usr/local/lib/python3.7/dist-packages/tabulate.py", line 1162, in _normalize_tabular_data<br>    "headers for a list of dicts is not a dict or a keyword"<br>ValueError: headers for a list of dicts is not a dict or a keyword<br></div><div><br></div><div><br></div><div>TEST WITH PGSQL</div><div>root@kamailio-BT:~# kamcli -c /etc/kamcli/kamcli.ini.pgsql subscriber show<br>+------+------------+----------+------------+-------+--------+<br>| id   | username   | domain   | password   | ha1   | ha1b   |<br>+======+============+==========+============+=======+========+<br>+------+------------+----------+------------+-------+--------+<br>root@kamailio-BT:~# kamcli -c /etc/kamcli/kamcli.ini.pgsql subscriber add test password<br>root@kamailio-BT:~# kamcli -c /etc/kamcli/kamcli.ini.pgsql subscriber show<br>Traceback (most recent call last):<br>  File "/usr/bin/kamcli", line 11, in <module><br>    load_entry_point('kamcli==2.0.0', 'console_scripts', 'kamcli')()<br>  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 829, in __call__<br>    return self.main(*args, **kwargs)<br>  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 782, in main<br>    rv = self.invoke(ctx)<br>  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 1259, in invoke<br>    return _process_result(sub_ctx.command.invoke(sub_ctx))<br>  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 1259, in invoke<br>    return _process_result(sub_ctx.command.invoke(sub_ctx))<br>  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 1066, in invoke<br>    return ctx.invoke(self.callback, **ctx.params)<br>  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 610, in invoke<br>    return callback(*args, **kwargs)<br>  File "/usr/local/lib/python3.7/dist-packages/click/decorators.py", line 73, in new_func<br>    return ctx.invoke(f, obj, *args, **kwargs)<br>  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 610, in invoke<br>    return callback(*args, **kwargs)<br>  File "/usr/lib/python3/dist-packages/kamcli/commands/cmd_subscriber.py", line 118, in subscriber_show<br>    ioutils_dbres_print(ctx, oformat, ostyle, res)<br>  File "/usr/lib/python3/dist-packages/kamcli/ioutils.py", line 45, in ioutils_dbres_print<br>    gstring = tabulate(allrows, headers=res.keys(), tablefmt=ostyle)<br>  File "/usr/local/lib/python3.7/dist-packages/tabulate.py", line 1529, in tabulate<br>    tabular_data, headers, showindex=showindex<br>  File "/usr/local/lib/python3.7/dist-packages/tabulate.py", line 1162, in _normalize_tabular_data<br>    "headers for a list of dicts is not a dict or a keyword"<br>ValueError: headers for a list of dicts is not a dict or a keyword</div><div><br></div><div>root@kamailio-BT:~# kamctl show test<br>1|test|<a href="http://sip.test.dev">sip.test.dev</a>|password|4380ea9069e888b5fc92996495a0f481|3a36aeb0df7f4504cc5d9b97dab540e5<br></div><div><br></div><div><br></div><div>Regards</div><div>Luca<br></div></div>