diff --git a/app/parser.py b/app/parser.py index 4d7c131709282d063127cabbe370ad39ac8af4fa..e28f48857124e1d410ee7ad30cc7c89485676d8e 100644 --- a/app/parser.py +++ b/app/parser.py @@ -1,17 +1,30 @@ from flask import Flask, request import os +import logging +import sys app = Flask(__name__) -# Diretórios onde os arquivos Markdown serão salvos +#Configuração do log +logging.basicConfig(stream=sys.stdout, + filemode='a', + level=logging.INFO, + format='%(asctime)s - %(levelname)s - %(message)s') + + +# Diretórios onde os arquivos Markdown serão salvos dentro da pasta do hugo DIR_O_C3SL = os.path.join(os.getcwd(), '../cms-c3sl/themes/c3sl/exampleSite/content') DIR_POSTS = os.path.join(os.getcwd(), '../cms-c3sl/themes/c3sl/exampleSite/content/noticia') DIR_PROJECTS = os.path.join(os.getcwd(), '../cms-c3sl/themes/c3sl/exampleSite/content/projetos') def create_or_update_post(post_id, data, event, content_type): if not data: - return + logging.error(f"Code: 400" + f"Status: JSON file not found\n") + logging.exception("error occurred while processing the event") + return "JSON not found", 400 + #Caso a requisição seja para criar/alterar o conteudo do "Quem Somos" if content_type == 'o-c3sl': attributes = data.get('entry', {}) title = attributes.get('Titulo', '') @@ -27,7 +40,9 @@ layout: 'legal' --- {content} """ + #Caso a requisição seja para criar/alterar um projeto elif content_type == 'projeto': + #Coleta os dados necessários para estar no arquivo JSON attributes = data.get('entry', {}) title = attributes.get('Titulo', '') status = attributes.get('Status', '') @@ -39,18 +54,19 @@ layout: 'legal' edited_line = 'Edited: true\n' if event == 'entry.update' else '' - content_markdown = f"""--- + content_markdown = f""" +--- title: "{title}" author: " Parceiro: {partner}" status: "{status}" {edited_line}ShowReadingTime: true --- --- - {content} """ - - else: + ##Caso a requisição seja para criar/alterar uma notícia + elif content_type == 'post': + #Coleta os dados necessários para estar no arquivo JSON attributes = data.get('entry', {}) content = attributes.get('Descricao', '') published_at = attributes.get('Data', '') @@ -81,59 +97,88 @@ summary: "{summary}" {content} """ - + + #Registra o conteúdo no arquivo conforme diretório estabelecido try: with open(file_path, 'w', encoding='utf8') as file: file.write(content_markdown) - #print(f"Conteúdo do Markdown criado/atualizado para o post ID {post_id}:\n{content_markdown}\n") - #print(f"Post '{title}' salvo como {file_path}") + logging.info(f"Content '{title}'\nSaved in: {file_path}") + except Exception as e: - print(f"Erro ao escrever o arquivo: {e}") + logging.error(f"Error writing file{e}") + return f"Error writing file{e}", 400 +#Deleta algum tipo de conteudo enviado por requisição def delete_post(post_id, content_type): + #Deletando uma notícia if content_type == 'post': file_name = f"{post_id}.md" file_path = os.path.join(DIR_POSTS, file_name) if os.path.exists(file_path): os.remove(file_path) - #print(f"Post com ID {post_id} deletado") + logging.info(f"200 - DELETED: Post with ID number {post_id}") else: - print(f"Arquivo com ID {post_id} não encontrado para exclusão") + logging.error(f"400 - ERROR: Post with with ID number{post_id} not found for exclusion") + + #Deletando um projeto elif content_type == 'projeto': file_name = f"{post_id}.md" file_path = os.path.join(DIR_PROJECTS, file_name) if os.path.exists(file_path): os.remove(file_path) - #print(f"Post com ID {post_id} deletado") + logging.info(f"200 - DELETED: Project with ID number {post_id}") else: - print(f"Arquivo com ID {post_id} não encontrado para exclusão") - + logging.error(f"200 - ERROR: File of project with ID number {post_id} not found for exclusion") + else: + logging.error(f"400 - ERROR: Content type: '{content_type}' not recognized for deletion") +#Função responsavel por interpretar as requisições do webhooks @app.route('/', methods=['POST']) def run_script(): data = request.json - #print("Dados recebidos:", data) + print("JSON received: ", data) + logging.info ("Data (JSON) received") + #Do arquivo JSON, separa ID do conteudo, tipo do evento e o conteúdo post_id = data.get('entry', {}).get('id') event = data.get('event') content_type = data.get('model', '') # Obtém o tipo de conteúdo do Strapi - print(f"Evento: {event}, ID: {post_id}, Tipo: {content_type}") + print(f"Event: {event}, ID: {post_id}, Type: {content_type}") if not post_id: + logging.error(f"Code: 400" + f"Status: ID not found in JSON: {data}") + logging.exception("error occurred while processing the event") return "ID not found in JSON", 400 - - if event in ['entry.update', 'entry.publish']: + + if event in ['entry.create']: + logging.info (f"File created in Strapi- ID: {post_id} - Type: {content_type}" + f"\nData: {data}") + return f"File created in Strapi {post_id} - Type: {content_type}", 200 + + elif event in ['entry.update', 'entry.publish']: create_or_update_post(post_id, data, event, content_type) + + logging.info(f"\nFile created in Hugo- ID: {post_id} - Type: {content_type}" + f"\nData: {data}\nOperation completed successfully\n") + return f"Operation completed successfully\n Data: {data}", 200 + elif event in ['entry.delete', 'entry.unpublish']: delete_post(post_id, content_type) - else: - return "Evento não reconhecido", 400 + logging.info(f"File removed - ID: {post_id} - Type: {content_type}") + return f"File removed with ID {post_id}", 200 - return "Operação concluída com sucesso", 200 + else: + logging.error(f"Code: 400\n" + f"Status: Event {event} not recognized\n" + f"JSON Object: {data}") + logging.exception("error occurred while processing the event") + return f"Event {event} not recognized", 400 + if __name__ == '__main__': - app.run(port=5000) + app.run(port=5000) \ No newline at end of file