diff --git a/README.rst b/README.rst index 934ff320f..bb146f762 100644 --- a/README.rst +++ b/README.rst @@ -235,13 +235,20 @@ Boas Práticas * Mantenha todo o código de acordo com o padrão da PEP8 (sem exceções). * Antes de todo ``git push``: + - Execute ``git pull --rebase`` (quase sempre). - Em casos excepcionais, faça somente ``git pull`` para criar um merge. * Antes de ``git commit``, sempre: + - Execute ``./manage.py check`` - Execute todos os testes com ``py.test`` na pasta raiz do projeto +* Em caso de Implementação de modelo que envolva a classe from django.contrib.auth.models.User, não a use diretamente, use para isso a função get_user_model() de sapl.utils. Exemplo: + + - no lugar de ``owner = models.ForeignKey(User, ... )`` + - use ``owner = models.ForeignKey(get_user_model(), ... )`` + Atenção: O usuário do banco de dados ``sapl`` deve ter a permissão ``create database`` no postgres para que os testes tenham sucesso @@ -253,6 +260,7 @@ Atenção: Nós sugerimos que você abra uma nova issue para discutir novas funcionalidades. Elas podem ser escritas tanto em Português, quanto em Inglês. + Testes ------ diff --git a/base/forms.py b/base/forms.py index 9201aa666..e0f097096 100644 --- a/base/forms.py +++ b/base/forms.py @@ -2,6 +2,7 @@ from django import forms from django.contrib.auth.forms import AuthenticationForm from django.core.exceptions import ValidationError from django.forms import ModelForm + import sapl from sapl.settings import MAX_IMAGE_UPLOAD_SIZE diff --git a/compilacao/models.py b/compilacao/models.py index d1a0aa6e9..bbca7a92b 100644 --- a/compilacao/models.py +++ b/compilacao/models.py @@ -1,4 +1,3 @@ -from django.contrib.auth.models import User from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType from django.db import models @@ -9,6 +8,7 @@ from django.utils.translation import ugettext_lazy as _ from compilacao.utils import int_to_letter, int_to_roman from sapl import utils +from sapl.utils import get_user_model class TimestampedMixin(models.Model): @@ -1293,7 +1293,7 @@ class Nota(TimestampedMixin): verbose_name=_('Dispositivo da Nota'), related_name='dispositivo_nota_set') - owner = models.ForeignKey(User, verbose_name=_('Dono da Nota')) + owner = models.ForeignKey(get_user_model(), verbose_name=_('Dono da Nota')) publicidade = models.PositiveSmallIntegerField( choices=NOTAS_PUBLICIDADE_CHOICES, verbose_name=_('Nível de Publicidade')) diff --git a/compilacao/views.py b/compilacao/views.py index 13136e191..6ff059075 100644 --- a/compilacao/views.py +++ b/compilacao/views.py @@ -1,6 +1,6 @@ +import sys from collections import OrderedDict from datetime import datetime, timedelta -import sys from braces.views import FormMessagesMixin from django import forms @@ -37,7 +37,6 @@ from compilacao.models import (Dispositivo, Nota, from compilacao.utils import DISPOSITIVO_SELECT_RELATED from crud.base import Crud, CrudListView, make_pagination - TipoNotaCrud = Crud.build(TipoNota, 'tipo_nota') TipoVideCrud = Crud.build(TipoVide, 'tipo_vide') TipoPublicacaoCrud = Crud.build(TipoPublicacao, 'tipo_publicacao') diff --git a/materia/views.py b/materia/views.py index cbbf3ec73..d7ea41948 100644 --- a/materia/views.py +++ b/materia/views.py @@ -488,7 +488,7 @@ class MateriaLegislativaPesquisaView(FilterView): # Então a ordem da URL está diferente data = self.filterset.data if (data and data.get('tipo') is not None): - url = "&"+str(self.request.environ['QUERY_STRING']) + url = "&" + str(self.request.environ['QUERY_STRING']) if url.startswith("&page"): ponto_comeco = url.find('tipo=') - 1 url = url[ponto_comeco:] @@ -599,7 +599,7 @@ def criar_email_confirmacao(request, casa_legislativa, materia, hash_txt=''): casa_legislativa.municipio + '-' + casa_legislativa.uf) - base_url = get_base_url(request) + base_url = sapl.utils.get_base_url(request) materia_url = reverse('materia:acompanhar_materia', kwargs={'pk': materia.id}) confirmacao_url = reverse('materia:acompanhar_confirmar', @@ -636,7 +636,7 @@ def criar_email_tramitacao(request, casa_legislativa, materia, hash_txt=''): casa_legislativa.municipio + '-' + casa_legislativa.uf) - base_url = get_base_url(request) + base_url = sapl.utils.get_base_url(request) url_materia = reverse('materia:acompanhar_materia', kwargs={'pk': materia.id}) url_excluir = reverse('materia:acompanhar_excluir', diff --git a/norma/migrations/0014_merge.py b/norma/migrations/0014_merge.py new file mode 100644 index 000000000..be6ffd022 --- /dev/null +++ b/norma/migrations/0014_merge.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.5 on 2016-06-08 16:14 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('norma', '0013_auto_20160510_1404'), + ('norma', '0013_auto_20160503_0926'), + ] + + operations = [ + ] diff --git a/sapl/settings.py b/sapl/settings.py index f0b6dc0e7..620ebaacb 100644 --- a/sapl/settings.py +++ b/sapl/settings.py @@ -118,6 +118,10 @@ DATABASES = { ) } +# troque no caso de reimplementação da classe User conforme +# https://docs.djangoproject.com/en/1.9/topics/auth/customizing/#substituting-a-custom-user-model +AUTH_USER_MODEL = 'auth.User' + EMAIL_USE_TLS = config('EMAIL_USE_TLS', cast=bool) EMAIL_HOST = config('EMAIL_HOST', cast=str) EMAIL_HOST_USER = config('EMAIL_HOST_USER', cast=str) diff --git a/sapl/utils.py b/sapl/utils.py index 1b3085da4..a57c502f6 100644 --- a/sapl/utils.py +++ b/sapl/utils.py @@ -1,12 +1,13 @@ from datetime import date from functools import wraps -import magic from django.apps import apps +from django.conf import settings from django.contrib import admin from django.core.exceptions import ValidationError from django.utils.translation import ugettext_lazy as _ from floppyforms import ClearableFileInput +import magic autor_label = ''' @@ -54,6 +55,10 @@ def xstr(s): return '' if s is None else str(s) +def get_user_model(): + return getattr(settings, 'AUTH_USER_MODEL', 'auth.User') + + def get_client_ip(request): x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR') if x_forwarded_for: