<div dir="ltr"><div>Hi Daniel <br></div><div>many thanks for yours commits in git  kamcli.</div><div><br></div><div>I try the new version but my errors are the same</div><br><div>(venv) kamailio-BT:/usr/src/kamclienv/kamcli # kamcli -c /etc/kamcli/kamcli.ini.sqlite subscriber show </div><div><span class="gmail-im">Traceback (most recent call last):<br></span>  File "/usr/src/kamclienv/venv/bin/kamcli", line 33, in <module><br>    sys.exit(load_entry_point('kamcli', 'console_scripts', 'kamcli')())<br>  File "/usr/src/kamclienv/venv/lib/python3.7/site-packages/click/core.py", line 829, in __call__<br>    return self.main(*args, **kwargs)<br>  File "/usr/src/kamclienv/venv/lib/python3.7/site-packages/click/core.py", line 782, in main<br>    rv = self.invoke(ctx)<br>  File "/usr/src/kamclienv/venv/lib/python3.7/site-packages/click/core.py", line 1259, in invoke<br>    return _process_result(sub_ctx.command.invoke(sub_ctx))<br>  File "/usr/src/kamclienv/venv/lib/python3.7/site-packages/click/core.py", line 1259, in invoke<br>    return _process_result(sub_ctx.command.invoke(sub_ctx))<br>  File "/usr/src/kamclienv/venv/lib/python3.7/site-packages/click/core.py", line 1066, in invoke<br>    return ctx.invoke(self.callback, **ctx.params)<br>  File "/usr/src/kamclienv/venv/lib/python3.7/site-packages/click/core.py", line 610, in invoke<br>    return callback(*args, **kwargs)<br>  File "/usr/src/kamclienv/venv/lib/python3.7/site-packages/click/decorators.py", line 73, in new_func<span class="gmail-im"><br>    return ctx.invoke(f, obj, *args, **kwargs)<br></span>  File "/usr/src/kamclienv/venv/lib/python3.7/site-packages/click/core.py", line 610, in invoke<br>    return callback(*args, **kwargs)<br>  File "/usr/src/kamclienv/kamcli/kamcli/commands/cmd_subscriber.py", line 235, in subscriber_show<br>    ioutils_dbres_print(ctx, oformat, ostyle, res)<br>  File "/usr/src/kamclienv/kamcli/kamcli/ioutils.py", line 70, in ioutils_dbres_print<span class="gmail-im"><br>    gstring = tabulate(allrows, headers=res.keys(), tablefmt=ostyle)<br></span>  File "/usr/src/kamclienv/venv/lib/python3.7/site-packages/tabulate.py", line 1529, in tabulate<br>    tabular_data, headers, showindex=showindex<br>  File "/usr/src/kamclienv/venv/lib/python3.7/site-packages/tabulate.py", line 1162, in _normalize_tabular_data<span class="gmail-im"><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></span>(venv) kamailio-BT:/usr/src/kamclienv/kamcli # kamcli -c /etc/kamcli/kamcli.ini.sqlite subscriber add test passwordtest<span class="gmail-im"><br>Traceback (most recent call last):<br></span>  File "/usr/src/kamclienv/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1706, in _execute_context<br>    cursor, statement, parameters, context<br>  File "/usr/src/kamclienv/venv/lib/python3.7/site-packages/sqlalchemy/engine/default.py", line 716, in do_execute<br>    cursor.execute(statement, parameters)<br>sqlite3.IntegrityError: UNIQUE constraint failed: subscriber.username, subscriber.domain<span class="gmail-im"><br><br>The above exception was the direct cause of the following exception:<br><br>Traceback (most recent call last):<br></span>  File "/usr/src/kamclienv/venv/bin/kamcli", line 33, in <module><br>    sys.exit(load_entry_point('kamcli', 'console_scripts', 'kamcli')())<br>  File "/usr/src/kamclienv/venv/lib/python3.7/site-packages/click/core.py", line 829, in __call__<br>    return self.main(*args, **kwargs)<br>  File "/usr/src/kamclienv/venv/lib/python3.7/site-packages/click/core.py", line 782, in main<br>    rv = self.invoke(ctx)<br>  File "/usr/src/kamclienv/venv/lib/python3.7/site-packages/click/core.py", line 1259, in invoke<br>    return _process_result(sub_ctx.command.invoke(sub_ctx))<br>  File "/usr/src/kamclienv/venv/lib/python3.7/site-packages/click/core.py", line 1259, in invoke<br>    return _process_result(sub_ctx.command.invoke(sub_ctx))<br>  File "/usr/src/kamclienv/venv/lib/python3.7/site-packages/click/core.py", line 1066, in invoke<br>    return ctx.invoke(self.callback, **ctx.params)<br>  File "/usr/src/kamclienv/venv/lib/python3.7/site-packages/click/core.py", line 610, in invoke<br>    return callback(*args, **kwargs)<br>  File "/usr/src/kamclienv/venv/lib/python3.7/site-packages/click/decorators.py", line 73, in new_func<span class="gmail-im"><br>    return ctx.invoke(f, obj, *args, **kwargs)<br></span>  File "/usr/src/kamclienv/venv/lib/python3.7/site-packages/click/core.py", line 610, in invoke<br>    return callback(*args, **kwargs)<br>  File "/usr/src/kamclienv/kamcli/kamcli/commands/cmd_subscriber.py", line 69, in subscriber_add<br>    ha1b,<span class="gmail-im"><br>  File "<string>", line 2, in execute<br></span>  File "/usr/src/kamclienv/venv/lib/python3.7/site-packages/sqlalchemy/util/deprecations.py", line 390, in warned<br>    return fn(*args, **kwargs)<br>  File "/usr/src/kamclienv/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 3037, in execute<br>    return connection.execute(statement, *multiparams, **params)<br>  File "/usr/src/kamclienv/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1190, in execute<br>    future=False,<br>  File "/usr/src/kamclienv/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1491, in _exec_driver_sql<br>    distilled_parameters,<br>  File "/usr/src/kamclienv/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1749, in _execute_context<span class="gmail-im"><br>    e, statement, parameters, cursor, context<br></span>  File "/usr/src/kamclienv/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1930, in _handle_dbapi_exception<span class="gmail-im"><br>    sqlalchemy_exception, with_traceback=exc_info[2], from_=e<br></span>  File "/usr/src/kamclienv/venv/lib/python3.7/site-packages/sqlalchemy/util/compat.py", line 211, in raise_<br>    raise exception<br>  File "/usr/src/kamclienv/venv/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1706, in _execute_context<br>    cursor, statement, parameters, context<br>  File "/usr/src/kamclienv/venv/lib/python3.7/site-packages/sqlalchemy/engine/default.py", line 716, in do_execute<br>    cursor.execute(statement, parameters)<br>sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: subscriber.username, subscriber.domain<br>[SQL: insert into subscriber (username, domain, password, ha1, ha1b) values ('test', '<a href="http://sip.test.dev" target="_blank">sip.test.dev</a>', 'passwordtest', '96a1efd95bcd6e8e573d07ebdacab623', '025f1dc363fa8c1ce1d7f2069d94ed0f')]<br>(Background on this error at: <a href="http://sqlalche.me/e/14/gkpj" target="_blank">http://sqlalche.me/e/14/gkpj</a>)</div><div><br></div><div>best regards</div><div class="gmail-yj6qo gmail-ajU"><div id="gmail-:2rl" class="gmail-ajR" tabindex="0"><img class="gmail-ajT" src="https://ssl.gstatic.com/ui/v1/icons/mail/images/cleardot.gif"></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Apr 21, 2021 at 3:10 PM Daniel-Constantin Mierla <<a href="mailto:miconda@gmail.com">miconda@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
  
    
  
  <div>
    <p>Hello,<br>
    </p>
    <div>On 18.04.21 22:56, beer Ll wrote:<br>
    </div>
    <blockquote type="cite">
      
      <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" target="_blank">sip.test.dev</a>', 'password',
          '4380ea9069e888b5fc92996495a0f481',
          '3a36aeb0df7f4504cc5d9b97dab540e5')]<br>
          (Background on this error at: <a href="http://sqlalche.me/e/14/e3q8" target="_blank">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" target="_blank">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" target="_blank">sip.test.dev</a>|password|4380ea9069e888b5fc92996495a0f481|3a36aeb0df7f4504cc5d9b97dab540e5<br>
        </div>
      </div>
    </blockquote>
    <p>thanks for reporting!</p>
    <p>I could reproduce the sqlite problems, they seemed to be related
      to the sql driver for sqlalchemy that was not supporting variadic
      number of parameters to the sql query execution function. I
      replaced with string formatting and now seems to work. Try with
      latest git version and report back if there are still issues.</p>
    <p>The one for postgres I couldn't reproduce, but it was after a
      commit related to output style default value. Although it didn't
      seem related, it worked what I tried for postgres. Again, test now
      with latest git version and if there is still a problem, provide
      updated traces.</p>
    <p>Cheers,<br>
      Daniel<br>
    </p>
    <pre cols="72">-- 
Daniel-Constantin Mierla -- <a href="http://www.asipto.com" target="_blank">www.asipto.com</a>
<a href="http://www.twitter.com/miconda" target="_blank">www.twitter.com/miconda</a> -- <a href="http://www.linkedin.com/in/miconda" target="_blank">www.linkedin.com/in/miconda</a>
Kamailio Advanced Training - Online
May 17-20, 2021 (Europe Timezone) - June 7-10, 2021 (America Timezone)
  * <a href="https://www.asipto.com/sw/kamailio-advanced-training-online/" target="_blank">https://www.asipto.com/sw/kamailio-advanced-training-online/</a></pre>
  </div>

</blockquote></div>