Simplify and remove old code

This commit is contained in:
Roberto Rosario
2015-04-07 16:04:09 -04:00
parent 69a7efd6f0
commit 9084c3c651
9 changed files with 145 additions and 158 deletions

View File

@@ -17,7 +17,7 @@ creator_singleton = SimpleLazyObject(lambda: CreatorSingleton.objects.get())
def _as_choice_list(holders):
return sorted([(AccessHolder.encapsulate(holder).gid, get_object_name(holder, display_object_type=False)) for holder in holders], key=lambda x: x[1])
return sorted([(AccessHolder.encapsulate(holder).gid, get_object_name(holder)) for holder in holders], key=lambda x: x[1])
class BaseHolderSelectionForm(forms.Form):

View File

@@ -33,7 +33,7 @@ class CheckoutListView(DocumentListView):
'title': _('Documents checked out'),
'hide_links': True,
'extra_columns': [
{'name': _('Checkout user'), 'attribute': encapsulate(lambda document: get_object_name(document.checkout_info().user_object, display_object_type=False))},
{'name': _('Checkout user'), 'attribute': encapsulate(lambda document: get_object_name(document.checkout_info().user_object))},
{'name': _('Checkout time and date'), 'attribute': encapsulate(lambda document: document.checkout_info().checkout_datetime)},
{'name': _('Checkout expiration'), 'attribute': encapsulate(lambda document: document.checkout_info().expiration_datetime)},
],
@@ -51,7 +51,7 @@ def checkout_info(request, document_pk):
if document.is_checked_out():
checkout_info = document.checkout_info()
paragraphs.append(_('User: %s') % get_object_name(checkout_info.user_object, display_object_type=False))
paragraphs.append(_('User: %s') % get_object_name(checkout_info.user_object))
paragraphs.append(_('Check out time: %s') % checkout_info.checkout_datetime)
paragraphs.append(_('Check out expiration: %s') % checkout_info.expiration_datetime)
paragraphs.append(_('New versions allowed: %s') % (_('Yes') if not checkout_info.block_new_version else _('No')))

View File

@@ -131,7 +131,7 @@ def parse_range(astr):
return sorted(result)
def generate_choices_w_labels(choices, display_object_type=True):
def generate_choices_w_labels(choices):
results = []
for choice in choices:
ct = ContentType.objects.get_for_model(choice)
@@ -139,31 +139,19 @@ def generate_choices_w_labels(choices, display_object_type=True):
if isinstance(choice, User):
label = choice.get_full_name() if choice.get_full_name() else choice
if display_object_type:
verbose_name = unicode(getattr(choice._meta, 'verbose_name', ct.name))
results.append(('%s,%s' % (ct.model, choice.pk), '%s: %s' % (verbose_name, label)))
else:
results.append(('%s,%s' % (ct.model, choice.pk), '%s' % (label)))
# Sort results by the label not the key value
return sorted(results, key=lambda x: x[1])
def get_object_name(obj, display_object_type=True):
def get_object_name(obj):
ct_label = ContentType.objects.get_for_model(obj).name
if isinstance(obj, User):
label = obj.get_full_name() if obj.get_full_name() else obj
else:
label = unicode(obj)
if display_object_type:
try:
verbose_name = unicode(obj._meta.verbose_name)
except AttributeError:
verbose_name = ct_label
return '%s: %s' % (verbose_name, label)
else:
return '%s' % (label)
@@ -252,9 +240,3 @@ def fs_cleanup(filename, suppress_exceptions=True):
pass
else:
raise
def get_obj_from_content_type_string(string):
model, pk = string.split(',')
ct = ContentType.objects.get(model=model)
return ct.get_object_for_this_type(pk=pk)

View File

