algokit_utils.clients.client_manager ==================================== .. py:module:: algokit_utils.clients.client_manager Classes ------- .. autoapisummary:: algokit_utils.clients.client_manager.AlgoSdkClients algokit_utils.clients.client_manager.NetworkDetail algokit_utils.clients.client_manager.ClientManager Module Contents --------------- .. py:class:: AlgoSdkClients(algod: algosdk.v2client.algod.AlgodClient, indexer: algosdk.v2client.indexer.IndexerClient | None = None, kmd: algosdk.kmd.KMDClient | None = None) Container for Algorand SDK client instances. Holds references to Algod, Indexer and KMD clients. :param algod: Algod client instance :param indexer: Optional Indexer client instance :param kmd: Optional KMD client instance .. py:attribute:: algod .. py:attribute:: indexer :value: None .. py:attribute:: kmd :value: None .. py:class:: NetworkDetail Details about an Algorand network. Contains network type flags and genesis information. .. py:attribute:: is_testnet :type: bool Whether the network is a testnet .. py:attribute:: is_mainnet :type: bool Whether the network is a mainnet .. py:attribute:: is_localnet :type: bool Whether the network is a localnet .. py:attribute:: genesis_id :type: str The genesis ID of the network .. py:attribute:: genesis_hash :type: str The genesis hash of the network .. py:class:: ClientManager(clients_or_configs: algokit_utils.models.network.AlgoClientConfigs | AlgoSdkClients, algorand_client: algokit_utils.algorand.AlgorandClient) Manager for Algorand SDK clients. Provides access to Algod, Indexer and KMD clients and helper methods for working with them. :param clients_or_configs: Either client instances or client configurations :param algorand_client: AlgorandClient instance :example: >>> # Algod only >>> client_manager = ClientManager(algod_client) >>> # Algod and Indexer >>> client_manager = ClientManager(algod_client, indexer_client) >>> # Algod config only >>> client_manager = ClientManager(ClientManager.get_algod_config_from_environment()) >>> # Algod and Indexer config >>> client_manager = ClientManager(ClientManager.get_algod_config_from_environment(), ... ClientManager.get_indexer_config_from_environment()) .. py:property:: algod :type: algosdk.v2client.algod.AlgodClient Returns an algosdk Algod API client. :return: Algod client instance .. py:property:: indexer :type: algosdk.v2client.indexer.IndexerClient Returns an algosdk Indexer API client. :raises ValueError: If no Indexer client is configured :return: Indexer client instance .. py:property:: indexer_if_present :type: algosdk.v2client.indexer.IndexerClient | None Returns the Indexer client if configured, otherwise None. :return: Indexer client instance or None .. py:property:: kmd :type: algosdk.kmd.KMDClient Returns an algosdk KMD API client. :raises ValueError: If no KMD client is configured :return: KMD client instance .. py:method:: network() -> NetworkDetail Get details about the connected Algorand network. :return: Network details including type and genesis information :example: >>> client_manager = ClientManager(algod_client) >>> network_detail = client_manager.network() .. py:method:: is_localnet() -> bool Check if connected to a local network. :return: True if connected to a local network .. py:method:: is_testnet() -> bool Check if connected to TestNet. :return: True if connected to TestNet .. py:method:: is_mainnet() -> bool Check if connected to MainNet. :return: True if connected to MainNet .. py:method:: get_testnet_dispenser(auth_token: str | None = None, request_timeout: int | None = None) -> algokit_utils.clients.dispenser_api_client.TestNetDispenserApiClient Get a TestNet dispenser API client. :param auth_token: Optional authentication token :param request_timeout: Optional request timeout in seconds :return: TestNet dispenser client instance .. py:method:: get_app_factory(app_spec: algokit_utils.applications.app_spec.arc56.Arc56Contract | algokit_utils._legacy_v2.application_specification.ApplicationSpecification | str, app_name: str | None = None, default_sender: str | None = None, default_signer: algosdk.atomic_transaction_composer.TransactionSigner | None = None, version: str | None = None, compilation_params: algokit_utils.applications.app_client.AppClientCompilationParams | None = None) -> algokit_utils.applications.app_factory.AppFactory Get an application factory for deploying smart contracts. :param app_spec: Application specification :param app_name: Optional application name :param default_sender: Optional default sender address :param default_signer: Optional default transaction signer :param version: Optional version string :param compilation_params: Optional compilation parameters :raises ValueError: If no Algorand client is configured :return: Application factory instance .. py:method:: get_app_client_by_id(app_spec: algokit_utils.applications.app_spec.arc56.Arc56Contract | algokit_utils._legacy_v2.application_specification.ApplicationSpecification | str, app_id: int, app_name: str | None = None, default_sender: str | None = None, default_signer: algosdk.atomic_transaction_composer.TransactionSigner | None = None, approval_source_map: algosdk.source_map.SourceMap | None = None, clear_source_map: algosdk.source_map.SourceMap | None = None) -> algokit_utils.applications.app_client.AppClient Get an application client for an existing application by ID. :param app_spec: Application specification :param app_id: Application ID :param app_name: Optional application name :param default_sender: Optional default sender address :param default_signer: Optional default transaction signer :param approval_source_map: Optional approval program source map :param clear_source_map: Optional clear program source map :raises ValueError: If no Algorand client is configured :return: Application client instance .. py:method:: get_app_client_by_network(app_spec: algokit_utils.applications.app_spec.arc56.Arc56Contract | algokit_utils._legacy_v2.application_specification.ApplicationSpecification | str, app_name: str | None = None, default_sender: str | None = None, default_signer: algosdk.atomic_transaction_composer.TransactionSigner | None = None, approval_source_map: algosdk.source_map.SourceMap | None = None, clear_source_map: algosdk.source_map.SourceMap | None = None) -> algokit_utils.applications.app_client.AppClient Get an application client for an existing application by network. :param app_spec: Application specification :param app_name: Optional application name :param default_sender: Optional default sender address :param default_signer: Optional default transaction signer :param approval_source_map: Optional approval program source map :param clear_source_map: Optional clear program source map :raises ValueError: If no Algorand client is configured :return: Application client instance .. py:method:: get_app_client_by_creator_and_name(creator_address: str, app_name: str, app_spec: algokit_utils.applications.app_spec.arc56.Arc56Contract | algokit_utils._legacy_v2.application_specification.ApplicationSpecification | str, default_sender: str | None = None, default_signer: algosdk.atomic_transaction_composer.TransactionSigner | None = None, ignore_cache: bool | None = None, app_lookup_cache: algokit_utils.applications.app_deployer.ApplicationLookup | None = None, approval_source_map: algosdk.source_map.SourceMap | None = None, clear_source_map: algosdk.source_map.SourceMap | None = None) -> algokit_utils.applications.app_client.AppClient Get an application client by creator address and name. :param creator_address: Creator address :param app_name: Application name :param app_spec: Application specification :param default_sender: Optional default sender address :param default_signer: Optional default transaction signer :param ignore_cache: Optional flag to ignore cache :param app_lookup_cache: Optional app lookup cache :param approval_source_map: Optional approval program source map :param clear_source_map: Optional clear program source map :return: Application client instance .. py:method:: get_algod_client(config: algokit_utils.models.network.AlgoClientNetworkConfig) -> algosdk.v2client.algod.AlgodClient :staticmethod: Get an Algod client from config or environment. :param config: Optional client configuration :return: Algod client instance .. py:method:: get_algod_client_from_environment() -> algosdk.v2client.algod.AlgodClient :staticmethod: Get an Algod client from environment variables. :return: Algod client instance .. py:method:: get_kmd_client(config: algokit_utils.models.network.AlgoClientNetworkConfig) -> algosdk.kmd.KMDClient :staticmethod: Get a KMD client from config or environment. :param config: Optional client configuration :return: KMD client instance .. py:method:: get_kmd_client_from_environment() -> algosdk.kmd.KMDClient :staticmethod: Get a KMD client from environment variables. :return: KMD client instance .. py:method:: get_indexer_client(config: algokit_utils.models.network.AlgoClientNetworkConfig) -> algosdk.v2client.indexer.IndexerClient :staticmethod: Get an Indexer client from config or environment. :param config: Optional client configuration :return: Indexer client instance .. py:method:: get_indexer_client_from_environment() -> algosdk.v2client.indexer.IndexerClient :staticmethod: Get an Indexer client from environment variables. :return: Indexer client instance .. py:method:: genesis_id_is_localnet(genesis_id: str | None) -> bool :staticmethod: Check if a genesis ID indicates a local network. :param genesis_id: Genesis ID to check :return: True if genesis ID indicates a local network :example: >>> ClientManager.genesis_id_is_localnet("devnet-v1") .. py:method:: get_typed_app_client_by_creator_and_name(typed_client: type[TypedAppClientT], *, creator_address: str, app_name: str, default_sender: str | None = None, default_signer: algosdk.atomic_transaction_composer.TransactionSigner | None = None, ignore_cache: bool | None = None, app_lookup_cache: algokit_utils.applications.app_deployer.ApplicationLookup | None = None) -> TypedAppClientT Get a typed application client by creator address and name. :param typed_client: Typed client class :param creator_address: Creator address :param app_name: Application name :param default_sender: Optional default sender address :param default_signer: Optional default transaction signer :param ignore_cache: Optional flag to ignore cache :param app_lookup_cache: Optional app lookup cache :raises ValueError: If no Algorand client is configured :return: Typed application client instance :example: >>> client_manager = ClientManager(algod_client) >>> typed_app_client = client_manager.get_typed_app_client_by_creator_and_name( ... typed_client=MyAppClient, ... creator_address="creator_address", ... app_name="app_name", ... ) .. py:method:: get_typed_app_client_by_id(typed_client: type[TypedAppClientT], *, app_id: int, app_name: str | None = None, default_sender: str | None = None, default_signer: algosdk.atomic_transaction_composer.TransactionSigner | None = None, approval_source_map: algosdk.source_map.SourceMap | None = None, clear_source_map: algosdk.source_map.SourceMap | None = None) -> TypedAppClientT Get a typed application client by ID. :param typed_client: Typed client class :param app_id: Application ID :param app_name: Optional application name :param default_sender: Optional default sender address :param default_signer: Optional default transaction signer :param approval_source_map: Optional approval program source map :param clear_source_map: Optional clear program source map :raises ValueError: If no Algorand client is configured :return: Typed application client instance :example: >>> client_manager = ClientManager(algod_client) >>> typed_app_client = client_manager.get_typed_app_client_by_id( ... typed_client=MyAppClient, ... app_id=1234567890, ... ) .. py:method:: get_typed_app_client_by_network(typed_client: type[TypedAppClientT], *, app_name: str | None = None, default_sender: str | None = None, default_signer: algosdk.atomic_transaction_composer.TransactionSigner | None = None, approval_source_map: algosdk.source_map.SourceMap | None = None, clear_source_map: algosdk.source_map.SourceMap | None = None) -> TypedAppClientT Returns a new typed client, resolves the app ID for the current network. Uses pre-determined network-specific app IDs specified in the ARC-56 app spec. If no IDs are in the app spec or the network isn't recognised, an error is thrown. :param typed_client: The typed client class to instantiate :param app_name: Optional application name :param default_sender: Optional default sender address :param default_signer: Optional default transaction signer :param approval_source_map: Optional approval program source map :param clear_source_map: Optional clear program source map :raises ValueError: If no Algorand client is configured :return: The typed client instance :example: >>> client_manager = ClientManager(algod_client) >>> typed_app_client = client_manager.get_typed_app_client_by_network( ... typed_client=MyAppClient, ... app_name="app_name", ... ) .. py:method:: get_typed_app_factory(typed_factory: type[TypedFactoryT], *, app_name: str | None = None, default_sender: str | None = None, default_signer: algosdk.atomic_transaction_composer.TransactionSigner | None = None, version: str | None = None, compilation_params: algokit_utils.applications.app_client.AppClientCompilationParams | None = None) -> TypedFactoryT Get a typed application factory. :param typed_factory: Typed factory class :param app_name: Optional application name :param default_sender: Optional default sender address :param default_signer: Optional default transaction signer :param version: Optional version string :param compilation_params: Optional compilation parameters :raises ValueError: If no Algorand client is configured :return: Typed application factory instance :example: >>> client_manager = ClientManager(algod_client) >>> typed_app_factory = client_manager.get_typed_app_factory( ... typed_factory=MyAppFactory, ... app_name="app_name", ... ) .. py:method:: get_config_from_environment_or_localnet() -> algokit_utils.models.network.AlgoClientConfigs :staticmethod: Retrieve client configuration from environment variables or fallback to localnet defaults. If ALGOD_SERVER is set in environment variables, it will use environment configuration, otherwise it will use default localnet configuration. :return: Configuration for algod, indexer, and optionally kmd :example: >>> client_manager = ClientManager(algod_client) >>> config = client_manager.get_config_from_environment_or_localnet() .. py:method:: get_default_localnet_config(config_or_port: Literal['algod', 'indexer', 'kmd'] | int) -> algokit_utils.models.network.AlgoClientNetworkConfig :staticmethod: Get default configuration for local network services. :param config_or_port: Service name or port number :return: Client configuration for local network :example: >>> client_manager = ClientManager(algod_client) >>> config = client_manager.get_default_localnet_config("algod") .. py:method:: get_algod_config_from_environment() -> algokit_utils.models.network.AlgoClientNetworkConfig :staticmethod: Retrieve the algod configuration from environment variables. Will raise an error if ALGOD_SERVER environment variable is not set :return: Algod client configuration :example: >>> client_manager = ClientManager(algod_client) >>> config = client_manager.get_algod_config_from_environment() .. py:method:: get_indexer_config_from_environment() -> algokit_utils.models.network.AlgoClientNetworkConfig :staticmethod: Retrieve the indexer configuration from environment variables. Will raise an error if INDEXER_SERVER environment variable is not set :return: Indexer client configuration :example: >>> client_manager = ClientManager(algod_client) >>> config = client_manager.get_indexer_config_from_environment() .. py:method:: get_kmd_config_from_environment() -> algokit_utils.models.network.AlgoClientNetworkConfig :staticmethod: Retrieve the kmd configuration from environment variables. :return: KMD client configuration :example: >>> client_manager = ClientManager(algod_client) >>> config = client_manager.get_kmd_config_from_environment() .. py:method:: get_algonode_config(network: Literal['testnet', 'mainnet'], config: Literal['algod', 'indexer']) -> algokit_utils.models.network.AlgoClientNetworkConfig :staticmethod: Returns the Algorand configuration to point to the free tier of the AlgoNode service. :param network: Which network to connect to - TestNet or MainNet :param config: Which algod config to return - Algod or Indexer :return: Configuration for the specified network and service :example: >>> client_manager = ClientManager(algod_client) >>> config = client_manager.get_algonode_config("testnet", "algod")