diff options
| author | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-01-27 18:05:32 +0100 |
|---|---|---|
| committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-01-27 18:05:32 +0100 |
| commit | 95fa295d7d93cdb65755e66c559a792edec4f17a (patch) | |
| tree | 0b45d6a11a650fbbf1a077cccf8e635305e56938 /ishtar | |
| parent | 4910b41a5689e7af239edc8fff5d9aceef9e318e (diff) | |
| download | Ishtar-95fa295d7d93cdb65755e66c559a792edec4f17a.tar.bz2 Ishtar-95fa295d7d93cdb65755e66c559a792edec4f17a.zip | |
Town and departement import script from CSV file - insee data for France (refs #148)
Diffstat (limited to 'ishtar')
| -rw-r--r-- | ishtar/furnitures/models.py | 16 | ||||
| -rw-r--r-- | ishtar/furnitures/views.py | 5 | ||||
| -rw-r--r-- | ishtar/scripts/__init__.py | 0 | ||||
| -rwxr-xr-x | ishtar/scripts/import_from_csv.py | 68 | ||||
| -rw-r--r-- | ishtar/settings.py.example | 1 |
5 files changed, 83 insertions, 7 deletions
diff --git a/ishtar/furnitures/models.py b/ishtar/furnitures/models.py index f7cc8288c..1a595f629 100644 --- a/ishtar/furnitures/models.py +++ b/ishtar/furnitures/models.py @@ -144,7 +144,7 @@ class LightHistorizedItem(BaseHistorizedItem): class Departement(models.Model): label = models.CharField(_(u"Label"), max_length=30) - number = models.IntegerField(_(u"Number")) + number = models.CharField(_(u"Number"), unique=True, max_length=3) class Meta: verbose_name = _(u"Departement") @@ -669,10 +669,14 @@ if settings.COUNTRY == 'fr': class Town(models.Model): name = models.CharField(_(u"Name"), max_length=100) - surface = models.IntegerField(_(u"Surface")) - center = models.PointField(_(u"Localisation"), srid=settings.SRID) + surface = models.IntegerField(_(u"Surface"), blank=True, null=True) + center = models.PointField(_(u"Localisation"), srid=settings.SRID, + blank=True, null=True) if settings.COUNTRY == 'fr': - numero_insee = models.CharField(u"Numéro INSEE", max_length=5) + numero_insee = models.CharField(u"Numéro INSEE", max_length=6, + unique=True) + departement = models.ForeignKey(Departement, verbose_name=u"Département", + null=True, blank=True) canton = models.ForeignKey(Canton, verbose_name=u"Canton", null=True, blank=True) objects = models.GeoManager() @@ -680,8 +684,12 @@ class Town(models.Model): class Meta: verbose_name = _(u"Town") verbose_name_plural = _(u"Towns") + if settings.COUNTRY == 'fr': + ordering = ['numero_insee'] def __unicode__(self): + if settings.COUNTRY == "fr": + return " - ".join((self.name, self.numero_insee)) return self.name class TreatmentType(GeneralType): diff --git a/ishtar/furnitures/views.py b/ishtar/furnitures/views.py index 03029cfe4..c9ea7a0fd 100644 --- a/ishtar/furnitures/views.py +++ b/ishtar/furnitures/views.py @@ -91,9 +91,8 @@ def autocomplete_town(request): for q in q.split(' '): extra = Q(name__icontains=q) if settings.COUNTRY == 'fr': - extra = extra | (Q(canton__name__istartswith=q) | \ - Q(canton__arrondissement__name__istartswith=q) | \ - Q(canton__arrondissement__department__label__istartswith=q)) + extra = (extra | Q(numero_insee__istartswith=q) | \ + Q(departement__label__istartswith=q)) query = query & extra limit = 15 towns = models.Town.objects.filter(query)[:limit] diff --git a/ishtar/scripts/__init__.py b/ishtar/scripts/__init__.py new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/ishtar/scripts/__init__.py diff --git a/ishtar/scripts/import_from_csv.py b/ishtar/scripts/import_from_csv.py new file mode 100755 index 000000000..7eb655641 --- /dev/null +++ b/ishtar/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 furnitures import models + +def insert_department(value): + idx, label = value + if models.Departement.objects.filter(number=idx).count(): + return + models.Departement(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.Departement.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) diff --git a/ishtar/settings.py.example b/ishtar/settings.py.example index d38f68cf8..92ce2baa1 100644 --- a/ishtar/settings.py.example +++ b/ishtar/settings.py.example @@ -118,5 +118,6 @@ INSTALLED_APPS = ( 'django.contrib.messages', 'django.contrib.admin', 'registration', + #'ishtar.scripts', 'ishtar.furnitures' ) |
