def handle(self, **options): if not options['site']: raise CommandError('Must give --site') if not (bool(options['dump']) ^ bool(options['restore'])): raise CommandError('Must give exactly one of: --dump=<filename>, --restore=<filename>') try: kbsite = models.GatebotSite.objects.get(name=options['site']) except models.GatebotSite.DoesNotExist: raise CommandError('Site does not exist') if options['restore']: input_fp = open(options['restore'], 'r') backup.restore(input_fp, kbsite, self.debug) input_fp.close() else: indent = None if options['indent']: indent = 2 output_fp = open(options['dump'], 'w') backup.dump(output_fp, kbsite, indent, self.debug) output_fp.close()
def generate_backup(request): context = RequestContext(request) indent = None indent_param = request.GET.get('indent', None) if indent_param: try: indent = int(indent_param) except ValueError: pass kbsite = request.kbsite datestr = datetime.datetime.now().strftime('%Y%m%d-%H%M%S') filename = 'gatebot-%s.%s.json.txt' % (kbsite.name, datestr) output_fp = cStringIO.StringIO() backup.dump(output_fp, kbsite, indent=indent) response = HttpResponse(output_fp.getvalue(), mimetype="application/octet-stream") response['Content-Disposition'] = 'attachment; filename=%s' % filename output_fp.close() return response