brazilian-utils / brutils-python

Biblioteca de utilitários projetada para validar, gerar e manipular dados de acordo com as particularidades do Brasil 🇧🇷
https://pypi.python.org/pypi/brutils
MIT License
258 stars 60 forks source link

Conversão de UF para Nome de Estado #395

Open camilamaia opened 2 months ago

camilamaia commented 2 months ago

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

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

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

Descreva a solução que você gostaria

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_uf_to_text(uf): # type: (str) -> str | None
        """
        Converts a given Brazilian state code (UF) to its full state name.
    
        This function takes a 2-letter UF code and returns the corresponding full state name. 
        It handles all Brazilian states and the Federal District. 
    
        Args:
            uf (str): The 2-letter UF code to be converted.
    
        Returns:
            str or None: The full name of the state corresponding to the UF code, 
                or None if the UF code is invalid.
    
        Example:
            >>> convert_uf_to_text('SP')
            "São Paulo"
            >>> convert_uf_to_text('RJ')
            "Rio de Janeiro"
            >>> convert_uf_to_text('XX')
            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_uf_to_text,
    )

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

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

    from unittest import TestCase
    from brutils.ibge.uf import convert_uf_to_text
    
    class TestUF(TestCase):
        def test_convert_uf_to_text(self):
            # Testes para códigos válidos
            self.assertEqual(convert_uf_to_text('SP'), "São Paulo")
            self.assertEqual(convert_uf_to_text('RJ'), "Rio de Janeiro")
            self.assertEqual(convert_uf_to_text('MG'), "Minas Gerais")
            self.assertEqual(convert_uf_to_text('DF'), "Distrito Federal")
            self.assertEqual(convert_uf_to_text('df'), "Distrito Federal")
    
            # Testes para códigos inválidos
            self.assertIsNone(convert_uf_to_text('XX'))  # Código não existe
            self.assertIsNone(convert_uf_to_text(''))    # Código vazio
    
            # Implementar mais casos de teste aqui
  4. Seguir os passos seguintes do guia de contribuição.

Contexto adicional

low-ise commented 2 months ago

Oi! Posso pegar?

camilamaia commented 2 months ago

Assign feito @low-ise!

low-ise commented 2 months ago

Oi! Estou com um problema na hora de rodar os testes. Fiz todo o passo-a-passo porém meu make test retorna:

FAIL: test_public_methods_in_imports (test_imports.TestImports.test_public_methods_in_imports)
Test that all public methods are imported or aliased.
Traceback (most recent call last):
  File "~/brutils-python/tests/test_imports.py", line 104, in test_public_methods_in_imports
    self.fail(
AssertionError: -1 public method(s) missing from imports at __init__.py. You need to import the new brutils features methods inside the brutils/__init__.py file

Conferi o init.py e o all e ainda não encontrei o erro. SOS

camilamaia commented 2 months ago

@low-ise você consegue mandar o seu código para o github para que eu possa dar uma olhadinha?

Para isso, supondo que você já está numa branch chamada 395, basta fazer:

$ make format

Depois:

$ git add --all

Em seguida:

$ git commit -a -m "Adicionando utilitário convert_uf_to_text"

E por último:

$ git push --set-upstream origin 395
adorilson commented 1 day ago

Alguma razão para o nome da função ser *_to_text ?

Acredito que *_to_name ou *_to_fullname sejam melhores ("text" é muito genérico, a propria "uf" é um texto), além de mais consistentes com a string de documentação da função.