@@ -32,7 +32,132 @@ from .mixins import (
ExtraContextMixin, ObjectListPermissionFilterMixin,
ObjectPermissionCheckMixin, RedirectionMixin, ViewPermissionCheckMixin
)
from .utils import get_obj_from_content_type_string
class AssignRemoveView(TemplateView):
left_list_title = None
right_list_title = None
decode_content_type = False
extra_context = None
grouped = False
LEFT_LIST_NAME = 'left_list'
RIGHT_LIST_NAME = 'right_list'
template_name = 'appearance/generic_form.html'
@staticmethod
def get_obj_from_content_type_string(string):
model, pk = string.split(',')
ct = ContentType.objects.get(model=model)
return ct.get_object_for_this_type(pk=pk)
def left_list(self):
# Subclass must override
return []
def right_list(self):
# Subclass must override
return []
def add(self, item):
# Subclass must override
pass
def remove(self, item):
# Subclass must override
pass
def get(self, request, *args, **kwargs):
self.unselected_list = ChoiceForm(prefix=self.LEFT_LIST_NAME, choices=self.left_list())
self.selected_list = ChoiceForm(prefix=self.RIGHT_LIST_NAME, choices=self.right_list())
return self.render_to_response(self.get_context_data())
def post(self, request, *args, **kwargs):
if '%s-submit' % self.LEFT_LIST_NAME in self.request.POST.keys():
self.unselected_list = ChoiceForm(
self.request.POST, prefix=self.LEFT_LIST_NAME,
choices=self.left_list()
)
if self.unselected_list.is_valid():
for selection in self.unselected_list.cleaned_data['selection']:
if self.grouped:
flat_list = []
for group in self.left_list():
flat_list.extend(group[1])
else:
flat_list = self.left_list()
label = dict(flat_list)[selection]
if self.decode_content_type:
selection_obj = AssignRemoveView.get_obj_from_content_type_string(selection)
else:
selection_obj = selection
try:
self.add(selection_obj)
except:
if settings.DEBUG:
raise
else:
messages.error(self.request, _('Unable to remove %(selection)s.') % {
'selection': label, 'right_list_title': self.right_list_title})
if '%s-submit' % self.RIGHT_LIST_NAME in self.request.POST.keys():
self.selected_list = ChoiceForm(
self.request.POST, prefix=self.RIGHT_LIST_NAME,
choices=self.right_list()
)
if self.selected_list.is_valid():
for selection in self.selected_list.cleaned_data['selection']:
if self.grouped:
flat_list = []
for group in self.right_list():
flat_list.extend(group[1])
else:
flat_list = self.right_list()
label = dict(flat_list)[selection]
if self.decode_content_type:
selection = AssignRemoveView.get_obj_from_content_type_string(selection)
try:
self.remove(selection)
except:
if settings.DEBUG:
raise
else:
messages.error(self.request, _('Unable to add %(selection)s.') % {
'selection': label, 'right_list_title': self.right_list_title})
return self.get(request, *args, **kwargs)
def get_context_data(self, **kwargs):
data = super(AssignRemoveView, self).get_context_data(**kwargs)
data.update({
'subtemplates_list': [
{
'name': 'appearance/generic_form_subtemplate.html',
'column_class': 'col-xs-12 col-sm-6 col-md-6 col-lg-6',
'context': {
'form': self.unselected_list,
'title': self.left_list_title or ' ',
'submit_label': _('Add'),
'submit_icon': 'fa fa-plus'
}
},
{
'name': 'appearance/generic_form_subtemplate.html',
'column_class': 'col-xs-12 col-sm-6 col-md-6 col-lg-6',
'context': {
'form': self.selected_list,
'title': self.right_list_title or ' ',
'submit_label': _('Remove'),
'submit_icon': 'fa fa-minus'
}
},
],
})
return data
class AboutView(TemplateView):
@@ -331,126 +456,6 @@ def multi_object_action_view(request):
)
class AssignRemoveView(TemplateView):
left_list_title = None
right_list_title = None
decode_content_type = False
extra_context = None
grouped = False
LEFT_LIST_NAME = 'left_list'
RIGHT_LIST_NAME = 'right_list'
template_name = 'appearance/generic_form.html'
def left_list(self):
# Subclass must override
return []
def right_list(self):
# Subclass must override
return []
def add(self, item):
# Subclass must override
pass
def remove(self, item):
# Subclass must override
pass
def get(self, request, *args, **kwargs):
self.unselected_list = ChoiceForm(prefix=self.LEFT_LIST_NAME, choices=self.left_list())
self.selected_list = ChoiceForm(prefix=self.RIGHT_LIST_NAME, choices=self.right_list())
return self.render_to_response(self.get_context_data())
def post(self, request, *args, **kwargs):
if '%s-submit' % self.LEFT_LIST_NAME in self.request.POST.keys():
self.unselected_list = ChoiceForm(
self.request.POST, prefix=self.LEFT_LIST_NAME,
choices=self.left_list()
)
if self.unselected_list.is_valid():
for selection in self.unselected_list.cleaned_data['selection']:
if self.grouped:
flat_list = []
for group in self.left_list():
flat_list.extend(group[1])
else:
flat_list = self.left_list()
label = dict(flat_list)[selection]
if self.decode_content_type:
selection_obj = get_obj_from_content_type_string(selection)
else:
selection_obj = selection
try:
self.add(selection_obj)
except:
if settings.DEBUG:
raise
else:
messages.error(self.request, _('Unable to remove %(selection)s.') % {
'selection': label, 'right_list_title': self.right_list_title})
if '%s-submit' % self.RIGHT_LIST_NAME in self.request.POST.keys():
self.selected_list = ChoiceForm(
self.request.POST, prefix=self.RIGHT_LIST_NAME,
choices=self.right_list()
)
if self.selected_list.is_valid():
for selection in self.selected_list.cleaned_data['selection']:
if self.grouped:
flat_list = []
for group in self.right_list():
flat_list.extend(group[1])
else:
flat_list = self.right_list()
label = dict(flat_list)[selection]
if self.decode_content_type:
selection = get_obj_from_content_type_string(selection)
try:
self.remove(selection)
except:
if settings.DEBUG:
raise
else:
messages.error(self.request, _('Unable to add %(selection)s.') % {
'selection': label, 'right_list_title': self.right_list_title})
return self.get(request, *args, **kwargs)
def get_context_data(self, **kwargs):
data = super(AssignRemoveView, self).get_context_data(**kwargs)
data.update({
'subtemplates_list': [
{
'name': 'appearance/generic_form_subtemplate.html',
'column_class': 'col-xs-12 col-sm-6 col-md-6 col-lg-6',
'context': {
'form': self.unselected_list,
'title': self.left_list_title or ' ',
'submit_label': _('Add'),
'submit_icon': 'fa fa-plus'
}
},
{
'name': 'appearance/generic_form_subtemplate.html',
'column_class': 'col-xs-12 col-sm-6 col-md-6 col-lg-6',
'context': {
'form': self.selected_list,
'title': self.right_list_title or ' ',
'submit_label': _('Remove'),
'submit_icon': 'fa fa-minus'
}
},
],
})
return data
def current_user_edit(request):
"""
Allow an user to edit his own details

View File

@@ -184,10 +184,10 @@ class SetupIndexDocumentTypesView(AssignRemoveView):
return super(SetupIndexDocumentTypesView, self).dispatch(request, *args, **kwargs)
def left_list(self):
return generate_choices_w_labels(self.index.get_document_types_not_in_index(), display_object_type=False)
return generate_choices_w_labels(self.index.get_document_types_not_in_index())
def right_list(self):
return generate_choices_w_labels(self.index.document_types.all(), display_object_type=False)
return generate_choices_w_labels(self.index.document_types.all())
def remove(self, item):
self.index.document_types.remove(item)

View File

@@ -48,10 +48,10 @@ class SetupSmartLinkDocumentTypesView(AssignRemoveView):
return super(SetupSmartLinkDocumentTypesView, self).dispatch(request, *args, **kwargs)
def left_list(self):
return generate_choices_w_labels(DocumentType.objects.exclude(pk__in=self.smart_link.document_types.all()), display_object_type=False)
return generate_choices_w_labels(DocumentType.objects.exclude(pk__in=self.smart_link.document_types.all()))
def right_list(self):
return generate_choices_w_labels(self.smart_link.document_types.all(), display_object_type=False)
return generate_choices_w_labels(self.smart_link.document_types.all())
def remove(self, item):
self.smart_link.document_types.remove(item)

View File

@@ -453,10 +453,10 @@ class SetupDocumentTypeMetadataOptionalView(AssignRemoveView):
return super(SetupDocumentTypeMetadataOptionalView, self).dispatch(request, *args, **kwargs)
def left_list(self):
return generate_choices_w_labels(set(MetadataType.objects.all()) - set(MetadataType.objects.filter(id__in=self.document_type.metadata.values_list('metadata_type', flat=True))), display_object_type=False)
return generate_choices_w_labels(set(MetadataType.objects.all()) - set(MetadataType.objects.filter(id__in=self.document_type.metadata.values_list('metadata_type', flat=True))))
def right_list(self):
return generate_choices_w_labels(self.document_type.metadata.filter(required=False), display_object_type=False)
return generate_choices_w_labels(self.document_type.metadata.filter(required=False))
def remove(self, item):
item.delete()
@@ -477,7 +477,7 @@ class SetupDocumentTypeMetadataRequiredView(SetupDocumentTypeMetadataOptionalVie
self.document_type.metadata.create(metadata_type=item, required=True)
def right_list(self):
return generate_choices_w_labels(self.document_type.metadata.filter(required=True), display_object_type=False)
return generate_choices_w_labels(self.document_type.metadata.filter(required=True))
def get_context_data(self, **kwargs):
data = super(SetupDocumentTypeMetadataRequiredView, self).get_context_data(**kwargs)

View File

@@ -11,7 +11,7 @@ from .classes import Member
def _as_choice_list(items):
return sorted([(Member.encapsulate(item).gid, get_object_name(item, display_object_type=False)) for item in items], key=lambda x: x[1])
return sorted([(Member.encapsulate(item).gid, get_object_name(item)) for item in items], key=lambda x: x[1])
def get_role_members(role, separate=False):

View File

@@ -234,10 +234,10 @@ class UserGroupsView(AssignRemoveView):
return super(UserGroupsView, self).dispatch(request, *args, **kwargs)
def left_list(self):
return generate_choices_w_labels(get_user_non_groups(self.user), display_object_type=False)
return generate_choices_w_labels(get_user_non_groups(self.user))
def right_list(self):
return generate_choices_w_labels(get_user_groups(self.user), display_object_type=False)
return generate_choices_w_labels(get_user_groups(self.user))
def remove(self, item):
item.user_set.remove(self.user)
@@ -373,10 +373,10 @@ class GroupMembersView(AssignRemoveView):
return super(GroupMembersView, self).dispatch(request, *args, **kwargs)
def left_list(self):
return generate_choices_w_labels(User.objects.exclude(groups=self.group).exclude(is_staff=True).exclude(is_superuser=True), display_object_type=False)
return generate_choices_w_labels(User.objects.exclude(groups=self.group).exclude(is_staff=True).exclude(is_superuser=True))
def right_list(self):
return generate_choices_w_labels(self.group.user_set.all(), display_object_type=False)
return generate_choices_w_labels(self.group.user_set.all())
def remove(self, item):
self.group.user_set.remove(item)