Skip to content

Connection

Source code in pbi_pyadomd/conn.py
class Connection:
    conn: AdomdConnection
    """The underlying C# AdomdConnection object."""
    reader: Reader
    """The python reader for the connection, used to execute queries."""

    def __init__(self, conn_str: str) -> None:
        self.conn = AdomdConnection(conn_str)

    def clone(self) -> "Connection":
        """Clones the connection."""
        return Connection(self.conn.ConnectionString)

    def close(self) -> None:
        """Closes the connection."""
        self.conn.Close()
        self.conn.Dispose()

    def open(self) -> Self:
        """Opens the connection."""
        self.conn.Open()
        return self

    @property
    def state(self) -> ConnectionState:
        """1 = Open, 0 = Closed."""
        return ConnectionState(self.conn.State.value__)

    def __enter__(self) -> Self:
        if self.state != ConnectionState.Open:
            self.open()
        return self

    def __exit__(
        self,
        exc_type: type[BaseException] | None,
        exc_value: BaseException | None,
        traceback: "TracebackType | None",  # noqa: PYI036
    ) -> None:
        self.close()

    def execute_xml(
        self,
        query: str,
        query_name: str | None = None,
    ) -> bs4.BeautifulSoup:
        query_name = query_name or ""
        logger.debug("execute XML query", query_name=query_name)
        cmd = AdomdCommand(query, self.conn)

        with Reader(cmd.ExecuteXmlReader()) as reader:
            logger.debug("reading query", query_name=query_name)
            lines = [reader.read_outer_xml()]
            while lines[-1] != "":
                lines.append(reader.read_outer_xml())
            ret = bs4.BeautifulSoup("".join(lines), "xml")
            for node in ret.find_all():
                assert isinstance(node, bs4.element.Tag)
                node.name = utils._decode_name(node.name)

        return ret

    def execute_non_query(self, query: str, query_name: str | None = None) -> Self:
        """Executes a non-query DAX command.

        Returns:
            Self: The connection object itself for method chaining.

        """
        query_name = query_name or ""
        logger.debug("execute DAX query", query_name=query_name)
        cmd = AdomdCommand(query, self.conn)
        cmd.ExecuteNonQuery()
        return self

    def execute_dax(self, query: str, query_name: str | None = None) -> Reader:
        """Executes a DAX query and returns a Reader object.

        Args:
            query (str): The DAX query to execute.
            query_name (str | None): Optional name for the query, used for logging.

        Returns:
            Reader: A Reader object to read the results of the query.

        """
        query_name = query_name or ""
        logger.debug("execute DAX query", query_name=query_name)
        cmd = AdomdCommand(query, self.conn)
        return Reader(cmd.ExecuteReader())

conn instance-attribute

conn: AdomdConnection = AdomdConnection(conn_str)

The underlying C# AdomdConnection object.

reader instance-attribute

reader: Reader

The python reader for the connection, used to execute queries.

state property

state: ConnectionState

1 = Open, 0 = Closed.

clone

clone() -> Connection

Clones the connection.

Source code in pbi_pyadomd/conn.py
def clone(self) -> "Connection":
    """Clones the connection."""
    return Connection(self.conn.ConnectionString)

close

close() -> None

Closes the connection.

Source code in pbi_pyadomd/conn.py
def close(self) -> None:
    """Closes the connection."""
    self.conn.Close()
    self.conn.Dispose()

execute_dax

execute_dax(query: str, query_name: str | None = None) -> Reader

Executes a DAX query and returns a Reader object.

Parameters:

Name Type Description Default
query str

The DAX query to execute.

required
query_name str | None

Optional name for the query, used for logging.

None

Returns:

Name Type Description
Reader Reader

A Reader object to read the results of the query.

Source code in pbi_pyadomd/conn.py
def execute_dax(self, query: str, query_name: str | None = None) -> Reader:
    """Executes a DAX query and returns a Reader object.

    Args:
        query (str): The DAX query to execute.
        query_name (str | None): Optional name for the query, used for logging.

    Returns:
        Reader: A Reader object to read the results of the query.

    """
    query_name = query_name or ""
    logger.debug("execute DAX query", query_name=query_name)
    cmd = AdomdCommand(query, self.conn)
    return Reader(cmd.ExecuteReader())

execute_non_query

execute_non_query(query: str, query_name: str | None = None) -> Self

Executes a non-query DAX command.

Returns:

Name Type Description
Self Self

The connection object itself for method chaining.

Source code in pbi_pyadomd/conn.py
def execute_non_query(self, query: str, query_name: str | None = None) -> Self:
    """Executes a non-query DAX command.

    Returns:
        Self: The connection object itself for method chaining.

    """
    query_name = query_name or ""
    logger.debug("execute DAX query", query_name=query_name)
    cmd = AdomdCommand(query, self.conn)
    cmd.ExecuteNonQuery()
    return self

open

open() -> Self

Opens the connection.

Source code in pbi_pyadomd/conn.py
def open(self) -> Self:
    """Opens the connection."""
    self.conn.Open()
    return self