Skip to content

Instantly share code, notes, and snippets.

@jiulongw
Created October 30, 2024 20:35
Show Gist options
  • Save jiulongw/caa5f31524d43466e9044388c0d56f68 to your computer and use it in GitHub Desktop.
Save jiulongw/caa5f31524d43466e9044388c0d56f68 to your computer and use it in GitHub Desktop.
Import PDF file to Vibe Canvas
#!/usr/bin/env python3
import argparse
import os
import requests
import sys
API_ROOT = "https://api.vibe.us/v1"
ACCESS_TOKEN = os.getenv("VIBE_ACCESS_TOKEN")
def create_session():
url = f"{API_ROOT}/auth/sessions"
headers = {
"Authorization": f"Bearer {ACCESS_TOKEN}",
}
response = requests.post(url, headers=headers)
response.raise_for_status()
return response.json()
def list_teams(session_key):
url = f"{API_ROOT}/teams/teams"
headers = {
"X-Session-Key": session_key,
}
response = requests.get(url, headers=headers)
response.raise_for_status()
return [x for x in response.json()["teams"] if x["team_id"].startswith("team.")]
def select_team(teams, team_id):
if team_id == "" and len(teams) == 1:
return teams[0]
for team in teams:
if team["team_id"] == team_id:
return team
return None
def upload_pdf(session_key, pdf_path):
url = f"{API_ROOT}/files/temp-file"
headers = {
"X-Session-Key": session_key,
}
response = requests.get(url, headers=headers)
response.raise_for_status()
temp_file = response.json()
response = requests.put(temp_file["url"], data=open(pdf_path, "rb").read())
response.raise_for_status()
url = f"{API_ROOT}/files/pdf?temp_id={temp_file['temp_id']}"
response = requests.post(url, headers=headers)
response.raise_for_status()
return response.json()
def import_pdf(session_key, team_id, file_id, board_name):
url = f"{API_ROOT}/boards/team/{team_id}/boards/pdf?file_id={file_id}"
headers = {
"X-Session-Key": session_key,
"Content-Type": "application/json",
}
body = {
"board_name": board_name,
}
response = requests.post(url, headers=headers, json=body)
response.raise_for_status()
return response.json()
def main(args):
session = create_session()
session_key = session["session_key"]
teams = list_teams(session_key)
team = select_team(teams, args.team)
if not team:
print(
"Unable to determine a team to import to. Please specify a team ID with --team:",
file=sys.stderr,
)
for team in teams:
print(f" {team['team_id']}: {team['display_name']}", file=sys.stderr)
sys.exit(1)
print(f"Uploading PDF file...")
pdf_file = upload_pdf(session_key, args.pdf_path)
print(f"Importing to team: {team['display_name']}")
board_name = os.path.basename(args.pdf_path)
board_name = os.path.splitext(board_name)[0]
board = import_pdf(session_key, team["team_id"], pdf_file["file_id"], board_name)
print(f"Imported board: {board['board_id']} ({board['board_name']})")
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--team", help="The ID of the team to import to.")
parser.add_argument("pdf_path", help="The path to the PDF file to import.")
args = parser.parse_args()
main(args)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment