Created
March 5, 2019 15:36
-
-
Save dhoeric/3c02fb4fe6857648b6ae2ac64bb356eb to your computer and use it in GitHub Desktop.
Backup Script for Pivotal Tracker
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
## | |
# 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