What’s New in Atoti Python 0.7.3?

Hetal Kapadia

Python 3.11 Compatibility, an Updated Way to Define Joins, Telemetry Changes Ahead.

Hey Atoti Community! We’re super excited to announce our Atoti Python 0.7.3 release. Wondering what we have in store for you? While breaking nothing this release, we have some great updates ahead. Read on to see some of the changes we’ve implemented, or check out our changelog for the full list of updates.


Python Compatibility

Excited by the promising performance improvements in Python 3.11, but bummed Atoti wasn’t compatible with it? Well, fret no more! With 0.7.3, Atoti is now compatible with Python 3.11.

First and Last

Sometimes need to know the first value of a measure along a given level? Same, TBH. That’s why we’ve added atoti.function.first(). For example, if we wanted to see how price changed since the launch of a product, we can easily do so using first()

table demonstrating atoti.function.first()

Note: we have added last() as well.


We collect telemetry data to help us understand the usage and performance of Atoti CE. This is non-personally identifiable information which details things like error messages, stack traces, and when and where (based on IP) sessions are create. Details regarding our telemetry capture are outlined in our EULA available on our website. Going forward, this feature can be disabled for paid users by installing the Atoti-plus plugin.


Table Join Mappings

You know we love to take full advantage of Atoti’s intelligence on table joins in our use cases: if two tables have columns with the same name, Atoti infers that the join ought to occur along those columns. We can also specify on what columns to join using mapping as can be seen from this snippet of our Intraday Liquidity notebook:

payment_tbl.join(time_tbl, mapping={"Settlement_Time": "Time"})

While you can still do so for now, going forward, set it as a condition like so:

payment_tbl.join(time_tbl, (payment_tbl[“Settlement_Time”] == time_tbl[“Time”]))

Roles in Security Implementation

Security features are available for paid Atoti users. Previously, we would use the roles parameter of atoti_plus.BasicSecurity.create_user() to define our roles, as can be seen from this example inspired by our Security Implementation notebook:

Inspire_manager = usc.basic.create_user("Inspire_manager", password="Password", roles=("ROLE_SHARE"))

While you can still do so for now, going forward, we’ll be dropping the role parameter and we can update the applicable roles like so: 


Note: the same is true for atoti_plus.KerberosSecurity.create_user().


Thank you for reading. As always, we’re constantly improving Atoti. This was a highlight of some of the changes in our Atoti 0.7.3 release. Have an idea or a question? Join the conversation on GitHub. For a complete list of changes, please visit our changelog.

Like this post ? Please share

Latest Articles

View All

New market data measure starter guide

Read More

Hierarchy Fundamentals in Atoti

Read More


Join our Community for the latest insights and information about Atoti