summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2012-10-06 20:59:42 +0200
committerÉtienne Loks <etienne.loks@peacefrogs.net>2012-10-06 20:59:42 +0200
commit1d216cca64eaaf222a8dbceca5eda361634baec7 (patch)
tree290006abad72e22489544b4e3008f12dcb449b85
parent08a15921f11ad83595e5b3c0a7b501fa5278483f (diff)
downloadChimère-1d216cca64eaaf222a8dbceca5eda361634baec7.tar.bz2
Chimère-1d216cca64eaaf222a8dbceca5eda361634baec7.zip
Export: add a command to launch export with the CLI
-rw-r--r--chimere/management/commands/chimere_export.py86
-rw-r--r--chimere/models.py3
2 files changed, 88 insertions, 1 deletions
diff --git a/chimere/management/commands/chimere_export.py b/chimere/management/commands/chimere_export.py
new file mode 100644
index 0000000..4e91956
--- /dev/null
+++ b/chimere/management/commands/chimere_export.py
@@ -0,0 +1,86 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import csv
+import datetime, time
+
+from django.core.management.base import BaseCommand, CommandError
+from django.core.exceptions import ObjectDoesNotExist
+
+from chimere import tasks
+from chimere.admin import export_to_csv, export_to_kml, export_to_shapefile
+from chimere.models import Category, SubCategory, Marker, Route
+
+EXPORTER = {'CSV':export_to_csv,
+ 'KML':export_to_kml,
+ 'SHP':export_to_shapefile}
+
+class Command(BaseCommand):
+ args = '<subcategory_id> <CSV|KML|SHP> <marker|route> <filename>'
+ help = "Export items from a subcategory in CSV, KML or ShapeFile"
+
+ def handle(self, *args, **options):
+ subcat = None
+ if args and args[0]:
+ try:
+ subcat = SubCategory.objects.get(pk=int(args[0]))
+ except (ValueError, ObjectDoesNotExist) as e:
+ raise CommandError("Sub-category with ID '%s' doesn't exist." %\
+ args[0])
+ while not subcat:
+ self.stdout.write('Choose a sub-category:\n')
+ for cat in Category.objects.order_by('order'):
+ self.stdout.write('* %s\n' % cat.name)
+ for subcat in cat.subcategories.order_by('order').all():
+ self.stdout.write(' %d - %s\n' % (subcat.pk, subcat.name))
+ self.stdout.write('\nSub-category ID: ')
+ self.stdout.flush()
+ v = raw_input()
+ try:
+ subcat = SubCategory.objects.get(pk=v)
+ except (ValueError, ObjectDoesNotExist) as e:
+ subcat = None
+ self.stdout.write("Sub-category with ID '%s' doesn't exist.\n\n"
+ % v)
+ frmat = None
+ if args and args[1]:
+ try:
+ assert(args[1] in ('CSV', 'KML', 'SHP'))
+ except AssertionError:
+ raise CommandError("'%s' format is not managed." % args[1])
+ frmat = args[1]
+ while frmat not in ('CSV', 'KML', 'SHP'):
+ self.stdout.write('Choose a format (CSV, KML or SHP): ')
+ frmat = raw_input().replace('\n', '')
+ exporter = EXPORTER[frmat]
+ cls = None
+ if args and args[2]:
+ try:
+ assert(args[2] in ('marker', 'route'))
+ except AssertionError:
+ raise CommandError("Exported item must be 'marker' or 'route'."
+ % args[1])
+ if args[2] == 'marker':
+ cls = Marker
+ elif args[2] == 'route':
+ cls = Route
+ while not cls:
+ self.stdout.write('Choose an item type:\n 1 - marker\n 2 - route\n')
+ self.stdout.write('Number: ')
+ v = raw_input()
+ if v == '1':
+ cls = Marker
+ elif v == '2':
+ cls = Route
+ filename = ''
+ if args and args[3]:
+ filename = args[3]
+ else:
+ self.stdout.write('Filename: ')
+ filename = raw_input()
+ response = exporter(None, None, cls.objects.filter(categories=subcat))
+ try:
+ with open(filename, 'w+') as fl:
+ fl.write(response.content)
+ except IOError as e:
+ raise CommandError(e)
diff --git a/chimere/models.py b/chimere/models.py
index e6d1636..3767fcb 100644
--- a/chimere/models.py
+++ b/chimere/models.py
@@ -147,7 +147,8 @@ class Icon(models.Model):
class SubCategory(models.Model):
'''Sub-category
'''
- category = models.ForeignKey(Category, verbose_name=_(u"Category"))
+ category = models.ForeignKey(Category, verbose_name=_(u"Category"),
+ related_name='subcategories')
name = models.CharField(_(u"Name"), max_length=150)
available = models.BooleanField(_(u"Available"), default=True)
submission = models.BooleanField(_(u"Available for submission"),