import os import sys import json import time from collections import defaultdict import requests from datetime import datetime, timedelta from todoist_api_python.api import TodoistAPI from jinja2 import Environment, FileSystemLoader, select_autoescape ATTACHMENTS_DIR = "attachments" TODOIST_API_TOKEN: str | None = None def usage(): print(""" Todoist Export Script --------------------- Exports all active and completed tasks from the Todoist API to a JSON file, including attachments and comments, and generates a human-readable HTML backup using Jinja2. Usage: python export_todoist.py export - Exports all data and generates JSON and HTML files. python export_todoist.py [any other argument or none] - Shows this help message. """) def get_api_key(): key = os.environ.get("TODOIST_KEY") if not key: print("Error: TODOIST_KEY environment variable not set.") sys.exit(1) return key def ensure_attachments_dir(): if not os.path.exists(ATTACHMENTS_DIR): os.makedirs(ATTACHMENTS_DIR) def _file_looks_like_html(path): try: with open(path, 'rb') as handle: prefix = handle.read(256) except OSError: return False if not prefix: return True snippet = prefix.lstrip().lower() return snippet.startswith(b"