Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Conversão de Nome de Estado para UF #396

Open
camilamaia opened this issue Sep 12, 2024 · 5 comments · May be fixed by #450
Open

Conversão de Nome de Estado para UF #396

camilamaia opened this issue Sep 12, 2024 · 5 comments · May be fixed by #450
Assignees
Labels
feature python sul 2024 Issues para o tutorial na Python Sul 2024

Comments

@camilamaia
Copy link
Member

camilamaia commented Sep 12, 2024

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 camilamaia added feature python sul 2024 Issues para o tutorial na Python Sul 2024 labels Sep 12, 2024
@rodfarah
Copy link

Olá! Posso trabalhar nessa issue?

@camilamaia
Copy link
Member Author

Assign feito @rodfarah!

@rodfarah
Copy link

rodfarah commented Sep 16, 2024

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
Copy link

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!

@alphabraga
Copy link

Bora

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment