Skip to content
Snippets Groups Projects
Commit d499bc8c authored by Richard Fernando Heise Ferreira's avatar Richard Fernando Heise Ferreira
Browse files

Merge branch 'issue-6/update-parser-to-strapi5' into 'main'

Issue #6: UPDATE Parser modifications for strapi V5.0

See merge request !6
parents 1ac0f1ba db9bbdb4
No related branches found
No related tags found
1 merge request!6Issue #6: UPDATE Parser modifications for strapi V5.0
...@@ -2,6 +2,7 @@ from flask import Flask, request ...@@ -2,6 +2,7 @@ from flask import Flask, request
import os import os
import logging import logging
import sys import sys
import requests
app = Flask(__name__) app = Flask(__name__)
...@@ -13,11 +14,11 @@ logging.basicConfig(stream=sys.stdout, ...@@ -13,11 +14,11 @@ logging.basicConfig(stream=sys.stdout,
# Diretórios onde os arquivos Markdown serão salvos dentro da pasta do hugo # 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_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_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') 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): def create_or_update_noticia(noticia_id, data, event, content_type):
if not data: if not data:
logging.error(f"Code: 400" logging.error(f"Code: 400"
f"Status: JSON file not found\n") f"Status: JSON file not found\n")
...@@ -25,7 +26,7 @@ def create_or_update_post(post_id, data, event, content_type): ...@@ -25,7 +26,7 @@ def create_or_update_post(post_id, data, event, content_type):
return "JSON not found", 400 return "JSON not found", 400
#Caso a requisição seja para criar/alterar o conteudo do "Quem Somos" #Caso a requisição seja para criar/alterar o conteudo do "Quem Somos"
if content_type == 'o-c3sl': if content_type == 'sobre':
attributes = data.get('entry', {}) attributes = data.get('entry', {})
title = attributes.get('Titulo', '') title = attributes.get('Titulo', '')
content = attributes.get('Descricao', '') content = attributes.get('Descricao', '')
...@@ -49,7 +50,7 @@ layout: 'legal' ...@@ -49,7 +50,7 @@ layout: 'legal'
partner = attributes.get('Parceiro', '') partner = attributes.get('Parceiro', '')
content = attributes.get('Descricao', '') content = attributes.get('Descricao', '')
file_name = f"{post_id}.md" file_name = f"{noticia_id}.md"
file_path = os.path.join(DIR_PROJECTS, file_name) file_path = os.path.join(DIR_PROJECTS, file_name)
edited_line = 'Edited: true\n' if event == 'entry.update' else '' edited_line = 'Edited: true\n' if event == 'entry.update' else ''
...@@ -65,22 +66,31 @@ status: "{status}" ...@@ -65,22 +66,31 @@ status: "{status}"
{content} {content}
""" """
##Caso a requisição seja para criar/alterar uma notícia ##Caso a requisição seja para criar/alterar uma notícia
elif content_type == 'post': elif content_type == 'noticia':
#Coleta os dados necessários para estar no arquivo JSON #Coleta os dados necessários para estar no arquivo JSON
attributes = data.get('entry', {}) attributes = data.get('entry', {})
content = attributes.get('Descricao', '') content = attributes.get('Descricao', '')
published_at = attributes.get('Data', '') published_at = attributes.get('Data', '')
title = attributes.get('Titulo', '') title = attributes.get('Titulo', '')
author = attributes.get('Autor', '') author = attributes.get('Autor', {})
summary = attributes.get('Sumario', '') author_name = author.get ('name', '')
summary = attributes.get('Gravata', '')
images = attributes.get('Imagem', []) #Recebo o atributo da imagem enviado no JSON
if images and isinstance(images, list): image = attributes.get('Imagem', {})
image_url = images[0].get('url', '')
else: #Recebo o ID da imagem para solicitar a requisição
image_url = '' image_id = image.get ('id', '')
image_url = f"http://localhost:1337/api/upload/files/{image_id}"
#Recebo o JSON requisitado pela URL com o ID da imagem
response = requests.get(image_url)
image_json = response.json ()
#Adquiro a URL para inserir markdown
image_url = image_json.get('url', '')
file_name = f"{post_id}.md" file_name = f"{noticia_id}.md"
file_path = os.path.join(DIR_POSTS, file_name) file_path = os.path.join(DIR_POSTS, file_name)
edited_line = 'Edited: true\n' if event == 'entry.update' else '' edited_line = 'Edited: true\n' if event == 'entry.update' else ''
...@@ -88,7 +98,7 @@ status: "{status}" ...@@ -88,7 +98,7 @@ status: "{status}"
content_markdown = f"""--- content_markdown = f"""---
title: "{title}" title: "{title}"
date: "{published_at}" date: "{published_at}"
author: "{author}" author: "{author_name}"
image: "http://localhost:1337{image_url}" image: "http://localhost:1337{image_url}"
summary: "{summary}" summary: "{summary}"
{edited_line}ShowReadingTime: true {edited_line}ShowReadingTime: true
...@@ -109,28 +119,28 @@ summary: "{summary}" ...@@ -109,28 +119,28 @@ summary: "{summary}"
return f"Error writing file{e}", 400 return f"Error writing file{e}", 400
#Deleta algum tipo de conteudo enviado por requisição #Deleta algum tipo de conteudo enviado por requisição
def delete_post(post_id, content_type): def delete_noticia(noticia_id, content_type):
#Deletando uma notícia #Deletando uma notícia
if content_type == 'post': if content_type == 'noticia':
file_name = f"{post_id}.md" file_name = f"{noticia_id}.md"
file_path = os.path.join(DIR_POSTS, file_name) file_path = os.path.join(DIR_POSTS, file_name)
if os.path.exists(file_path): if os.path.exists(file_path):
os.remove(file_path) os.remove(file_path)
logging.info(f"200 - DELETED: Post with ID number {post_id}") logging.info(f"200 - DELETED: noticia with ID number {noticia_id}")
else: else:
logging.error(f"400 - ERROR: Post with with ID number{post_id} not found for exclusion") logging.error(f"400 - ERROR: noticia with with ID number{noticia_id} not found for exclusion")
#Deletando um projeto #Deletando um projeto
elif content_type == 'projeto': elif content_type == 'projeto':
file_name = f"{post_id}.md" file_name = f"{noticia_id}.md"
file_path = os.path.join(DIR_PROJECTS, file_name) file_path = os.path.join(DIR_PROJECTS, file_name)
if os.path.exists(file_path): if os.path.exists(file_path):
os.remove(file_path) os.remove(file_path)
logging.info(f"200 - DELETED: Project with ID number {post_id}") logging.info(f"200 - DELETED: Project with ID number {noticia_id}")
else: else:
logging.error(f"200 - ERROR: File of project with ID number {post_id} not found for exclusion") logging.error(f"200 - ERROR: File of project with ID number {noticia_id} not found for exclusion")
else: else:
logging.error(f"400 - ERROR: Content type: '{content_type}' not recognized for deletion") logging.error(f"400 - ERROR: Content type: '{content_type}' not recognized for deletion")
...@@ -143,34 +153,34 @@ def run_script(): ...@@ -143,34 +153,34 @@ def run_script():
logging.info ("Data (JSON) received") logging.info ("Data (JSON) received")
#Do arquivo JSON, separa ID do conteudo, tipo do evento e o conteúdo #Do arquivo JSON, separa ID do conteudo, tipo do evento e o conteúdo
post_id = data.get('entry', {}).get('id') noticia_id = data.get('entry', {}).get('id')
event = data.get('event') event = data.get('event')
content_type = data.get('model', '') # Obtém o tipo de conteúdo do Strapi content_type = data.get('model', '') # Obtém o tipo de conteúdo do Strapi
print(f"Event: {event}, ID: {post_id}, Type: {content_type}") print(f"Event: {event}, ID: {noticia_id}, Type: {content_type}")
if not post_id: if not noticia_id:
logging.error(f"Code: 400" logging.error(f"Code: 400"
f"Status: ID not found in JSON: {data}") f"Status: ID not found in JSON: {data}")
logging.exception("error occurred while processing the event") logging.exception("error occurred while processing the event")
return "ID not found in JSON", 400 return "ID not found in JSON", 400
if event in ['entry.create']: if event in ['entry.create']:
logging.info (f"File created in Strapi- ID: {post_id} - Type: {content_type}" logging.info (f"File created in Strapi- ID: {noticia_id} - Type: {content_type}"
f"\nData: {data}") f"\nData: {data}")
return f"File created in Strapi {post_id} - Type: {content_type}", 200 return f"File created in Strapi {noticia_id} - Type: {content_type}", 200
elif event in ['entry.update', 'entry.publish']: elif event in ['entry.update', 'entry.publish']:
create_or_update_post(post_id, data, event, content_type) create_or_update_noticia(noticia_id, data, event, content_type)
logging.info(f"\nFile created in Hugo- ID: {post_id} - Type: {content_type}" logging.info(f"\nFile created in Hugo- ID: {noticia_id} - Type: {content_type}"
f"\nData: {data}\nOperation completed successfully\n") f"\nData: {data}\nOperation completed successfully\n")
return f"Operation completed successfully\n Data: {data}", 200 return f"Operation completed successfully\n Data: {data}", 200
elif event in ['entry.delete', 'entry.unpublish']: elif event in ['entry.delete', 'entry.unpublish']:
delete_post(post_id, content_type) delete_noticia(noticia_id, content_type)
logging.info(f"File removed - ID: {post_id} - Type: {content_type}") logging.info(f"File removed - ID: {noticia_id} - Type: {content_type}")
return f"File removed with ID {post_id}", 200 return f"File removed with ID {noticia_id}", 200
else: else:
logging.error(f"Code: 400\n" logging.error(f"Code: 400\n"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment