Skip to content

Commit e8e5d8c

Browse files
Separate out backup code
1 parent 3bb8522 commit e8e5d8c

File tree

3 files changed

+42
-28
lines changed

3 files changed

+42
-28
lines changed

apps/makers_admin/views.py

Lines changed: 6 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,10 @@
1212
import model.makers_server
1313
import model.pages
1414
import model.person
15-
import os
15+
import model.times
1616
import pages.event_page
1717
import pages.person_page
1818
import re
19-
import subprocess
2019
import tempfile
2120
import uuid
2221

@@ -365,34 +364,13 @@ def backup_database(django_request):
365364

366365
params = django_request.GET
367366

368-
with tempfile.TemporaryDirectory() as tmpdirname:
369-
backupname = "backup-"+model.times.timestring(model.times.now())
370-
innerdirname = os.path.join(tmpdirname, backupname)
371-
tarballname = backupname+".tgz"
372-
tarballfilename = os.path.join(tmpdirname, tarballname)
373-
for role in ['user', 'owner', 'trainer']:
374-
eqtys = model.equipment_type.Equipment_type.list_equipment_types()
375-
rows = []
376-
for eqty in eqtys:
377-
rows += eqty.backup_API_people(role)
378-
with open(os.path.join(innerdirname, role+"s.csv"), 'w') as csv_stream:
379-
writer = csv.DictWriter(role_stream,
380-
['Equipment', 'Name', 'Date', 'Trainer'],
381-
extrasaction='ignore')
382-
writer.writeheader()
383-
for row in rows:
384-
writer.writerow(row)
385-
386-
subprocess.run(["tar",
387-
"cfz", tarballfilename,
388-
"--directory", tmpdirname,
389-
backupname])
390-
391-
with open(tarballfilename) as tarballfile:
392-
page_data = model.pages.tarballpage(tarballname,
367+
tarballfilename = model.backup_to_csv.make_database_backup()
368+
with open(tarballfilename) as tarballfile:
369+
page_data = model.pages.tarballpage(tarballname,
393370
tarballfile.read(),
394371
django_request=django_request)
395-
return HttpResponse(str(page_data.to_string()))
372+
os.remove(tarballfilename)
373+
return HttpResponse(str(page_data.to_string()))
396374

397375
@ensure_csrf_cookie
398376
def update_database(django_request):

model/backup_to_csv.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import csv
2+
import model.equipment_type
3+
import model.times
4+
import os
5+
import subprocess
6+
7+
def make_database_backup(tarballfilename=None):
8+
"""Make a backup in tarball, and return its filename."""
9+
with tempfile.TemporaryDirectory() as dirname:
10+
backupname = "backup-"+model.times.timestring(model.times.now())
11+
innerdirname = os.path.join(dirname, backupname)
12+
if tarballfilename is None:
13+
tarballfilename = os.path.join(dirname, backupname+".tgz")
14+
for role in ['user', 'owner', 'trainer']:
15+
eqtys = model.equipment_type.Equipment_type.list_equipment_types()
16+
rows = []
17+
for eqty in eqtys:
18+
rows += eqty.backup_API_people(role)
19+
with open(os.path.join(innerdirname, role+"s.csv"), 'w') as csv_stream:
20+
writer = csv.DictWriter(role_stream,
21+
['Equipment', 'Name', 'Date', 'Trainer'],
22+
extrasaction='ignore')
23+
writer.writeheader()
24+
for row in rows:
25+
writer.writerow(row)
26+
27+
subprocess.run(["tar",
28+
"cfz", tarballfilename,
29+
"--directory", dirname,
30+
backupname])
31+
32+
return tarballfilename

utils/exporter.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
sys.path.append('model')
88
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
99

10+
import model.backup_to_csv
1011
from model.event import Event
1112
from model.person import Person
1213
from model.equipment_type import Equipment_type
@@ -33,6 +34,7 @@ def export_role(role, csv_file):
3334
def export_main(verbose=True):
3435
# todo: convert all dates to datetime.datetime as mentioned in http://api.mongodb.com/python/current/examples/datetimes.html
3536
parser = argparse.ArgumentParser()
37+
parser.add_argument("-a", "--all", default=None)
3638
# parser.add_argument("-y", "--equipment-types", default=None)
3739
# parser.add_argument("-e", "--equipment", default=None)
3840
# parser.add_argument("-m", "--members", default=None)
@@ -52,6 +54,8 @@ def export0(args):
5254
if verbose:
5355
print("collection names are", collection_names)
5456
database.database_init(config)
57+
if args.all:
58+
model.backup_to_csv.make_database_backup(args.all)
5559
if args.users:
5660
export_role('user', args.users)
5761

0 commit comments

Comments
 (0)