Browse Source

migração da app 'utils'

stable/2.0
Breno Teixeira 11 years ago
parent
commit
f62a92c213
  1. 31
      sigi/apps/utils/__init__.py
  2. 16
      sigi/apps/utils/admin_widgets.py
  3. 71
      sigi/apps/utils/decorators.py
  4. 33
      sigi/apps/utils/email.py
  5. 42
      sigi/apps/utils/validators.py

31
sigi/apps/utils/__init__.py

@ -0,0 +1,31 @@
# -*- coding: utf-8 -*-
from django.contrib import admin
from django.db import models
from unicodedata import normalize
class SearchField(models.TextField):
def pre_save(self, model_instance, add):
search_text = []
for field_name in self.field_names:
val = unicode(to_ascii(getattr(model_instance, field_name)))
search_text.append(val)
value = u' '.join(search_text)
setattr(model_instance, self.name, value)
return value
def __init__(self, field_names, *args, **kwargs):
self.field_names = field_names
kwargs['editable'] = False
super(self.__class__, self).__init__(*args, **kwargs)
def to_ascii(txt, codif='utf-8'):
if not isinstance(txt, basestring):
txt = unicode(txt)
if isinstance(txt, unicode):
txt = txt.encode('utf-8')
return normalize('NFKD', txt.decode(codif)).encode('ASCII','ignore')
def queryset_ascii(self, request):
if 'q' in request.GET:
request.GET._mutable = True
request.GET['q'] = to_ascii(request.GET['q'])
return admin.ModelAdmin.queryset(self, request)

16
sigi/apps/utils/admin_widgets.py

@ -0,0 +1,16 @@
from django.contrib.admin.widgets import AdminFileWidget
from django.utils.translation import ugettext as _
from django.utils.safestring import mark_safe
class AdminImageWidget(AdminFileWidget):
def render(self, name, value, attrs=None):
output = []
if value and getattr(value, "url", None):
image_url = value.url
file_name=str(value)
output.append(
u''' <a href="%s" target="_blank"><img src="%s" width="100"
height="100" alt="%s"/></a> <br/> %s''' % \
(image_url, image_url, file_name, _('Change:')))
output.append(super(AdminFileWidget, self).render(name, value, attrs))
return mark_safe(u''.join(output))

71
sigi/apps/utils/decorators.py

@ -0,0 +1,71 @@
# -*- coding: utf8 -*-
"""
Script baseado no arquivo decorators.py do django 1.3.
Ele foi copiado para usar o decorador ``login_required``
que possui o argumento ``login_url``, responsável por
redirecionar ao template de login desejado.
No ato de atualizar o framework, esse script torna-se
obsoleto.
"""
import urlparse
try:
from functools import wraps
except ImportError:
from django.utils.functional import wraps # Python 2.4 fallback.
from django.conf import settings
from django.contrib.auth import REDIRECT_FIELD_NAME
from django.utils.decorators import available_attrs
def user_passes_test(test_func, login_url=None, redirect_field_name=REDIRECT_FIELD_NAME):
"""
Decorator for views that checks that the user passes the given test,
redirecting to the log-in page if necessary. The test should be a callable
that takes the user object and returns True if the user passes.
"""
def decorator(view_func):
@wraps(view_func, assigned=available_attrs(view_func))
def _wrapped_view(request, *args, **kwargs):
if test_func(request.user):
return view_func(request, *args, **kwargs)
path = request.build_absolute_uri()
# If the login url is the same scheme and net location then just
# use the path as the "next" url.
login_scheme, login_netloc = urlparse.urlparse(login_url or
settings.LOGIN_URL)[:2]
current_scheme, current_netloc = urlparse.urlparse(path)[:2]
if ((not login_scheme or login_scheme == current_scheme) and
(not login_netloc or login_netloc == current_netloc)):
path = request.get_full_path()
from django.contrib.auth.views import redirect_to_login
return redirect_to_login(path, login_url, redirect_field_name)
return _wrapped_view
return decorator
def login_required(function=None, redirect_field_name=REDIRECT_FIELD_NAME, login_url=None):
"""
Decorator for views that checks that the user is logged in, redirecting
to the log-in page if necessary.
"""
actual_decorator = user_passes_test(
lambda u: u.is_authenticated(),
login_url=login_url,
redirect_field_name=redirect_field_name
)
if function:
return actual_decorator(function)
return actual_decorator
def permission_required(perm, login_url=None):
"""
Decorator for views that checks whether a user has a particular permission
enabled, redirecting to the log-in page if necessary.
"""
return user_passes_test(lambda u: u.has_perm(perm), login_url=login_url)

33
sigi/apps/utils/email.py

@ -0,0 +1,33 @@
# -*- coding: utf8 -*-
from django.template.loader import render_to_string
from django.core.mail import EmailMessage
from django.conf import settings
def enviar_email(from_email, subject, template, tags):
"""Envia o email para o destinatário definido, a partir do template
definido para ser renderizado. Os argumentos são:
* from_email - Email do remetente
* subject - Assunto da Mensagem
* template - Template que será usado para gerar o corpo
da mensagem
* tags - Variáveis de contexto para ser renderizado no
template.
"""
if from_email is None:
raise ValueError("Insira o email do remetente.")
elif subject is None:
raise ValueError("Insira o assunto da mensagem.")
elif template is None:
raise ValueError(u"Template da mensagem não encontrado")
elif tags is None:
raise ValueError("Insira o conteúdo da mensagem.")
# Gerando a mensagem
mensagem = render_to_string(template, tags)
# Enviando a mensagem
email = EmailMessage(settings.EMAIL_SUBJECT_PREFIX + " " + subject, mensagem,
from_email, [from_email])
email.send()

42
sigi/apps/utils/validators.py

@ -0,0 +1,42 @@
# -*- coding: utf8 -*-
def valida_data(data_inicio, data_final):
"""Função responsável por validar se o intervalo das
datas estão erradas, ou seja, se a data de início está
maior ou igual a data final.
Caso seja maior ou igual retornará ``True``, caso contrário
retornará ``False``.
"""
if data_inicio >= data_final:
return True
else:
return False
def valida_periodo_data(di01, df01, di02, df02):
"""Função responsável por validar dois períodos de datas.
Isso é usado para verificar se determinado servidor exerceu
mais de uma função dentro de determinados períodos descritos
abaixo:
1 - A segunda função não pode ter exercido ao mesmo tempo que
a primeira função. Exemplo:
Primeiro Função: 01/05/2011 -- 01/11/2011
Segundo Função: 01/05/2011 -- 01/11/2011
2 - A segunda função não pode ter exercido, dentro do período
da primeira função. Exemplo:
Primeira Função: 01/05/2011 -- 01/11/2011
Segunda Função: 02/05/2011 -- 30/10/2011
"""
# Verificando a primeira situação
if di01 == di02 and df01 == df02:
return True
elif ((di01 >= di02) or (di02 <= df01)) and df01 <= df02:
return True
else:
return False
Loading…
Cancel
Save