Skip to main content

General-purpose AI-powered Confluence toolkit — export, publish, and describe pages

Project description

confluence-ai

General-purpose AI-powered Confluence toolkit — export, publish, and describe pages.

Library Usage

Export a Page

from confluence_ai import export_page, ImageDescriberConfig

# Export with AI-powered image descriptions
result = export_page(
    "https://acme.atlassian.net/wiki/spaces/ENG/pages/123456/My-Page",
    "./output",
    email="user@acme.com",
    api_token="your-api-token",
    ai_config=ImageDescriberConfig(
        provider="bedrock",
        model="us.anthropic.claude-sonnet-4-20250514-v1:0",
    ),
)
print(f"Exported to: {result.markdown_path}")
print(f"Images: {result.images_downloaded}, Descriptions: {result.descriptions_generated}")

# Export without AI descriptions
result = export_page(
    "https://acme.atlassian.net/wiki/spaces/ENG/pages/123456/My-Page",
    "./output",
    email="user@acme.com",
    api_token="your-api-token",
)

Publish a Page

from confluence_ai import publish_page

url = publish_page(
    "<h1>Report</h1><p>Analysis results...</p>",
    email="user@acme.com",
    api_token="your-api-token",
    base_url="https://acme.atlassian.net/wiki",
    space_key="ENG",
    title="Gap Analysis Report - 2024-01-15",
    parent_page_id="123456",
)
print(f"Published: {url}")

Export as JSON

from confluence_ai import export_page

result = export_page(
    "https://acme.atlassian.net/wiki/spaces/ENG/pages/123456/My-Page",
    "./output",
    email="user@acme.com",
    api_token="your-api-token",
    output_format="json",
)

List Calendars from a Page

from confluence_ai.calendar_client import CalendarClient

client = CalendarClient(
    base_url="https://acme.atlassian.net/wiki",
    email="user@acme.com",
    api_token="your-api-token",
)
calendars = client.list_calendars_from_page(
    "https://acme.atlassian.net/wiki/spaces/ENG/pages/123/Team-Calendar"
)
for cal in calendars:
    print(f"{cal.name} ({len(cal.sub_calendars)} subcalendars)")

Export Calendar Events

from confluence_ai import export_calendar_grouped

# Export all events from a parent calendar as a unified view
result = export_calendar_grouped(
    base_url="https://acme.atlassian.net/wiki",
    calendar_id="31fc5bcc-b80d-4a27-bed1-5a33eb83001d",
    output_dir="./calendar-output",
    email="user@acme.com",
    api_token="your-api-token",
    output_format="json",  # or "markdown"
)
print(f"Exported {result.event_count} events to {result.output_path}")

export_calendar_grouped resolves the parent calendar's descriptive name, fetches events from all child subcalendars, and produces a single unified output file. In Markdown format, events from multiple subcalendars include a Calendar: provenance sub-bullet.

The lower-level export_calendar function is also available if you don't need parent name resolution.

Extension Points

Custom Image Describer

Subclass ImageDescriber and register it to use your own vision model:

from confluence_ai import ImageDescriber, ImageDescriberConfig, ImageContext, register_describer

class LocalLlavaDescriber(ImageDescriber):
    """Image describer using a local LLaVA model."""

    def describe(self, image_path: str, context: ImageContext) -> str:
        # Call your local model here
        return f"Description of {context.filename}"

# Register the custom provider
register_describer("local-llava", LocalLlavaDescriber)

# Use it via the standard factory
from confluence_ai import create_describer

describer = create_describer(ImageDescriberConfig(provider="local-llava", model="llava-1.5"))
description = describer.describe("diagram.png", ImageContext(is_gliffy=True))

Custom Output Renderer

Subclass OutputRenderer to export pages in formats beyond Markdown and JSON:

from confluence_ai import OutputRenderer, register_renderer
from confluence_ai.models import ContentNode, PageMetadata

class ReStructuredTextRenderer(OutputRenderer):
    """Render Confluence pages as reStructuredText."""

    def render(
        self,
        nodes: list[ContentNode],
        metadata: PageMetadata,
        descriptions: dict[str, str] | None = None,
    ) -> str:
        # Convert nodes to RST format
        lines = [metadata.page_title, "=" * len(metadata.page_title), ""]
        # ... render nodes ...
        return "\n".join(lines)

# Register and use
register_renderer("rst", ReStructuredTextRenderer)

from confluence_ai import export_page

result = export_page(
    "https://acme.atlassian.net/wiki/spaces/ENG/pages/123456/My-Page",
    "./output",
    email="user@acme.com",
    api_token="your-api-token",
    output_format="rst",
)

CLI Usage

confluence-export

# Basic export (no AI descriptions)
confluence-export \
  "https://acme.atlassian.net/wiki/spaces/ENG/pages/12345/My-Page" \
  ./output \
  --email user@example.com \
  --api-token YOUR_API_TOKEN \
  --no-ai

# Export with AI image descriptions
confluence-export \
  "https://acme.atlassian.net/wiki/spaces/ENG/pages/12345/My-Page" \
  ./output \
  --email user@example.com \
  --api-token YOUR_API_TOKEN \
  --ai-provider anthropic \
  --ai-api-key YOUR_ANTHROPIC_KEY
Option Env Variable Description
--email CONFLUENCE_EMAIL Confluence account email
--api-token CONFLUENCE_API_TOKEN Confluence Cloud API token
--ai-provider CONFLUENCE_EXPORT_AI_PROVIDER AI provider: anthropic, openai, or bedrock
--ai-model CONFLUENCE_EXPORT_AI_MODEL AI model name
--ai-api-key ANTHROPIC_API_KEY / OPENAI_API_KEY AI provider API key
--no-ai Skip AI image description generation
--verbose Enable DEBUG-level logging

Installation

pip install confluence-ai

# With AI provider support
pip install "confluence-ai[bedrock]"    # Amazon Bedrock (Claude)
pip install "confluence-ai[openai]"     # OpenAI GPT-4o
pip install "confluence-ai[anthropic]"  # Anthropic Claude (direct API)
pip install "confluence-ai[all]"        # All providers

Requires Python 3.10+.

License

MIT

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

confluence_ai-0.2.6.tar.gz (52.8 kB view details)

Uploaded Source

Built Distribution

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

confluence_ai-0.2.6-py3-none-any.whl (63.7 kB view details)

Uploaded Python 3

File details

Details for the file confluence_ai-0.2.6.tar.gz.

File metadata

  • Download URL: confluence_ai-0.2.6.tar.gz
  • Upload date:
  • Size: 52.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for confluence_ai-0.2.6.tar.gz
Algorithm Hash digest
SHA256 9ebbb5a37de3b0c8e92126b9a9f5c889aaa03b6ff2e5c5cf1c5a72cb1c1f1f0e
MD5 65fa441970ab441f107caf67f2d1da07
BLAKE2b-256 08ba8d245661a2f58aa75a8dd6b01b223831ff556e2ead5077c408e1d613e8ca

See more details on using hashes here.

File details

Details for the file confluence_ai-0.2.6-py3-none-any.whl.

File metadata

  • Download URL: confluence_ai-0.2.6-py3-none-any.whl
  • Upload date:
  • Size: 63.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for confluence_ai-0.2.6-py3-none-any.whl
Algorithm Hash digest
SHA256 6a4110ffbcf24a44138452e99ef8f738bcc584cba9f3f4d3d9b48da72ccf3fd9
MD5 be670710a183aa93f2314d50c23da1b3
BLAKE2b-256 1028f41c4916a3901aa995e4e561b5c67a4a6e7e114e1afcc943e653b2a53d0f

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