def handler()

in IAC/temp/function-source/main.py [0:0]


def handler(cloud_event):
    # Decodifica a mensagem do Pub/Sub
    message_data = cloud_event.data["message"]["data"]
    decoded_message = base64.b64decode(message_data).decode('utf-8')

    print(f"id recebido: {decoded_message}")

    session = None  # Inicialize a variável session
    try:
        # Converte decoded_message para UUID
        uuid_param = UUID(decoded_message)

        # Instancia o conector do banco de dados
        db_connector = DatabaseConnector()

        # Cria a sessão usando o método create_session da classe DatabaseConnector
        session = db_connector.create_session()

        # Imprime o Schema
        db_connector.imprimir_schema()

        # Consulta o banco de dados
        query = select(Requisicao).where(Requisicao.id == uuid_param)
        result = session.execute(query).scalars().first()

        if result:
            # Baixa imagens do drive e sobe para bucket
            reg_links = r"https://drive\.google\.com/file/d/[^/]+\/view\?usp=sharing"
            links_no_texto = re.findall(reg_links, result.TextosMotivadores)

            images = []
            for link in links_no_texto:
                img = ImageUploader(link)
                if not getattr(img, "fail", False):
                    images.append(img)

            texto_adaptado = result.TextosMotivadores
            for img in images:
                texto_adaptado.replace(img.url_original, img.url_cloudstorage)


            # Instancia o Corretor
            corretor = Corretor()
            corrigido_validado = False
            while not corrigido_validado:
                # Monta o dicionário redacao_data com os dados da redação
                redacao_data = {
                    "tema_redacao": result.TitleTema,
                    "enunciado_redacao": result.DescricaoPedido,
                    "textos_motivadores": texto_adaptado.replace("\n", "").replace("\r", ""),
                    "redacao_estudante": result.Redacao.replace("\n", "").replace("\r", "")
                }

                # Realiza a correção com o dicionário redacao_data
                datetime_inicio_correcao = datetime.now(pytz.timezone("America/Sao_Paulo"))
                # Aplica a Correção na redação.
                correcao = corretor.get_correcao_from_redacao(redacao_data)
                # Aplica a Validação.
                validacao = corretor.validate_essay(redacao_data)

                # Extrai dados da correção
                resultado = correcao.get_resposta_completa()
                comentarios = correcao.get_comentarios()
                notas_competencias = correcao.get_nota_comptencias()
                nota_enem = correcao.get_nota_enem()
               

                print(resultado)
                # Competências esperadas
                competencias = ["competencia_2", "competencia_3", "competencia_4", "competencia_5"]
                
                # Validação Esperada.
                validacao_enum = [
                                    'Válida', 
                                    'Inválida - Texto Ilegível ou Ininteligível', 
                                    'Inválida - Desvio do Gênero Dissertativo-Argumentativo', 
                                    'Inválida - Cópia dos textos motivadores', 
                                    'Inválida - Violação aos Direitos Humanos'
                                ]


                notas_compt = []
                corrigido_validado = True
                # Loop para verificar cada competência e extrair o valor
                for competencia in competencias:
                    if competencia in notas_competencias:
                        notas_compt.append(notas_competencias[competencia])
                    else:
                        corrigido_validado = False
                        notas_compt = []  # Limpa a lista de valores, pois não está corrigido
                        break

                if validacao not in validacao_enum: 
                    corrigido_validado = False

                print("Correção realizada:", resultado, validacao)

                # Salva a correção no banco de dados se `corrigido` for True
                if corrigido_validado:
                    db_connector.salvar_correcao(
                        id_requisicao=uuid_param,
                        resultado=resultado,
                        validacao=validacao,
                        nota_enem=nota_enem,
                        notas_competencias=notas_compt,
                        datetime_inicio_correcao=datetime_inicio_correcao,
                        plagio=correcao.plagio if hasattr(correcao, 'plagio') else None,
                    )

                else:
                    print("Correção incompleta, tentando novamente.")

        else:
            print(f"Nenhum dado encontrado para o UUID: {decoded_message}")

    except Exception as e:
        print(f"Erro ao buscar dados: {e}")

    finally:
        if session:
            session.close()