# Copyright (c) 2025 Patrick Motsch # All rights reserved. """Parse virtual ClickUp paths used by the connector.""" import re from typing import Optional, Tuple def parse_team_and_list(path: str) -> Tuple[Optional[str], Optional[str]]: p = (path or "").strip() m = re.match(r"^/team/([^/]+)/list/([^/]+)$", p) if m: return m.group(1), m.group(2) return None, None def parse_task_id(path_or_id: str) -> Optional[str]: s = (path_or_id or "").strip() if not s: return None m = re.match(r"^.*/task/([^/]+)$", s) if m: return m.group(1) if re.match(r"^[a-zA-Z0-9_-]+$", s) and len(s) > 4: return s return None