A previous release had provenance metadata, but this release does not. View details.
Confluence Assistant Skills Library
Python library for Confluence Cloud REST API - shared utilities for the Confluence Assistant Skills project.
Features
- ConfluenceClient - HTTP client with retry logic, pagination, and file uploads
- ConfigManager - Multi-source configuration (env vars, JSON files)
- Error Handling - Exception hierarchy and decorators for clean error handling
- Validators - Input validation for page IDs, space keys, CQL queries, etc.
- Formatters - Output formatting for pages, spaces, tables, JSON, CSV
- ADF Helper - Atlassian Document Format conversion (Markdown ↔ ADF)
- XHTML Helper - Legacy storage format conversion
- Cache - File-based response caching with TTL
Installation
pip install confluence-assistant-skills-lib
Note: This is the library package. For the CLI tool, install
confluence-assistant-skillsinstead:pip install confluence-assistant-skills # CLI with 'confluence' command
Quick Start
from confluence_assistant_skills import (
get_confluence_client,
validate_page_id,
format_page,
markdown_to_adf,
)
# Set environment variables:
# CONFLUENCE_SITE_URL=https://your-site.atlassian.net
# CONFLUENCE_EMAIL=your-email@example.com
# CONFLUENCE_API_TOKEN=your-api-token
# Get a configured client
client = get_confluence_client()
# Get a page
page_id = validate_page_id("12345")
page = client.get(f"/api/v2/pages/{page_id}")
print(format_page(page))
# Create content from Markdown
content = markdown_to_adf("# Hello\n\nThis is **bold** text.")
Direct Client Usage
from confluence_assistant_skills import ConfluenceClient
client = ConfluenceClient(
base_url="https://your-site.atlassian.net",
email="your-email@example.com",
api_token="your-api-token",
timeout=30,
max_retries=3,
)
# GET request
page = client.get("/api/v2/pages/12345")
# POST request
new_page = client.post("/api/v2/pages", json_data={
"spaceId": "123456",
"title": "New Page",
"body": {"representation": "atlas_doc_format", "value": "..."}
})
# Pagination
for page in client.paginate("/api/v2/pages", params={"space-id": "123456"}):
print(page["title"])
# File upload
result = client.upload_file(
"/api/v2/attachments",
file_path="/path/to/file.pdf",
additional_data={"pageId": "12345"}
)
Configuration
Environment Variables
export CONFLUENCE_SITE_URL="https://your-site.atlassian.net"
export CONFLUENCE_EMAIL="your-email@example.com"
export CONFLUENCE_API_TOKEN="your-api-token"
Error Handling
from confluence_assistant_skills import (
handle_errors,
ConfluenceError,
AuthenticationError,
NotFoundError,
ValidationError,
)
@handle_errors
def main():
# Validation errors
page_id = validate_page_id(user_input) # Raises ValidationError if invalid
# API errors are caught and formatted
page = client.get(f"/api/v2/pages/{page_id}")
if __name__ == "__main__":
main() # Errors are caught, formatted, and exit with appropriate code
Validators
from confluence_assistant_skills import (
validate_page_id, # Numeric string validation
validate_space_key, # Space key format
validate_cql, # CQL query syntax
validate_content_type, # page, blogpost, etc.
validate_url, # URL format
validate_email, # Email format
validate_title, # Page title constraints
validate_label, # Label format
validate_limit, # Pagination limit
)
page_id = validate_page_id("12345") # Returns "12345"
space_key = validate_space_key("docs") # Returns "DOCS" (normalized)
cql = validate_cql('space = "DOCS"') # Validates syntax
ADF Conversion
from confluence_assistant_skills import (
markdown_to_adf,
adf_to_markdown,
text_to_adf,
adf_to_text,
create_heading,
create_paragraph,
create_bullet_list,
)
# Convert Markdown to ADF
adf = markdown_to_adf("""
# My Document
This is a **bold** paragraph.
- Item 1
- Item 2
```python
print("Hello")
""")
Convert ADF back to Markdown
markdown = adf_to_markdown(adf)
Build ADF programmatically
from confluence_assistant_skills import create_adf_doc doc = create_adf_doc([ create_heading("Title", level=1), create_paragraph(text="Hello, World!"), create_bullet_list(["Item 1", "Item 2", "Item 3"]), ])
## Caching
```python
from confluence_assistant_skills import Cache, cached
# Direct cache usage
cache = Cache(default_ttl=300) # 5 minutes
cache.set("key", {"data": "value"})
value = cache.get("key")
# Decorator usage
@cached(ttl=300)
def get_page(page_id):
return client.get(f"/api/v2/pages/{page_id}")
# First call hits API, subsequent calls use cache
page = get_page("12345")
API Reference
Client
ConfluenceClient- HTTP client classcreate_client()- Factory functionget_confluence_client()- Get configured client from environment variables
Config
ConfigManager- Configuration management class
Errors
ConfluenceError- Base exceptionAuthenticationError- 401 errorsPermissionError- 403 errorsValidationError- 400 errorsNotFoundError- 404 errorsRateLimitError- 429 errorsConflictError- 409 errorsServerError- 5xx errors
Formatters
format_page(),format_space(),format_comment()format_table()- ASCII table formattingformat_json()- JSON formattingexport_csv()- CSV exportprint_success(),print_warning(),print_info()
ADF Helper
markdown_to_adf(),adf_to_markdown()text_to_adf(),adf_to_text()create_*()- Node creation functionsvalidate_adf()- Validate ADF structure
XHTML Helper
xhtml_to_markdown(),markdown_to_xhtml()xhtml_to_adf(),adf_to_xhtml()validate_xhtml()- Validate XHTML structure
Cache
Cache- File-based cache classcached()- Caching decoratorget_cache()- Get global cache instance
Contributing
- Fork the repository
- Create a feature branch
- Make changes with tests
- Submit a pull request
# Install development dependencies
pip install -e ".[dev]"
# Install pre-commit hooks (recommended)
pre-commit install
# Run tests
pytest
# Run with coverage
pytest --cov=src/confluence_assistant_skills
# Code quality checks (run automatically on commit with pre-commit)
ruff check src/ tests/ # Linting
ruff format src/ tests/ # Formatting
mypy src/ # Type checking
bandit -r src/ -q # Security scanning
License
MIT License - see LICENSE for details.
Related Projects
- Confluence Assistant Skills - Claude Code skills for Confluence automation
Metadata
Release files for confluence-assistant-skills-lib 0.4.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Loss of provenance
These files do not have provenance metadata, despite files in a prior release including this data.
We recommend further investigation before installing these files. View details.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| confluence_assistant_skills_lib-0.4.1.tar.gz | 96.1 kB | Without provenance | Details for confluence_assistant_skills_lib-0.4.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| confluence_assistant_skills_lib-0.4.1-py3-none-any.whl | Python 3 | none | any | Details for confluence_assistant_skills_lib-0.4.1-py3-none-any.whl |
Total release size: 219.0 kB
Release files / confluence_assistant_skills_lib-0.4.1.tar.gz
Loss of provenance
This file belongs to a release without provenance metadata, despite a prior release including this data.
We recommend further investigation before installing this file. View details.
| Download URL | confluence_assistant_skills_lib-0.4.1.tar.gz |
|---|---|
| Size | 96.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1146ec028f4b0d7cc2bf573b0c50c1a6a5401366c6ce99205612bbbb9c0d2de8
|
|
BLAKE2b-256 checksum How to use checksums |
b54b1f9817f0a346440c5291c111945258951b580eeba1de22ea899f439e9f17
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.2
|
Release files / confluence_assistant_skills_lib-0.4.1-py3-none-any.whl
Loss of provenance
This file belongs to a release without provenance metadata, despite a prior release including this data.
We recommend further investigation before installing this file. View details.
| Download URL | confluence_assistant_skills_lib-0.4.1-py3-none-any.whl |
|---|---|
| Size | 122.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c421f7c44e10fe68abb7e3d96050e5692069304e7939db728f1787ba45aa6870
|
|
BLAKE2b-256 checksum How to use checksums |
7810752df10678b5d6e3a6423581b5cb57322c90816d686b150874293ca0d0d2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.2
|
Security for confluence-assistant-skills-lib 0.4.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Loss of provenance
A previous release of these files had provenance metadata, but this release does not.
While this could reflect a routine change by the project maintainers, it may also indicate that the release files have been compromised.
Release comparison
- Removed 0.3.1 2 files With provenance
- Added 0.4.1 2 files Without provenance
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.