Пример #1
0
def get_community_object_action_list(nome_comunidade, data_inicial, data_final, tipo_servico, tipo_log, format):
    listaDeDados = []
    listaDeObjetos = []
    listaTemp = []
    existente = False
    data_temp = datetime.strptime(data_inicial, format)
       
    if tipo_servico == "todos":
        for row in database.LOG.view('log/stats_by_all_objects',startkey=[nome_comunidade, data_inicial], endkey=[nome_comunidade, data_final,{}], group="true"):
                if (tipo_log == "leitura" and row.key[3] in VERBOS_LEITURA) or (tipo_log == "escrita" and row.key[3] in VERBOS_ESCRITA) or \
                    (tipo_log == "todos" and (row.key[3] in VERBOS_LEITURA or row.key[3] in VERBOS_ESCRITA)):
                    if row.key[4] != "none":
                        nome_objeto = core.dispatcher.URL_TO_PAGETITLE[row.key[4]]+": "+row.key[2]
                          
                    if nome_objeto not in listaDeObjetos:
                        listaDeObjetos.append(nome_objeto)
                    
                    for i in listaDeDados:
                        if (converteDataYMDToMDYStrSemHora(row.key[1]) in i[0]) and (nome_objeto in i[2]):
                            listaDeDados.append((converteDataYMDToMDYStrSemHora(row.key[1]), str(int(i[1]) + int(row.value)), nome_objeto))
                            listaDeDados.remove(i)
                            existente = True
                            break
                        else:
                            existente = False
                    
                    if not existente:    
                        listaDeDados.append((converteDataYMDToMDYStrSemHora(row.key[1]), str(row.value), nome_objeto))
                        listaTemp.append((converteDataYMDToMDYStrSemHora(row.key[1]), nome_objeto))
                      
        while (data_temp) <= (datetime.strptime(data_final, format)):
            for object in listaDeObjetos:
                #se data_temp = data_incial e não há ações nesta data
                if ((data_temp) == (datetime.strptime(data_inicial, format))) and ((str(converteDataYMDToMDYStrSemHora(str(data_temp))), object) not in listaTemp):
                    listaDeDados.append((str(converteDataYMDToMDYStrSemHora(str(data_temp))), '0', object))
                    
                if ((data_temp) == (datetime.strptime(data_final, format))) and ((str(converteDataYMDToMDYStrSemHora(str(data_temp))), object) not in listaTemp):
                    listaDeDados.append((str(converteDataYMDToMDYStrSemHora(str(data_temp))), '0', object))
                
                if (str(converteDataYMDToMDYStrSemHora(str(data_temp))), object) in listaTemp:                
                    if (((str(converteDataYMDToMDYStrSemHora(str(data_temp - timedelta(days=1)))), object) not in listaTemp) and \
                    ((data_temp - timedelta(days=1)) > (datetime.strptime(data_inicial, format)))):
                        listaDeDados.append((str(converteDataYMDToMDYStrSemHora(str(data_temp - timedelta(days=1)))), '0', object))
                        
                    if ((str(converteDataYMDToMDYStrSemHora(str(data_temp + timedelta(days=1)))), object) not in listaTemp and \
                    ((data_temp + timedelta(days=1)) < (datetime.strptime(data_final, format)))):
                        listaDeDados.append((str(converteDataYMDToMDYStrSemHora(str(data_temp + timedelta(days=1)))), '0', object))
                                
            data_temp += timedelta(days=1)
                
    else:
        for row in database.LOG.view('log/stats_by_object',startkey=[nome_comunidade, tipo_servico, data_inicial], endkey=[nome_comunidade, tipo_servico, data_final,{}], group="true"):
                if (tipo_log == "leitura" and row.key[4] in VERBOS_LEITURA) or (tipo_log == "escrita" and row.key[4] in VERBOS_ESCRITA) or \
                (tipo_log == "todos" and (row.key[4] in VERBOS_LEITURA or row.key[4] in VERBOS_ESCRITA)):   
                    if row.key[3] not in listaDeObjetos:
                        listaDeObjetos.append(row.key[3])
                    
                    for i in listaDeDados:
                        if (converteDataYMDToMDYStrSemHora(row.key[2]) in i[0]) and (row.key[3] in i[2]):
                            listaDeDados.append((converteDataYMDToMDYStrSemHora(row.key[2]), str(int(i[1]) + int(row.value)), row.key[3]))
                            listaDeDados.remove(i)
                            existente = True
                            break
                        else:
                            existente = False
                            
                    if not existente:
                        listaDeDados.append((converteDataYMDToMDYStrSemHora(row.key[2]), str(row.value), row.key[3]))
                        listaTemp.append((converteDataYMDToMDYStrSemHora(row.key[2]), row.key[3]))
             
             
        while (data_temp) <= (datetime.strptime(data_final, format)):
            for object in listaDeObjetos:
                #se data_temp = data_incial e não há ações nesta data
                if ((data_temp) == (datetime.strptime(data_inicial, format))) and ((str(converteDataYMDToMDYStrSemHora(str(data_temp))), object) not in listaTemp):
                    listaDeDados.append((str(converteDataYMDToMDYStrSemHora(str(data_temp))), '0', object))
                    
                if ((data_temp) == (datetime.strptime(data_final, format))) and ((str(converteDataYMDToMDYStrSemHora(str(data_temp))), object) not in listaTemp):
                    listaDeDados.append((str(converteDataYMDToMDYStrSemHora(str(data_temp))), '0', object))
                
                if (str(converteDataYMDToMDYStrSemHora(str(data_temp))), object) in listaTemp:                        
                    if (((str(converteDataYMDToMDYStrSemHora(str(data_temp - timedelta(days=1)))), object) not in listaTemp) and \
                    ((data_temp - timedelta(days=1)) > (datetime.strptime(data_inicial, format)))):
                        listaDeDados.append((str(converteDataYMDToMDYStrSemHora(str(data_temp - timedelta(days=1)))), '0', object))
                        
                    if ((str(converteDataYMDToMDYStrSemHora(str(data_temp + timedelta(days=1)))), object) not in listaTemp and \
                    ((data_temp + timedelta(days=1)) < (datetime.strptime(data_final, format)))):
                        listaDeDados.append((str(converteDataYMDToMDYStrSemHora(str(data_temp + timedelta(days=1)))), '0', object))
                                
            data_temp += timedelta(days=1)
                    
    listaDeDados.sort(key=lambda x: x[2])
    listaDeDados.sort(key=lambda x: (converteDataMDYToYMDStrSemHora(x[0])))
    #listaDeDados.sort(key=lambda x: str(x[0]).split("/")[1])        #str(converteDataMDYToYMDStrSemHora(x[0])))
    #listaDeDados.sort(key=lambda x: str(x[0]).split("/")[0])
    #listaDeDados.sort(key=lambda x: str(x[0]).split("/")[2])

    return (listaDeDados, listaDeObjetos)