Skip to content

Commit

Permalink
Merge 60997ca into cf3f073
Browse files Browse the repository at this point in the history
  • Loading branch information
luzfcb committed Jul 7, 2015
2 parents cf3f073 + 60997ca commit 6d94377
Show file tree
Hide file tree
Showing 10 changed files with 455 additions and 2 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
*.pyc
dist/
.eggs
*.egg
*.egg-info/
build/
Expand All @@ -12,3 +13,5 @@ test_files/
/.ve
/.project
/.pydevproject
# Pycharm project
.idea
2 changes: 1 addition & 1 deletion .landscape.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
max-line-length: 79
max-line-length: 119
uses:
- django
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ clean-pyc:
find . -name '*~' -exec rm -f {} +

init:
pip install tox>=1.8 coverage Sphinx
pip install "tox>=1.8" coverage Sphinx

test:
coverage erase
Expand Down
40 changes: 40 additions & 0 deletions simple_history/forms.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
from __future__ import unicode_literals

from django.utils import six
from django.utils.encoding import force_str

__all__ = (
'ReadOnlyFieldsMixin',
'new_readonly_form'
)


class ReadOnlyFieldsMixin(object):
readonly_fields = ()
all_fields = False

def __init__(self, *args, **kwargs):
super(ReadOnlyFieldsMixin, self).__init__(*args, **kwargs)

for field in (field for field_name, field in six.iteritems(self.fields)
if field_name in self.readonly_fields
or self.all_fields is True):
field.widget.attrs['disabled'] = 'true'
field.required = False

def clean(self):
cleaned_data = super(ReadOnlyFieldsMixin, self).clean()
if self.all_fields:
for field_name, field in six.iteritems(self.fields):
cleaned_data[field_name] = getattr(self.instance, field_name)
return cleaned_data
else:
for field_name in self.readonly_fields:
cleaned_data[field_name] = getattr(self.instance, field_name)
return cleaned_data


def new_readonly_form(klass, all_fields=True, readonly_fields=()):
name = force_str("ReadOnly{}".format(klass.__name__))
klass_fields = {'all_fields': all_fields, 'readonly_fields': readonly_fields}
return type(name, (ReadOnlyFieldsMixin, klass), klass_fields)
18 changes: 18 additions & 0 deletions simple_history/tests/forms.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from django import forms

from simple_history.forms import ReadOnlyFieldsMixin, new_readonly_form

from .models import Poll


class PollRevertForm(forms.ModelForm):
class Meta:
model = Poll
fields = '__all__'


class ReadOnlyPollRevertForm(ReadOnlyFieldsMixin, PollRevertForm):
pass


GeneratedByFunctionReadOnlyPollRevertForm = new_readonly_form(PollRevertForm, readonly_fields=())
1 change: 1 addition & 0 deletions simple_history/tests/tests/test_views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from __future__ import unicode_literals
30 changes: 30 additions & 0 deletions simple_history/tests/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,40 @@
from django.conf.urls import include, url
from django.contrib import admin
from . import other_admin
from . import views

admin.autodiscover()

urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^other-admin/', include(other_admin.site.urls)),

url(r'^poll-list/$', views.PollListView.as_view(), name='poll_list'),

url(r'^poll-history-versions-with-detail/(?P<pk>\d+)/$',
views.PollHistoryVersionsView.as_view(), name='poll_history_versions_with_detail'),

url(r'^poll-history-versions-with-update/(?P<pk>\d+)/$',
views.PollHistoryVersions2.as_view(), name='poll_history_versions_with_update'),

url(r'^poll-revert-view/(?P<pk>\d+)/$',
views.PollRevertView.as_view(), name='poll_revert_view'),

url(r'^pollrevertviewwithnormalform/(?P<pk>\d+)/$',
views.PollRevertViewWithNormalForm.as_view(), name='pollrevertviewwithnormalform'),

url(r'^pollrevertviewwithreadonlyform/(?P<pk>\d+)/$',
views.PollRevertViewWithReadOnlyForm.as_view(), name='pollrevertviewwithreadonlyform'),

url(r'^pollrevertviewwithgeneratedbyfunctionreadonlypollrevertform/(?P<pk>\d+)/$',
views.PollRevertViewWithGeneratedByFunctionReadOnlyPollRevertForm.as_view(),
name='pollrevertviewwithgeneratedbyfunctionreadonlypollrevertform'),

url(r'^place-list/$',
views.PlaceListView.as_view(), name='place_list'),

url(r'^placerevertviewwithmissinghistoryrecordsfieldexception/(?P<pk>\d+)/$',
views.PlaceRevertViewWithMissingHistoryRecordsFieldException.as_view(),
name='placerevertviewwithmissinghistoryrecordsfieldexception'),

]
60 changes: 60 additions & 0 deletions simple_history/tests/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
from __future__ import unicode_literals

from django.core.urlresolvers import reverse_lazy
from django.views import generic

from simple_history.views import (HistoryRecordListViewMixin,
RevertFromHistoryRecordViewMixin)

from .forms import (GeneratedByFunctionReadOnlyPollRevertForm, PollRevertForm,
ReadOnlyPollRevertForm)
from .models import Place, Poll


class PollListView(generic.ListView):
model = Poll


class PollHistoryVersionsView(HistoryRecordListViewMixin, generic.DetailView):
model = Poll


class PollHistoryVersions2(HistoryRecordListViewMixin, generic.UpdateView):
model = Poll
success_url = reverse_lazy('poll_list')


class PollRevertView(RevertFromHistoryRecordViewMixin, generic.UpdateView):
model = Poll
fields = '__all__'
success_url = reverse_lazy('poll_list')


class PollRevertViewWithNormalForm(RevertFromHistoryRecordViewMixin, generic.UpdateView):
model = Poll
form_class = PollRevertForm
success_url = reverse_lazy('poll_list')


class PollRevertViewWithReadOnlyForm(RevertFromHistoryRecordViewMixin, generic.UpdateView):
model = Poll
form_class = ReadOnlyPollRevertForm
success_url = reverse_lazy('poll_list')


class PollRevertViewWithGeneratedByFunctionReadOnlyPollRevertForm(RevertFromHistoryRecordViewMixin,
generic.UpdateView):
model = Poll
form_class = GeneratedByFunctionReadOnlyPollRevertForm
success_url = reverse_lazy('poll_list')


class PlaceListView(generic.ListView):
model = Place


class PlaceRevertViewWithMissingHistoryRecordsFieldException(RevertFromHistoryRecordViewMixin,
generic.UpdateView):
model = Place
fields = '__all__'
success_url = reverse_lazy('place_list')

0 comments on commit 6d94377

Please sign in to comment.