Browse Source

Refatora crud usando mixins

Torna a api mais flexível.
Onde antes estendíamos algumas CBVs diretamente agora usamos mixins.
pull/237/head
Marcio Mazza 9 years ago
parent
commit
ae1149d936
  1. 10
      comissoes/views.py
  2. 16
      compilacao/views.py
  3. 424
      crud.py
  4. 61
      crud_tests/test_flux.py
  5. 4
      crud_tests/urls.py
  6. 12
      crud_tests/views.py
  7. 6
      lexml/views.py
  8. 40
      materia/views.py
  9. 12
      norma/views.py
  10. 4
      painel/views.py
  11. 28
      parlamentares/views.py
  12. 16
      protocoloadm/views.py
  13. 16
      sessao/views.py

10
comissoes/views.py

@ -5,7 +5,7 @@ from django.views.generic import ListView
from django.views.generic.edit import FormMixin from django.views.generic.edit import FormMixin
from vanilla import GenericView from vanilla import GenericView
from crud import build_crud from crud import Crud
from materia.models import Tramitacao from materia.models import Tramitacao
from parlamentares.models import Filiacao from parlamentares.models import Filiacao
@ -14,28 +14,28 @@ from .forms import (CadastrarComissaoForm, ComposicaoForm,
from .models import (CargoComissao, Comissao, Composicao, Participacao, from .models import (CargoComissao, Comissao, Composicao, Participacao,
Periodo, TipoComissao) Periodo, TipoComissao)
cargo_crud = build_crud( cargo_crud = Crud(
CargoComissao, 'cargo_comissao', [ CargoComissao, 'cargo_comissao', [
[_('Período de composição de Comissão'), [_('Período de composição de Comissão'),
[('nome', 10), ('unico', 2)]], [('nome', 10), ('unico', 2)]],
]) ])
periodo_composicao_crud = build_crud( periodo_composicao_crud = Crud(
Periodo, 'periodo_composicao_comissao', [ Periodo, 'periodo_composicao_comissao', [
[_('Cargo de Comissão'), [_('Cargo de Comissão'),
[('data_inicio', 6), ('data_fim', 6)]], [('data_inicio', 6), ('data_fim', 6)]],
]) ])
tipo_comissao_crud = build_crud( tipo_comissao_crud = Crud(
TipoComissao, 'tipo_comissao', [ TipoComissao, 'tipo_comissao', [
[_('Tipo Comissão'), [_('Tipo Comissão'),
[('nome', 9), ('sigla', 3)], [('nome', 9), ('sigla', 3)],
[('dispositivo_regimental', 9), ('natureza', 3)]], [('dispositivo_regimental', 9), ('natureza', 3)]],
]) ])
comissao_crud = build_crud( comissao_crud = Crud(
Comissao, 'modulo_comissoes', [ Comissao, 'modulo_comissoes', [
[_('Dados Básicos'), [_('Dados Básicos'),

16
compilacao/views.py

@ -27,7 +27,7 @@ from compilacao.models import (Dispositivo, Nota,
TextoArticulado, TipoDispositivo, TipoNota, TextoArticulado, TipoDispositivo, TipoNota,
TipoPublicacao, TipoTextoArticulado, TipoVide, TipoPublicacao, TipoTextoArticulado, TipoVide,
VeiculoPublicacao, Vide) VeiculoPublicacao, Vide)
from crud import NO_ENTRIES_MSG, build_crud, make_pagination from crud import Crud, CrudListMixin, make_pagination
DISPOSITIVO_SELECT_RELATED = ( DISPOSITIVO_SELECT_RELATED = (
'tipo_dispositivo', 'tipo_dispositivo',
@ -42,7 +42,7 @@ DISPOSITIVO_SELECT_RELATED = (
'ta_publicado', 'ta_publicado',
'ta',) 'ta',)
tipo_nota_crud = build_crud( tipo_nota_crud = Crud(
TipoNota, 'tipo_nota', [ TipoNota, 'tipo_nota', [
[_('Tipo da Nota'), [_('Tipo da Nota'),
@ -50,14 +50,14 @@ tipo_nota_crud = build_crud(
[('modelo', 12)]], [('modelo', 12)]],
]) ])
tipo_vide_crud = build_crud( tipo_vide_crud = Crud(
TipoVide, 'tipo_vide', [ TipoVide, 'tipo_vide', [
[_('Tipo de Vide'), [_('Tipo de Vide'),
[('sigla', 2), ('nome', 10)]], [('sigla', 2), ('nome', 10)]],
]) ])
tipo_publicacao_crud = build_crud( tipo_publicacao_crud = Crud(
TipoPublicacao, 'tipo_publicacao', [ TipoPublicacao, 'tipo_publicacao', [
[_('Tipo de Publicação'), [_('Tipo de Publicação'),
@ -65,7 +65,7 @@ tipo_publicacao_crud = build_crud(
]) ])
veiculo_publicacao_crud = build_crud( veiculo_publicacao_crud = Crud(
VeiculoPublicacao, 'veiculo_publicacao', [ VeiculoPublicacao, 'veiculo_publicacao', [
[_('Veículo de Publicação'), [_('Veículo de Publicação'),
@ -73,7 +73,7 @@ veiculo_publicacao_crud = build_crud(
]) ])
perfil_estr_txt_norm = build_crud( perfil_estr_txt_norm = Crud(
PerfilEstruturalTextoArticulado, 'perfil_estrutural', [ PerfilEstruturalTextoArticulado, 'perfil_estrutural', [
[_('Perfil Estrutural de Textos Articulados'), [_('Perfil Estrutural de Textos Articulados'),
@ -81,7 +81,7 @@ perfil_estr_txt_norm = build_crud(
]) ])
tipo_dispositivo_crud = build_crud( tipo_dispositivo_crud = Crud(
TipoDispositivo, 'tipo_dispositivo', [ TipoDispositivo, 'tipo_dispositivo', [
[_('Dados Básicos'), [_('Dados Básicos'),
@ -1740,7 +1740,7 @@ class PublicacaoListView(ListView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(PublicacaoListView, self).get_context_data(**kwargs) context = super(PublicacaoListView, self).get_context_data(**kwargs)
context['NO_ENTRIES_MSG'] = NO_ENTRIES_MSG context['NO_ENTRIES_MSG'] = CrudListMixin.no_entries_msg
return context return context

424
crud.py

@ -2,16 +2,13 @@ from braces.views import FormMessagesMixin
from crispy_forms.helper import FormHelper from crispy_forms.helper import FormHelper
from django import forms from django import forms
from django.conf.urls import url from django.conf.urls import url
from django.core.urlresolvers import reverse, reverse_lazy from django.core.urlresolvers import reverse
from django.utils.functional import cached_property
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.views.generic import (CreateView, DeleteView, DetailView, ListView, from django.views.generic import (CreateView, DeleteView, DetailView, ListView,
UpdateView) UpdateView)
from sapl.layout import SaplFormLayout from sapl.layout import SaplFormLayout
NO_ENTRIES_MSG = _('Não existem registros')
def from_to(start, end): def from_to(start, end):
return list(range(start, end + 1)) return list(range(start, end + 1))
@ -51,199 +48,248 @@ def get_field_display(obj, fieldname):
value = getattr(obj, 'get_%s_display' % fieldname)() value = getattr(obj, 'get_%s_display' % fieldname)()
else: else:
value = getattr(obj, fieldname) value = getattr(obj, fieldname)
if value is None: if value is None:
display = '' display = ''
elif 'date' in str(type(value)): elif 'date' in str(type(value)):
display = value.strftime("%d/%m/%Y") display = value.strftime("%d/%m/%Y") # TODO: localize
elif 'bool' in str(type(value)): elif 'bool' in str(type(value)):
display = 'Sim' if value else 'Não' display = 'Sim' if value else 'Não'
else: else:
display = str(value) display = str(value)
return verbose_name, display return verbose_name, display
class CrispyLayoutFormMixin(object):
def get_form_class(self):
layout = self.layout
class CrispyForm(forms.ModelForm):
class Meta:
model = self.model
exclude = []
def __init__(self, *args, **kwargs):
super(CrispyForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.layout = SaplFormLayout(*layout)
return CrispyForm
@property
def list_field_names(self):
'''The list of field names to display on table
This base implementation returns the field names
in the first fieldset of the layout.
'''
rows = self.layout[0][1:]
return [fieldname for row in rows for fieldname, __ in row]
def get_column(self, fieldname, span):
obj = self.get_object()
verbose_name, text = get_field_display(obj, fieldname)
return {
'id': fieldname,
'span': span,
'verbose_name': verbose_name,
'text': text,
}
@property
def fieldsets(self):
return [
{'legend': legend,
'rows': [[self.get_column(fieldname, span)
for fieldname, span in row]
for row in rows]
} for legend, *rows in self.layout]
class BaseCrudMixin(CrispyLayoutFormMixin):
@property
def namespace(self):
return self.model._meta.model_name
def resolve_url(self, url_name, args=None):
return reverse('%s:%s' % (self.namespace, url_name), args=args)
@property
def list_url(self):
return self.resolve_url('list')
@property
def create_url(self):
return self.resolve_url('create')
@property
def detail_url(self):
return self.resolve_url('detail', args=(self.object.id,))
@property
def update_url(self):
return self.resolve_url('update', args=(self.object.id,))
@property
def delete_url(self):
return self.resolve_url('delete', args=(self.object.id,))
def get_template_names(self):
names = super(BaseCrudMixin, self).get_template_names()
names.append("crud/%s.html" %
self.template_name_suffix.lstrip('_'))
return names
@property
def verbose_name(self):
return self.model._meta.verbose_name
@property
def verbose_name_plural(self):
return self.model._meta.verbose_name_plural
class CrudListMixin():
paginate_by = 10
no_entries_msg = _('Nenhum registro encontrado.')
@property
def title(self):
return self.verbose_name_plural
def _as_row(self, obj):
return [
(get_field_display(obj, name)[1], obj.pk if i == 0 else None)
for i, name in enumerate(self.list_field_names)]
def get_context_data(self, **kwargs):
context = super(CrudListMixin, self).get_context_data(**kwargs)
# pagination
page_obj = context['page_obj']
paginator = context['paginator']
context['page_range'] = make_pagination(
page_obj.number, paginator.num_pages)
# rows
object_list = context['object_list']
context['rows'] = [self._as_row(obj) for obj in object_list]
context['headers'] = [
self.model._meta.get_field(fieldname).verbose_name
for fieldname in self.list_field_names]
context['NO_ENTRIES_MSG'] = self.no_entries_msg
return context
def make_form_invalid_message(msg):
return '%s %s' % (_('Formulário inválido.'), msg)
class CrudCreateMixin(FormMessagesMixin):
form_valid_message = _('Registro criado com sucesso!')
form_invalid_message = make_form_invalid_message(
_('O registro não foi criado.'))
@property
def title(self):
return _('Adicionar %(verbose_name)s') % {
'verbose_name': self.verbose_name}
@property
def cancel_url(self):
return self.list_url
def get_success_url(self):
return self.detail_url
class CrudDetailMixin():
@property
def title(self):
# TODO: can we just use view.object in the templates????
return str(self.object)
class CrudUpdateMixin(FormMessagesMixin):
form_valid_message = _('Registro alterado com sucesso!')
form_invalid_message = make_form_invalid_message(
_('Suas alterações não foram salvas.'))
@property
def title(self):
return str(self.object)
@property
def cancel_url(self):
return self.detail_url
def get_success_url(self):
return self.detail_url
class CrudDeleteMixin(FormMessagesMixin):
form_valid_message = _('Registro excluído com sucesso!')
form_invalid_message = make_form_invalid_message(
_('O registro não foi excluído.'))
def get_success_url(self):
return self.list_url
class Crud(object): class Crud(object):
pass
def __init__(self, model, help_path, layout,
crud_mixin=BaseCrudMixin,
def build_crud(model, help_path, layout): crud_list_mixin=CrudListMixin,
crud = Crud() crud_create_mixin=CrudCreateMixin,
crud.model = model crud_detail_mixin=CrudDetailMixin,
crud.help_path = help_path crud_update_mixin=CrudUpdateMixin,
crud.namespace = model._meta.model_name crud_delete_mixin=CrudDeleteMixin,
):
class CrispyForm(forms.ModelForm):
class CrudMixin(crud_mixin):
class Meta: pass
model = crud.model CrudMixin.model = model
exclude = [] CrudMixin.help_path = help_path
CrudMixin.layout = layout
def __init__(self, *args, **kwargs):
super(CrispyForm, self).__init__(*args, **kwargs) class CrudListView(CrudMixin, crud_list_mixin, ListView):
self.helper = FormHelper() pass
self.helper.layout = SaplFormLayout(*layout)
class CrudCreateView(CrudMixin, crud_create_mixin, CreateView):
crud.model_form = CrispyForm pass
def in_namespace(url_name): class CrudDetailView(CrudMixin, crud_detail_mixin, DetailView):
return '%s:%s' % (crud.namespace, url_name) pass
def make_form_invalid_message(msg): class CrudUpdateView(CrudMixin, crud_update_mixin, UpdateView):
return '%s %s' % (_('Formulário inválido.'), msg) pass
class BaseMixin(object): class CrudDeleteView(CrudMixin, crud_delete_mixin, DeleteView):
model = crud.model pass
verbose_name = crud.model._meta.verbose_name self.urlpatterns = [
verbose_name_plural = crud.model._meta.verbose_name_plural url(r'^$', CrudListView.as_view(), name='list'),
url(r'^create$', CrudCreateView.as_view(), name='create'),
list_url = reverse_lazy(in_namespace('list')) url(r'^(?P<pk>\d+)$', CrudDetailView.as_view(), name='detail'),
create_url = reverse_lazy(in_namespace('create')) url(r'^(?P<pk>\d+)/edit$',
help_path = crud.help_path # FIXME CrudUpdateView.as_view(), name='update'),
url(r'^(?P<pk>\d+)/delete$',
def get_url_for_this_object(self, url_name): CrudDeleteView.as_view(), name='delete'),
return reverse(in_namespace(url_name), args=(self.object.id,)) ]
@property self.namespace = CrudMixin().namespace
def detail_url(self): self.urls = self.urlpatterns, self.namespace, self.namespace
return self.get_url_for_this_object('detail')
# FIXME Refatorar código que precisa desse atributo e remover
@property self.CrudDetailView = CrudDetailView
def update_url(self):
return self.get_url_for_this_object('update')
@property
def delete_url(self):
return self.get_url_for_this_object('delete')
def get_template_names(self):
names = super(BaseMixin, self).get_template_names()
names.append("crud/%s.html" %
self.template_name_suffix.lstrip('_'))
return names
class CrudListView(BaseMixin, ListView):
title = BaseMixin.verbose_name_plural
paginate_by = 10
no_entries_msg = NO_ENTRIES_MSG
@cached_property
def field_names(self):
'''The list of field names to display on table
This base implementation returns the field names
in the first fieldset of the layout.
'''
rows = layout[0][1:]
return [fieldname for row in rows for fieldname, __ in row]
def get_rows(self, object_list):
return [[(get_field_display(obj, name)[1],
obj.pk if i == 0 else None)
for i, name in enumerate(self.field_names)]
for obj in object_list
]
def get_context_data(self, **kwargs):
context = super(CrudListView, self).get_context_data(**kwargs)
paginator = context['paginator']
page_obj = context['page_obj']
context['page_range'] = make_pagination(
page_obj.number, paginator.num_pages)
object_list = context['object_list']
context['headers'] = [
self.model._meta.get_field(fieldname).verbose_name
for fieldname in self.field_names]
context['rows'] = self.get_rows(object_list)
context['NO_ENTRIES_MSG'] = NO_ENTRIES_MSG
return context
class CrudCreateView(BaseMixin, FormMessagesMixin, CreateView):
form_class = crud.model_form
title = _('Adicionar %(verbose_name)s') % {
'verbose_name': BaseMixin.verbose_name}
form_valid_message = _('Registro criado com sucesso!')
form_invalid_message = make_form_invalid_message(
_('O registro não foi criado.'))
cancel_url = BaseMixin.list_url
def form_invalid(self, form):
"""
If the form is invalid, re-render the context data with the
data-filled form and errors.
"""
return self.render_to_response(self.get_context_data(form=form))
def get_success_url(self):
return self.detail_url
class CrudDetailView(BaseMixin, DetailView):
@property
def title(self):
return self.get_object()
def get_column(self, fieldname, span):
obj = self.get_object()
verbose_name, text = get_field_display(obj, fieldname)
return {
'id': fieldname,
'span': span,
'verbose_name': verbose_name,
'text': text,
}
@property
def fieldsets(self):
return [
{'legend': legend,
'rows': [[self.get_column(fieldname, span)
for fieldname, span in row]
for row in rows]
} for legend, *rows in layout]
class CrudUpdateView(BaseMixin, FormMessagesMixin, UpdateView):
form_class = crud.model_form
form_valid_message = _('Registro alterado com sucesso!')
form_invalid_message = make_form_invalid_message(
_('Suas alterações não foram salvas.'))
@property
def title(self):
return self.get_object()
def get_success_url(self):
return self.detail_url
def cancel_url(self):
return self.detail_url
class CrudDeleteView(BaseMixin, FormMessagesMixin, DeleteView):
form_valid_message = _('Registro excluído com sucesso!')
form_invalid_message = make_form_invalid_message(
_('O registro não foi excluído.'))
def get_success_url(self):
return self.list_url
crud.CrudListView = CrudListView
crud.CrudCreateView = CrudCreateView
crud.CrudDetailView = CrudDetailView
crud.CrudUpdateView = CrudUpdateView
crud.CrudDeleteView = CrudDeleteView
# XXX transform into a property of Crud to enable override
crud.urlpatterns = [
url(r'^$', CrudListView.as_view(), name='list'),
url(r'^create$', CrudCreateView.as_view(), name='create'),
url(r'^(?P<pk>\d+)$', CrudDetailView.as_view(), name='detail'),
url(r'^(?P<pk>\d+)/edit$',
CrudUpdateView.as_view(), name='update'),
url(r'^(?P<pk>\d+)/delete$',
CrudDeleteView.as_view(), name='delete'),
]
crud.urls = crud.urlpatterns, crud.namespace, crud.namespace
return crud

61
crud_tests/test_flux.py

@ -2,29 +2,15 @@ import pytest
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from model_mommy import mommy from model_mommy import mommy
from crud import (NO_ENTRIES_MSG, build_crud, from_to, get_field_display, from crud import (CrispyLayoutFormMixin, CrudListMixin, from_to,
make_pagination) get_field_display, make_pagination)
from .models import Continent, Country from .models import Continent, Country
from .views import country_crud from .views import CountryCrudListMixin
pytestmark = pytest.mark.django_db pytestmark = pytest.mark.django_db
@pytest.mark.parametrize("layout, result", [
([['Dados Complementares']], []), # missing rows definition
([['Basic', [('name', 9), ('population', 3)]],
['More Details', [('description', 12)]],
],
['name', 'population']),
])
def test_listview_get_fieldnames(layout, result):
crud = build_crud(Country, 'stub_help_path', layout)
view = crud.CrudListView()
assert view.field_names == result
__ = None # for test readability __ = None # for test readability
@ -82,21 +68,46 @@ def test_get_field_display():
assert get_field_display(stub, 'population')[1] == '' assert get_field_display(stub, 'population')[1] == ''
def test_crud_detail_view_fieldsets(monkeypatch): @pytest.mark.parametrize("_layout, result", [
([['Dados Complementares']], []), # missing rows definition
([['Basic', [('name', 9), ('population', 3)]],
['More Details', [('description', 12)]],
],
['name', 'population']),
])
def test_layout_fieldnames(_layout, result):
class StubMixin(CrispyLayoutFormMixin):
layout = _layout
view = StubMixin()
assert view.list_field_names == result
def test_layout_detail_fieldsets(monkeypatch):
view = country_crud.CrudDetailView()
stub = mommy.make(Country, stub = mommy.make(Country,
name='Brazil', name='Brazil',
continent__name='South America', continent__name='South America',
is_cold=False) is_cold=False)
class StubMixin(CrispyLayoutFormMixin):
layout = [['Basic Data',
[('name', 9), ('continent', 3)],
[('population', 6), ('is_cold', 6)]
],
['More Details', [('description', 12)]],
]
def get_object(self):
return stub
view = StubMixin()
# to test None displayed as empty string # to test None displayed as empty string
assert stub.population is None assert stub.population is None
def get_object():
return stub
monkeypatch.setattr(view, 'get_object', get_object)
assert view.fieldsets == [ assert view.fieldsets == [
{'legend': 'Basic Data', {'legend': 'Basic Data',
'rows': [[{'id': 'name', 'rows': [[{'id': 'name',
@ -136,7 +147,7 @@ def assert_h1(res, title):
assert res.html.find('main').find('h1').text == title assert res.html.find('main').find('h1').text == title
NO_ENTRIES_MSG = str(NO_ENTRIES_MSG) # "unlazy" NO_ENTRIES_MSG = str(CrudListMixin.no_entries_msg) # "unlazy"
def assert_on_list_page(res): def assert_on_list_page(res):
@ -181,7 +192,7 @@ def test_flux_list_paginate_detail(
population=population, population=population,
is_cold=is_cold) is_cold=is_cold)
country_crud.CrudListView.paginate_by = page_size CountryCrudListMixin.paginate_by = page_size
res = app.get('/countries/') res = app.get('/countries/')

4
crud_tests/urls.py

@ -3,7 +3,5 @@ from django.conf.urls import include, url
from .views import country_crud from .views import country_crud
urlpatterns = [ urlpatterns = [
url(r'^countries/', include(country_crud.urlpatterns, url(r'^countries/', include(country_crud.urls)),
country_crud.namespace,
country_crud.namespace)),
] ]

12
crud_tests/views.py

@ -1,12 +1,18 @@
from crud import build_crud from crud import Crud, CrudListMixin
from .models import Country from .models import Country
country_crud = build_crud(
class CountryCrudListMixin(CrudListMixin):
paginate_by = 10
country_crud = Crud(
Country, 'help_path', [ Country, 'help_path', [
['Basic Data', ['Basic Data',
[('name', 9), ('continent', 3)], [('name', 9), ('continent', 3)],
[('population', 6), ('is_cold', 6)] [('population', 6), ('is_cold', 6)]
], ],
['More Details', [('description', 12)]], ['More Details', [('description', 12)]],
]) ],
crud_list_mixin=CountryCrudListMixin)

6
lexml/views.py

@ -1,10 +1,10 @@
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from crud import build_crud from crud import Crud
from .models import LexmlProvedor, LexmlPublicador from .models import LexmlProvedor, LexmlPublicador
lexml_provedor_crud = build_crud( lexml_provedor_crud = Crud(
LexmlProvedor, 'lexml_provedor', [ LexmlProvedor, 'lexml_provedor', [
[_('Provedor Lexml'), [_('Provedor Lexml'),
@ -16,7 +16,7 @@ lexml_provedor_crud = build_crud(
]) ])
lexml_publicador_crud = build_crud( lexml_publicador_crud = Crud(
LexmlPublicador, 'lexml_publicador', [ LexmlPublicador, 'lexml_publicador', [
[_('Publicador Lexml'), [_('Publicador Lexml'),

40
materia/views.py

@ -14,7 +14,7 @@ from vanilla.views import GenericView
from comissoes.models import Comissao, Composicao from comissoes.models import Comissao, Composicao
from compilacao.views import IntegracaoTaView from compilacao.views import IntegracaoTaView
from crud import build_crud, make_pagination from crud import Crud, make_pagination
from norma.models import LegislacaoCitada, NormaJuridica, TipoNormaJuridica from norma.models import LegislacaoCitada, NormaJuridica, TipoNormaJuridica
from parlamentares.models import Partido from parlamentares.models import Partido
from sessao.models import AcompanharMateria from sessao.models import AcompanharMateria
@ -31,42 +31,42 @@ from .models import (Anexada, Autor, Autoria, DespachoInicial,
TipoFimRelatoria, TipoMateriaLegislativa, TipoProposicao, TipoFimRelatoria, TipoMateriaLegislativa, TipoProposicao,
Tramitacao, UnidadeTramitacao) Tramitacao, UnidadeTramitacao)
origem_crud = build_crud( origem_crud = Crud(
Origem, 'origem', [ Origem, 'origem', [
[_('Origem'), [_('Origem'),
[('nome', 8), ('sigla', 4)]], [('nome', 8), ('sigla', 4)]],
]) ])
tipo_materia_crud = build_crud( tipo_materia_crud = Crud(
TipoMateriaLegislativa, 'tipo_materia_legislativa', [ TipoMateriaLegislativa, 'tipo_materia_legislativa', [
[_('Tipo Matéria Legislativa'), [_('Tipo Matéria Legislativa'),
[('sigla', 4), ('descricao', 8)]], [('sigla', 4), ('descricao', 8)]],
]) ])
regime_tramitacao_crud = build_crud( regime_tramitacao_crud = Crud(
RegimeTramitacao, 'regime_tramitacao', [ RegimeTramitacao, 'regime_tramitacao', [
[_('Tipo de Documento'), [_('Tipo de Documento'),
[('descricao', 12)]], [('descricao', 12)]],
]) ])
tipo_documento_crud = build_crud( tipo_documento_crud = Crud(
TipoDocumento, 'tipo_documento', [ TipoDocumento, 'tipo_documento', [
[_('Regime Tramitação'), [_('Regime Tramitação'),
[('descricao', 12)]], [('descricao', 12)]],
]) ])
tipo_fim_relatoria_crud = build_crud( tipo_fim_relatoria_crud = Crud(
TipoFimRelatoria, 'fim_relatoria', [ TipoFimRelatoria, 'fim_relatoria', [
[_('Tipo Fim de Relatoria'), [_('Tipo Fim de Relatoria'),
[('descricao', 12)]], [('descricao', 12)]],
]) ])
materia_legislativa_crud = build_crud( materia_legislativa_crud = Crud(
MateriaLegislativa, '', [ MateriaLegislativa, '', [
[_('Identificação Básica'), [_('Identificação Básica'),
@ -95,7 +95,7 @@ materia_legislativa_crud = build_crud(
[('observacao', 12)]], [('observacao', 12)]],
]) ])
Anexada_crud = build_crud( Anexada_crud = Crud(
Anexada, '', [ Anexada, '', [
[_('Matéria Legislativa'), [_('Matéria Legislativa'),
@ -111,14 +111,14 @@ Anexada_crud = build_crud(
[('data_anexacao', 6), ('data_desanexacao', 6)]], [('data_anexacao', 6), ('data_desanexacao', 6)]],
]) ])
tipo_autor_crud = build_crud( tipo_autor_crud = Crud(
TipoAutor, 'tipo_autor', [ TipoAutor, 'tipo_autor', [
[_('Tipo Autor'), [_('Tipo Autor'),
[('descricao', 12)]], [('descricao', 12)]],
]) ])
autor_crud = build_crud( autor_crud = Crud(
Autor, 'autor', [ Autor, 'autor', [
[_('Autor'), [_('Autor'),
@ -126,7 +126,7 @@ autor_crud = build_crud(
[('username', 12)]], [('username', 12)]],
]) ])
autoria_crud = build_crud( autoria_crud = Crud(
Autoria, '', [ Autoria, '', [
[_('Autoria'), [_('Autoria'),
@ -135,7 +135,7 @@ autoria_crud = build_crud(
('primeiro_autor', 4)]], ('primeiro_autor', 4)]],
]) ])
documento_acessorio_crud = build_crud( documento_acessorio_crud = Crud(
DocumentoAcessorio, '', [ DocumentoAcessorio, '', [
[_('Documento Acessório'), [_('Documento Acessório'),
@ -146,7 +146,7 @@ documento_acessorio_crud = build_crud(
[('txt_observacao_FIXME', 12)]], [('txt_observacao_FIXME', 12)]],
]) ])
numeracao_crud = build_crud( numeracao_crud = Crud(
Numeracao, '', [ Numeracao, '', [
[_('Numeração'), [_('Numeração'),
@ -154,7 +154,7 @@ numeracao_crud = build_crud(
[('ano_materia', 6), ('data_materia', 6)]], [('ano_materia', 6), ('data_materia', 6)]],
]) ])
orgao_crud = build_crud( orgao_crud = Crud(
Orgao, 'orgao', [ Orgao, 'orgao', [
[_('Órgão'), [_('Órgão'),
@ -165,7 +165,7 @@ orgao_crud = build_crud(
('unidade_deliberativa', 2)]], ('unidade_deliberativa', 2)]],
]) ])
relatoria_crud = build_crud( relatoria_crud = Crud(
Relatoria, '', [ Relatoria, '', [
[_('Relatoria'), [_('Relatoria'),
@ -174,7 +174,7 @@ relatoria_crud = build_crud(
[('data_destituicao_relator', 6), ('tipo_fim_relatoria', 6)]], [('data_destituicao_relator', 6), ('tipo_fim_relatoria', 6)]],
]) ])
tipo_proposicao_crud = build_crud( tipo_proposicao_crud = Crud(
TipoProposicao, 'tipo_proposicao', [ TipoProposicao, 'tipo_proposicao', [
[_('Tipo Proposição'), [_('Tipo Proposição'),
@ -183,7 +183,7 @@ tipo_proposicao_crud = build_crud(
[('modelo', 12)]], [('modelo', 12)]],
]) ])
proposicao_crud = build_crud( proposicao_crud = Crud(
Proposicao, '', [ Proposicao, '', [
[_('Proposição'), [_('Proposição'),
@ -195,7 +195,7 @@ proposicao_crud = build_crud(
[('nom_arquivo_FIXME', 6), ('modelo_FIXME', 6)]], [('nom_arquivo_FIXME', 6), ('modelo_FIXME', 6)]],
]) ])
status_tramitacao_crud = build_crud( status_tramitacao_crud = Crud(
StatusTramitacao, 'status_tramitacao', [ StatusTramitacao, 'status_tramitacao', [
[_('Status Tramitação'), [_('Status Tramitação'),
@ -204,7 +204,7 @@ status_tramitacao_crud = build_crud(
('descricao', 7)]], ('descricao', 7)]],
]) ])
unidade_tramitacao_crud = build_crud( unidade_tramitacao_crud = Crud(
UnidadeTramitacao, 'unidade_tramitacao', [ UnidadeTramitacao, 'unidade_tramitacao', [
[_('Unidade Tramitação'), [_('Unidade Tramitação'),
@ -213,7 +213,7 @@ unidade_tramitacao_crud = build_crud(
[('parlamentar', 12)]], [('parlamentar', 12)]],
]) ])
tramitacao_crud = build_crud( tramitacao_crud = Crud(
Tramitacao, '', [ Tramitacao, '', [
[_('Tramitação'), [_('Tramitação'),

12
norma/views.py

@ -8,21 +8,21 @@ from django.views.generic.edit import FormMixin
from vanilla.views import GenericView from vanilla.views import GenericView
from compilacao.views import IntegracaoTaView from compilacao.views import IntegracaoTaView
from crud import build_crud from crud import Crud
from materia.models import MateriaLegislativa, TipoMateriaLegislativa from materia.models import MateriaLegislativa, TipoMateriaLegislativa
from .forms import NormaJuridicaForm from .forms import NormaJuridicaForm
from .models import (AssuntoNorma, LegislacaoCitada, NormaJuridica, from .models import (AssuntoNorma, LegislacaoCitada, NormaJuridica,
TipoNormaJuridica) TipoNormaJuridica)
assunto_norma_crud = build_crud( assunto_norma_crud = Crud(
AssuntoNorma, 'assunto_norma_juridica', [ AssuntoNorma, 'assunto_norma_juridica', [
[_('Assunto Norma Jurídica'), [_('Assunto Norma Jurídica'),
[('assunto', 6), ('descricao', 6)]], [('assunto', 6), ('descricao', 6)]],
]) ])
tipo_norma_crud = build_crud( tipo_norma_crud = Crud(
TipoNormaJuridica, 'tipo_norma_juridica', [ TipoNormaJuridica, 'tipo_norma_juridica', [
[_('Tipo Norma Jurídica'), [_('Tipo Norma Jurídica'),
@ -31,7 +31,7 @@ tipo_norma_crud = build_crud(
('equivalente_lexml', 4)]], ('equivalente_lexml', 4)]],
]) ])
norma_crud = build_crud( norma_crud = Crud(
NormaJuridica, '', [ NormaJuridica, '', [
@ -51,7 +51,7 @@ norma_crud = build_crud(
[('observacao', 12)]], [('observacao', 12)]],
]) ])
norma_temporario_crud = build_crud( norma_temporario_crud = Crud(
NormaJuridica, 'normajuridica', [ NormaJuridica, 'normajuridica', [
[_('Identificação Básica'), [_('Identificação Básica'),
@ -60,7 +60,7 @@ norma_temporario_crud = build_crud(
]) ])
legislacao_citada_crud = build_crud( legislacao_citada_crud = Crud(
LegislacaoCitada, '', [ LegislacaoCitada, '', [
[_('Legislação Citada'), [_('Legislação Citada'),

4
painel/views.py

@ -5,7 +5,7 @@ from django.http import HttpResponse, JsonResponse
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 crud import build_crud from crud import Crud
from painel.models import Painel from painel.models import Painel
from parlamentares.models import Filiacao from parlamentares.models import Filiacao
from sessao.models import (ExpedienteMateria, OrdemDia, PresencaOrdemDia, from sessao.models import (ExpedienteMateria, OrdemDia, PresencaOrdemDia,
@ -14,7 +14,7 @@ from sessao.models import (ExpedienteMateria, OrdemDia, PresencaOrdemDia,
from .models import Cronometro from .models import Cronometro
cronometro_painel_crud = build_crud( cronometro_painel_crud = Crud(
Cronometro, '', [ Cronometro, '', [
[_('Cronometro'), [_('Cronometro'),

28
parlamentares/views.py

@ -11,7 +11,7 @@ from django.utils.translation import ugettext_lazy as _
from django.views.generic.edit import FormMixin from django.views.generic.edit import FormMixin
from vanilla import GenericView from vanilla import GenericView
from crud import build_crud from crud import Crud
from .forms import (DependenteEditForm, DependenteForm, FiliacaoEditForm, from .forms import (DependenteEditForm, DependenteForm, FiliacaoEditForm,
FiliacaoForm, MandatoEditForm, MandatoForm, FiliacaoForm, MandatoEditForm, MandatoForm,
@ -22,7 +22,7 @@ from .models import (CargoMesa, Coligacao, ComposicaoMesa, Dependente,
Parlamentar, Partido, SessaoLegislativa, SituacaoMilitar, Parlamentar, Partido, SessaoLegislativa, SituacaoMilitar,
TipoAfastamento, TipoDependente) TipoAfastamento, TipoDependente)
cargo_mesa_crud = build_crud( cargo_mesa_crud = Crud(
CargoMesa, 'cargo_mesa', [ CargoMesa, 'cargo_mesa', [
[_('Cargo na Mesa'), [_('Cargo na Mesa'),
@ -30,14 +30,14 @@ cargo_mesa_crud = build_crud(
('unico', 2)]], ('unico', 2)]],
]) ])
legislatura_crud = build_crud( legislatura_crud = Crud(
Legislatura, 'tabelas_auxiliares#legislatura', [ Legislatura, 'tabelas_auxiliares#legislatura', [
[_('Legislatura'), [_('Legislatura'),
[('data_inicio', 4), ('data_fim', 4), ('data_eleicao', 4)]], [('data_inicio', 4), ('data_fim', 4), ('data_eleicao', 4)]],
]) ])
coligacao_crud = build_crud( coligacao_crud = Crud(
Coligacao, 'coligacao', [ Coligacao, 'coligacao', [
[_('Coligação'), [_('Coligação'),
@ -46,7 +46,7 @@ coligacao_crud = build_crud(
('numero_votos', 2)]], ('numero_votos', 2)]],
]) ])
partido_crud = build_crud( partido_crud = Crud(
Partido, 'partidos', [ Partido, 'partidos', [
[_('Partido Político'), [_('Partido Político'),
@ -57,7 +57,7 @@ partido_crud = build_crud(
]) ])
dependente_crud = build_crud( dependente_crud = Crud(
Dependente, '', [ Dependente, '', [
[_('Dependentes'), [_('Dependentes'),
@ -67,7 +67,7 @@ dependente_crud = build_crud(
]) ])
sessao_legislativa_crud = build_crud( sessao_legislativa_crud = Crud(
SessaoLegislativa, 'sessao_legislativa', [ SessaoLegislativa, 'sessao_legislativa', [
[_('Sessão Legislativa'), [_('Sessão Legislativa'),
@ -81,7 +81,7 @@ sessao_legislativa_crud = build_crud(
]) ])
parlamentar_crud = build_crud( parlamentar_crud = Crud(
Parlamentar, '', [ Parlamentar, '', [
[_('Cadastro do Parlamentar'), [_('Cadastro do Parlamentar'),
@ -101,14 +101,14 @@ parlamentar_crud = build_crud(
[('biografia', 12)]], [('biografia', 12)]],
]) ])
filiacao_crud = build_crud( filiacao_crud = Crud(
Filiacao, '', [ Filiacao, '', [
[_('Filiações Partidárias '), [_('Filiações Partidárias '),
[('partido', 4), ('data', 4), ('data_desfiliacao', 4)]], [('partido', 4), ('data', 4), ('data_desfiliacao', 4)]],
]) ])
mandato_crud = build_crud( mandato_crud = Crud(
Mandato, '', [ Mandato, '', [
[_('Mandato'), [_('Mandato'),
@ -120,28 +120,28 @@ mandato_crud = build_crud(
[('observacao', 12)]], [('observacao', 12)]],
]) ])
tipo_dependente_crud = build_crud( tipo_dependente_crud = Crud(
TipoDependente, 'tipo_dependente', [ TipoDependente, 'tipo_dependente', [
[_('Tipo de Dependente'), [_('Tipo de Dependente'),
[('descricao', 12)]], [('descricao', 12)]],
]) ])
nivel_instrucao_crud = build_crud( nivel_instrucao_crud = Crud(
NivelInstrucao, 'nivel_instrucao', [ NivelInstrucao, 'nivel_instrucao', [
[_('Nível Instrução'), [_('Nível Instrução'),
[('descricao', 12)]], [('descricao', 12)]],
]) ])
tipo_afastamento_crud = build_crud( tipo_afastamento_crud = Crud(
TipoAfastamento, 'tipo_afastamento', [ TipoAfastamento, 'tipo_afastamento', [
[_('Tipo de Afastamento'), [_('Tipo de Afastamento'),
[('descricao', 5), ('dispositivo', 5), ('afastamento', 2)]], [('descricao', 5), ('dispositivo', 5), ('afastamento', 2)]],
]) ])
tipo_militar_crud = build_crud( tipo_militar_crud = Crud(
SituacaoMilitar, 'tipo_situa_militar', [ SituacaoMilitar, 'tipo_situa_militar', [
[_('Tipo Situação Militar'), [_('Tipo Situação Militar'),

16
protocoloadm/views.py

@ -14,7 +14,7 @@ from django.views.generic.base import TemplateView
from django.views.generic.edit import FormMixin from django.views.generic.edit import FormMixin
from vanilla import GenericView from vanilla import GenericView
from crud import build_crud, make_pagination from crud import Crud, make_pagination
from materia.models import Proposicao, TipoMateriaLegislativa from materia.models import Proposicao, TipoMateriaLegislativa
from sapl.utils import create_barcode from sapl.utils import create_barcode
@ -27,14 +27,14 @@ from .models import (Autor, DocumentoAcessorioAdministrativo,
StatusTramitacaoAdministrativo, StatusTramitacaoAdministrativo,
TipoDocumentoAdministrativo, TramitacaoAdministrativo) TipoDocumentoAdministrativo, TramitacaoAdministrativo)
tipo_documento_administrativo_crud = build_crud( tipo_documento_administrativo_crud = Crud(
TipoDocumentoAdministrativo, '', [ TipoDocumentoAdministrativo, '', [
[_('Tipo Documento Administrativo'), [_('Tipo Documento Administrativo'),
[('sigla', 4), ('descricao', 8)]], [('sigla', 4), ('descricao', 8)]],
]) ])
documento_administrativo_crud = build_crud( documento_administrativo_crud = Crud(
DocumentoAdministrativo, '', [ DocumentoAdministrativo, '', [
[_('Indentificação Básica'), [_('Indentificação Básica'),
@ -49,7 +49,7 @@ documento_administrativo_crud = build_crud(
[('observacao', 12)]], [('observacao', 12)]],
]) ])
documento_acessorio_administrativo_crud = build_crud( documento_acessorio_administrativo_crud = Crud(
DocumentoAcessorioAdministrativo, '', [ DocumentoAcessorioAdministrativo, '', [
[_('Documento Acessório'), [_('Documento Acessório'),
@ -59,7 +59,7 @@ documento_acessorio_administrativo_crud = build_crud(
[('assunto', 12)]], [('assunto', 12)]],
]) ])
status_tramitacao_administrativo_crud = build_crud( status_tramitacao_administrativo_crud = Crud(
StatusTramitacaoAdministrativo, '', [ StatusTramitacaoAdministrativo, '', [
[_('Status Tramitação Administrativo'), [_('Status Tramitação Administrativo'),
@ -68,7 +68,7 @@ status_tramitacao_administrativo_crud = build_crud(
('descricao', 7)]], ('descricao', 7)]],
]) ])
tramitacao_administrativo_crud = build_crud( tramitacao_administrativo_crud = Crud(
TramitacaoAdministrativo, '', [ TramitacaoAdministrativo, '', [
[_('Tramitação'), [_('Tramitação'),
@ -78,7 +78,7 @@ tramitacao_administrativo_crud = build_crud(
[('texto', 12)]], [('texto', 12)]],
]) ])
protocolo_documento_crud = build_crud( protocolo_documento_crud = Crud(
Protocolo, '', [ Protocolo, '', [
[_('Indentificação Documento'), [_('Indentificação Documento'),
@ -89,7 +89,7 @@ protocolo_documento_crud = build_crud(
[('observacao', 12)]], [('observacao', 12)]],
]) ])
protocolo_materia_crud = build_crud( protocolo_materia_crud = Crud(
Protocolo, '', [ Protocolo, '', [
[_('Indentificação da Matéria'), [_('Indentificação da Matéria'),

16
sessao/views.py

@ -10,7 +10,7 @@ from django.views.generic import ListView
from django.views.generic.edit import FormMixin from django.views.generic.edit import FormMixin
from rest_framework import generics from rest_framework import generics
from crud import build_crud, make_pagination from crud import Crud, make_pagination
from materia.models import (Autoria, DocumentoAcessorio, from materia.models import (Autoria, DocumentoAcessorio,
TipoMateriaLegislativa, Tramitacao) TipoMateriaLegislativa, Tramitacao)
from norma.models import NormaJuridica from norma.models import NormaJuridica
@ -28,14 +28,14 @@ from .models import (AcompanharMateria, CargoMesa, ExpedienteMateria,
TipoExpediente, TipoResultadoVotacao, TipoSessaoPlenaria, TipoExpediente, TipoResultadoVotacao, TipoSessaoPlenaria,
VotoParlamentar) VotoParlamentar)
tipo_sessao_crud = build_crud( tipo_sessao_crud = Crud(
TipoSessaoPlenaria, 'tipo_sessao_plenaria', [ TipoSessaoPlenaria, 'tipo_sessao_plenaria', [
[_('Tipo de Sessão Plenária'), [_('Tipo de Sessão Plenária'),
[('nome', 6), ('quorum_minimo', 6)]], [('nome', 6), ('quorum_minimo', 6)]],
]) ])
sessao_crud = build_crud( sessao_crud = Crud(
SessaoPlenaria, '', [ SessaoPlenaria, '', [
[_('Dados Básicos'), [_('Dados Básicos'),
@ -49,7 +49,7 @@ sessao_crud = build_crud(
[('url_audio', 6), ('url_video', 6)]], [('url_audio', 6), ('url_video', 6)]],
]) ])
expediente_materia_crud = build_crud( expediente_materia_crud = Crud(
ExpedienteMateria, '', [ ExpedienteMateria, '', [
[_('Cadastro de Matérias do Expediente'), [_('Cadastro de Matérias do Expediente'),
@ -61,7 +61,7 @@ expediente_materia_crud = build_crud(
[('observacao', 12)]], [('observacao', 12)]],
]) ])
ordem_dia_crud = build_crud( ordem_dia_crud = Crud(
OrdemDia, '', [ OrdemDia, '', [
[_('Cadastro de Matérias da Ordem do Dia'), [_('Cadastro de Matérias da Ordem do Dia'),
@ -73,21 +73,21 @@ ordem_dia_crud = build_crud(
[('observacao', 12)]], [('observacao', 12)]],
]) ])
tipo_resultado_votacao_crud = build_crud( tipo_resultado_votacao_crud = Crud(
TipoResultadoVotacao, 'tipo_resultado_votacao', [ TipoResultadoVotacao, 'tipo_resultado_votacao', [
[_('Tipo de Resultado da Votação'), [_('Tipo de Resultado da Votação'),
[('nome', 12)]], [('nome', 12)]],
]) ])
tipo_expediente_crud = build_crud( tipo_expediente_crud = Crud(
TipoExpediente, 'tipo_expediente', [ TipoExpediente, 'tipo_expediente', [
[_('Tipo de Expediente'), [_('Tipo de Expediente'),
[('nome', 12)]], [('nome', 12)]],
]) ])
registro_votacao_crud = build_crud( registro_votacao_crud = Crud(
RegistroVotacao, '', [ RegistroVotacao, '', [
[_('Votação Simbólica'), [_('Votação Simbólica'),

Loading…
Cancel
Save