Descrição da nova funcionalidade
Yo, como desarrollador backend, quiero que existan utilidades reutilizables centralizadas en core/utils/utils.py, para evitar duplicación de código en los distintos módulos de la aplicación y estandarizar el manejo de llamadas HTTP, normalización de idiomas e identificación de usuarios.
Critérios de aceitação
- El módulo
core/utils/utils.py debe existir y ser importable desde cualquier app del proyecto.
- La función
language_iso(code) debe normalizar códigos de idioma usando langcodes (e.g. "pt-BR" → "pt"), retornando cadena vacía si el código no es válido.
- La función
fetch_data(url, ...) debe implementar reintentos automáticos con backoff exponencial (mín. 1s, máx. 5s, hasta 5 intentos) para errores de red y HTTP 5xx.
- Errores HTTP 4xx deben lanzar
NonRetryableError sin reintentos.
- La función
_get_user(request, username, user_id) debe intentar resolver el usuario por request.user_id y, en caso de fallo, por user_id o username.
- Todos los errores de red deben ser logueados con nivel
ERROR.
- Los archivos deben terminar con salto de línea (
\n).
Anexos
- Librerías requeridas:
langcodes, tenacity, urllib3, requests.
Referências
Descrição da nova funcionalidade
Yo, como desarrollador backend, quiero que existan utilidades reutilizables centralizadas en
core/utils/utils.py, para evitar duplicación de código en los distintos módulos de la aplicación y estandarizar el manejo de llamadas HTTP, normalización de idiomas e identificación de usuarios.Critérios de aceitação
core/utils/utils.pydebe existir y ser importable desde cualquier app del proyecto.language_iso(code)debe normalizar códigos de idioma usandolangcodes(e.g."pt-BR"→"pt"), retornando cadena vacía si el código no es válido.fetch_data(url, ...)debe implementar reintentos automáticos con backoff exponencial (mín. 1s, máx. 5s, hasta 5 intentos) para errores de red y HTTP 5xx.NonRetryableErrorsin reintentos._get_user(request, username, user_id)debe intentar resolver el usuario porrequest.user_idy, en caso de fallo, poruser_idousername.ERROR.\n).Anexos
langcodes,tenacity,urllib3,requests.Referências