Browse Source

Merge branch '3.1.x' of https://github.com/interlegis/sapl into 1801-justificativa

pull/2260/head
Mariana Mendes 7 years ago
parent
commit
9f3fa6cecc
  1. 2
      Dockerfile
  2. 2
      requirements/dev-requirements.txt
  3. 23
      requirements/requirements.txt
  4. 29
      sapl/audiencia/forms.py
  5. 33
      sapl/audiencia/migrations/0007_anexoaudienciapublica.py
  6. 28
      sapl/audiencia/migrations/0008_auto_20181023_1051.py
  7. 19
      sapl/audiencia/migrations/0009_remove_anexoaudienciapublica_indexacao.py
  8. 46
      sapl/audiencia/models.py
  9. 5
      sapl/audiencia/urls.py
  10. 44
      sapl/audiencia/views.py
  11. 8
      sapl/base/tests/teststub_urls.py
  12. 1
      sapl/comissoes/tests/test_comissoes.py
  13. 2
      sapl/materia/forms.py
  14. 1
      sapl/rules/map_rules.py
  15. 2
      sapl/sessao/forms.py
  16. 25
      sapl/sessao/migrations/0027_auto_20181023_1239.py
  17. 6
      sapl/sessao/models.py
  18. 21
      sapl/sessao/views.py
  19. 15
      sapl/settings.py
  20. 5
      sapl/templates/audiencia/layouts.yaml
  21. 5
      sapl/templates/audiencia/subnav.yaml
  22. 10
      sapl/templates/materia/impressos/ficha_pdf.html
  23. 2
      sapl/test_urls.py
  24. 6
      sapl/urls.py
  25. 25
      setup.py

2
Dockerfile

@ -40,7 +40,7 @@ COPY config/env_dockerfile /var/interlegis/sapl/sapl/.env
# compilescss - Precompile all occurrences of your SASS/SCSS files for the whole project into css files # compilescss - Precompile all occurrences of your SASS/SCSS files for the whole project into css files
RUN python3 manage.py bower_install -- --allow-root --no-input && \ RUN python3 manage.py bower_install --allow-root && \
python3 manage.py compilescss python3 manage.py compilescss
RUN python3 manage.py collectstatic --noinput --clear RUN python3 manage.py collectstatic --noinput --clear

2
requirements/dev-requirements.txt

@ -2,7 +2,7 @@
autopep8==1.2.4 autopep8==1.2.4
beautifulsoup4==4.6.0 beautifulsoup4==4.6.0
django-debug-toolbar==1.5 django-debug-toolbar==1.8
ipdb==0.10.1 ipdb==0.10.1
pdbpp==0.9.2 pdbpp==0.9.2
pip-review==0.4 pip-review==0.4

23
requirements/requirements.txt

@ -1,24 +1,21 @@
dj-database-url==0.4.1 dj-database-url==0.4.1
django-haystack==2.6.0 django-haystack==2.6.0
django>=1.9,<1.10 django>=1.10,<1.11
# TODO O django-admin-bootstrapped 2.5.7 não inseriu a mudança que permite git+git://github.com/rubgombar1/django-admin-bootstrapped.git
# a compatibilidade com Django 1.9+. A linha abaixo será mudada quando uma
# nova versão do django-admin-bootstrapped for lançada
git+git://github.com/django-admin-bootstrapped/django-admin-bootstrapped.git
django-bootstrap3==7.0.1 django-bootstrap3==7.0.1
django-bower==5.1.0 django-bower==5.2.0
django-braces==1.9.0 django-braces==1.9.0
django-compressor==2.0 django-compressor==2.0
django-crispy-forms==1.6.0 django-crispy-forms==1.6.1
django-extensions==1.6.7 django-extensions==1.9.8
django-extra-views==0.8.0 django-extra-views==0.11.0
django-filter==0.15.3 django-filter==0.15.3
django-floppyforms==1.6.2 django-floppyforms==1.6.2
django-model-utils==2.5 django-model-utils==3.1.1
django-sass-processor==0.5.4 django-sass-processor==0.5.8
djangorestframework==3.4.0 djangorestframework==3.4.0
drfdocs==0.0.11 git+git://github.com/jasperlittle/django-rest-framework-docs
easy-thumbnails==2.3 easy-thumbnails==2.5
django-image-cropping==1.1.0 django-image-cropping==1.1.0
git+git://github.com/interlegis/trml2pdf.git git+git://github.com/interlegis/trml2pdf.git
libsass==0.11.1 libsass==0.11.1

