Skip to content

Commit

Permalink
config i18n
Browse files Browse the repository at this point in the history
  • Loading branch information
lucasferreiralimax committed Jun 24, 2024
1 parent 81b0570 commit 795cd95
Show file tree
Hide file tree
Showing 20 changed files with 217 additions and 60 deletions.
3 changes: 2 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
'gitman = src.main:app',
],
},
keywords='github cli projects dependencies',
packages=find_packages(),
install_requires=["python-i18n"],
keywords='github cli projects dependencies',
)
6 changes: 3 additions & 3 deletions src/commands/__init__.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from .update_projects import update_projects
from .ncu_update_projects import ncu_update_projects
from .projects_update import projects_update
from .ncu_update import ncu_update
from .get_cli_version import get_cli_version
from .check_outdated import check_outdated
from .check_status import check_status

# Exportando funções/módulos
__all__ = ["update_projects", "ncu_update_projects", "get_cli_version", "check_outdated", "check_status"]
__all__ = ["projects_update", "ncu_update", "get_cli_version", "check_outdated", "check_status"]
9 changes: 5 additions & 4 deletions src/commands/check_outdated.py
Original file line number Diff line number Diff line change
@@ -1,22 +1,23 @@
import os
import subprocess
import i18n

# Função para verificar dependências desatualizadas em todos os projetos
def check_outdated(base_dir):
for dir in os.listdir(base_dir):
full_path = os.path.join(base_dir, dir)
if os.path.isdir(full_path):
print("Entrando no diretório:", full_path)
print(i18n.t('check_outdated.entering_directory', fullpath=full_path))
os.chdir(full_path)

try:
print("Rodando 'outdated' em", full_path)
print(i18n.t('check_outdated.running_outdated', fullpath=full_path))
subprocess.run(['npm', 'outdated'], check=True)

except subprocess.CalledProcessError as e:
print(f"Erro ao verificar dependências desatualizadas em {full_path}:")
print(i18n.t('check_outdated.error', fullpath=full_path))
print(e.stderr)

os.chdir('..')

print("Verificação concluída.")
print(i18n.t('check_status.complete_status'))
11 changes: 6 additions & 5 deletions src/commands/check_status.py
Original file line number Diff line number Diff line change
@@ -1,22 +1,23 @@
import os
import subprocess
import i18n

# Função para verificar o status do Git em todos os projetos
def check_status(base_dir):
for dir in os.listdir(base_dir):
full_path = os.path.join(base_dir, dir)
if os.path.isdir(full_path):
print("Entrando no diretório:", full_path)
print(i18n.t('check_status.entering_directory', fullpath=full_path))
os.chdir(full_path)

try:
print("Verificando o status do Git em", full_path)
print(i18n.t('check_status.checking_git_status', fullpath=full_path))
subprocess.run(['git', 'status'], check=True)

except subprocess.CalledProcessError as e:
print(f"Erro ao verificar o status do Git em {full_path}:")
print(i18n.t('check_status.git_error', fullpath=full_path))
print(e.stderr)

os.chdir('..')
print("Verificação de status do Git concluída.")

print(i18n.t('check_status.complete_status'))
5 changes: 3 additions & 2 deletions src/commands/get_cli_version.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
from importlib.metadata import version
import i18n

# Função para exibir a versão do programa
def get_cli_version():
try:
return version('gitman')
print(i18n.t('comman.version', version=version('gitman')))
except Exception:
return "Versão desconhecida"
print(i18n.t('comman.version_not_found'))
34 changes: 20 additions & 14 deletions src/commands/ncu_update_projects.py → src/commands/ncu_update.py
Original file line number Diff line number Diff line change
@@ -1,27 +1,28 @@
import os
import subprocess
import i18n

# Função para rodar npx npm-check-updates e atualizar dependências
def ncu_update_projects(projects, commit_message, base_dir):
# Função para rodar npx npm-check-updates e atualizar
def ncu_update(projects, commit_message, base_dir):
project_list = projects.split(',')

for project_dir in project_list:
full_path = os.path.join(base_dir, project_dir)
if not os.path.isdir(full_path):
print(f"O diretório {full_path} não existe.")
print(i18n.t('ncu_update.ncu_directory_not_exist').format(fullpath=full_path))
continue

