Пример #1
0
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
Пример #2
0
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)
Пример #3
0
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)
Пример #4
0
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)
Пример #5
0
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)
Пример #6
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)
Пример #7
0
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
Пример #8
0
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)
Пример #9
0
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)
Пример #10
0
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
Пример #11
0
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)
Пример #12
0
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