From 867ad097087e71c9e714008af586ec36bbde2bfd Mon Sep 17 00:00:00 2001 From: Matheus Duarte Date: Thu, 17 Oct 2019 09:00:40 -0300 Subject: [PATCH 1/3] Contador de dias uteis junto ao de dias corridos (Contando apenas com feriados nacionais) - fixes #19 --- .gitignore | 3 ++- check_update.py | 44 ++++++++++++++++++++++++++++---------------- requirements.txt | 1 + 3 files changed, 31 insertions(+), 17 deletions(-) diff --git a/.gitignore b/.gitignore index a2fe8ee..0c0d765 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ ad.txt __pycache__ bot.log* *.pyc -*.lock \ No newline at end of file +*.lock +.idea \ No newline at end of file diff --git a/check_update.py b/check_update.py index 0c69f2f..479f158 100644 --- a/check_update.py +++ b/check_update.py @@ -4,6 +4,9 @@ from misc import check_type import apicorreios as correios import apitrackingmore as trackingmore +from numpy import busday_count +import holidays + def check_update(code, max_retries=3): # print('check_update') @@ -41,14 +44,23 @@ def check_update(code, max_retries=3): ano1 = int(evento['data'].split('/')[2]) data1 = date(ano1, mes1, dia1) delta = data1 - data0 + dias_uteis = busday_count(data0, data1) + todos_feriados = holidays.BR() + # feriados TODO: adicionar feriados estaduais + feriados_entre_datas = todos_feriados[data0:data1] + feriados_uteis = 0 + for f in feriados_entre_datas: + feriados_uteis += 1 if f.weekday() < 5 else 0 + dias_uteis -= feriados_uteis except Exception: delta = 0 + dias_uteis = 0 pass - data = evento['data'] + ' ' + evento['hora'] + data = f'{evento["data"]} {evento["hora"]}' if delta.days == 1: - data = data + ' (' + str(delta.days) + ' dia)' + data += f' ({delta.days} dia - {dias_uteis} útil)' elif delta.days > 1: - data = data + ' (' + str(delta.days) + ' dias)' + data += f' ({delta.days} dias - {dias_uteis} úteis)' try: local = evento['unidade']['local'] except Exception: @@ -57,10 +69,10 @@ def check_update(code, max_retries=3): if 'endereço indicado' in evento['descricao']: try: situacao = ( - situacao + '\n' + - evento['unidade']['endereco']['numero'] + ' ' + - evento['unidade']['endereco']['logradouro'] + '\n' + - evento['unidade']['endereco']['bairro'] + '' + situacao + '\n' + + evento['unidade']['endereco']['numero'] + ' ' + + evento['unidade']['endereco']['logradouro'] + '\n' + + evento['unidade']['endereco']['bairro'] + '' ) except Exception: pass @@ -73,8 +85,8 @@ def check_update(code, max_retries=3): mensagem = mensagem + '\nLocal: ' + local.strip().title() if situacao: mensagem = ( - mensagem + '\nSituação: ' + - situacao.strip() + '' + mensagem + '\nSituação: ' + + situacao.strip() + '' ) if 'objeto entregue ao' in situacao.lower(): mensagem = mensagem + ' ' + str(u'\U0001F381') @@ -96,12 +108,12 @@ def check_update(code, max_retries=3): mensagem = mensagem + ' ' + str(u'\U0001F4B8') elif 'aduaneira finalizada' in situacao.lower(): mensagem = (mensagem + '\nAcesse o ambiente ' + - 'Minhas Importações') + 'Minhas Importações') elif 'aguardando pagamento' in situacao.lower(): - mensagem = (mensagem + ' ' + str(u'\U0001F52B') + - '\nLinks para efetuar pagamentos aos Correios:' + - '\nRastreamento' + - '\nPortal Importador') + mensagem = (mensagem + ' ' + str(u'\U0001F52B') + + '\nLinks para efetuar pagamentos aos Correios:' + + '\nRastreamento' + + '\nPortal Importador') elif 'liberado sem' in situacao.lower(): mensagem = mensagem + ' ' + str(u'\U0001F389') if observacao: @@ -109,7 +121,7 @@ def check_update(code, max_retries=3): if 'liberado sem' in observacao.lower(): mensagem = mensagem + ' ' + str(u'\U0001F389') elif 'pagamento' in observacao.lower(): - mensagem = (mensagem + - '\nhttps://www2.correios.com.br/sistemas/rastreamento/') + mensagem = (mensagem + + '\nhttps://www2.correios.com.br/sistemas/rastreamento/') stats.append(mensagem) return stats diff --git a/requirements.txt b/requirements.txt index 1552515..9b87151 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,3 +4,4 @@ pyTelegramBotAPI==3.* pytest==5.* requests==2.* sentry-sdk==0.* +holidays==0.* From 5be500fa7d0989733a44ad22ce5e8c29dd70f565 Mon Sep 17 00:00:00 2001 From: Matheus Duarte Date: Thu, 17 Oct 2019 10:10:20 -0300 Subject: [PATCH 2/3] F-strings removidas para uso em python3.4 --- check_update.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/check_update.py b/check_update.py index 479f158..d42dc0b 100644 --- a/check_update.py +++ b/check_update.py @@ -46,7 +46,7 @@ def check_update(code, max_retries=3): delta = data1 - data0 dias_uteis = busday_count(data0, data1) todos_feriados = holidays.BR() - # feriados TODO: adicionar feriados estaduais + # todos_feriados.state TODO: adicionar feriados estaduais feriados_entre_datas = todos_feriados[data0:data1] feriados_uteis = 0 for f in feriados_entre_datas: @@ -56,11 +56,11 @@ def check_update(code, max_retries=3): delta = 0 dias_uteis = 0 pass - data = f'{evento["data"]} {evento["hora"]}' + data = {evento["data"]} + ' ' + {evento["hora"]} if delta.days == 1: - data += f' ({delta.days} dia - {dias_uteis} útil)' + data += ' (' + str({delta.days}) + ' dia - ' + str({dias_uteis}) + ' útil)' elif delta.days > 1: - data += f' ({delta.days} dias - {dias_uteis} úteis)' + data += ' (' + str({delta.days}) + ' dias - ' + str({dias_uteis}) + ' úteis)' try: local = evento['unidade']['local'] except Exception: From 7b95bd73d5cf58975e819b57752af713717bbfd8 Mon Sep 17 00:00:00 2001 From: Matheus Duarte Date: Thu, 17 Oct 2019 10:40:49 -0300 Subject: [PATCH 3/3] =?UTF-8?q?Contador=20de=20dias=20=C3=BAteis=20ajustad?= =?UTF-8?q?o=20para=20n=C3=A3o=20utilizar=20da=20biblioteca=20NumPy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- check_update.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/check_update.py b/check_update.py index d42dc0b..9537602 100644 --- a/check_update.py +++ b/check_update.py @@ -4,7 +4,6 @@ from misc import check_type import apicorreios as correios import apitrackingmore as trackingmore -from numpy import busday_count import holidays @@ -44,14 +43,21 @@ def check_update(code, max_retries=3): ano1 = int(evento['data'].split('/')[2]) data1 = date(ano1, mes1, dia1) delta = data1 - data0 - dias_uteis = busday_count(data0, data1) + + dia_da_semana_inicial = data0.weekday() + dias_uteis = 0 + for dia_da_semana in range(dia_da_semana_inicial, dia_da_semana_inicial + delta.days + 1): + if dia_da_semana % 7 < 5: + dias_uteis += 1 + todos_feriados = holidays.BR() # todos_feriados.state TODO: adicionar feriados estaduais feriados_entre_datas = todos_feriados[data0:data1] - feriados_uteis = 0 - for f in feriados_entre_datas: - feriados_uteis += 1 if f.weekday() < 5 else 0 - dias_uteis -= feriados_uteis + feriados_em_dias_uteis = 0 + for feriado in feriados_entre_datas: + feriados_em_dias_uteis += 1 if feriado.weekday() < 5 else 0 + dias_uteis -= feriados_em_dias_uteis + except Exception: delta = 0 dias_uteis = 0