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()
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)