Bahn: aisupport, Analyse-O2C-C2S, awesome-bahn-mcp-servers, beam-mcp,
Confluence_Bot, db-planet-mcp-server, O2C-Harness, project-audit,
Projekt-KIQ-HP, teamlandkarte-mcp
Dhive: Jury-Voting
Privat: CV, NoteGraph (NOTE: NoteGraph needs complete redo after consolidation)
Shared: AI-Orchestrator, OrgMyLife, power_skills_and_more
Shared/references: symphony (read-only)
Bahn repos remain available as independent remotes - this monorepo
pulls them in via subtree, the originals are untouched.
75 lines
2.1 KiB
Python
75 lines
2.1 KiB
Python
"""OrgMyLife API client for creating tasks from extracted action items.
|
|
|
|
POST to /api/tasks with title, source_url, description.
|
|
Handles unreachable API gracefully (log warning, continue).
|
|
"""
|
|
|
|
import logging
|
|
|
|
import httpx
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class OrgMyLifeClient:
|
|
"""HTTP client for OrgMyLife task creation."""
|
|
|
|
def __init__(self, base_url: str, api_key: str):
|
|
self.base_url = base_url.rstrip("/")
|
|
self.api_key = api_key
|
|
|
|
def create_task(
|
|
self,
|
|
title: str,
|
|
source_url: str,
|
|
description: str = "",
|
|
priority: int = 4,
|
|
) -> dict:
|
|
"""Create a task in OrgMyLife.
|
|
|
|
Args:
|
|
title: Task title (action item description).
|
|
source_url: Reference back to the source note.
|
|
description: Optional additional description.
|
|
priority: Task priority (1-5, default 4).
|
|
|
|
Returns:
|
|
Response data dict, or empty dict on failure.
|
|
"""
|
|
url = f"{self.base_url}/api/tasks"
|
|
payload = {
|
|
"title": title,
|
|
"source_url": source_url,
|
|
"description": description,
|
|
"priority": priority,
|
|
}
|
|
headers = {
|
|
"Authorization": f"Bearer {self.api_key}",
|
|
"Content-Type": "application/json",
|
|
}
|
|
|
|
try:
|
|
response = httpx.post(
|
|
url,
|
|
json=payload,
|
|
headers=headers,
|
|
timeout=10.0,
|
|
)
|
|
response.raise_for_status()
|
|
logger.info("Created OrgMyLife task: %s", title[:50])
|
|
return response.json()
|
|
|
|
except httpx.ConnectError:
|
|
logger.warning(
|
|
"OrgMyLife API unreachable at %s — skipping task creation", self.base_url
|
|
)
|
|
return {}
|
|
except httpx.HTTPStatusError as e:
|
|
logger.warning(
|
|
"OrgMyLife API error %d: %s", e.response.status_code, e.response.text[:200]
|
|
)
|
|
return {}
|
|
except Exception as e:
|
|
logger.warning("OrgMyLife task creation failed: %s", e)
|
|
return {}
|