Browse Source

Merge branch 'master' into 1487-abertura-do-painel

pull/1499/head
Edward 8 years ago
committed by GitHub
parent
commit
61065b222d
  1. 3
      .gitignore
  2. 13
      docker-compose.yml
  3. 2
      requirements/dev-requirements.txt
  4. 4
      requirements/requirements.txt
  5. 2
      requirements/test-requirements.txt
  6. 2
      sapl/base/forms.py
  7. 15
      sapl/legacy/migration.py
  8. 7
      sapl/painel/views.py
  9. 14
      sapl/parlamentares/migrations/0010_corrige_data_inicio_mandato.py
  10. 20
      sapl/protocoloadm/forms.py
  11. 19
      sapl/protocoloadm/migrations/0002_remove_documentoadministrativo_numero_protocolo.py
  12. 3
      sapl/protocoloadm/models.py
  13. 2
      sapl/protocoloadm/views.py
  14. 2
      sapl/relatorios/views.py
  15. 5
      sapl/sessao/forms.py
  16. 61
      sapl/templates/materia/impressos/ficha_pdf.html
  17. 2
      sapl/templates/materia/materialegislativa_filter.html
  18. 2
      sapl/templates/protocoloadm/documentoadministrativo_filter.html
  19. 1
      sapl/templates/protocoloadm/protocolo_filter.html
  20. 12
      sapl/utils.py
  21. 20
      setup.py

3
.gitignore

@ -6,6 +6,9 @@ __pycache__/
# C extensions # C extensions
*.so *.so
# Nodejs
node_modules/
# Distribution / packaging # Distribution / packaging
.Python .Python
env/ env/

13
docker-compose.yml

@ -1,5 +1,6 @@
sapldb: sapldb:
image: postgres image: postgres
restart: always
environment: environment:
POSTGRES_PASSWORD: sapl POSTGRES_PASSWORD: sapl
POSTGRES_USER: sapl POSTGRES_USER: sapl
@ -8,9 +9,19 @@ sapldb:
volumes: volumes:
- sapldb_data:/var/lib/postgresql/data/ - sapldb_data:/var/lib/postgresql/data/
ports: ports:
- "5532:5432" - "5432:5432"
sapl: sapl:
image: interlegis/sapl:3.1.24-BETA image: interlegis/sapl:3.1.24-BETA
restart: always
environment:
ADMIN_PASSWORD: interlegis
ADMIN_EMAIL: email@dominio.net
DEBUG: 'False'
USE_TLS: 'False'
EMAIL_PORT: 587
EMAIL_HOST: smtp.dominio.net
EMAIL_HOST_USER: usuariosmtp
EMAIL_HOST_PASSWORD: senhasmtp
volumes: volumes:
- sapl_data:/var/interlegis/sapl/data - sapl_data:/var/interlegis/sapl/data
- sapl_media:/var/interlegis/sapl/media - sapl_media:/var/interlegis/sapl/media

2
requirements/dev-requirements.txt

@ -6,4 +6,4 @@ ipdb==0.10.1
pip-review==0.4 pip-review==0.4
pygraphviz==1.3.1 pygraphviz==1.3.1
pytest-ipdb==0.1-prerelease2 pytest-ipdb==0.1-prerelease2
pipdeptree pipdeptree==0.10.1

4
requirements/requirements.txt

@ -16,8 +16,8 @@ django-filter==0.15.3
django-floppyforms==1.6.2 django-floppyforms==1.6.2
django-model-utils==2.5 django-model-utils==2.5
django-sass-processor==0.5.4 django-sass-processor==0.5.4
djangorestframework djangorestframework==3.4.0
drfdocs drfdocs==0.0.11
easy-thumbnails==2.3 easy-thumbnails==2.3
git+git://github.com/interlegis/trml2pdf.git git+git://github.com/interlegis/trml2pdf.git
libsass==0.11.1 libsass==0.11.1

2
requirements/test-requirements.txt

@ -1,6 +1,6 @@
-r requirements.txt -r requirements.txt
coverage==4.1 coverage==4.1
django-webtest django-webtest==1.7.8
flake8==2.6.2 flake8==2.6.2
isort==4.2.5 isort==4.2.5
model-mommy==1.2.6 model-mommy==1.2.6

2
sapl/base/forms.py

@ -231,7 +231,7 @@ class AutorForm(ModelForm):
if 'status_user' in self.Meta.fields: if 'status_user' in self.Meta.fields:
if self.instance.pk and self.instance.user_id: if self.instance.pk and self.instance.user_id:
if getattr( if getattr(
self.instance.user.username, self.instance.user,
get_user_model().USERNAME_FIELD) != cd['username']: get_user_model().USERNAME_FIELD) != cd['username']:
if 'status_user' not in cd or not cd['status_user']: if 'status_user' not in cd or not cd['status_user']:
raise ValidationError( raise ValidationError(

15
sapl/legacy/migration.py

@ -17,7 +17,8 @@ from django.db.models import Count, Max
from django.db.models.base import ModelBase from django.db.models.base import ModelBase
from sapl.base.models import AppConfig as AppConf from sapl.base.models import AppConfig as AppConf
from sapl.base.models import Autor, ProblemaMigracao, TipoAutor from sapl.base.models import (Autor, CasaLegislativa, ProblemaMigracao,
TipoAutor)
from sapl.comissoes.models import Comissao, Composicao, Participacao from sapl.comissoes.models import Comissao, Composicao, Participacao
from sapl.legacy.models import TipoNumeracaoProtocolo from sapl.legacy.models import TipoNumeracaoProtocolo
from sapl.materia.models import (AcompanhamentoMateria, Proposicao, from sapl.materia.models import (AcompanhamentoMateria, Proposicao,
@ -208,7 +209,8 @@ def fill_vinculo_norma_juridica():
TipoVinculoNormaJuridica.objects.bulk_create(lista_objs) TipoVinculoNormaJuridica.objects.bulk_create(lista_objs)
def fill_tipo_numeracao_protocolo(): def fill_dados_basicos():
# Ajusta sequencia numérica e cria base.AppConfig
letra = 'A' letra = 'A'
try: try:
tipo = TipoNumeracaoProtocolo.objects.latest('dat_inicial_protocolo') tipo = TipoNumeracaoProtocolo.objects.latest('dat_inicial_protocolo')
@ -223,6 +225,10 @@ def fill_tipo_numeracao_protocolo():
appconf = AppConf(sequencia_numeracao=letra) appconf = AppConf(sequencia_numeracao=letra)
appconf.save() appconf.save()
# Cria instância de CasaLegislativa
casa = CasaLegislativa()
casa.save()
# Uma anomalia no sapl 2.5 causa a duplicação de registros de votação. # Uma anomalia no sapl 2.5 causa a duplicação de registros de votação.
# Essa duplicação deve ser eliminada para que não haja erro no sapl 3.1 # Essa duplicação deve ser eliminada para que não haja erro no sapl 3.1
@ -253,6 +259,9 @@ def excluir_registrovotacao_duplicados():
def delete_old(legacy_model, cols_values): def delete_old(legacy_model, cols_values):
# ajuste necessário por conta de cósigos html em txt_expediente
if legacy_model.__name__ == 'ExpedienteSessaoPlenaria':
cols_values.pop('txt_expediente')
def eq_clause(col, value): def eq_clause(col, value):
if value is None: if value is None:
@ -338,7 +347,7 @@ class DataMigrator:
'--database=default', '--no-input'], stdout=PIPE) '--database=default', '--no-input'], stdout=PIPE)
fill_vinculo_norma_juridica() fill_vinculo_norma_juridica()
fill_tipo_numeracao_protocolo() fill_dados_basicos()
info('Começando migração: %s...' % obj) info('Começando migração: %s...' % obj)
self._do_migrate(obj) self._do_migrate(obj)

7
sapl/painel/views.py

