brutils-python icon indicating copy to clipboard operation
brutils-python copied to clipboard

Conversão de Nome de Estado para UF

Open camilamaia opened this issue 1 year ago • 5 comments

Seu pedido de recurso está relacionado a um problema? Por favor, descreva.

Dado o nome completo de um estado brasileiro, quero obter o código de Unidade Federativa (UF) correspondente. Isso é útil para conversão de nomes completos de estados em siglas utilizadas em sistemas e documentos.

Por exemplo, converter "São Paulo" para "SP".

Descreva a solução que você gostaria

  • Uma função convert_text_to_uf, que recebe o nome completo do estado (string) e retorna o código UF correspondente.
  • A função deve ignorar maiúsculas e minúsculas, e também deve desconsiderar acentos e o caractere especial ç (considerando c também).
  • A função deve verificar se o nome completo é válido e retornar o código UF correspondente.
  • Se o nome completo não for válido, a função deve retornar None.
  • A função deve lidar com todos os estados e o Distrito Federal do Brasil.
  • A lista das UFs e seus nomes completos já existe no arquivo brutils/data/enums/uf.py. Ela deve ser reutilizada.

Descreva alternativas que você considerou

  1. Seguir até o passo 8 do guia de contribuição.

  2. Como parte do passo 8, criar o arquivo: brutils-python/brutils/ibge/uf.py.

    def convert_text_to_uf(state_name): # type: (str) -> str | None
        """
        Converts a given Brazilian state full name to its corresponding UF code.
    
        This function takes the full name of a Brazilian state and returns the corresponding 
        2-letter UF code. It handles all Brazilian states and the Federal District. 
    
        Args:
            state_name (str): The full name of the state to be converted.
    
        Returns:
            str or None: The UF code corresponding to the full state name, 
                or None if the full state name is invalid.
    
        Example:
            >>> convert_text_to_uf('São Paulo')
            "SP"
            >>> convert_text_to_uf('Rio de Janeiro')
            "RJ"
            >>> convert_text_to_uf('Minas Gerais')
            "MG"
            >>> convert_text_to_uf('Distrito Federal')
            "DF"
            >>> convert_text_to_uf('Estado Inexistente')
            None
        """
        # implementar a lógica da função aqui
    

    Importar a nova função no arquivo brutils-python/brutils/__init__.py:

    # UF Imports    
    from brutils.ibge.uf import (
        convert_text_to_uf,
    )
    

    E adicionar o nome da nova função na lista __all__ do mesmo arquivo brutils-python/brutils/__init__.py:

    __all__ = [
        ...
        # UF
        'convert_text_to_uf',
    ]
    
  3. Como parte do passo 9, criar o arquivo de teste: brutils-python/tests/test_uf.py.

    from unittest import TestCase
    from brutils.ibge.uf import convert_text_to_uf
    
    class TestUF(TestCase):
        def test_convert_text_to_uf(self):
            # Testes para nomes válidos
            self.assertEqual(convert_text_to_uf('São Paulo'), "SP")
            self.assertEqual(convert_text_to_uf('Rio de Janeiro'), "RJ")
            self.assertEqual(convert_text_to_uf('Minas Gerais'), "MG")
            self.assertEqual(convert_text_to_uf('Distrito Federal'), "DF")
            self.assertEqual(convert_text_to_uf('são paulo'), "SP")  # Teste com minúsculas
            self.assertEqual(convert_text_to_uf('riO de janeiRo'), "RJ")  # Teste com misturas de maiúsculas e minúsculas
            self.assertEqual(convert_text_to_uf('minas gerais'), "MG")  # Teste com minúsculas
            self.assertEqual(convert_text_to_uf('sao paulo'), "SP") # Teste sem acento
    
            # Testes para nomes inválidos
            self.assertIsNone(convert_text_to_uf('Estado Inexistente'))  # Nome não existe
            self.assertIsNone(convert_text_to_uf(''))  # Nome vazio
            self.assertIsNone(convert_text_to_uf('123'))  # Nome com números
            self.assertIsNone(convert_text_to_uf('São Paulo SP'))  # Nome com sigla incluída
            self.assertIsNone(convert_text_to_uf('A'))  # Nome com letra não mapeada
            self.assertIsNone(convert_text_to_uf('ZZZ'))  # Nome com mais de 2 letras
    
            # implementar mais casos de teste aqui se necessário
    
  4. Seguir os passos seguintes do guia de contribuição.