29
sapl/audiencia/forms.py

@ -2,7 +2,11 @@ from django import forms
from django.core.exceptions import ObjectDoesNotExist, ValidationError from django.core.exceptions import ObjectDoesNotExist, ValidationError
from django.db import transaction from django.db import transaction
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from sapl.audiencia.models import AudienciaPublica, TipoAudienciaPublica from sapl.audiencia.models import AudienciaPublica, TipoAudienciaPublica, AnexoAudienciaPublica
from crispy_forms.layout import HTML, Button, Column, Fieldset, Layout
from crispy_forms.helper import FormHelper
from sapl.crispy_layout_mixin import SaplFormLayout, form_actions, to_row
from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa
from sapl.utils import timezone from sapl.utils import timezone
@ -102,3 +106,26 @@ class AudienciaForm(forms.ModelForm):
raise ValidationError(msg) raise ValidationError(msg)
return cleaned_data return cleaned_data
class AnexoAudienciaPublicaForm(forms.ModelForm):
class Meta:
model = AnexoAudienciaPublica
fields = ['arquivo',
'assunto']
def __init__(self, *args, **kwargs):
row1 = to_row(
[('arquivo', 4)])
row2 = to_row(
[('assunto', 12)])
self.helper = FormHelper()
self.helper.layout = SaplFormLayout(
Fieldset(_('Identificação Básica'),
row1, row2))
super(AnexoAudienciaPublicaForm, self).__init__(
*args, **kwargs)

33
sapl/audiencia/migrations/0007_anexoaudienciapublica.py

@ -0,0 +1,33 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.13 on 2018-10-17 20:27
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
import sapl.utils
class Migration(migrations.Migration):
dependencies = [
('audiencia', '0006_auto_20180808_0856'),
]
operations = [
migrations.CreateModel(
name='AnexoAudienciaPublica',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('nome', models.CharField(max_length=30, verbose_name='Nome')),
('arquivo', models.FileField(blank=True, null=True, upload_to=sapl.utils.texto_upload_path, verbose_name='Arquivo')),
('data', models.DateField(blank=True, null=True, verbose_name='Data')),
('assunto', models.TextField(blank=True, verbose_name='Assunto')),
('indexacao', models.TextField(blank=True)),
('audiencia', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='audiencia.AudienciaPublica')),
],
options={
'verbose_name': 'Documento Acessório',
'verbose_name_plural': 'Documentos Acessórios',
},
),
]

28
sapl/audiencia/migrations/0008_auto_20181023_1051.py

@ -0,0 +1,28 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.8 on 2018-10-23 13:51
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('audiencia', '0007_anexoaudienciapublica'),
]
operations = [
migrations.AlterModelOptions(
name='anexoaudienciapublica',
options={'verbose_name': 'Anexo de Documento Acessório', 'verbose_name_plural': 'Anexo de Documentos Acessórios'},
),
migrations.RemoveField(
model_name='anexoaudienciapublica',
name='nome',
),
migrations.AlterField(
model_name='anexoaudienciapublica',
name='data',
field=models.DateField(auto_now=True, null=True),
),
]

19
sapl/audiencia/migrations/0009_remove_anexoaudienciapublica_indexacao.py

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.8 on 2018-10-23 13:55
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('audiencia', '0008_auto_20181023_1051'),
]
operations = [
migrations.RemoveField(
model_name='anexoaudienciapublica',
name='indexacao',
),
]

46
sapl/audiencia/models.py

