Пример #1
0
    def populate_parents(self,election):
        def add_results(orig,dest):
            dest.blank_votes    = int(dest.blank_votes   or 0) + orig.blank_votes
            dest.population     = int(dest.population    or 0) + orig.population
            dest.num_tables     = int(dest.num_tables    or 0) + orig.num_tables
            dest.total_census   = int(dest.total_census  or 0) + orig.total_census
            dest.total_voters   = int(dest.total_voters  or 0) + orig.total_voters
            dest.valid_votes    = int(dest.valid_votes   or 0) + orig.valid_votes
            dest.votes_parties  = int(dest.votes_parties or 0) + orig.votes_parties
            dest.null_votes     = int(dest.null_votes    or 0) + orig.null_votes
            return dest

        for country in Place.objects.filter(level=0):
            res_country = Result(place=country,election=election)
            for com in country.children.all():
                res_com = Result(place=com,election=election)
                for pro in com.children.all():
                    res_pro = Result(place=pro,election=election)
                    for mun in pro.children.all():
                        try:
                            res_mun = mun.result_set.get(election=election)
                        except Result.DoesNotExist:
                            self.logger.error("El municipio %s no tiene resultado en la eleccion %s",mun,election)
                            continue                            
                        res_pro = add_results(res_mun,res_pro)
                    res_pro.save()
                    res_com = add_results(res_pro,res_com)
                res_com.save()
                res_country = add_results(res_com,res_country)
            res_country.save()
Пример #2
0
    def handle(self, *args, **options):
        filename = args[0]
        type = self.get_type_of_election(os.path.basename(filename))
        date = self.get_date_of_election(os.path.basename(filename))
        
        self.logger.info("Loading: %s ...",filename)
        wb = load_workbook(filename, use_iterators = True)
        ws = wb.get_active_sheet()
        ws.garbage_collect()
        numrows = ws.get_highest_row() - 6 # por que un 6?
        numcols = ws.get_highest_column()
        rowcount = 0
        self.logger.debug("%d/%d Rows/Cols to be parsed",numrows,numcols)


        election = Election(date=date,type=type)
        spain = Place.objects.get(cod_ine=0)
        

        # PARTIES
        # Save the party names into a dict
        self.logger.info("Saving Parties ...")
        parties_list = []
        names = []
        acros = []
        x = -1
        for row in ws.iter_rows():
            x = x + 1
            if x == 2:
                election.name = row[0].internal_value.strip()
                try:
                    election = Election.objects.get(name__exact=election.name)
                except Election.DoesNotExist:
                    election.save()

            if x < 4:
                continue
            if x > 5:
                break
            for cell in row[13:]:
                if cell.internal_value is not None:
                    if x == 4:
                        names.append(cell.internal_value.rstrip())
                    if x == 5:
                        acros.append(cell.internal_value.rstrip())

        for i in xrange(0,len(names)):
            #print names[i],'---',acros[i]
            if names[i] == '':
                continue
            par = Party(acronym=acros[i],name=names[i],country=spain)
            try:
                par = Party.objects.get(name__exact=names[i],country=spain)
            except Party.DoesNotExist:
                par.save()
                self.logger.debug("NEW PARTY: %s",names[i])
            parties_list.append(par)


        self.logger.info("Saving Data ...")
        for row in ws.iter_rows():
            rowcount = rowcount + 1
            if rowcount < 7:
                continue
            self.logger.info("[%d/%d]",rowcount,numrows)
            try:
                raw_cod = str(int(row[1].internal_value)).zfill(2) + str(int(row[3].internal_value)).zfill(3)
            except:
                continue
            try:
                mun = Place.objects.get(cod_ine__exact=raw_cod)
            except Place.DoesNotExist:
                self.logger.error("No existe el codigo %s, con nombre %s",raw_cod,row[4].internal_value)

            population    = self.read_int_cell(row[5])
            num_tables    = self.read_int_cell(row[6])
            total_census  = self.read_int_cell(row[7])
            total_voters  = self.read_int_cell(row[8])
            valid_votes   = self.read_int_cell(row[9])
            votes_parties = self.read_int_cell(row[10])
            blank_votes   = self.read_int_cell(row[11])
            null_votes    = self.read_int_cell(row[12])


            res = Result(place=mun,election=election,population=population,num_tables=num_tables,
                            total_census=total_census,total_voters=total_voters,
                            valid_votes=valid_votes,votes_parties=votes_parties,
                            blank_votes=blank_votes,null_votes=null_votes)
            try:
                res = Result.objects.get(place__exact=mun,election__exact=election)
            except Result.DoesNotExist:
                res.save()
                self.logger.debug("Saved %s, num votes %s",res.place.name,str(res.valid_votes))


            
            # Votos a cada partido
            num_col = 13 # En esta columna empiezan los partidos, espero
            for party in parties_list:
                num_votes = self.read_int_cell(row[num_col])
                if num_votes > 0:
                    respar = ResultParties(num_votes=num_votes,result=res,party=party)
                    try:
                        respar = ResultParties.objects.get(result__exact=res,party__exact=party)
                    except ResultParties.DoesNotExist:
                        respar.save()
                num_col = num_col + 1
        self.logger.info("Populating parents")
        self.populate_parents(election)