mirror of https://github.com/interlegis/sigi.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
3.7 KiB
105 lines
3.7 KiB
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)
|
|
|