print(i18n.t('ncu_update.ncu_entering_directory').format(fullpath=full_path))
os.chdir(full_path)

print(f"Atualizando todas as dependências em {full_path} com npm-check-updates")

try:
print(i18n.t('ncu_update.ncu_running').format(fullpath=full_path))
# Executa npx npm-check-updates
ncu_result = subprocess.run(['npx', 'npm-check-updates', '-u'], capture_output=True, text=True)

# Exibir a saída completa para depuração
print(f"Saída do npx npm-check-updates:\n{ncu_result.stdout}")
print(f"Erros do npx npm-check-updates:\n{ncu_result.stderr}")
print(i18n.t('ncu_update.ncu_output').format(output=ncu_result.stdout))
print(i18n.t('ncu_update.ncu_errors').format(errors=ncu_result.stderr))

# Se houver atualizações, ncu_result.returncode será 1
if ncu_result.returncode not in [0, 1]:
Expand All @@ -31,8 +32,8 @@ def ncu_update_projects(projects, commit_message, base_dir):
install_result = subprocess.run(['npm', 'install'], capture_output=True, text=True)

# Exibir a saída completa para depuração
print(f"Saída do npm install:\n{install_result.stdout}")
print(f"Erros do npm install:\n{install_result.stderr}")
print(i18n.t('ncu_update.ncu_npm_install_output').format(output=install_result.stdout))
print(i18n.t('ncu_update.ncu_npm_install_errors').format(errors=install_result.stderr))

if install_result.returncode != 0:
raise subprocess.CalledProcessError(install_result.returncode, install_result.args, output=install_result.stdout, stderr=install_result.stderr)
Expand All @@ -41,12 +42,17 @@ def ncu_update_projects(projects, commit_message, base_dir):
subprocess.run(['git', 'add', 'package.json', 'package-lock.json'], check=True)
subprocess.run(['git', 'commit', '-m', commit_message], check=True)
subprocess.run(['git', 'push'], check=True)

print(i18n.t('ncu_update.ncu_git_commit_message').format(message=commit_message))
print(i18n.t('ncu_update.ncu_git_push'))

except subprocess.CalledProcessError as e:
print(f"Erro ao executar npm-check-updates ou npm install em {full_path}:")
print(f"Comando: {e.cmd}")
print(f"Retorno do comando: {e.returncode}")
print(f"Saída: {e.output}")
print(f"Erro: {e.stderr}")
print(i18n.t('ncu_update.ncu_error').format(fullpath=full_path))
print(i18n.t('ncu_update.ncu_command').format(command=e.cmd))
print(i18n.t('ncu_update.ncu_return_code').format(returncode=e.returncode))
print(i18n.t('ncu_update.ncu_output').format(output=e.output.decode()))
print(i18n.t('ncu_update.ncu_error_details').format(errors=e.stderr.decode()))

os.chdir('..')

print(i18n.t('ncu_update.ncu_complete'))
30 changes: 17 additions & 13 deletions src/commands/update_projects.py → src/commands/projects_update.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
import os
import subprocess
import i18n

# Função para atualizar dependências de um projeto
def update_projects(projects, ignored_deps, commit_message, base_dir):
def projects_update(projects, ignored_deps, commit_message, base_dir):
project_list = projects.split(',')

for project_dir in project_list:
full_path = os.path.join(base_dir, project_dir)
if not os.path.isdir(full_path):
print(f"O diretório {full_path} não existe.")
print(i18n.t('update.up_directory_not_exist').format(fullpath=full_path))
continue

os.chdir(full_path)

print(f"Verificando dependências desatualizadas em {full_path}")
print(i18n.t('update.up_checking_outdated').format(fullpath=full_path))

try:
# Gera uma lista de dependências desatualizadas com nome e versão
Expand All @@ -23,8 +24,8 @@ def update_projects(projects, ignored_deps, commit_message, base_dir):
)

