
The TM1py community is growing bigger and bigger. For each release, we can see the number of contributions increasing. For v1.6, we would like to thank @rkvinoth, @scrambldchannel, @andreyea, @adscheevel, @wimgielis, @rclapp for contributing code to this release, and many others for reporting bugs and requesting features.
TM1py v1.6 includes many new features and fixes, here some highlights:
Impersonate a user
It is now possible to log in with an admin account and get the data with a specific user’s access. Just need to add the new parameter impersonate=”Marius” when creating a new connection and instead of seeing the data as your user (user=”admin”), you will see it with Marius’ access. It will give you also access to all private objects.
with TM1Service(address="", port=12354, ssl=True, user="admin", password="apple", impersonate="Marius") as tm1: print(tm1.whoami)
This could be very useful:
-
To migrate users’ private views and subsets from one environment to another.
-
To write a script that is security-aware (extracting data with specific user access).
-
When testing security with Python.
Support for Windows authentication
With the latest addition of security mode 3 (IntegratedSecurityMode3), TM1py supports now all security mode (from 1 to 5).
When creating a new TM1Service object, you just need to add integrated_login=True:
tm1 = TM1Service(address=servername, port=instanceport, ssl=True, integrated_login=True)
Write even faster to a cube
A new function was added to the TM1Service, it is called write. The function will execute unbound processes (when use_ti=True) to load the data from a cell set in to the cube:
with TM1Service(address="", port=12354, ssl=True, user="admin", password="apple") as tm1: cells = dict() cells["e1", "e1"] = 1 cells["e2", "e2"] = 2 tm1.cells.write("c1", cells, use_ti=True)
Support for sandboxes
A new object called Sandbox has been added. With this new object, it is now possibe to create and delete sandboxes.
with TM1Service(address="", port=12354, ssl=True, user="admin", password="apple") as tm1: sandbox = Sandbox(name="My Sandbox") tm1.sandboxes.create(sandbox)
To write data into a sandbox, you will need to add the parameter sandbox_name to the write function as below.
tm1.cells.write(cube_name, cells, sandbox_name="My Sandbox")
To retrieve data from a sandbox, you will need to add the parameter sandbox_name as below:
df = tm1.cells.execute_mdx_dataframe(mdx, sandbox_name="My Sandbox")
Load data from a data frame
A new function called write_dataframe has been added to facilitate loading data into a cube from a data frame. No need to convert the dataframe into a cellset anymore, just call the write_dataframe function as below:
with TM1Service(address="", port=12354, ssl=True, user="admin", password="apple") as tm1: df = pd.DataFrame({ 'd1': ['e1', 'e2'], 'd2': ['e1', 'e2'], 'Value': [1, 2]}) tm1.cells.write_dataframe('c1', df)
and much more…
A complete list of all enhancements and fixes can be found in the TM1py 1.6 Release Notes available on GitHub.