def diccionario_por_autor(ar_fuente, ar_comentarios): """[Autor: Gaston Proz] [Ayuda: Lee archivos .csv, retorna un diccionario con autores como clave y la firma de la funcion, junto con su cantidad de lineas como valores]""" """ Parametros ----------- ar_fuente : archivo, modo lectura ar_comentarios : archivo, modo lectura Returns ------- dict Diccionario que contiene a cada autor de la aplicacion como clave, y como valor una lista de tuplas con la firma de la funcion como primer campo y cantidad de lineas de dicha funcion como segundo campo. """ ar_fuente.seek(0) ar_comentarios.seek(0) linea_f = universales.leer_lineas_csv(ar_fuente) linea_c = universales.leer_lineas_csv(ar_comentarios) diccionario = {} while linea_f[0] != "": funcion = linea_f[0] autor = linea_c[1] lineas = len(linea_f[3:]) #Si no existe la clave del autor, lo agrega con los valores if autor not in diccionario: diccionario[autor] = [(funcion, lineas)] else: #En el caso de que exista, concatena la lista a los valores diccionario[autor] += [(funcion, lineas)] linea_f = universales.leer_lineas_csv(ar_fuente) linea_c = universales.leer_lineas_csv(ar_comentarios) return diccionario
def nombre_funcion(dic, archivo): """ [Autor: Camila Bartocci] [Ayuda: Almacena, en el diccionario principal, el nombre de las funciones como clave, y en el diccionario de valor, {"nombre.modulo":funcion_1.modulo}.] """ """ Parametros: ----------- - dic : diccionario cada elemento tiene como clave el nombre de la funcion, y como valor, los datos asociados a ella. - archivo : csv archivo fuente_unico.csv """ archivo.seek(0) linea = leer_lineas_csv(archivo) while linea[0] != "": funcion, modulo = linea[0], linea[2] dic[funcion] = { "nombre.modulo": "{}.{}".format(funcion, modulo).replace("$", "") } # se le saca el marcador a la funcion principal del programa linea = leer_lineas_csv(archivo)
def hay_descripcion(dic, archivo): """ [Autor: Camila Bartocci] [Ayuda: Agrega, en el diccionario de valor, "ayuda":"Si", si la funcion contiene descripcion, o "ayuda":"No", en caso contrario, a cada funcion del diccionario principal.] """ """ Parametros: ----------- - dic : diccionario cada elemento tiene como clave el nombre de la funcion, y como valor, los datos asociados a ella. - archivo : csv archivo comentarios.csv """ archivo.seek(0) linea = leer_lineas_csv(archivo) while linea[0] != "": funcion = linea[0] if linea[2]: # si el campo 3 no esta vacio, hay descripcion dic[funcion]["ayuda"] = "Si" else: # si el campo 3 esta vacio, no hay descripcion dic[funcion]["ayuda"] = "No" linea = leer_lineas_csv(archivo)
def autor_funcion(dic, archivo): """ [Autor: Camila Bartocci] [Ayuda: Agrega, en el diccionario de valor, "autor":"nombre apellido", a cada funcion del diccionario principal.] """ """ Parametros: ----------- - dic : diccionario cada elemento tiene como clave el nombre de la funcion, y como valor, los datos asociados a ella. - archivo : csv archivo comentarios.csv """ archivo.seek(0) linea = leer_lineas_csv(archivo) while linea[0] != "": funcion = linea[0] dic[funcion]["autor"] = linea[1] linea = leer_lineas_csv(archivo)
def cant_invocaciones(dic, archivo): """ [Autor: Camila Bartocci] [Ayuda: Agrega, en el diccionario de valor, "invocaciones":n, a cada funcion del diccionario principal. Hace uso de la funcion contar_invocaciones, del modulo exp_reg.] """ """ Parametros: ----------- - dic : diccionario cada elemento tiene como clave el nombre de la funcion, y como valor, los datos asociados a ella. - archivo : csv archivo fuente_unico.csv """ archivo.seek(0) # para cada funcion en el diccionario principal for funcion in dic: # inicializo la variable donde se almacena la cant de invocaciones, se # reinicia cada vez que cambio de funcion invocaciones = 0 linea = leer_lineas_csv(archivo) while linea[0] != "": instrucciones = "".join(linea[3:]) # instrucciones es una cadena de todas las lineas de la funcion, # excepto los tres primeros campos que no contabilizan como lineas invocaciones += contar_invocaciones(funcion, instrucciones, True) linea = leer_lineas_csv(archivo) dic[funcion]["invocaciones"] = invocaciones archivo.seek(0)
def cant_lineas(dic, archivo): """ [Autor: Camila Bartocci] [Ayuda: Agrega, en el diccionario de valor, "lineas":n, a cada funcion del diccionario principal.] """ """ Parametros: ----------- - dic : diccionario cada elemento tiene como clave el nombre de la funcion, y como valor, los datos asociados a ella. - archivo : csv archivo fuente_unico.csv """ archivo.seek(0) linea = leer_lineas_csv(archivo) while linea[0] != "": funcion = linea[0] dic[funcion]["lineas"] = len(linea) - 3 #longitud de la linea menos los tres primeros campos, que no #contabilizan como lineas linea = leer_lineas_csv(archivo)
def generar_dic_cantidad_lineas(): """ [Autor: Elian Daniel Foppiano] [Ayuda: Genera un diccionario cuyas claves son los nombres de las funciones definidas en el programa, y los valores son la cantidad de lineas de codigo que tienen.] """ """ Returns ------- dict Almacena pares funcion - cant_lineas """ dic_lineas = {} fuente_unico = open("fuente_unico.csv") datos = leer_lineas_csv(fuente_unico) #Recorro la informacion de cada funcion while datos[0] != "": nombre_funcion = datos[0] cant_instrucciones = len(datos[3:]) dic_lineas[nombre_funcion] = cant_instrucciones datos = leer_lineas_csv(fuente_unico) fuente_unico.close() return dic_lineas
def cant_estructuras(dic, archivo): """ [Autor: Camila Bartocci] [Ayuda: Agrega, en el diccionario de valor, las siguientes estructuras: return, if/elif, for, while, break, exit, con la forma estructura:n, a cada funcion del diccionario principal. Hace uso de la funcion contar_invocaciones.] """ """ Parametros: ----------- - dic : diccionario cada elemento tiene como clave el nombre de la funcion, y como valor, los datos asociados a ella. - archivo : csv archivo fuente_unico.csv """ archivo.seek(0) estructuras = ["return", "if", "elif", "for", "while", "break", "exit"] # lista con las estructuras a buscar linea = leer_lineas_csv(archivo) while linea[0] != "": funcion = linea[0] instrucciones = "".join(linea[3:]) # instrucciones es una cadena de todas las lineas de la funcion, # excepto los tres primeros campos que no contabilizan como lineas for estructura in estructuras: # itero cada estructura a buscar if estructura != 'elif': dic[funcion][estructura] = (contar_invocaciones( estructura, instrucciones, False)) else: # si es elif, la almaceno junto con los if dic[funcion]["if"] += (contar_invocaciones( estructura, instrucciones, False)) linea = leer_lineas_csv(archivo)
def cant_comentarios(dic, archivo): """ [Autor: Camila Bartocci] [Ayuda: Agrega, en el diccionario de valor, "comentarios":n, a cada funcion del diccionario principal.] """ """ Parametros: ----------- - dic : diccionario cada elemento tiene como clave el nombre de la funcion, y como valor, los datos asociados a ella. - archivo : csv archivo comentarios.csv """ archivo.seek(0) comillas_dobles = chr(34) * 3 # se consideran solo comillas dobles ya que en # el modulo ordenar se reemplazaron las simples por dobles linea = leer_lineas_csv(archivo) while linea[0] != "": funcion = linea[0] cant_lineas = 0 for campo in linea[3:]: # considero a partir del cuarto campo porque los anteriores no # tienen comentarios if comillas_dobles in campo: # si es un comentario multilinea, cuento cada linea del comentario cant_lineas += campo.count("/n/") + 1 else: # si no, es una sola linea cant_lineas += 1 dic[funcion]["comentarios"] = cant_lineas linea = leer_lineas_csv(archivo)
def reunir_invocaciones(archivo): """[Autor: Jean Paul Yatim] [Ayuda: Crea un diccionario con todas las funciones del programa como claves. Cada funcion tiene como valor otro diccionario, que tiene como clave a aquellas funciones que invoque (si es que invoca a alguna), y como valor, la cantidad de veces que la invoca. Ej: Si la función "A" invoca a "B" 3 veces, "B" invoca a "C" 2 veces y a "D" 1 vez y ni "C" ni "D" invocan a nadie, el diccionario queda como: {A: {B:3}, B: {C:2, D:1}, C: {}, D: {}}]""" """ Parámetro: ---------- - archivo : archivo csv archivo con la info de c/ función ("fuente_unico.csv") Returns: -------- - funciones : lista todas las funciones en el programa - funcs_llamadas : dict funciones, a quiénes invocan y cuántas veces """ # obtiene una lista de las funciones en el programa funciones = obtener_lista_funciones(True) # lee una linea del "fuente_unico.csv" (una función) linea = leer_lineas_csv(archivo) # crea el diccionario vacío para agregar invocaciones funcs_llamadas = {} # Para cada función en el archivo csv while linea[0] != "": # selecciona la función a analizar func_llama = linea[0] # agrega la función como clave en el diccionario # sus valores son las funciones que invoca en ella (y la cantidad de veces) funcs_llamadas[func_llama] = buscar_en_linea_con_parentesis( linea, funciones) linea = leer_lineas_csv(archivo) return funciones, funcs_llamadas
def cant_parametros(dic, archivo): """ [Autor: Camila Bartocci] [Ayuda: Agrega, en el diccionario de valor, "parametros":n, a cada funcion del diccionario principal.] """ """ Parametros: ----------- - dic : diccionario cada elemento tiene como clave el nombre de la funcion, y como valor, los datos asociados a ella. - archivo : csv archivo fuente_unico.csv """ archivo.seek(0) linea = leer_lineas_csv(archivo) while linea[0] != "": funcion, parametros = linea[0], linea[1] if parametros == "()": #si no hay parametros dic[funcion]["parametros"] = 0 elif parametros.count("/c/") > 1: # si hay mas de un parametro dic[funcion]["parametros"] = 1 + parametros.count("/c/") #p1 /c/ p2 /c/ p3 son dos comas, tres parametros else: dic[funcion]["parametros"] = 1 # si no, es un solo parametro linea = leer_lineas_csv(archivo)
def generar_dic_invocaciones(): """ [Autor: Elian Daniel Foppiano] [Ayuda: Genera genera el diccionario principal de funciones e invocaciones.] """ """ Returns ------- dict Almacena pares funcion - (invoc_1, invoc_2, ...) """ dic_funciones = {} l_funciones = obtener_lista_funciones(True) exp_busqueda_funciones = exp_reg.buscador_invocaciones(l_funciones) fuente_unico = open("fuente_unico.csv") datos = leer_lineas_csv(fuente_unico) while datos[0] != "": nombre_funcion = datos[0] #Uno todas las instrucciones en una #unica cadena instrucciones = " ".join(datos[3:]) #Genero la lista con las invocaciones #que se producen en el codigo de la funcion invocaciones = re.findall(exp_busqueda_funciones, instrucciones) #Guardo los nombres eliminando el parentesis final que quedo #de la busqueda con expresiones regulares dic_funciones[nombre_funcion] = [ invocacion[:-1] for invocacion in invocaciones ] datos = leer_lineas_csv(fuente_unico) fuente_unico.close() return dic_funciones