@ -1,5 +1,6 @@
import reversion import reversion
from django.db import models from django.db import models
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from model_utils import Choices from model_utils import Choices
from sapl.materia.models import MateriaLegislativa from sapl.materia.models import MateriaLegislativa
@ -147,3 +148,48 @@ class AudienciaPublica(models.Model):
force_update=force_update, force_update=force_update,
using=using, using=using,
update_fields=update_fields) update_fields=update_fields)
@reversion.register()
class AnexoAudienciaPublica(models.Model):
audiencia = models.ForeignKey(AudienciaPublica,
on_delete=models.PROTECT)
arquivo = models.FileField(
blank=True,
null=True,
upload_to=texto_upload_path,
verbose_name=_('Arquivo'))
data = models.DateField(auto_now=timezone.now,blank=True, null=True)
assunto = models.TextField(
blank=True, verbose_name=_('Assunto'))
class Meta:
verbose_name = _('Anexo de Documento Acessório')
verbose_name_plural = _('Anexo de Documentos Acessórios')
def __str__(self):
return self.assunto
def delete(self, using=None, keep_parents=False):
if self.arquivo:
self.arquivo.delete()
return models.Model.delete(
self, using=using, keep_parents=keep_parents)
def save(self, force_insert=False, force_update=False, using=None,
update_fields=None):
if not self.pk and self.arquivo:
arquivo = self.arquivo
self.arquivo = None
models.Model.save(self, force_insert=force_insert,
force_update=force_update,
using=using,
update_fields=update_fields)
self.arquivo = arquivo
return models.Model.save(self, force_insert=force_insert,
force_update=force_update,
using=using,
update_fields=update_fields)

5
sapl/audiencia/urls.py

@ -1,10 +1,11 @@
from django.conf.urls import include, url from django.conf.urls import include, url
from sapl.audiencia.views import (index, AudienciaCrud) from sapl.audiencia.views import (index, AudienciaCrud,AnexoAudienciaPublicaCrud)
from .apps import AppConfig from .apps import AppConfig
app_name = AppConfig.name app_name = AppConfig.name
urlpatterns = [ urlpatterns = [
url(r'^audiencia/', include(AudienciaCrud.get_urls())), url(r'^audiencia/', include(AudienciaCrud.get_urls() +
AnexoAudienciaPublicaCrud.get_urls())),
] ]

44
sapl/audiencia/views.py

@ -1,11 +1,13 @@
import sapl
from django.http import HttpResponse from django.http import HttpResponse
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.views.decorators.clickjacking import xframe_options_exempt from django.views.decorators.clickjacking import xframe_options_exempt
from django.views.generic import UpdateView from django.views.generic import UpdateView
from sapl.crud.base import RP_DETAIL, RP_LIST, Crud from sapl.crud.base import RP_DETAIL, RP_LIST, Crud, MasterDetailCrud
from .forms import AudienciaForm from .forms import AudienciaForm, AnexoAudienciaPublicaForm
from .models import AudienciaPublica from .models import AudienciaPublica, AnexoAudienciaPublica
def index(request): def index(request):
@ -70,3 +72,39 @@ class AudienciaCrud(Crud):
return super().get(request, *args, **kwargs) return super().get(request, *args, **kwargs)
class AudienciaPublicaMixin:
def has_permission(self):
app_config = sapl.base.models.AppConfig.objects.last()
if app_config and app_config.documentos_administrativos == 'O':
return True
return super().has_permission()
class AnexoAudienciaPublicaCrud(MasterDetailCrud):
model = AnexoAudienciaPublica
parent_field = 'audiencia'
help_topic = 'numeracao_docsacess'
class BaseMixin(MasterDetailCrud.BaseMixin):
list_field_names = ['assunto']
class CreateView(MasterDetailCrud.CreateView):
form_class = AnexoAudienciaPublicaForm
layout_key = None
class UpdateView(MasterDetailCrud.UpdateView):
form_class = AnexoAudienciaPublicaForm
class ListView(AudienciaPublicaMixin, MasterDetailCrud.ListView):
def get_queryset(self):
qs = super(MasterDetailCrud.ListView, self).get_queryset()
kwargs = {self.crud.parent_field: self.kwargs['pk']}
return qs.filter(**kwargs).order_by('-data', '-id')
class DetailView(AudienciaPublicaMixin,
MasterDetailCrud.DetailView):
pass

8
sapl/base/tests/teststub_urls.py

@ -1,11 +1,9 @@
from django.conf.urls import patterns, url from django.conf.urls import url
from django.views.generic.base import TemplateView from django.views.generic.base import TemplateView
from sapl.urls import urlpatterns as original_patterns from sapl.urls import urlpatterns as original_patterns
ptrn = patterns('', ptrn = [url(r'^zzzz$',
url(r'^zzzz$',
TemplateView.as_view( TemplateView.as_view(
template_name='index.html'), name='zzzz')) template_name='index.html'), name='zzzz')]
urlpatterns = original_patterns + ptrn urlpatterns = original_patterns + ptrn

1
sapl/comissoes/tests/test_comissoes.py

