Skip to main content

Itential Python SDK

Project description

ipsdk

PyPI version Python Versions License: GPL v3 Tests Coverage

The Itential Python SDK provides a robust client implementation in Python for writing scripts and applications that can make API calls to Itential Platform or Itential Automation Gateway 4.x.

Status: Beta - Active development with comprehensive test coverage (100%)

Features

  • Easy API Requests: Automatic authentication on first API call with session management
  • Multiple Authentication Methods:
    • OAuth (client credentials) for Itential Platform
    • Basic authentication (username/password) for both Platform and Gateway
  • Sync and Async Support: Both synchronous and asynchronous HTTP clients via want_async parameter
  • Comprehensive Logging: Custom logging system with multiple levels (including TRACE and FATAL) and httpx integration control
  • Flexible Configuration: Customizable connection settings including TLS, certificate verification, and timeouts
  • Type Safety: Full type hints for enhanced development experience
  • HTTP Methods: Support for GET, POST, PUT, DELETE, and PATCH operations with automatic JSON handling

Getting started

Requirements

  • Python 3.10 or higher
  • httpx >= 0.28.1

Tested Python Versions

Python Version Status Notes
3.10 ✅ Tested Minimum recommended version
3.11 ✅ Tested Full support
3.12 ✅ Tested Full support
3.13 ✅ Tested Latest stable release
3.14 🔄 Beta Development/preview testing

The SDK is automatically tested against Python 3.10-3.13 in our CI pipeline to ensure compatibility across all supported versions.

Installation

Install ipsdk using pip:

$ pip install ipsdk

Or using uv (recommended for development):

$ uv add ipsdk

The ipsdk package provides factory functions for connecting to either Itential Platform or Itential Automation Gateway.

The platform_factory(...) function creates a connection to Itential Platform The gateway_factory(...) function creates a connection to Itential Automation Gateway

Basic Authentication

Use basic authentication with username and password:

>>> import ipsdk
>>> platform = ipsdk.platform_factory(
...     host="platform.itential.dev",
...     user="admin@pronghorn",
...     password="your-password"
... )
>>> res = platform.get("/health/server")
>>> res
<Response [200 OK]>
>>> res.text
'{"version":"15.8.10-2023.2.44","release":"2023.2.9"...`

OAuth Authentication

For Itential Platform, you can use OAuth with client credentials:

>>> import ipsdk
>>> platform = ipsdk.platform_factory(
...     host="platform.itential.dev",
...     client_id="your-client-id",
...     client_secret="your-client-secret"
... )
>>> res = platform.get("/adapters")

Gateway Connection

Connecting to Itential Automation Gateway uses the same pattern:

>>> import ipsdk
>>> gateway = ipsdk.gateway_factory(
...     host="gateway.itential.dev",
...     user="admin@itential",
...     password="your-password"
... )
>>> res = gateway.get("/devices")

Async Support

The SDK fully supports asyncio for asynchronous operations. Set want_async=True when creating the connection:

import asyncio
import ipsdk

async def main():
    p = ipsdk.platform_factory(
        host="platform.itential.dev",
        user="admin@pronghorn",
        want_async=True
    )

    res = await p.get("/adapters")

if __name__ == "__main__":
    asyncio.run(main())

HTTP Methods

The connection object supports the following HTTP methods:

  • GET - Sends a HTTP GET request to the server and returns the results
  • POST - Sends a HTTP POST request to the server and returns the results
  • PUT - Sends a HTTP PUT request to the server and returns the results
  • DELETE - Sends a HTTP DELETE request to the server and returns the results
  • PATCH - Sends a HTTP PATCH request to the server and returns the results

The following table shows the keyword arguments for each HTTP method:

Keyword GET POST PUT DELETE PATCH
path Required Required Required Required Required
params Optional Optional Optional Optional Optional
json Not Supported Optional Optional Not Supported Optional

The path argument specifies the relative path of the URI. This value is prepended to the base URL. The base URL for Itential Platform is <host> and the base URL for Itential Automation Gateway is <host>/api/v2.0.

The params argument accepts a dict object that is transformed into the URL query string. For example, if params={"foo": "bar"} the resulting query string would be ?foo=bar

The json argument accepts the payload to send in the request as JSON. This argument accepts either a list or dict object. When specified, the data will automatically be converted to a JSON string and the Content-Type and Accept headers will be set to application/json.

Configuration

Both the platform_factory and gateway_factory functions support configuration using keyword arguments. The table below shows the keyword arguments for each function along with their default value.

Keyword platform_factory gateway_factory
host localhost localhost
port 0 0
use_tls True True
verify True True
user admin admin@itential
password admin admin
client_id None Not Supported
client_secret None Not Supported
timeout 30 30
want_async False False

Logging

The SDK includes a comprehensive logging system accessible via ipsdk.logging:

import ipsdk

# Configure logging level
ipsdk.logging.set_level(ipsdk.logging.DEBUG)

# Use convenience functions
ipsdk.logging.info("Connected to platform")
ipsdk.logging.debug("Request details: %s", request_data)
ipsdk.logging.error("API call failed")

Logging Features:

  • Multiple Log Levels: TRACE (5), DEBUG, INFO, WARNING, ERROR, CRITICAL, FATAL (90), and NONE (100)
  • Convenience Functions: debug(), info(), warning(), error(), critical(), fatal(), exception()
  • Function Tracing: @trace decorator for automatic entry/exit logging with timing
  • Sensitive Data Filtering: Automatic redaction of PII, API keys, passwords, and tokens
  • httpx Integration: Optional control of httpx/httpcore logging via propagate parameter

For detailed logging documentation, see the logging module docstrings.

Development

For development setup, testing, and contribution guidelines, see the Development Guide.

License

This project is licensed under the GPLv3 open source license. See license

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ipsdk-0.8.0.tar.gz (81.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ipsdk-0.8.0-py3-none-any.whl (52.3 kB view details)

Uploaded Python 3

File details

Details for the file ipsdk-0.8.0.tar.gz.

File metadata

  • Download URL: ipsdk-0.8.0.tar.gz
  • Upload date:
  • Size: 81.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ipsdk-0.8.0.tar.gz
Algorithm Hash digest
SHA256 c3f39914019500853c93cbd0062c7a9139c0702c0df4d5a6faa310066e4420ae
MD5 c7437223801ed305728d7f520394fd8d
BLAKE2b-256 66df7cf57ee93e6d76c631bf52603daa720d8af4f30af90d7e379255612413be

See more details on using hashes here.

Provenance

The following attestation bundles were made for ipsdk-0.8.0.tar.gz:

Publisher: release.yaml on itential/ipsdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ipsdk-0.8.0-py3-none-any.whl.

File metadata

  • Download URL: ipsdk-0.8.0-py3-none-any.whl
  • Upload date:
  • Size: 52.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ipsdk-0.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 894856a6ba3ecfe05425efb683c0a12d236f01ec65d4c42e4006fcb6378be33b
MD5 ecc336cbb8f8b47a522682458398f0c2
BLAKE2b-256 db1f8142fd899ff8e831207212f9f6b8deaefb042f3eeb30e21dad72218d16a6

See more details on using hashes here.

Provenance

The following attestation bundles were made for ipsdk-0.8.0-py3-none-any.whl:

Publisher: release.yaml on itential/ipsdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page