Contexto adicional

  • A lista de estados e suas siglas é definida pelo Instituto Brasileiro de Geografia e Estatística (IBGE). Para mais detalhes, consulte o site do IBGE.
  • A função deve lidar com a normalização de texto, incluindo a remoção de acentos e a conversão para minúsculas para garantir que o texto seja comparado de forma consistente.

camilamaia avatar Sep 12 '24 21:09 camilamaia

Olá! Posso trabalhar nessa issue?

rodfarah avatar Sep 13 '24 17:09 rodfarah

Assign feito @rodfarah!

camilamaia avatar Sep 13 '24 17:09 camilamaia

Oi @camilamaia ! Tudo bem? Eu estou enfrentando dificuldades nos testes, mais especificamente na etapa em que devemos adicionar as funções criadas ao init.py

Eu criei duas funções no arquivo para resolver o problema e estou adicionando assim:

UF Imports

from brutils.ibge.uf import ( text_formatter, convert_text_to_uf, )

... e, mais abaixo, dentro da lista, estou inserindo:

# UF
'text_formatter',
'convert_text_to_uf',

No entanto, durante a execução dos testes, há uma falha:

AssertionError: -2 public method(s) missing from imports at init.py. You need to import the new brutils features methods inside the brutils/init.py file

Você poderia me dar uma força?

PS: Muito obrigado pelo curso e pela sua predisposição em compartilhar seu conhecimento conosco ;-)

rodfarah avatar Sep 16 '24 13:09 rodfarah

Oi Camila, boa tarde! Fiz o push. Você poderia me ajudar a entender por quê o teste está falhando na parte do "init" e do "all"? Obrigado!

rodfarah avatar Sep 30 '24 17:09 rodfarah

Bora

alphabraga avatar Nov 04 '24 02:11 alphabraga

:warning: [PT-BR] Esta issue está inativa há 190 dias. Os assignees serão removidos em 7 dias caso não haja atualizações.

:warning: [EN] This issue has been inactive for 190 days. The assignees will be removed in 7 days if there are no updates.

github-actions[bot] avatar May 13 '25 16:05 github-actions[bot]

Bora!

gabriel-lima258 avatar Jun 30 '25 20:06 gabriel-lima258

Issue 396 atribuida a gabriel-lima258 :rocket:" "Verifique o guia de contribuição para mais informações sobre como submeter sua Pull Request."

github-actions[bot] avatar Jun 30 '25 20:06 github-actions[bot]

:warning: [PT-BR] Esta issue está inativa há 61 dias. Os assignees serão removidos em 7 dias caso não haja atualizações.

:warning: [EN] This issue has been inactive for 61 days. The assignees will be removed in 7 days if there are no updates.

github-actions[bot] avatar Aug 31 '25 00:08 github-actions[bot]

Bora!

morais90 avatar Oct 16 '25 13:10 morais90

Bora!

niltonpimentel02 avatar Oct 16 '25 14:10 niltonpimentel02

🇧🇷 Português ✅ Issue #396 atribuída a @niltonpimentel02. Verifique o guia de contribuição para instruções sobre como submeter sua Pull Request.

🇬🇧 English ✅ Issue #396 assigned to @niltonpimentel02. Check the contributing guide for instructions on submitting your Pull Request.

github-actions[bot] avatar Oct 16 '25 14:10 github-actions[bot]

Bora!

morais90 avatar Oct 16 '25 14:10 morais90

🇧🇷 Português ✅ Issue #396 atribuída a @morais90. Verifique o guia de contribuição para instruções sobre como submeter sua Pull Request.

🇬🇧 English ✅ Issue #396 assigned to @morais90. Check the contributing guide for instructions on submitting your Pull Request.

github-actions[bot] avatar Oct 16 '25 14:10 github-actions[bot]