Skip to main content

Bot SDK for Automa

Project description

automa-bot

Bot SDK for Automa.

Please read more about Automa Bots and their development in our documentation.

  1. Installation
  2. Usage
  3. Webhook signatures
  4. Testing
  5. Reference

Installation

# Using pip
pip install automa-bot

# Using uv
uv add automa-bot

Usage

from automa import Automa

client = Automa()

def main():
  # Download code for a task
  folder = client.code.download({
    "task": {
      "id": 10,
      "token": '3ee12f8ca60132c087c6303efb46c3b5',
    },
  })

  # Change code in the folder ...

  # Propose the changed code
  client.code.propose({
    "task": { "id": 10 },
  })

  # Remove the downloaded code folder
  client.code.cleanup({
    "task": { "id": 10 },
  })

main()

Asynchronous

Simply import AsyncAutoma instead of Automa and use await with each method call:

import asyncio
from automa import AsyncAutoma

client = AsyncAutoma()

async def main() -> None:
  # Download code for a task
  folder = await client.code.download({
    "task": {
      "id": 10,
      "token": '3ee12f8ca60132c087c6303efb46c3b5',
    },
  })

  # Change code in the folder ...

  # Propose the changed code
  await client.code.propose({
    "task": { "id": 10 },
  })

  # Remove the downloaded code folder
  await client.code.cleanup({
    "task": { "id": 10 },
  })

asyncio.run(main())

Functionality between the synchronous and asynchronous clients is otherwise identical.

Managing client resource

By default the library closes underlying HTTP connections whenever the client is garbage collected. You can manually close the client using the .close() method if desired, or with a context manager that closes when exiting.

from automa import Automa

with Automa() as client:
  # make requests here
  ...

# HTTP client is now closed

Webhook signatures

To verify webhook signatures, you can use the verify_webhook helper provided by the SDK.

import os
from automa.bot.webhook import verify_webhook

payload = (await request.body()).decode("utf-8") # The body of the webhook request
signature = request.headers.get('webhook-signature') # The signature header from the request

is_valid = verify_webhook(
  os.environ['AUTOMA_WEBHOOK_SECRET'],
  signature,
  payload
)

Testing

When writing tests for your bot, you can mock the client methods to simulate the behavior of the SDK without making actual network requests.

from automa.bot import CodeFolder

fixture_code = CodeFolder("." / "fixtures" / "code")

@patch("automa.bot.AsyncCodeResource.cleanup")
@patch("automa.bot.AsyncCodeResource.propose")
@patch("automa.bot.AsyncCodeResource.download", return_value=fixture_code)
def test(download_mock, propose_mock, cleanup_mock):
  pass

Webhook signatures in tests

When testing webhook handling, you may want to simulate valid webhook requests. The SDK provides generate_webhook_signature helper to generate valid signatures for your test payloads.

import os
from automa.bot.webhook import generate_webhook_signature

payload = '{}' # Example payload

signature = generate_webhook_signature(
  os.environ['AUTOMA_WEBHOOK_SECRET'],
  payload
)

# Use this signature in your tests to simulate a valid webhook request

Reference

Please find below the reference for both the client and its methods in the SDK.

All methods are available in both synchronous and asynchronous clients.

Automa/AsyncAutoma

Named parameters:

  • base_url (optional): Base URL for the Automa API. Defaults to https://api.automa.app.

    If you are using the bot with a self-hosted instance of Automa, you can specify the base URL like this:

    client = Automa(base_url="https://api.your-automa-instance.com")
    

Properties:

  • code: CodeResource / AsyncCodeResource providing code related methods.

code.download

Downloads the code for the specified task and returns a CodeFolder pointing to the cloned or extracted code directory.

Parameters:

  • body (CodeDownloadParams)
    • task (dict)
      • id (int): The identifier of the task.
      • token (str): The authorization token for the task sent in webhook request.

code.propose

Submits a code change proposal for the specified task, using the diff between the current working directory and the base commit saved on download.

Parameters:

  • body (CodeProposeParams)
    • task (dict)
      • id (int): The identifier of the task.
    • proposal (dict, optional)
      • title (str): Title of the pull request for the proposal.
      • body (str): Description of the pull request for the proposal.
    • metadata (dict, optional)
      • cost_in_cents (int): Cost (in USD cents) incurred for implementing the task.

code.cleanup

Removes any downloaded code folder and its archive for the specified task.

Parameters:

  • body (CodeCleanupParams)
    • task (dict)
      • id (int): The identifier of the task.

CodeFolder

Represents a folder containing the downloaded code for a task. It provides some helper methods to build the code proposal.

Methods:

  • add(paths: str | list[str]): Add the specified new file(s) to the code proposal.
  • add_all(): Add all new files to the code proposal.

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

automa_bot-0.4.0.tar.gz (12.2 kB view details)

Uploaded Source

Built Distribution

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

automa_bot-0.4.0-py3-none-any.whl (11.3 kB view details)

Uploaded Python 3

File details

Details for the file automa_bot-0.4.0.tar.gz.

File metadata

  • Download URL: automa_bot-0.4.0.tar.gz
  • Upload date:
  • Size: 12.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for automa_bot-0.4.0.tar.gz
Algorithm Hash digest
SHA256 a4f6c0b4e4554ca4490d71af234b10e17ad9d085ccfb9437364da51cd088ba54
MD5 72098efe17699b66b256e7582c561740
BLAKE2b-256 1a2bae4a0f357187d0174047d2430c358993c3a40acb37b14f2208f21c4dadce

See more details on using hashes here.

File details

Details for the file automa_bot-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: automa_bot-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 11.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for automa_bot-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 cdcc24cb31a139f8eec46c3d800d4499e53796313d1c9c29960c217e48a61bda
MD5 83fd4e4c0822f91d8820958e834bbcd7
BLAKE2b-256 3d5b6329fb925976f38574d950ebf326d496173208bfa410da1ca576486546d0

See more details on using hashes here.

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