mirror of https://github.com/interlegis/sigi.git
Sesóstris Vieira
10 months ago
3 changed files with 110 additions and 1 deletions
@ -0,0 +1,105 @@ |
|||||
|
from django.db.models import Q |
||||
|
from django.contrib.auth.models import User |
||||
|
from django.utils.translation import gettext as _ |
||||
|
from django_extensions.management.jobs import DailyJob |
||||
|
from sigi.apps.casas.models import Orgao |
||||
|
from sigi.apps.servidores.models import Servidor |
||||
|
from sigi.apps.utils.management.jobs import JobReportMixin |
||||
|
from email_validator import validate_email, EmailNotValidError |
||||
|
|
||||
|
|
||||
|
class Job(JobReportMixin, DailyJob): |
||||
|
help = ( |
||||
|
"Sanitiza sintaxe dos e-mails dos órgãos cadastrados, " |
||||
|
"removendo os que não são válidos" |
||||
|
) |
||||
|
|
||||
|
def do_job(self): |
||||
|
self.report_data = [] |
||||
|
corrigidos = [] |
||||
|
apagados = [] |
||||
|
total_corrigido = 0 |
||||
|
total_apagado = 0 |
||||
|
queryset = Orgao.objects.exclude(email="") |
||||
|
for orgao in queryset: |
||||
|
email = orgao.email |
||||
|
tentar = True |
||||
|
limpar = False |
||||
|
while tentar: |
||||
|
try: |
||||
|
mail_info = validate_email( |
||||
|
email, check_deliverability=False |
||||
|
) |
||||
|
email = mail_info.normalized |
||||
|
tentar = False |
||||
|
except EmailNotValidError as e: |
||||
|
msg = str(e) |
||||
|
if msg == "An email address cannot end with a period.": |
||||
|
email = email[:-1] |
||||
|
elif ( |
||||
|
msg |
||||
|
== "An email address cannot have a period immediately after the @-sign." |
||||
|
): |
||||
|
email = email.replace("@.", "@") |
||||
|
elif ( |
||||
|
msg |
||||
|
== "An email address cannot have two periods in a row." |
||||
|
): |
||||
|
email = email.replace("..", ".") |
||||
|
elif msg.startswith( |
||||
|
"The part after the @-sign contains invalid characters:" |
||||
|
): |
||||
|
email = email.replace(msg[-3:-2], "") |
||||
|
else: |
||||
|
tentar = False |
||||
|
limpar = True |
||||
|
apagados.append( |
||||
|
_( |
||||
|
f"{orgao.email} do órgão {orgao.nome} " |
||||
|
f"({orgao.id}) foi excluído porque não " |
||||
|
f"pode ser corrigido: {str(e)}" |
||||
|
) |
||||
|
) |
||||
|
if limpar: |
||||
|
orgao.email = "" |
||||
|
orgao.save() |
||||
|
total_apagado += 1 |
||||
|
elif orgao.email != email: |
||||
|
corrigidos.append( |
||||
|
_( |
||||
|
f"{orgao.email} corrigido para {email} do órgão " |
||||
|
f"{orgao.nome} ({orgao.id})" |
||||
|
) |
||||
|
) |
||||
|
total_corrigido += 1 |
||||
|
orgao.email = email |
||||
|
orgao.save() |
||||
|
|
||||
|
self.report_data.extend( |
||||
|
[ |
||||
|
_("RESUMO"), |
||||
|
"------", |
||||
|
"", |
||||
|
] |
||||
|
) |
||||
|
self.report_data.append(_(f"E-mails verificados: {queryset.count()}")) |
||||
|
self.report_data.append(_(f"E-mails corrigidos.: {total_corrigido}")) |
||||
|
self.report_data.append(_(f"E-mails apagados...: {total_apagado}")) |
||||
|
self.report_data.extend( |
||||
|
[ |
||||
|
"", |
||||
|
_("E-MAILS CORRIGIDOS"), |
||||
|
"------------------", |
||||
|
"", |
||||
|
] |
||||
|
) |
||||
|
self.report_data.extend(corrigidos) |
||||
|
self.report_data.extend( |
||||
|
[ |
||||
|
"", |
||||
|
_("E-MAILS APAGADOS"), |
||||
|
"----------------", |
||||
|
"", |
||||
|
] |
||||
|
) |
||||
|
self.report_data.extend(apagados) |
Loading…
Reference in new issue