src/hdalab/management/commands/import_hda_insee_csv.py
author ymh <ymh.work@gmail.com>
Wed, 11 Apr 2018 12:19:47 +0200
branchdocumentation
changeset 693 09e00f38d177
parent 443 27f71b0a772d
permissions -rw-r--r--
Add hdabo/hdalab documentations
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
123
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
     1
# -*- coding: utf-8 -*-
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
     2
'''
693
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 443
diff changeset
     3
Importe les code INSEE dans les fiches HDA (objets :class:`hdabo.models.datasheet`).
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 443
diff changeset
     4
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 443
diff changeset
     5
**Usage**: ``django-admin import_hda_insee_csv [options] [args [args ...]]``
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 443
diff changeset
     6
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 443
diff changeset
     7
**Arguments**: <chemin_vers_csv_insee>
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 443
diff changeset
     8
123
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
     9
'''
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    10
import csv
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    11
import re
443
27f71b0a772d next version of import_rdf
ymh <ymh.work@gmail.com>
parents: 272
diff changeset
    12
27f71b0a772d next version of import_rdf
ymh <ymh.work@gmail.com>
parents: 272
diff changeset
    13
from django.core.management.base import BaseCommand, CommandError
27f71b0a772d next version of import_rdf
ymh <ymh.work@gmail.com>
parents: 272
diff changeset
    14
27f71b0a772d next version of import_rdf
ymh <ymh.work@gmail.com>
parents: 272
diff changeset
    15
from hdabo.models import Datasheet
27f71b0a772d next version of import_rdf
ymh <ymh.work@gmail.com>
parents: 272
diff changeset
    16
from hdalab.models import InseeCoords, DatasheetExtras
27f71b0a772d next version of import_rdf
ymh <ymh.work@gmail.com>
parents: 272
diff changeset
    17
123
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    18
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    19
class Command(BaseCommand):
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    20
    '''
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    21
    Command to export tags
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    22
    '''
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    23
    args = '<path_to_csv_file>'
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    24
    options = ''
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    25
    help = """Imports HDA Lab INSEE codes from a csv file"""
693
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 443
diff changeset
    26
123
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    27
    def handle(self, *args, **options):
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    28
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    29
        if len(args) == 0 or not args[0]:
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    30
            raise CommandError("Give a CSV File to import")
693
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 443
diff changeset
    31
123
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    32
        filename = args[0]
693
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 443
diff changeset
    33
123
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    34
        csvfile = open(filename, "rb")
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    35
        dialect = csv.Sniffer().sniff(csvfile.read(1024))
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    36
        csvfile.seek(0)
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    37
        reader = csv.reader(csvfile, dialect)
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    38
        fieldstoget = [ 'id', 'insee' ]
693
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 443
diff changeset
    39
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 443
diff changeset
    40
123
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    41
        for i,line in enumerate(reader):
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    42
            if i == 0:
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    43
                fields = {}
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    44
                minlength = 0
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    45
                for j,field in enumerate(line):
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    46
                    for fieldname in fieldstoget:
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    47
                        if re.search('(?i)%s' % fieldname, field):
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    48
                            fields[fieldname] = j
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    49
                            minlength = max(j,minlength)
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    50
            else:
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    51
                if len(line) > minlength:
231
73123394bc53 correct import csv scripts
ymh <ymh.work@gmail.com>
parents: 124
diff changeset
    52
                    rawdata = dict([(k,line[v].strip()) for k,v in fields.iteritems()])
123
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    53
                    # Traitement special pour la Corse
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    54
                    insee = int(re.sub('^2(A|B)','20',rawdata['insee']))
693
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 443
diff changeset
    55
123
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    56
                    hda_id = int(rawdata['id'])
693
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 443
diff changeset
    57
123
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    58
                    try:
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    59
                        datasheet = Datasheet.objects.get(hda_id=hda_id)
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    60
                    except Datasheet.DoesNotExist:
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    61
                        #print "Datasheet for id %d does not exist" % hda_id
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    62
                        datasheet = None
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    63
                    try:
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    64
                        inseecoord = InseeCoords.objects.get(insee=insee)
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    65
                    except InseeCoords.DoesNotExist:
124
f937ccc6c144 Correction import insee csv
veltr
parents: 123
diff changeset
    66
                        print "INSEE entry for Insee Code %d does not exist" % insee
f937ccc6c144 Correction import insee csv
veltr
parents: 123
diff changeset
    67
                        inseecoord = None
693
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 443
diff changeset
    68
123
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    69
                    if datasheet is not None and inseecoord is not None:
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    70
                        dsextra, created = DatasheetExtras.objects.get_or_create(datasheet=datasheet, defaults={'insee':inseecoord})
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    71
                        if not created:
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    72
                            dsextra.insee = inseecoord
94fc5f5b5cfd Added Insee Codes
veltr
parents:
diff changeset
    73
                            dsextra.save()
693
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 443
diff changeset
    74
09e00f38d177 Add hdabo/hdalab documentations
ymh <ymh.work@gmail.com>
parents: 443
diff changeset
    75
        csvfile.close()