-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathget.py
More file actions
57 lines (42 loc) · 1.92 KB
/
get.py
File metadata and controls
57 lines (42 loc) · 1.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import requests
import argparse
import time
import shutil
import zipfile
def _print_migrations(migrations):
for migritation in migrations:
print("ID: {} State: {} Created: {}".format(migritation["id"], migritation["state"], migritation["created_at"]))
def _get_exported_migration(migrations):
for migritation in migrations:
if migritation["state"] == "exported":
return migritation
return None
def _download_exported_migration(organization_name, exported_migration, access_token):
print("Downloading exported migration {}".format(exported_migration["id"]))
url = "https://api.github.com/orgs/{}/migrations/{}/archive".format(organization_name, exported_migration["id"])
r = requests.get(url, headers={"Authorization": f"token {access_token}"}, stream=True)
r.raise_for_status()
with open("backup.{}.tar.gz".format(organization_name), "wb") as f:
for chunk in r.iter_content(chunk_size=1024*1024):
if chunk:
f.write(chunk)
def get_org_backup(organization_name, access_token):
while True:
print("Looking for Migrations")
url = f"https://api.github.com/orgs/{organization_name}/migrations"
data = {}
r = requests.get(url, headers={"Authorization": f"token {access_token}"}, json=data)
r.raise_for_status()
migrations = r.json()
_print_migrations(migrations)
exported_migration = _get_exported_migration(migrations)
if exported_migration:
_download_exported_migration(organization_name, exported_migration, access_token)
return
time.sleep(60*5)
if __name__ == "__main__":
ap = argparse.ArgumentParser()
ap.add_argument("organization_name", help="")
ap.add_argument("--access-token", help="Access Token from Organisation Owner")
args = ap.parse_args()
get_org_backup(args.organization_name, args.access_token)