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
255 stars 59 forks source link

Retornar Código IBGE a partir do Nome do Município #399

Open camilamaia opened 2 months ago

camilamaia commented 2 months ago

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

Dado o nome de um município, desejo obter o código IBGE correspondente. A busca deve funcionar mesmo sem considerar diferenças de maiúsculas, minúsculas, acentuação e o caractere especial ç (considerando c também).

Por exemplo, ao passar o nome "São Paulo", "sao paulo", ou "São paulo", a função deve retornar "3550308". Também deve considerar "Conceição do Coité" como "Conceicao do Coite".

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/municipality.py.

    def get_code_by_municipality_name(municipality_name): # type: (str) -> str | None
        """
        Returns the IBGE code for a given municipality name.
    
        This function takes a string representing a municipality's name 
        and returns the corresponding IBGE code (string). The function 
        will handle names by ignoring differences in case, accents, and 
        treating the character ç as c.
    
        Args:
            municipality_name (str): The name of the municipality.
    
        Returns:
            str: The IBGE code of the municipality.
                - Returns None if the name is not valid or does not exist.
    
        Example:
            >>> get_code_by_municipality_name("São Paulo")
            "3550308"
            >>> get_code_by_municipality_name("goiania")
            "5208707"
            >>> get_code_by_municipality_name("Conceição do Coité")
            "2909401"
            >>> get_code_by_municipality_name("conceicao do Coite")
            "2909401"
            >>> get_code_by_municipality_name("Municipio Inexistente")
            None
        """
        # Implementar a lógica de busca pelo nome do município, lidando com diferenças de acentuação e capitalização

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

    # IBGE Imports    
    from brutils.ibge.municipality import (
        get_code_by_municipality_name,
    )

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

    __all__ = [
        ...
        # IBGE
        get_code_by_municipality_name
    ]
  3. Como parte do passo 9, criar o arquivo de teste: brutils-python/tests/ibge/municipality.py.

    from unittest import TestCase
    from brutils.ibge.municipality import get_code_by_municipality_name
    
    class TestIBGE(TestCase):
        def test_get_code_by_municipality_name(self):
            self.assertEqual(get_code_by_municipality_name("São Paulo"), "3550308")
            self.assertEqual(get_code_by_municipality_name("rio de janeiro"), "3304557")
            self.assertEqual(get_code_by_municipality_name("GOIANIA"), "5208707")
            self.assertEqual(get_code_by_municipality_name("Conceição do Coité"), "2909401")
            self.assertEqual(get_code_by_municipality_name("conceicao do Coite"), "2909401") 
            self.assertIsNone(get_code_by_municipality_name("Municipio Inexistente"))
    
            # Implementar mais casos de teste aqui
  4. Seguir os passos seguintes do guia de contribuição.

Contexto adicional

ThalesCarl commented 2 months ago

Oi, pode me dar assign nessa issue?

camilamaia commented 2 months ago

Feito @ThalesCarl!

ThalesCarl commented 2 months ago

I quit. Pode remover meu assign? Pois o outro grupo já começou a trabalhar na issue

CarduCaldeira commented 2 months ago

Pode me colocar como o responsável?

camilamaia commented 2 months ago

@CarduCaldeira e @ThalesCarl feito!