summaryrefslogtreecommitdiff
path: root/scripts/import_from_csv.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/import_from_csv.py')
-rwxr-xr-xscripts/import_from_csv.py68
1 files changed, 68 insertions, 0 deletions
diff --git a/scripts/import_from_csv.py b/scripts/import_from_csv.py
new file mode 100755
index 000000000..9640f1851
--- /dev/null
+++ b/scripts/import_from_csv.py
@@ -0,0 +1,68 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+"""
+Import departements and towns from csv file
+"""
+
+DELIMITER = ","
+QUOTECHAR = '"'
+
+import sys
+import csv
+sys.path.append('.')
+
+from django.core.management import setup_environ
+import settings
+
+setup_environ(settings)
+
+from optparse import OptionParser
+
+from ishtar_common import models
+
+def insert_department(value):
+ idx, label = value
+ if models.Department.objects.filter(number=idx).count():
+ return
+ models.Department(number=idx, label=label).save()
+ print idx, label, u" inserted"
+
+def insert_town(value):
+ idx, label = value
+ if models.Town.objects.filter(numero_insee=idx).count():
+ return
+ try:
+ dpt = models.Department.objects.get(number=idx[:2])
+ except:
+ return
+ models.Town(numero_insee=idx, name=label, departement=dpt).save()
+ print idx, label, u" inserted"
+
+tables = {u"department":insert_department,
+ u"town":insert_town}
+
+usage = u"usage: %%prog csv_file.csv table_name\n\n"\
+ u"Table name must be in: %s." % u", ".join(tables.keys())
+parser = OptionParser(usage=usage)
+
+(options, args) = parser.parse_args()
+
+try:
+ assert len(args) == 2
+except AssertionError:
+ parser.error(u"You must provide one csv file and the table name.")
+
+try:
+ assert args[1] in tables.keys()
+except AssertionError:
+ parser.error(u"Incorrect table name.")
+
+try:
+ values = csv.reader(open(args[0], 'rb'), delimiter=DELIMITER,
+ quotechar=QUOTECHAR)
+except (IOError):
+ parser.error(u"Incorrect CSV file.")
+
+for value in values:
+ tables[args[1]](value)