#!/usr/bin/env python # -*- coding: utf-8 -*- import time from optparse import make_option from django.core.management.base import BaseCommand, CommandError from django.core.exceptions import ObjectDoesNotExist from chimere.models import Importer from chimere import tasks class Command(BaseCommand): args = '' help = "Launch import from an external source. Import configuration must "\ "be beforehand inserted in the database with the web admin." option_list = BaseCommand.option_list + ( make_option( '--all', action='store_true', dest='all', default=False, help='Update all imports set to be automatically updated'), ) def handle(self, *args, **options): importers = [] if options['all']: importers = Importer.objects.filter(automatic_update=True).all() elif args and args[0]: try: importers = [Importer.objects.get(pk=int(args[0]))] except (ValueError, ObjectDoesNotExist): raise CommandError( "Import with ID '%s' doesn't exist." % args[0]) else: imports = dict( [(imp.pk, imp) for imp in Importer.objects.order_by('pk').all()]) while not importers: self.stdout.write('* Choose the import: \n') for k in imports: self.stdout.write(' %s\n' % str(imports[k]).encode( 'ascii', 'ignore')) self.stdout.flush() self.stdout.write('\nImport ID: ') v = input() try: importers = [Importer.objects.get(pk=int(v))] except (ValueError, ObjectDoesNotExist): self.stdout.write("Import with ID '%s' doesn't exist.\n\n" % v) for imprt in importers: pending_state = str(tasks.IMPORT_MESSAGES['import_pending'][0]) imprt.state = pending_state imprt.save() tasks.importing(imprt.pk) self.stdout.write("Import '%d' in progress...\n" % imprt.pk) self.stdout.flush() state = pending_state while state == pending_state: time.sleep(1) state = Importer.objects.get(pk=int(imprt.pk)).state self.stdout.write(state + '\n')