@ -74,6 +74,7 @@ def test_incluir_comissao_submit(admin_client):
'nome': 'Comissão Teste', 'nome': 'Comissão Teste',
'sigla': 'CT', 'sigla': 'CT',
'data_criacao': '2016-03-22', 'data_criacao': '2016-03-22',
'unidade_deliberativa': True,
'salvar': 'salvar'}, 'salvar': 'salvar'},
follow=True) follow=True)
assert response.status_code == 200 assert response.status_code == 200

2
sapl/materia/forms.py

@ -1180,7 +1180,7 @@ class TipoProposicaoSelect(Select):
str(data_has_perfil), str(data_has_perfil),
force_text(option_label)) force_text(option_label))
def render_options(self, choices, selected_choices): def render_options(self, selected_choices):
# Normalize to strings. # Normalize to strings.
selected_choices = set(force_text(v) for v in selected_choices) selected_choices = set(force_text(v) for v in selected_choices)
output = [] output = []

1
sapl/rules/map_rules.py

@ -66,6 +66,7 @@ rules_group_audiencia = {
'rules': [ 'rules': [
(audiencia.AudienciaPublica, __base__), (audiencia.AudienciaPublica, __base__),
(audiencia.TipoAudienciaPublica, __base__), (audiencia.TipoAudienciaPublica, __base__),
(audiencia.AnexoAudienciaPublica, __base__),
] ]
} }

2
sapl/sessao/forms.py

@ -431,7 +431,7 @@ class VotacaoForm(forms.Form):
class VotacaoNominalForm(forms.Form): class VotacaoNominalForm(forms.Form):
resultado_votacao = forms.ModelChoiceField(label='Resultado da Votação', resultado_votacao = forms.ModelChoiceField(label='Resultado da Votação',
required=True, required=False,
queryset=TipoResultadoVotacao.objects.all()) queryset=TipoResultadoVotacao.objects.all())

25
sapl/sessao/migrations/0027_auto_20181023_1239.py

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.8 on 2018-10-23 15:39
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('sessao', '0026_auto_20181016_1944'),
]
operations = [
migrations.AlterField(
model_name='sessaoplenaria',
name='finalizada',
field=models.NullBooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Sessão finalizada?'),
),
migrations.AlterField(
model_name='sessaoplenaria',
name='iniciada',
field=models.NullBooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=True, verbose_name='Sessão iniciada?'),
),
]

6
sapl/sessao/models.py

@ -160,10 +160,12 @@ class SessaoPlenaria(models.Model):
verbose_name=_('Anexo da Sessão')) verbose_name=_('Anexo da Sessão'))
iniciada = models.NullBooleanField(blank=True, iniciada = models.NullBooleanField(blank=True,
choices=YES_NO_CHOICES, choices=YES_NO_CHOICES,
verbose_name=_('Sessão iniciada?')) verbose_name=_('Sessão iniciada?'),
default=True)
finalizada = models.NullBooleanField(blank=True, finalizada = models.NullBooleanField(blank=True,
choices=YES_NO_CHOICES, choices=YES_NO_CHOICES,
verbose_name=_('Sessão finalizada?')) verbose_name=_('Sessão finalizada?'),
default=False)
interativa = models.NullBooleanField(blank=True, interativa = models.NullBooleanField(blank=True,
choices=YES_NO_CHOICES, choices=YES_NO_CHOICES,
verbose_name=_('Sessão interativa')) verbose_name=_('Sessão interativa'))

21
sapl/sessao/views.py

