mirror of https://github.com/interlegis/sigi.git
Breno Teixeira
11 years ago
5 changed files with 193 additions and 0 deletions
@ -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) |
@ -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)) |
@ -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) |
@ -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() |
@ -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…
Reference in new issue