MicroStrategy ONE

Connettersi a MicroStrategy utilizzando un token di identità di Workstation

Il mstrio-py La libreria Python fornisce un file Modulo di connessione per avviare una sessione con Intelligence Server. Supporta le modalità di autenticazione Standard e LDAP.

Per avviare la sessione, è necessario inserire l'URL del server API REST di MicroStrategy, l'ID progetto, il nome utente e la password.

Copia
from mstrio.connection import Connection

base_url = "https://your-microstrategy-server.com/MicroStrategyLibrary/api"
mstr_username = "Username"
mstr_password = "Password"
project_id = "PROJECT_ID"
conn = Connection(base_url, mstr_username, mstr_password, project_id=project_id)

È possibile modificare gli script eseguiti in Workstation per accedere alla variabile globale workstationData e utilizzare il token di identità dell'ambiente in cui è attualmente archiviato. Avviando la sessione in questo modo, gli utenti non dovranno più inserire l'URL del server API REST di MicroStrategy e le proprie credenziali nello script.

Copia
import requests
from typing import Union
from mstrio.connection import Connection
from requests.cookies import RequestsCookieJar

def get_connection(workstation_data: dict, project_id: str = None,
                   project_name: str = None) -> Union[Connection, None]:
    """Get connection based on data saved in memory of Workstation. It is
    possible to provide 'project_id' or 'project_name' to select project.
    
    When both `project_id` and `project_name` are `None`, project selection
    is cleared. When both `project_id` and `project_name` are provided,
    `project_name` is ignored.
    
    Project can be also selected later by calling function 'select_project'
    on Connection object.
    
    Args:
        workstation_data (object): object which is stored in a 'workstationData'
            variable within Workstation
        project_id (str, optional): id of project to select
        project_name (str, optional): name of project to select
        
    Returns:
        connection to I-Server or None is case of some error
    """
    
    try:
        print('Creating connection from Workstation Data object...', flush=True)
        # get base url from Workstation Data object
        base_url = workstation_data['defaultEnvironment']['url']
        # get headers from Workstation Data object
        headers = workstation_data['defaultEnvironment']['headers']
        # get cookies from Workstation Data object
        cookies = workstation_data['defaultEnvironment']['cookies']
        # prepare cookies for request
        jar = RequestsCookieJar()
        for c in cookies:
            cookie_values = {'domain': '', 'path': '/'}
            cookie_values.update(c)
            jar.set(cookie_values['name'], cookie_values['value'],
                    domain=cookie_values['domain'], path=cookie_values['path'])
    except Exception as e:
        print('Some error occurred while preparing data to get identity token:')
        print(e)
        return None
    # get identity token
    r = requests.post(base_url + 'api/auth/identityToken', headers=headers, cookies=jar)
    if r.ok:
        # create connection to I-Server
        return Connection(base_url, identity_token=r.headers['X-MSTR-IdentityToken'],
                          project_id=project_id, project_name=project_name)
    else:
        print('HTTP %i - %s, Message %s' % (r.status_code, r.reason, r.text), flush=True)
        return None
    
# get connection without selecting project
# conn = get_connection(workstationData)
# select project for connection
# conn.select_project(project_id = mstr_tutorial_id, project_name)
# get connection and select project (you can use id or name of project)

mstr_tutorial_id = 'B7CA92F04B9FAE8D941C3E9B7E0CD754'
mstr_tutorial_name = 'MicroStrategy Tutorial'

conn = get_connection(workstation_data=workstationData, project_id=mstr_tutorial_id)