# Exibir a saída completa para depuração
print(f"Saída do npm outdated:\n{outdated_result.stdout}")
print(f"Erros do npm outdated:\n{outdated_result.stderr}")
print(i18n.t('update.up_outdated_output').format(output=outdated_result.stdout))
print(i18n.t('update.up_outdated_errors').format(errors=outdated_result.stderr))

# Se houver dependências desatualizadas, outdated_result.returncode será 1
if outdated_result.returncode not in [0, 1]:
Expand All @@ -41,29 +42,32 @@ def update_projects(projects, ignored_deps, commit_message, base_dir):
)

if outdated_packages:
print("Dependências desatualizadas encontradas. Atualizando dependências:")
print(i18n.t('update.up_outdated_found'))
for package in outdated_packages.split('\n'):
package_name = package.split(':')[1]
print(f" - {package_name}")

# Atualiza cada pacote individualmente
for package in outdated_packages.split('\n'):
package_name = package.split(':')[1]
print(f"Atualizando {package_name}")
print(i18n.t('update.up_updating_package').format(package_name=package_name))
subprocess.run(['npm', 'install', package_name, '--legacy-peer-deps'], check=True)

# Adiciona mudanças ao Git, cria um commit e faz push
subprocess.run(['git', 'add', 'package.json', 'package-lock.json'], check=True)
subprocess.run(['git', 'commit', '-m', commit_message], check=True)
subprocess.run(['git', 'push'], check=True)

print(i18n.t('update.up_git_commit_message').format(message=commit_message))
print(i18n.t('update.up_git_push'))
else:
print(f"Todas as dependências estão atualizadas em {full_path}")
print(i18n.t('update.up_all_to_date').format(fullpath=full_path))

except subprocess.CalledProcessError as e:
print(f"Erro ao verificar/atualizar dependências em {full_path}:")
print(f"Comando: {e.cmd}")
print(f"Retorno do comando: {e.returncode}")
print(f"Saída: {e.output}")
print(f"Erro: {e.stderr}")
print(i18n.t('update.up_error').format(fullpath=full_path))
print(i18n.t('update.up_command').format(command=e.cmd))
print(i18n.t('update.up_return_code').format(returncode=e.returncode))
print(i18n.t('update.up_output').format(output=e.output.decode()))
print(i18n.t('update.up_error_details').format(errors=e.stderr.decode()))

os.chdir('..')
65 changes: 47 additions & 18 deletions src/main.py
Original file line number Diff line number Diff line change
@@ -1,25 +1,54 @@
#!/usr/bin/env python3
import os
import sys

from commands import update_projects
from commands import ncu_update_projects
import i18n
import platform
from commands import projects_update
from commands import ncu_update
from commands import get_cli_version
from commands import check_outdated
from commands import check_status

# Obter informações do sistema
system_info = platform.system()

if system_info == 'Windows':
# Para Windows, usando o módulo winreg para obter o idioma
import winreg

key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, "Control Panel\\International", 0, winreg.KEY_READ)
system_lang, _ = winreg.QueryValueEx(key, "LocaleName")
winreg.CloseKey(key)

elif system_info == 'Darwin':
# Para macOS, usando o comando 'defaults' para obter o idioma
import subprocess

