Product:
Python 3.12
Planning Analytics 2.0.9.19
Microsoft Windows 2019 server
Install Python, and tm1py. https://code.cubewise.com/blog/installing-tm1py/
Issue:
How get a value from a dict object in python?
This code part will list the servers on localhost (from the tm1py utils lib)
(you need to adjust the code to make the things you want)
import csv
import http.client as http_client
import json
import ssl
from enum import Enum, unique
from io import StringIO
from typing import Any, Dict, List, Tuple, Iterable, Optional, Generator, Union, Callable
from urllib.parse import unquote
import os
import sys
from datetime import datetime
from TM1py.Services import TM1Service
import requests
from mdxpy import MdxBuilder, Member
from requests.adapters import HTTPAdapter
from TM1py.Exceptions.Exceptions import TM1pyVersionException, TM1pyNotAdminException, TM1pyNotDataAdminException, \
TM1pyNotSecurityAdminException, TM1pyNotOpsAdminException, TM1pyVersionDeprecationException
try:
import pandas as pd
import numpy as np
_has_pandas = True
except ImportError:
_has_pandas = False
# --- parameters and settings
PORTS_TO_EXCLUDE = []
# TM1 connection settings (IntegratedSecurityMode = 1 )
ADDRESS = 'localhost'
USER = 'admin'
PWD = 'apple'
# ===== define a function to be called in the code
def get_all_servers_from_adminhost(adminhost='localhost', port=None, use_ssl=False) -> List:
from TM1py.Objects import Server
""" Ask Adminhost for TM1 Servers
:param adminhost: IP or DNS Alias of the adminhost
:param port: numeric port to connect to adminhost
:param ssl: True for secure connection
:return: List of Servers (instances of the TM1py.Server class)
"""
if not use_ssl:
conn = http_client.HTTPConnection(adminhost, port or 5895)
else:
conn = http_client.HTTPSConnection(adminhost, port or 5898, context=ssl._create_unverified_context())
request = '/api/v1/Servers'
conn.request('GET', request, body='')
response = conn.getresponse().read().decode('utf-8')
response_as_dict = json.loads(response)
servers = []
print (response_as_dict) # --- as inside function will not show ---
for server_as_dict in response_as_dict['value']:
server = Server(server_as_dict)
servers.append(server)
return servers
# ===== end of function by go back to beginning of line
# get TM1 models registered with the admin server
tm1_instances_on_server = get_all_servers_from_adminhost(ADDRESS, None, True)
# --- show the list of servers with data as dict
print (tm1_instances_on_server)
# --- for each item in list do this
for tm1_instance in tm1_instances_on_server:
# get TM1 server information
port = tm1_instance.http_port_number
# --- show one value for that server from a dict
print (tm1_instance.last_updated)
print (port)
if port in PORTS_TO_EXCLUDE:
continue
ssl = tm1_instance.using_ssl
# --- connect to the tm1 server to get some more values
tm1 = TM1Service(address=ADDRESS, port=port, user=USER, password=PWD, namespace='', gateway='', ssl=ssl)
# --- use the function
active_configuration = tm1.server.get_active_configuration()
# print (active_configuration)
print (active_configuration['Access']['HTTP'])

print (tm1_instances_on_server) show the content of that variable, to be a list of dictionary’s.
All print statement in code, will be a line in the terminal window shown above. Use print to debug you code when you develop.
https://www.datacamp.com/tutorial/setting-up-vscode-python
Solution:
print (active_configuration[‘Access’][‘HTTP’]) , you need to add the elements of the other lists inside the list, to get a value.
Traceback (most recent call last):
File “c:\temp\test2.py”, line 106, in <module>
print (active_configuration[‘Access’][‘Administration’])
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
KeyError: ‘Administration’ = you get a error if the key does not exist in the combo object of list and dict.
A Python dictionary (aka dict) is a series of key-value pairs referenced by key name. Dicts are delimited by curly braces. Key-value pairs are separated by commas. A key is separated from its value by a colon.
A list is an ordered collection of items, whereas a dictionary is an unordered data collection in a key: value pair. Elements from the list can be accessed using the index, while the elements of the dictionary can be accessed using keys.
Add this to the code to get a better view of the options:
from pprint import pprint pprint (vars())

Above you can see the keys you can use to list the values in the print statement from the dict/list.
print (active_configuration[‘Access’][‘CAM’][‘ClientPingCAMPassport’]) will give you the value P0DT00H15M00S.
More Information:
https://packetpushers.net/blog/how-to-reference-nested-python-lists-dictionaries/
https://readthedocs.org/projects/tm1py/downloads/pdf/latest/
https://www.tm1forum.com/viewtopic.php?t=15531
https://www.shiksha.com/online-courses/articles/difference-between-list-and-dictionary-in-python/
https://www.geeksforgeeks.org/difference-between-list-and-dictionary-in-python/
https://youtu.be/daefaLgNkw0?si=-RmMgixEKJtrtm4B
https://www.zyte.com/blog/json-parsing-with-python/
https://www.digitalocean.com/community/tutorials/python-pretty-print-json
Example of how to print a dict value:
import json
from types import SimpleNamespace
data = '{"name": "John Smith", "hometown": {"name": "New York", "id": 123}}'
# Parse JSON into an object with attributes corresponding to dict keys.
x = json.loads(data, object_hook=lambda d: SimpleNamespace(**d))
print(x.name, x.hometown.name, x.hometown.id)
https://www.tutorialspoint.com/how-to-print-all-the-keys-of-a-dictionary-in-python
https://www.tutorialspoint.com/how-to-print-all-the-values-of-a-dictionary-in-python
https://www.altcademy.com/blog/how-to-print-a-dictionary-in-python/
https://favtutor.com/blogs/print-object-attributes-python
https://www.geeksforgeeks.org/how-to-create-a-list-of-object-in-python-class/
https://flexiple.com/python/python-print-list
https://blog.enterprisedna.co/python-how-to-print-a-list-6-ways-you-need-to-know/
https://code.visualstudio.com/docs/languages/python
https://code.visualstudio.com/docs/python/python-tutorial