Browse Source

Mapeia cidade para timezone no brasil

pull/1704/head
Marcio Mazza 7 years ago
parent
commit
846e39b24e
  1. 190
      sapl/legacy/timezonesbrasil.py

190
sapl/legacy/timezonesbrasil.py

@ -0,0 +1,190 @@
import unicodedata
UF_PARA_TIMEZONE = '''
AC America/Rio_Branco
AL America/Maceio
AP America/Belem
AM America/Manaus
BA America/Bahia
CE America/Fortaleza
DF America/Sao_Paulo
ES America/Sao_Paulo
GO America/Sao_Paulo
MA America/Fortaleza
MT America/Cuiaba
MS America/Campo_Grande
MG America/Sao_Paulo
PR America/Sao_Paulo
PB America/Fortaleza
PA America/Belem
PE America/Recife
PI America/Fortaleza
RJ America/Sao_Paulo
RN America/Fortaleza
RS America/Sao_Paulo
RO America/Porto_Velho
RR America/Boa_Vista
SC America/Sao_Paulo
SE America/Maceio
SP America/Sao_Paulo
TO America/Araguaina
'''
UF_PARA_TIMEZONE = dict(line.split()
for line in UF_PARA_TIMEZONE.strip().splitlines())
def normalizar_texto(texto):
# baseado em https://gist.github.com/j4mie/557354
norm = unicodedata.normalize('NFKD', texto.lower())
return norm.encode('ASCII', 'ignore').decode('ascii')
# Exceções (Anazonas e Pará):
# leste do Amazonas: America/Manaus
# oeste do Amazonas: America/Eirunepe
# leste do Pará: America/Belem
# oeste do Pará: America/Santarem
# fontes:
# https://en.wikipedia.org/wiki/Time_in_Brazil
# https://www.zeitverschiebung.net/en/timezone/america--belem
# https://www.zeitverschiebung.net/en/timezone/america--santarem
# https://www.zeitverschiebung.net/en/timezone/america--manaus
# https://www.zeitverschiebung.net/en/timezone/america--eirunepe
TZ_CIDADES_AMAZONAS_E_PARA = [
('America/Manaus', '''
Manaus
Itacoatiara
Parintins
Manacapuru
Coari
Tefé
Humaitá
Tabatinga
Rio Preto da Eva
Maués
Carauari
Fonte Boa
São Gabriel da Cachoeira
Boca do Acre
Manicoré
Nova Olinda do Norte
Borba
São Paulo de Olivença
Barreirinha
Codajás
Iranduba
Novo Aripuanã
Urucurituba
Manaquiri
Guajará
Autazes
Santo Antônio do Içá
Urucará
Anori
Pauini
Barcelos
Careiro da Várzea
Canutama
Jutaí
Alvarães
'''),
('America/Eirunepe', '''
Eirunepé
Benjamin Constant
Envira
'''),
('America/Belem', '''
Belém
Ananindeua
Macapá
Marabá
Castanhal
Santana
Abaetetuba
Tucuruí
Paragominas
Bragança
Benevides
Capanema
Breves
Cametá
Salinópolis
Tomé Açu
Capitão Poço
Barcarena
Vigia
São Miguel do Guamá
Conceição do Araguaia
Igarapé Miri
Igarapé Açu
Moju
Portel
Itupiranga
Viseu
Soure
Mocajuba
São Félix do Xingu
Augusto Corrêa
Tucumã
Santa Maria do Pará
Acará
Maracanã
Baião
Curuçá
Marapanim
Oeiras do Pará
São João de Pirabas
Santo Antônio do Tauá
São Caetano de Odivelas
Ourém
Muaná
Afuá
Mazagão
Gurupá
Bujaru
Senador José Porfírio
Irituia
'''),
('America/Santarem', '''
Santarém
Altamira
Itaituba
Oriximiná
Alenquer
Ábidos
Monte Alegre
Almeirim
Terra Santa
Juruti
Porto de Moz
Nhamundá
Prainha
'''),
]
TZ_CIDADES_AMAZONAS_E_PARA = {normalizar_texto(cidade.strip()): tz
for tz, linhas in TZ_CIDADES_AMAZONAS_E_PARA
for cidade in linhas.strip().splitlines()}
def get_timezone(cidade, uf):
tz = UF_PARA_TIMEZONE[uf]
if uf in ['PA', 'AM']:
cidade = normalizar_texto(cidade)
return TZ_CIDADES_AMAZONAS_E_PARA[cidade]
else:
return tz
def test_get_timezone():
for cidade, uf, tz in [
('Fortaleza', 'CE', 'America/Fortaleza'),
('Salvador', 'BA', 'America/Bahia'),
('Belem', 'PA', 'America/Belem'), # sem acento
('Belém', 'PA', 'America/Belem'), # com acento
('Santarem', 'PA', 'America/Santarem'), # sem acento
('Santarém', 'PA', 'America/Santarem'), # com acento
('Manaus', 'AM', 'America/Manaus'),
('Eirunepe', 'AM', 'America/Eirunepe'), # sem acento
('Eirunepé', 'AM', 'America/Eirunepe'), # com acento
]:
assert get_timezone(cidade, uf) == tz, (cidade, uf, tz)
Loading…
Cancel
Save