Created
October 30, 2024 20:35
-
-
Save jiulongw/caa5f31524d43466e9044388c0d56f68 to your computer and use it in GitHub Desktop.
Import PDF file to Vibe Canvas
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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