@ -1,5 +1,4 @@
import json import json
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import user_passes_test from django.contrib.auth.decorators import user_passes_test
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
@ -9,6 +8,8 @@ from django.http import HttpResponse, JsonResponse
from django.http.response import Http404, HttpResponseRedirect from django.http.response import Http404, HttpResponseRedirect
from django.shortcuts import render from django.shortcuts import render
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from operator import itemgetter
from sapl.utils import sort_lista_chave
from sapl.crud.base import Crud from sapl.crud.base import Crud
from sapl.painel.apps import AppConfig from sapl.painel.apps import AppConfig
@ -296,7 +297,7 @@ def get_presentes(pk, response, materia):
filiacao = filiacao_data(p.parlamentar, data_sessao, data_sessao) filiacao = filiacao_data(p.parlamentar, data_sessao, data_sessao)
if not filiacao: if not filiacao:
partido = _('Sem Registro') partido = 'Sem Registro'
else: else:
partido = filiacao partido = filiacao
@ -324,6 +325,8 @@ def get_presentes(pk, response, materia):
}) })
presentes_list = sort_lista_chave(presentes_list, 'nome')
response.update({ response.update({
'presentes': presentes_list, 'presentes': presentes_list,
'num_presentes': num_presentes, 'num_presentes': num_presentes,

14
sapl/parlamentares/migrations/0010_corrige_data_inicio_mandato.py

@ -1,12 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import migrations
import json
import os
from datetime import timedelta
from django.core.management import call_command
from django.db import migrations
def altera_data_inicio_mandato(apps, schema_editor): def altera_data_inicio_mandato(apps, schema_editor):
@ -16,7 +12,9 @@ def altera_data_inicio_mandato(apps, schema_editor):
for mandato in mandatos: for mandato in mandatos:
data_inicio = mandato.data_inicio_mandato data_inicio = mandato.data_inicio_mandato
data_inicio_legislatura = mandato.legislatura.data_inicio data_inicio_legislatura = mandato.legislatura.data_inicio
days = abs((data_inicio - data_inicio_legislatura).days)
days = abs((data_inicio - data_inicio_legislatura
).days) if data_inicio else 60
if days >= 60: if days >= 60:
mandato.data_inicio_mandato = data_inicio_legislatura mandato.data_inicio_mandato = data_inicio_legislatura
@ -28,8 +26,8 @@ class Migration(migrations.Migration):
dependencies = [ dependencies = [
# A dependencia real desse script é o arquivo 0001_initial.py, mas # A dependencia real desse script é o arquivo 0001_initial.py, mas
# isso gera um erro (Conflicting migrations detected; multiple leaf # isso gera um erro (Conflicting migrations detected; multiple leaf
# nodes in the migration graph). para não ocasionar problemas de migração, # nodes in the migration graph). para não ocasionar problemas de migração,
# vamos manter a ordem padrão do django. # vamos manter a ordem padrão do django.
('parlamentares', '0009_auto_20170905_1617'), ('parlamentares', '0009_auto_20170905_1617'),
] ]

20
sapl/protocoloadm/forms.py

@ -4,7 +4,8 @@ from crispy_forms.bootstrap import InlineRadios
from crispy_forms.helper import FormHelper from crispy_forms.helper import FormHelper
from crispy_forms.layout import HTML, Button, Fieldset, Layout from crispy_forms.layout import HTML, Button, Fieldset, Layout
from django import forms from django import forms
from django.core.exceptions import ObjectDoesNotExist, ValidationError from django.core.exceptions import (MultipleObjectsReturned,
ObjectDoesNotExist, ValidationError)
from django.db import models from django.db import models
from django.forms import ModelForm from django.forms import ModelForm
from django.utils import timezone from django.utils import timezone
@ -153,7 +154,7 @@ class DocumentoAdministrativoFilterSet(django_filters.FilterSet):
model = DocumentoAdministrativo model = DocumentoAdministrativo
fields = ['tipo', fields = ['tipo',
'numero', 'numero',
'numero_protocolo', 'protocolo__numero',
'data', 'data',
'tramitacaoadministrativo__unidade_tramitacao_destino', 'tramitacaoadministrativo__unidade_tramitacao_destino',
'tramitacaoadministrativo__status'] 'tramitacaoadministrativo__status']
@ -172,7 +173,7 @@ class DocumentoAdministrativoFilterSet(django_filters.FilterSet):
row2 = to_row( row2 = to_row(
[('ano', 4), [('ano', 4),
('numero_protocolo', 4), ('protocolo__numero', 4),
('data', 4)]) ('data', 4)])
row3 = to_row( row3 = to_row(
@ -549,6 +550,10 @@ class DocumentoAdministrativoForm(ModelForm):
widget=forms.Select( widget=forms.Select(
attrs={'class': 'selector'})) attrs={'class': 'selector'}))
numero_protocolo = forms.IntegerField(required=False,
label=Protocolo._meta.
get_field('numero').verbose_name)
class Meta: class Meta:
model = DocumentoAdministrativo model = DocumentoAdministrativo
fields = ['tipo', fields = ['tipo',
@ -577,8 +582,8 @@ class DocumentoAdministrativoForm(ModelForm):
if not self.is_valid(): if not self.is_valid():
return cleaned_data return cleaned_data
numero_protocolo = cleaned_data['numero_protocolo'] numero_protocolo = self.data['numero_protocolo']
ano_protocolo = cleaned_data['ano_protocolo'] ano_protocolo = self.data['ano_protocolo']
# campos opcionais, mas que se informados devem ser válidos # campos opcionais, mas que se informados devem ser válidos
if numero_protocolo and ano_protocolo: if numero_protocolo and ano_protocolo:
@ -590,6 +595,11 @@ class DocumentoAdministrativoForm(ModelForm):
msg = _('Protocolo %s/%s inexistente.' % ( msg = _('Protocolo %s/%s inexistente.' % (
numero_protocolo, ano_protocolo)) numero_protocolo, ano_protocolo))
raise ValidationError(msg) raise ValidationError(msg)
except MultipleObjectsReturned:
msg = _(
'Existe mais de um Protocolo com este ano e número.' % (
numero_protocolo, ano_protocolo))
raise ValidationError(msg)
return self.cleaned_data return self.cleaned_data

19
sapl/protocoloadm/migrations/0002_remove_documentoadministrativo_numero_protocolo.py

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.3 on 2017-09-20 21:52
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('protocoloadm', '0001_initial'),
]
operations = [
migrations.RemoveField(
model_name='documentoadministrativo',
name='numero_protocolo',
),
]

3
sapl/protocoloadm/models.py

@ -120,8 +120,7 @@ class DocumentoAdministrativo(models.Model):
on_delete=models.PROTECT, on_delete=models.PROTECT,
verbose_name=_('Protocolo')) verbose_name=_('Protocolo'))
data = models.DateField(verbose_name=_('Data')) data = models.DateField(verbose_name=_('Data'))
numero_protocolo = models.PositiveIntegerField(
blank=True, null=True, verbose_name=_('Núm. Protocolo'))
interessado = models.CharField( interessado = models.CharField(
max_length=50, blank=True, verbose_name=_('Interessado')) max_length=50, blank=True, verbose_name=_('Interessado'))
autor = models.ForeignKey(Autor, blank=True, null=True, autor = models.ForeignKey(Autor, blank=True, null=True,

2
sapl/protocoloadm/views.py

@ -88,7 +88,7 @@ class DocumentoAdministrativoCrud(Crud):
class BaseMixin(Crud.BaseMixin): class BaseMixin(Crud.BaseMixin):
list_field_names = ['tipo', 'numero', 'ano', 'data', list_field_names = ['tipo', 'numero', 'ano', 'data',
'numero_protocolo', 'assunto', 'protocolo__numero', 'assunto',
'interessado', 'tramitacao', 'texto_integral'] 'interessado', 'tramitacao', 'texto_integral']
@property @property

2
sapl/relatorios/views.py

@ -956,7 +956,7 @@ def get_etiqueta_protocolos(prots):
dic['num_documento'] = '' dic['num_documento'] = ''
for documento in DocumentoAdministrativo.objects.filter( for documento in DocumentoAdministrativo.objects.filter(
numero_protocolo=p.numero): protocolo=p):
dic['num_documento'] = str(documento) dic['num_documento'] = str(documento)
dic['ident_processo'] = dic['num_materia'] or dic['num_documento'] dic['ident_processo'] = dic['num_materia'] or dic['num_documento']

5
sapl/sessao/forms.py

@ -116,6 +116,7 @@ class BancadaForm(ModelForm):
class ExpedienteMateriaForm(ModelForm): class ExpedienteMateriaForm(ModelForm):
_model = ExpedienteMateria _model = ExpedienteMateria
data_atual = timezone.now()
tipo_materia = forms.ModelChoiceField( tipo_materia = forms.ModelChoiceField(
label=_('Tipo Matéria'), label=_('Tipo Matéria'),
@ -128,7 +129,9 @@ class ExpedienteMateriaForm(ModelForm):
label='Número Matéria', required=True) label='Número Matéria', required=True)
ano_materia = forms.CharField( ano_materia = forms.CharField(
label='Ano Matéria', required=True) label='Ano Matéria',
initial=int(data_atual.year),
required=True)
data_ordem = forms.CharField( data_ordem = forms.CharField(
label='Data Sessão', label='Data Sessão',

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

@ -25,38 +25,23 @@ body
#ementa_texto #ementa_texto
{ {
font-family: Arial; font-family: Arial;
line-height: 175%; line-height: 150%;
border-style: none; border-style: none;
text-align: justify; text-align: justify;
padding: 0pt 5pt 0pt 0pt; padding: 0pt 5pt 0pt 0pt;
line-height: 140%; margin-right:100px;
font-size: small; font-size: small;
height:130px;
} }
#ficha_menor
{
background-color: transparent;
margin: -2pt 20pt 0pt 0pt;
position: relative;
width: 285pt;
height: 370pt;
}
#titulo #titulo
{ {
font-size: medium; font-size: medium;
margin-right:100px;
text-align: center; text-align: center;
} }
#ficha_maior
{
background-color: #9eddee;
margin:0pt;
position: relative;
width: 285pt;
height: 370pt;
}
#despacho_inicial #despacho_inicial
{ {
font-family: Arial; font-family: Arial;
@ -71,30 +56,38 @@ body
</style> </style>
<body style="margin-left:80px;margin-right:80px; margin-top: -50px"> <body style="margin-left:-50px;margin-right:180px; margin-top: -50px">
<div style="page-break-inside: avoid;"> <div style="page-break-inside: avoid;">
<justify> <justify>
<div id="titulo"> <div id="titulo">
<!-- Informa o processo --> <!-- Informa o processo -->
{% if materia.numeracao_set.first %} {% if materia.numeracao_set.first %}
<strong class="text_pdf">PROCESSO Nº: {{ materia.numeracao_set.first.numero_materia }}</strong><br><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><br> <strong class="text_pdf">PROCESSO Nº: {{ materia.numero }}</strong><br>
&nbsp; &nbsp;
{% endif %} {% endif %}
</div> </div>
<table border=0>
<!-- Informa o tipo da matéria --> <td height="60pt" valign=top>
<strong class="text_pdf">{{materia.tipo}}:</strong> <span class="text_pdf"> {{materia.numero}}/{{materia.ano}} </span><br> <!-- Informa o tipo da matéria -->
<strong class="text_pdf">{{materia.tipo}}:</strong> <span class="text_pdf"> {{materia.numero}} / {{materia.ano}} </span><br>
<!-- Informa a Data de Entrada --> </td>
<strong class="text_pdf">Data de entrada:</strong> <span class="text_pdf"> {{materia.data_apresentacao}}</span></br> </table>
<table border=0>
<td height="60pt" valign=top>
<!-- Informa a Data de Entrada -->
<strong class="text_pdf">Data de entrada:</strong> <span class="text_pdf"> {{materia.data_apresentacao}}</span></br>
</td>
</table>
<table border=0> <table border=0>
<td height="60pt" valign=top> <td height="60pt" valign=top>
<div id="ementa_texto"> <div>
<!-- Lista os autores --> <!-- Lista os autores -->
{% if materia.autoria_set.all %} {% if materia.autoria_set.all %}
<strong class="text_pdf">Autor:</strong> <strong class="text_pdf">Autor:</strong>
@ -111,18 +104,16 @@ body
</td> </td>
</table> </table>
<br><br><br>
<!-- Ementa --> <!-- Ementa -->
<table border=0> <table border=0>
<td height="160pt"> <td>
<div id="ementa_texto"> <div id="ementa_texto">
<strong class="text_pdf">Ementa:</strong> <span class="text_pdf">{{materia.ementa}}</span> <strong class="text_pdf">Ementa:</strong> <span class="text_pdf">{{materia.ementa}}</span>
</div> </div>
</td> </td>
</table> </table>
<br><br><br> <br>
<table border=0> <table border=0>
<td height="100pt"> <td height="100pt">
<div id="despacho_inicial"> <div id="despacho_inicial">
@ -134,8 +125,8 @@ body
</td> </td>
</table> </table>
<br> <br>
<strong></strong><br>
<strong>________________NORMA JURIDICA_________________</strong><br><br> <strong>________________NORMA JURIDICA_________________</strong><br><br><br>
<strong>_________________________________________________</strong> <strong>_________________________________________________</strong>
</div> </div>

2
sapl/templates/materia/materialegislativa_filter.html

@ -8,7 +8,7 @@
Pesquisa Textual Pesquisa Textual
</a> </a>
{% if perms.materia %} {% if perms.materia.add_materialegislativa %}
<a href="{% url 'sapl.materia:materialegislativa_create' %}" class="btn btn-default"> <a href="{% url 'sapl.materia:materialegislativa_create' %}" class="btn btn-default">
{% blocktrans with verbose_name=view.verbose_name %} Adicionar Matéria Legislativa {% endblocktrans %} {% blocktrans with verbose_name=view.verbose_name %} Adicionar Matéria Legislativa {% endblocktrans %}
</a> </a>

2
sapl/templates/protocoloadm/documentoadministrativo_filter.html

@ -7,7 +7,7 @@
{% block actions %} {% block actions %}
<div class="actions btn-group pull-right" role="group"> <div class="actions btn-group pull-right" role="group">
{% if perms.protocoloadm %} {% if perms.protocoloadm.add_documentoadministrativo %}
<a href="{% url 'sapl.protocoloadm:documentoadministrativo_create' %}" class="btn btn-default"> <a href="{% url 'sapl.protocoloadm:documentoadministrativo_create' %}" class="btn btn-default">
{% blocktrans with verbose_name=view.verbose_name %} Adicionar Documento Administrativo {% endblocktrans %} {% blocktrans with verbose_name=view.verbose_name %} Adicionar Documento Administrativo {% endblocktrans %}
</a> </a>

1
sapl/templates/protocoloadm/protocolo_filter.html

@ -44,7 +44,6 @@
{% if p.anulado %}<strong><font color="red">&nbsp;&nbsp;** NULO **</font></strong>{% endif %} {% if p.anulado %}<strong><font color="red">&nbsp;&nbsp;** NULO **</font></strong>{% endif %}
</br> </br>
<strong>Assunto:</strong> {{ p.assunto_ementa|default_if_none:"Não informado"}}</br> <strong>Assunto:</strong> {{ p.assunto_ementa|default_if_none:"Não informado"}}</br>
<strong>Data Protocolo:</strong> {{ p.data|date:"d/m/Y"|default_if_none:"Não informado" }} - Horário: {{ p.hora|date:"G:i:s" }}</br>
<strong>Data Protocolo:</strong> {{ p.data|date:"d/m/Y"|default_if_none:"Não informado" }} - Horário: {{ p.timestamp|localtime|date:"G:i:s" }}</br> <strong>Data Protocolo:</strong> {{ p.data|date:"d/m/Y"|default_if_none:"Não informado" }} - Horário: {{ p.timestamp|localtime|date:"G:i:s" }}</br>
{% if p.tipo_processo == 0 %} {% if p.tipo_processo == 0 %}

12
sapl/utils.py

@ -4,6 +4,7 @@ import os
import re import re
from functools import wraps from functools import wraps
from unicodedata import normalize as unicodedata_normalize from unicodedata import normalize as unicodedata_normalize
from operator import itemgetter
import django_filters import django_filters
import magic import magic
@ -651,3 +652,14 @@ def show_results_filter_set(qr):
return False return False
return True return True
def sort_lista_chave(lista, chave):
"""
:param lista: Uma list a ser ordenada .
:param chave: Algum atributo (chave) que está presente na lista e qual deve ser usado para a ordenação da nova
lista.
:return: A lista ordenada pela chave passada.
"""
lista_ordenada = sorted(lista, key=itemgetter(chave))
return lista_ordenada

20
setup.py

@ -10,6 +10,13 @@ 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>=1.9,<1.10',
# 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
# 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.1.0',
'django-braces==1.9.0', 'django-braces==1.9.0',
@ -20,24 +27,29 @@ install_requires = [
'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==2.5',
'django-sass-processor==0.4.6', 'django-sass-processor==0.5.4',
'django>=1.9,<1.10',
'djangorestframework', 'djangorestframework',
'drfdocs',
'easy-thumbnails==2.3', 'easy-thumbnails==2.3',
# 'git+git://github.com/interlegis/trml2pdf.git',
'libsass==0.11.1', 'libsass==0.11.1',
'psycopg2==2.6.2', 'psycopg2==2.6.2',
'python-decouple==3.0', 'python-decouple==3.0',
'pytz==2016.4', 'pytz==2016.4',
'pyyaml==3.11', 'pyyaml==3.11',
'rtyaml==0.0.3', 'rtyaml==0.0.3',
'textract==1.5.0',
'unipath==1.1', 'unipath==1.1',
'pysolr==3.6.0',
'python-magic==0.4.12', 'python-magic==0.4.12',
'gunicorn==19.6.0', 'gunicorn==19.6.0',
# git+git://github.com/interlegis/trml2pdf.git 'django-reversion==2.0.8',
'WeasyPrint==0.30',
'whoosh==2.7.4'
] ]
setup( setup(
name='interlegis-sapl', name='interlegis-sapl',
version='3.1.1-alpha', version='3.1.24-BETA',
packages=find_packages(), packages=find_packages(),
include_package_data=True, include_package_data=True,
license='GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007', license='GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007',

Loading…
Cancel
Save