proc = subprocess.Popen(['defaults', 'read', '-g', 'AppleLocale'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, _ = proc.communicate()
system_lang = out.strip().decode('utf-8')

else:
# Para Linux e outros sistemas baseados em Unix, usando 'locale' para obter o idioma
import subprocess

proc = subprocess.Popen(['locale'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, _ = proc.communicate()
system_lang = out.split()[0].decode('utf-8').split('=')[1]

if system_lang:
system_lang = system_lang[:2]

i18n.load_path.append('translations')
i18n.set('fallback', 'en')
i18n.set('locale', system_lang)

# Função para exibir o uso correto do script
def usage():
print("Uso: {} [-b <base_directory>] [-u <project_directory>] [-i <ignored_dependencies>] [-a] [-g] [-n <project_directory>] [-m <commit_message>]".format(sys.argv[0]))
print(" -b <base_directory> Diretório base onde os projetos estão localizados. (padrão: ~/Documents)")
print(" -u <project_directory> Atualiza as dependências do diretório de projeto especificado.")
print(" Se múltiplos projetos forem fornecidos, separe-os por vírgula.")
print(" -i <ignored_dependencies> Lista de dependências a serem ignoradas, separadas por vírgula.")
print(" -a Verifica dependências desatualizadas em todos os projetos.")
print(" -g Verifica o status do Git em todos os projetos.")
print(" -n <project_directory> Roda npx npm-check-updates -u && npm install seguido de um commit.")
print(" -m <commit_message> Mensagem de commit a ser usada nas atualizações. (opcional)")
print(" -v, --version Mostra a versão do programa.")
print(i18n.t('main.usage.description', name=sys.argv[0]))
for i in range(1, 9):
new_line = 'line' + str(i)
print(i18n.t('main.usage.'+ new_line))
sys.exit(1)

# Função principal do programa
Expand Down Expand Up @@ -55,20 +84,20 @@ def app():
elif opt == '-m':
commit_message = args.pop(0)
elif opt in ('-v', '--version'):
print(f"Versão do programa: {get_cli_version()}")
get_cli_version()
sys.exit(0)
else:
usage()

# Executa o comando apropriado baseado nos parâmetros fornecidos
if ncu_flag:
ncu_update_projects(project_directory, commit_message, base_directory)
ncu_update(project_directory, commit_message, base_directory)
elif project_directory:
update_projects(project_directory, ignored_dependencies, commit_message, base_directory)
projects_update(project_directory, ignored_dependencies, commit_message, base_directory)

except KeyboardInterrupt:
print("\nExecução do script interrompida.")
print(i18n.t('main.interrupted'))
sys.exit(0)

if __name__ == "__main__":
app()
app()
5 changes: 5 additions & 0 deletions translations/check_outdated.en.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
en:
entering_directory: "Entering directory: %{fullpath}"
running_outdated: "Running 'outdated' in %{fullpath}"
error: "Error checking outdated dependencies in %{fullpath}:"
complete_check: "Check completed."
5 changes: 5 additions & 0 deletions translations/check_outdated.pt.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
pt:
entering_directory: "Entrando no diretório: %{fullpath}"
running_outdated: "Rodando 'outdated' em %{fullpath}"
error: "Erro ao verificar dependências desatualizadas em %{fullpath}:"
complete_check: "Verificação concluída."
5 changes: 5 additions & 0 deletions translations/check_status.en.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
en:
entering_directory: "Entering directory: %{fullpath}"
checking_git_status: "Checking Git status in %{fullpath}"
git_error: "Error checking Git status in %{fullpath}:"
complete_status: "Git status check completed."
5 changes: 5 additions & 0 deletions translations/check_status.pt.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
pt:
entering_directory: "Entrando no diretório: %{fullpath}"
checking_git_status: "Verificando o status do Git em %{fullpath}"
git_error: "Erro ao verificar o status do Git em %{fullpath}:"
complete_status: "Verificação de status do Git concluída."
3 changes: 3 additions & 0 deletions translations/comman.en.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
en:
version: "Program version: %{version}"
version_not_found: "Version not found"
3 changes: 3 additions & 0 deletions translations/comman.pt.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
pt:
version: "Versão do programa: %{version}"
version_not_found: "Versão desconhecida"
13 changes: 13 additions & 0 deletions translations/main.en.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
en:
usage:
description: "Usage: %{name} [-b <base_directory>] [-u <project_directory>] [-i <ignored_dependencies>] [-a] [-g] [-n <project_directory>] [-m <commit_message>]"
line1: "-b <base_directory> Base directory where projects are located. (default: ~/Documents)"
line2: "-u <project_directory> Updates the dependencies of the specified project directory."
line3: " If multiple projects are provided, separate them with a comma."
line4: "-i <ignored_dependencies> List of dependencies to be ignored, separated by a comma."
line5: "-a Checks outdated dependencies in all projects."
line6: "-g Checks the Git status in all projects."
line7: "-n <project_directory> Runs npx npm-check-updates -u && npm install followed by a commit."
line8: "-m <commit_message> Commit message to be used in updates. (optional)"
line9: "-v, --version Shows the program version."
interrupted: "\nScript execution interrupted."
Loading

0 comments on commit 795cd95

Please sign in to comment.