X-Git-Url: https://git.openstreetmap.org./osqa.git/blobdiff_plain/aac6ba0b5d9a5a245adcfd852f491387f5febc68..4439fa35984bca40f3105a5382be30b305bd9ebf:/forum_modules/exporter/views.py?ds=inline diff --git a/forum_modules/exporter/views.py b/forum_modules/exporter/views.py index 1b9f664..3709037 100644 --- a/forum_modules/exporter/views.py +++ b/forum_modules/exporter/views.py @@ -1,15 +1,20 @@ -import os +import os, tarfile, ConfigParser, datetime +from StringIO import StringIO from django.http import HttpResponse, HttpResponseRedirect, Http404 from django.utils.translation import ugettext as _ from django.utils import simplejson from django.core.cache import cache from django.core.urlresolvers import reverse from forum.views.admin import admin_tools_page, admin_page +from forum.models import User from forms import ExporterForm from threading import Thread +import settings as selsettings +from forum import settings -from exporter import export, CACHE_KEY, EXPORT_STEPS, LAST_BACKUP +from exporter import export, CACHE_KEY, EXPORT_STEPS, LAST_BACKUP, DATE_AND_AUTHOR_INF_SECTION, DATETIME_FORMAT +from importer import start_import @admin_tools_page(_('exporter'), _('XML data export')) @@ -17,31 +22,53 @@ def exporter(request): state = cache.get(CACHE_KEY) if state and state['running']: - return HttpResponseRedirect(reverse('exporter_running')) + return HttpResponseRedirect(reverse('exporter_running', kwargs=dict(mode='exporter'))) if request.method == 'POST': form = ExporterForm(request.POST) if form.is_valid(): - thread = Thread(target=export, args=[form.cleaned_data]) + thread = Thread(target=export, args=[form.cleaned_data, request.user]) thread.setDaemon(True) thread.start() - return HttpResponseRedirect(reverse('exporter_running')) + return HttpResponseRedirect(reverse('exporter_running', kwargs=dict(mode='exporter'))) else: form = ExporterForm() + available = [] + + folder = unicode(selsettings.EXPORTER_BACKUP_STORAGE) + + for f in os.listdir(folder): + if (not os.path.isdir(os.path.join(folder, f))) and f.endswith('.backup.inf'): + try: + with open(os.path.join(folder, f), 'r') as inffile: + inf = ConfigParser.SafeConfigParser() + inf.readfp(inffile) + + if inf.get(DATE_AND_AUTHOR_INF_SECTION, 'site') == settings.APP_URL and os.path.exists( + os.path.join(folder, inf.get(DATE_AND_AUTHOR_INF_SECTION, 'file-name'))): + available.append({ + 'author': User.objects.get(id=inf.get(DATE_AND_AUTHOR_INF_SECTION, 'author')), + 'date': datetime.datetime.strptime(inf.get(DATE_AND_AUTHOR_INF_SECTION, 'finished'), DATETIME_FORMAT) + }) + except Exception, e: + pass + return ('modules/exporter/exporter.html', { - 'form': form + 'form': form, + 'available': available, }) @admin_page -def running(request): +def running(request, mode): state = cache.get(CACHE_KEY) if state is None: return HttpResponseRedirect(reverse('admin_tools', args=[_('exporter')])) return ('modules/exporter/running.html', { + 'mode': mode, 'steps': EXPORT_STEPS }) @@ -60,4 +87,5 @@ def download(request): response['Content-Disposition'] = 'attachment; filename=backup.tar.gz' return response - + +