Пример #1
0
def refresh_rankings_v2():
    print "Refreshing the EXPA rankings"
    api = expaApi.ExpaApi(account='*****@*****.**', fail_attempts=5)
    mcs = Office.objects.filter(office_type="MC").order_by('expaID')
    programs = Program.objects.all()
    for mc in mcs:
        print "Cargando datos del MC %s" % mc.name
        for program in programs:
            #Loads the performance in the given program for the given MC
            try:
                performance = api.getCountryCurrentYearStats(program.name, mc.expaID)
                for officeID, values in performance.iteritems():
                #Recorre todas las oficinas y sus logros para el programa dado
                    #print "Office ID: %s" % officeID
                    #print values
                    #Si los logros de este programa ya existen, se actualizan en la base de datos. Si no existen (sucede cuando algún comité del mundo acaba de abrir un nuevo programa) se crean unos nuevos
                    suboffices_loaded = False  # This keeps track on whether suboffices have already been loaded at least once. If that's the case, then empty LCs will be ignored.
                    try:
                        logros, created = LogrosPrograma.objects.update_or_create(program=program, office_id=officeID, defaults=values)
                    except IntegrityError as e:
                    #Esto quiere decir que probablemente intentó cargar un LC que todavía no existe. Esto pasa cuando se crean nuevos LCs desde la última vez que se actualizó en ranking.
                        print "Integrity error loading data of LC %s" % officeID
                        print e
                        if not suboffices_loaded:
                            try:
                                load_suboffices(mc.expaID, "LC", api)
                                logros, created = LogrosPrograma.objects.update_or_create(program=program, office_id=officeID, defaults=values)
                            except IntegrityError as e2:
                                print "Error al intentar cargar los logros después de cargar las suboficinas. Probablemente el LC ya no existe. Ignorando..."
                                print e2
            except expaApi.APIUnavailableException as e:
                print "Error de EXPA cargando el país actual, continuando..."
                break
Пример #2
0
def loadMCPerformance(mcID, api):
    mc = MC.objects.get(expaID = mcID)
    print "Cargando datos de %s" % mc.nombre
    programs = ['ogcdp', 'igcdp', 'ogip', 'igip']
    metrics = ['MA', 'RE']
    allProgramsPerformance = {}
    for program in programs:
        print "cargando %s" % program
        performance = api.getCountryCurrentYearStats(program, mcID)
        allProgramsPerformance[program] = performance
    
    for lc in mc.lcs.all():
        for program in programs:
            programPerformance = allProgramsPerformance[program]
            for metric in metrics:
                try:
                    setattr(lc, program+metric, programPerformance[lc.expaID][metric])
                except KeyError as e:
                    break
        lc.save() 
Пример #3
0
def loadMCPerformance(mcID, api):
    mc = MC.objects.get(expaID = mcID)
    print "Cargando datos de %s" % mc.nombre
    programs = ['ogcdp', 'igcdp', 'ogip', 'igip']
    metrics = ['MA', 'RE']
    allProgramsPerformance = {}
    for program in programs:
        print "cargando %s" % program
        performance = api.getCountryCurrentYearStats(program, mcID)
        allProgramsPerformance[program] = performance
    
    for lc in mc.lcs.all():
        for program in programs:
            programPerformance = allProgramsPerformance[program]
            for metric in metrics:
                try:
                    setattr(lc, program+metric, programPerformance[lc.expaID][metric])
                except KeyError as e:
                    break
        lc.save() 
Пример #4
0
def refresh_rankings_v2():
    print "Refreshing the EXPA rankings"
    api = expaApi.ExpaApi()
    mcs = Office.objects.filter(office_type="MC").order_by('expaID')
    programs = Program.objects.all()
    for mc in mcs:
        print "Cargando datos del MC %s" % mc.name
        for program in programs:
            print "Cargando %s" % program.name
            #Loads the performance in the given program for the given MC
            performance = api.getCountryCurrentYearStats(program.name, mc.expaID)
            for officeID, values in performance.iteritems():
            #Recorre todas las oficinas y sus logros para el programa dado
                #print "Office ID: %s" % officeID
                #print values
                #Si los logros de este programa ya existen, se actualizan en la base de datos. Si no existen (sucede cuando algún comité del mundo acaba de abrir un nuevo programa) se crean unos nuevos
                try:
                    logros, created = LogrosPrograma.objects.update_or_create(program=program, office_id=officeID, defaults=values)
                except IntegrityError as e:
                #Esto quiere decir que probablemente intentó cargar un LC que todavía no existe. Esto pasa cuando se crean nuevos LCs desde la última vez que se actualizó en ranking.
                    print e
                    load_suboffices(mc.expaID, "LC", api)
                    logros, created = LogrosPrograma.objects.update_or_create(program=program, office_id=officeID, defaults=values)