Files
pagodera/iconScript/tibiawiki/utils.py
T
Evandro Fonseca Junior 2b790d8eb4 feat(library): add vocation filter, normalize categories, improve grid layout
Added vocation state and included it in query string builder, updated onFilter to accept a vocation parameter, improved grid layout with grid flow classes, normalized category names for consistent item icons, and refined stats mapping to handle type safety.
2025-10-30 18:44:52 -03:00

141 lines
3.4 KiB
Python

"""
Funções utilitárias para normalização e formatação de dados
"""
import unicodedata
import re
def normalize_name(name):
"""
Normaliza nomes removendo acentos e substituindo espaços por underscores
Args:
name: Nome a ser normalizado
Returns:
str: Nome normalizado (lowercase, sem acentos, underscores no lugar de espaços)
Exemplos:
"Capacetes" -> "capacetes"
"Antigas Wands e Rods" -> "antigas_wands_rods"
"Calças" -> "calcas"
"""
if not name:
return ""
# Remove acentos
nfd = unicodedata.normalize('NFD', name)
name_no_accent = ''.join(c for c in nfd if unicodedata.category(c) != 'Mn')
# Converte para lowercase e substitui espaços por underscores
normalized = re.sub(r'[^a-z0-9]+', '_', name_no_accent.lower())
# Remove underscores do início e fim
return normalized.strip('_')
def parse_int(text):
"""
Extrai um inteiro de um texto, removendo caracteres não numéricos
Args:
text: Texto que pode conter números
Returns:
int ou None: Número extraído ou None se não encontrar
"""
if not text:
return None
# Remove tudo que não for dígito
numbers = re.sub(r'\D', '', str(text))
return int(numbers) if numbers else None
def parse_float(text):
"""
Extrai um float de um texto
Args:
text: Texto que pode conter números decimais
Returns:
float ou None: Número extraído ou None se não encontrar
"""
if not text:
return None
# Remove tudo exceto dígitos, ponto e vírgula
clean_text = re.sub(r'[^\d.,]', '', str(text))
# Substitui vírgula por ponto
clean_text = clean_text.replace(',', '.')
try:
return float(clean_text)
except ValueError:
return None
def clean_text(text):
"""
Limpa texto removendo espaços extras e quebras de linha
Args:
text: Texto a ser limpo
Returns:
str: Texto limpo
"""
if not text:
return ""
# Remove espaços extras e quebras de linha
cleaned = re.sub(r'\s+', ' ', str(text)).strip()
return cleaned
def normalize_column_name(column_name):
"""
Normaliza nome de coluna para identificador SQL válido
Args:
column_name: Nome da coluna original
Returns:
str: Nome normalizado (lowercase, sem acentos, underscores, válido para SQL)
Exemplos:
"Lvl" -> "lvl"
"Dano Elemental" -> "dano_elemental"
"Mod. de Defesa" -> "mod_de_defesa"
"Dropa de" -> "dropa_de"
"""
if not column_name:
return ""
# Remove acentos
nfd = unicodedata.normalize('NFD', column_name)
name_no_accent = ''.join(c for c in nfd if unicodedata.category(c) != 'Mn')
# Converte para lowercase
normalized = name_no_accent.lower()
# Substitui caracteres não alfanuméricos por underscore
normalized = re.sub(r'[^a-z0-9]+', '_', normalized)
# Remove underscores do início e fim
normalized = normalized.strip('_')
# Garante que não começa com número
if normalized and normalized[0].isdigit():
normalized = 'col_' + normalized
# Se ficou vazio, retorna um nome padrão
if not normalized:
return "coluna_sem_nome"
return normalized