0.7.3 (February 22, 2023)#


  • Compatibility with Python 3.11.

  • first() and last() to create a measure equal to, respectively, the first and the last value of the passed measure on a given level.


  • The telemetry can only be disabled by installing the atoti-plus plugin.

User interface#

  • Upgraded Atoti UI to 5.0.20.


  • Passing a Mapping to join(). Pass a Condition instead:

    -     mapping={"Product ID": "ID", "Date": "Date"},
    +     (sales_table["Product ID"] == products_table["ID"])
    +     & (sales_table["Date"] == products_table["Date"]),

    Switching to Condition provides better autocompletion in IPython, leads to better error messages in case of typo, and is consistent with the rest of the API.

  • User.roles. Use atoti_plus.UserServiceClient.individual_roles instead:

    - user.roles
    + user_service_client.individual_roles[user.username]
  • Passing roles to atoti_plus.BasicSecurity.create_user() and atoti_plus.KerberosSecurity.create_user(). Use atoti_plus.UserServiceClient.individual_roles instead. The automatic assignment of the ROLE_USER role when using atoti_plus.BasicSecurity.create_user() will also be removed in the next breaking release:

      admin = user_service_client.basic.create_user(
    -     roles=["ROLE_ADMIN"],
    + user_service_client.individual_roles[admin.username].update(["ROLE_USER", "ROLE_ADMIN"])


  • Roles being reset when fetching users (e.g. user_service_client.basic.users.keys()).

  • Session becoming unable to make queries after some time due to JWT expiration.

  • RuntimeWarning when running the python -m atoti.copy_tutorial tutorial command (issue #611).

User interface#

  • Blank page when going to the Database section of the Admin UI.