Skip to content

Commit 9527d6e

Browse files
committed
Auto-actualizacion de README
Implementa un script para actualizar el README.md automáticamente cada vez que se hace una modificación en la carpeta docs durante un push.
1 parent 70a70cd commit 9527d6e

File tree

5 files changed

+162
-0
lines changed

5 files changed

+162
-0
lines changed

.github/workflows/readmemd.yaml

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
name: Actualizar README
2+
3+
on:
4+
push:
5+
paths:
6+
- 'docs/**' # Se activa cuando se modifica algo en la carpeta "docs"
7+
8+
jobs:
9+
update-readme:
10+
runs-on: ubuntu-latest
11+
12+
steps:
13+
- name: Checkout código
14+
uses: actions/checkout@v2
15+
16+
- name: Configurar Python
17+
uses: actions/setup-python@v2
18+
with:
19+
python-version: 3.x
20+
21+
- name: Instalar dependencias
22+
run: pip install -r potools/requirements.txt
23+
24+
- name: Ejecutar script
25+
run: python readme_update.py
26+
27+
- name: Confirmar el README.md
28+
uses: EndBug/add-and-commit@v9
29+
with:
30+
committer_name: GitHub Actions
31+
committer_email: [email protected]
32+
add: .
33+
message: 'Actualiza información de los archivos .po'

potools/po_analizer.py

+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
"""Analiza los achivos .po y obtiene información necesaria para actualizar el README.md"""
2+
3+
import os
4+
import polib
5+
from tabulate import tabulate
6+
7+
def contar_strings_faltantes(pofile):
8+
"""
9+
Cuenta los archivos .po que faltan por traducir
10+
"""
11+
po = polib.pofile(pofile)
12+
strings_faltantes = 0
13+
14+
for entry in po:
15+
if not entry.translated() and not entry.obsolete:
16+
strings_faltantes += 1
17+
18+
return strings_faltantes
19+
20+
def obtener_last_translator(pofile):
21+
"""
22+
Obtiene al ultimo traductor del archivo .po dado
23+
"""
24+
po = polib.pofile(pofile)
25+
last_translator = po.metadata.get("Last-Translator", "Desconocido")
26+
return last_translator
27+
28+
def po_analize():
29+
"""
30+
Itera los archivos .po y obtiene la resectiva información
31+
"""
32+
# Directorio donde se encuentran los archivos .po y sus subdirectorios
33+
directorio_base = "docs/locales/es/LC_MESSAGES"
34+
data = []
35+
total_faltantes = 0
36+
37+
for root, _, archivos in os.walk(directorio_base):
38+
for archivo in archivos:
39+
if archivo.endswith(".po"):
40+
ruta_completa = os.path.join(root, archivo)
41+
# Obtener el directorio padre
42+
# directorio_padre = os.path.dirname(ruta_completa)
43+
# Eliminar el string contenido en directorio_base
44+
ruta_final = ruta_completa.replace(directorio_base, "")
45+
# Verificar si hay strings faltantes
46+
faltantes = contar_strings_faltantes(ruta_completa)
47+
# Obtener el Last-Translator
48+
last_translator = obtener_last_translator(ruta_completa)
49+
# Mostrar la ruta final, OK/NO y Last-Translator
50+
if faltantes == 0:
51+
data.append([ruta_final, "SÍ", last_translator])
52+
else:
53+
data.append([ruta_final, f"NO ({faltantes} restantes)", last_translator])
54+
total_faltantes += faltantes
55+
56+
# Ordenar las filas por la ruta del archivo (primera columna)
57+
data.sort(key=lambda x: x[0])
58+
59+
headers = ["Archivo", "Traducción completa", "Último traductor"]
60+
61+
return tabulate(data, headers=headers, tablefmt="github")
62+
63+
if __name__ == "__main__":
64+
print(po_analize())

potools/po_cleanner.py

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
"""Ese archivo elimina los strings obsoletos de todos los archivos .po"""
2+
3+
import os
4+
import polib
5+
6+
7+
def eliminar_strings_obsoletos(pofile):
8+
"""
9+
Elimina los strings obsoletos del archivo .po dado
10+
"""
11+
po = polib.pofile(pofile)
12+
strings_a_eliminar = []
13+
14+
for entry in po:
15+
if entry.obsolete:
16+
strings_a_eliminar.append(entry)
17+
18+
for entry in strings_a_eliminar:
19+
po.remove(entry)
20+
21+
# Guardar los cambios en el archivo .po
22+
po.save()
23+
24+
def po_clean():
25+
"""
26+
Itera sobre los archivos .po y aplica la limpieza a cada uno
27+
"""
28+
# Directorio donde se encuentran los archivos .po y sus subdirectorios
29+
directorio_base = "docs/locales/es/LC_MESSAGES"
30+
31+
for root, _, archivos in os.walk(directorio_base):
32+
for archivo in archivos:
33+
if archivo.endswith(".po"):
34+
ruta_completa = os.path.join(root, archivo)
35+
eliminar_strings_obsoletos(ruta_completa)
36+
print(f"Se han eliminado los strings obsoletos en {ruta_completa}")
37+
38+
print("Proceso completado. Los strings obsoletos han sido eliminados de los archivos .po.")
39+
40+
if __name__ == "__main__":
41+
po_clean()

potools/requirements.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
polib==1.2.0
2+
tabulate==0.9.0
3+
Jinja2==3.1.2

readme_update.py

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
"""Modulo para actualizar el README.md"""
2+
3+
from jinja2 import Environment, FileSystemLoader
4+
from potools.po_analizer import po_analize
5+
6+
7+
def actualizar_readme(table):
8+
"""
9+
Obtiene información de los archivos .po y actualiza el archivo README.md
10+
"""
11+
file_loader = FileSystemLoader('.')
12+
env = Environment(loader=file_loader)
13+
14+
template = env.get_template('.github/README_template.md')
15+
16+
output = template.render(table=table)
17+
18+
with open('README.md', 'w', encoding='utf-8') as f:
19+
f.write(output)
20+
21+
actualizar_readme(po_analize())

0 commit comments

Comments
 (0)