@ -119,7 +119,8 @@ def verifica_sessao_iniciada(request, spk):
if not sessao.iniciada or sessao.finalizada: if not sessao.iniciada or sessao.finalizada:
msg = _('Não é possível abrir matérias para votação. ' msg = _('Não é possível abrir matérias para votação. '
'Esta Sessão Plenária não foi iniciada ou está finalizada.') 'Esta Sessão Plenária não foi iniciada ou está finalizada.'
' Vá em "Abertura"->"Dados Básicos" e altere os valores dos campos necessários.')
messages.add_message(request, messages.INFO, msg) messages.add_message(request, messages.INFO, msg)
return False return False
@ -1900,9 +1901,6 @@ class VotacaoNominalAbstract(SessaoPermissionMixin):
except ObjectDoesNotExist: except ObjectDoesNotExist:
raise Http404() raise Http404()
if 'cancelar-votacao' in request.POST:
fechar_votacao_materia(materia_votacao)
return self.form_valid(form)
if form.is_valid(): if form.is_valid():
votos_sim = 0 votos_sim = 0
@ -1910,6 +1908,21 @@ class VotacaoNominalAbstract(SessaoPermissionMixin):
abstencoes = 0 abstencoes = 0
nao_votou = 0 nao_votou = 0
if 'cancelar-votacao' in request.POST:
fechar_votacao_materia(materia_votacao)
if self.ordem:
return HttpResponseRedirect(reverse(
'sapl.sessao:ordemdia_list', kwargs={'pk': kwargs['pk']}))
else:
return HttpResponseRedirect(reverse(
'sapl.sessao:expedientemateria_list',
kwargs={'pk': kwargs['pk']}))
else:
if form.cleaned_data['resultado_votacao'] == None:
form.add_error(None, 'Não é possível finalizar a votação sem '
'nenhum resultado da votação')
return self.form_invalid(form)
for votos in request.POST.getlist('voto_parlamentar'): for votos in request.POST.getlist('voto_parlamentar'):
v = votos.split(':') v = votos.split(':')
voto = v[0] voto = v[0]

15
sapl/settings.py

