Skip to content

Instantly share code, notes, and snippets.

@dhoeric
Created March 5, 2019 15:36
Show Gist options
  • Save dhoeric/3c02fb4fe6857648b6ae2ac64bb356eb to your computer and use it in GitHub Desktop.
Save dhoeric/3c02fb4fe6857648b6ae2ac64bb356eb to your computer and use it in GitHub Desktop.
Backup Script for Pivotal Tracker
##
# Backup.py
# ---
# To dump stories, memberships, labels and releases on Pivotal Tracker projects
#
# Dependency:
# pip install requests
#
# Usage:
# python backup.py --token xxx
##
from requests import Request, Session
import json
import argparse
import os.path
def save_file(path, content):
dir_path = os.path.dirname(path)
if not os.path.exists(dir_path):
os.makedirs(dir_path)
with open(path, "w") as f:
f.write(content)
def main(token):
s = Session()
s.headers.update({"x-trackertoken": token})
# Get the project lists
r = s.get("https://www.pivotaltracker.com/services/v5/projects")
projects = json.loads(r.text)
print("No. of project: {}".format(len(projects)))
save_file("./outputs/projects.json", json.dumps(projects, sort_keys=True, indent=4))
# Get the stories
for project in projects:
print("Fetching {} ({}) ...".format(project["name"], project["id"]))
r = s.get("https://www.pivotaltracker.com/services/v5/projects/{}".format(project['id']))
project = json.loads(r.text)
r = s.get("https://www.pivotaltracker.com/services/v5/projects/{}/stories".format(project['id']))
stories = json.loads(r.text)
r = s.get("https://www.pivotaltracker.com/services/v5/projects/{}/memberships".format(project['id']))
memberships = json.loads(r.text)
r = s.get("https://www.pivotaltracker.com/services/v5/projects/{}/labels".format(project['id']))
labels = json.loads(r.text)
r = s.get("https://www.pivotaltracker.com/services/v5/projects/{}/releases".format(project['id']))
releases = json.loads(r.text)
save_file("./outputs/projects/{}/project.json".format(project["id"]), json.dumps(project, sort_keys=True, indent=4))
save_file("./outputs/projects/{}/stories.json".format(project["id"]), json.dumps(stories, sort_keys=True, indent=4))
save_file("./outputs/projects/{}/memberships.json".format(project["id"]), json.dumps(memberships, sort_keys=True, indent=4))
save_file("./outputs/projects/{}/labels.json".format(project["id"]), json.dumps(labels, sort_keys=True, indent=4))
save_file("./outputs/projects/{}/releases.json".format(project["id"]), json.dumps(releases, sort_keys=True, indent=4))
return
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('--token', '-t', help='Token for Pivotal Tracker')
args = parser.parse_args()
main(args.token)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment