web/hdalab/management/commands/import_hda_insee_csv.py
author veltr
Fri, 16 Nov 2012 18:12:05 +0100
changeset 265 73f19fa4f997
parent 231 73123394bc53
permissions -rw-r--r--
Merge with 6a381e9fd3e7d7990ea7cc3af8c57b34aa5bcdb2

# -*- coding: utf-8 -*-
'''
@author: raphv
'''
from django.core.management.base import BaseCommand, CommandError
import django.utils.simplejson as json
from SPARQLWrapper import SPARQLWrapper, JSON
from hdalab.models import InseeCoords, DatasheetExtras
from hdabo.models import Datasheet
import csv
import re
import sys

class Command(BaseCommand):
    '''
    Command to export tags
    '''
    args = '<path_to_csv_file>'
    options = ''
    help = """Imports HDA Lab INSEE codes from a csv file"""
        
    def handle(self, *args, **options):

        if len(args) == 0 or not args[0]:
            raise CommandError("Give a CSV File to import")
        
        filename = args[0]
        
        csvfile = open(filename, "rb")
        dialect = csv.Sniffer().sniff(csvfile.read(1024))
        csvfile.seek(0)
        reader = csv.reader(csvfile, dialect)
        fieldstoget = [ 'id', 'insee' ]
        
        
        for i,line in enumerate(reader):
            if i == 0:
                fields = {}
                minlength = 0
                for j,field in enumerate(line):
                    for fieldname in fieldstoget:
                        if re.search('(?i)%s' % fieldname, field):
                            fields[fieldname] = j
                            minlength = max(j,minlength)
            else:
                if len(line) > minlength:
                    rawdata = dict([(k,line[v].strip()) for k,v in fields.iteritems()])
                    # Traitement special pour la Corse
                    insee = int(re.sub('^2(A|B)','20',rawdata['insee']))
                        
                    hda_id = int(rawdata['id'])
                    
                    try:
                        datasheet = Datasheet.objects.get(hda_id=hda_id)
                    except Datasheet.DoesNotExist:
                        #print "Datasheet for id %d does not exist" % hda_id
                        datasheet = None
                    try:
                        inseecoord = InseeCoords.objects.get(insee=insee)
                    except InseeCoords.DoesNotExist:
                        print "INSEE entry for Insee Code %d does not exist" % insee
                        inseecoord = None
                    
                    if datasheet is not None and inseecoord is not None:
                        dsextra, created = DatasheetExtras.objects.get_or_create(datasheet=datasheet, defaults={'insee':inseecoord})
                        if not created:
                            dsextra.insee = inseecoord
                            dsextra.save()
        
        csvfile.close()