@ -115,11 +115,7 @@ HAYSTACK_CONNECTIONS = {
}, },
} }
MIDDLEWARE = [
if DEBUG:
INSTALLED_APPS += ('debug_toolbar', 'rest_framework_docs',)
MIDDLEWARE_CLASSES = (
'reversion.middleware.RevisionMiddleware', 'reversion.middleware.RevisionMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware', 'django.middleware.locale.LocaleMiddleware',
@ -130,8 +126,13 @@ MIDDLEWARE_CLASSES = (
'django.contrib.messages.middleware.MessageMiddleware', 'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware', 'django.middleware.security.SecurityMiddleware',
# 'speedinfo.middleware.ProfilerMiddleware', # Bug na versão 1.9 'speedinfo.middleware.ProfilerMiddleware',
) ]
if DEBUG:
INSTALLED_APPS += ('debug_toolbar', 'rest_framework_docs',)
MIDDLEWARE += ['debug_toolbar.middleware.DebugToolbarMiddleware', ]
INTERNAL_IPS = ('127.0.0.1')
CACHES = { CACHES = {
'default': { 'default': {

5
sapl/templates/audiencia/layouts.yaml

@ -22,3 +22,8 @@ AudienciaPublicaDetail:
- upload_pauta upload_ata upload_anexo - upload_pauta upload_ata upload_anexo
- observacao - observacao
- audiencia_cancelada - audiencia_cancelada
AnexoAudienciaPublica:
{% trans 'Documento Acessório' %}:
- assunto
- arquivo

5
sapl/templates/audiencia/subnav.yaml

@ -0,0 +1,5 @@
{% load i18n common_tags %}
- title: {% trans 'Início' %}
url: audienciapublica_detail
- title: {% trans 'Documento Acessório' %}
url: anexoaudienciapublica_list

10
sapl/templates/materia/impressos/ficha_pdf.html

@ -70,7 +70,7 @@ body
<strong class="text_pdf">PROCESSO Nº {{ materia.numeracao_set.first.numero_materia }} / {{ materia.numeracao_set.first.ano_materia }}</strong><br> <strong class="text_pdf">PROCESSO Nº {{ materia.numeracao_set.first.numero_materia }} / {{ materia.numeracao_set.first.ano_materia }}</strong><br>
&nbsp; &nbsp;
{% else %} {% else %}
<strong class="text_pdf">PROCESSO Nº: {{ materia.numero }}</strong><br> <strong class="text_pdf">PROCESSO Nº: {{ materia.numero }} / {{materia.ano}}</strong><br>
&nbsp; &nbsp;
{% endif %} {% endif %}
</div> </div>
@ -96,6 +96,14 @@ body
<strong class="text_pdf">Autor: </strong><span class="text_pdf">{{materia.autoria_set.first.autor.nome}}</span><br> <strong class="text_pdf">Autor: </strong><span class="text_pdf">{{materia.autoria_set.first.autor.nome}}</span><br>
</td> </td>
</table> </table>
{% if materia.numero_protocolo%}
<table border=0>
<td height="60pt" valign=top>
<div>
<strong class="text_pdf">Protocolo: </strong><span class="text_pdf">{{materia.numero_protocolo}} / {{materia.ano}}</span><br>
</td>
</table>
{% endif %}
<!-- Ementa --> <!-- Ementa -->
<table border=0> <table border=0>

2
sapl/test_urls.py

@ -56,7 +56,7 @@ def create_perms_post_migrate(sapl_app_config):
ctype = ContentType.objects.get_for_model(klass) ctype = ContentType.objects.get_for_model(klass)
ctypes.add(ctype) ctypes.add(ctype)
for perm in _get_all_permissions(klass._meta, ctype): for perm in _get_all_permissions(klass._meta):
searched_perms.append((ctype, perm)) searched_perms.append((ctype, perm))
all_perms = set(Permission.objects.filter( all_perms = set(Permission.objects.filter(

6
sapl/urls.py

@ -70,6 +70,12 @@ urlpatterns = [
# http://stackoverflow.com/questions/35510373/ # http://stackoverflow.com/questions/35510373/
if settings.DEBUG: if settings.DEBUG:
import debug_toolbar
urlpatterns += [
url(r'^__debug__/', include(debug_toolbar.urls)),
]
urlpatterns += static(settings.STATIC_URL, urlpatterns += static(settings.STATIC_URL,
document_root=settings.STATIC_ROOT) document_root=settings.STATIC_ROOT)

25
setup.py

@ -11,29 +11,30 @@ os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir)))
install_requires = [ install_requires = [
'dj-database-url==0.4.1', 'dj-database-url==0.4.1',
'django-haystack==2.6.0', 'django-haystack==2.6.0',
'django>=1.9,<1.10', 'django>=1.10,<1.11',
# TODO O django-admin-bootstrapped 2.5.7 não inseriu a mudança que permite # TODO O django-admin-bootstrapped 2.5.7 não inseriu a mudança que permite
# a compatibilidade com Django 1.9+. A linha abaixo será mudada quando uma # a compatibilidade com Django 1.9+. A linha abaixo será mudada quando uma
# nova versão do django-admin-bootstrapped for lançada # nova versão do django-admin-bootstrapped for lançada
# 'git+git://github.com/django-admin-bootstrapped/ # 'git+git://github.com/django-admin-bootstrapped/
# django-admin-bootstrapped.git', # django-admin-bootstrapped.git',
'django-bootstrap3==7.0.1', 'django-bootstrap3==7.0.1',
'django-bower==5.1.0', 'django-bower==5.2.0',
'django-braces==1.9.0', 'django-braces==1.9.0',
'django-compressor==2.0', 'django-compressor==2.0',
'django-crispy-forms==1.6.0', 'django-crispy-forms==1.6.1',
'django-extensions==1.6.7', 'django-extensions==1.9.8',
'django-extra-views==0.8.0', 'django-extra-views==0.11.0',
'django-filter==0.15.3', 'django-filter==0.15.3',
'django-floppyforms==1.6.2', 'django-floppyforms==1.6.2',
'django-model-utils==2.5', 'django-model-utils==3.1.1',
'django-sass-processor==0.5.4', 'django-sass-processor==0.5.8',
'djangorestframework', 'djangorestframework==3.4.0',
'drfdocs', 'drfdocs',
'easy-thumbnails==2.3', 'easy-thumbnails==2.5',
'django-image-cropping==1.1.0',
# 'git+git://github.com/interlegis/trml2pdf.git', # 'git+git://github.com/interlegis/trml2pdf.git',
'libsass==0.11.1', 'libsass==0.11.1',
'psycopg2==2.7.3', 'psycopg2==2.7.4',
'python-decouple==3.0', 'python-decouple==3.0',
'pytz==2016.4', 'pytz==2016.4',
'pyyaml==3.11', 'pyyaml==3.11',
@ -45,7 +46,9 @@ install_requires = [
'gunicorn==19.6.0', 'gunicorn==19.6.0',
'django-reversion==2.0.8', 'django-reversion==2.0.8',
'WeasyPrint==0.42', 'WeasyPrint==0.42',
'whoosh==2.7.4' 'whoosh==2.7.4',
'django-speedinfo==1.3.5',
'django-reversion-compare==0.8.4'
] ]
setup( setup(
name='interlegis-sapl', name='interlegis-sapl',

Loading…
Cancel
Save