mirror of https://github.com/interlegis/sapl.git
Marcio Mazza
7 years ago
1 changed files with 190 additions and 0 deletions
@ -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…
Reference in new issue