Fix recent change stream list mutation issue

This commit is contained in:
2020-10-25 18:17:24 +00:00
parent d06895bf96
commit 44fef39a2e
3 changed files with 8 additions and 12 deletions

View File

@@ -2,15 +2,12 @@
{% load paginator from filters %} {% load paginator from filters %}
{% load to_class_name from filters %} {% load to_class_name from filters %}
{% block title %}{{ title|title }} Activity Stream{% endblock %}
{% block js %} {% block js %}
{% include 'partials/version_scripts.html' %} {% include 'partials/version_scripts.html' %}
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<div class="col-12"> <div class="col-12">
<h3>{{ title|title }} Activity Stream</h3>
{% include 'partials/activity_table_body.html' %} {% include 'partials/activity_table_body.html' %}
{% paginator %} {% paginator %}
</div> </div>

View File

@@ -25,8 +25,8 @@ for app in apps.get_app_configs():
else: else:
table_name = appname + '_activity_table' table_name = appname + '_activity_table'
# TODO Permissions # TODO Proper Permissions
urlpatterns += [path(appname + '/activity/', permission_required_with_403('RIGS.view_event')(views.ActivityTable.as_view()), urlpatterns += [path(appname + '/activity/', permission_required_with_403('RIGS.add_event')(views.ActivityTable.as_view()),
name=table_name, kwargs={'app': appname, 'models': views.get_models(app.label)}), ] name=table_name, kwargs={'app': appname, 'models': views.get_models(app.label)}), ]
for model in views.get_models(app=app.label): for model in views.get_models(app=app.label):

View File

@@ -14,6 +14,7 @@ from assets import models as asset_models
from django.apps import apps from django.apps import apps
from reversion import revisions as reversion from reversion import revisions as reversion
from versioning.versioning import RIGSVersion from versioning.versioning import RIGSVersion
from django.template.defaultfilters import title
from django.views.decorators.cache import never_cache, cache_page from django.views.decorators.cache import never_cache, cache_page
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
@@ -49,14 +50,14 @@ def get_models(app=None):
models = filter(lambda item: not hasattr(item, 'reversion_hide'), reversion.get_registered_models()) models = filter(lambda item: not hasattr(item, 'reversion_hide'), reversion.get_registered_models())
if app is not None: if app is not None:
models = filter(lambda item: item in apps.get_app_config(app).get_models(), models) models = filter(lambda item: item in apps.get_app_config(app).get_models(), models)
return models # Don't allow modifying original list!
return list(models).copy()
# TODO Default filter of having permission to view associated object # TODO Default filter of having permission to view associated object
def filter_models(models, user): def filter_models(models, user):
if user is not None: if user is not None:
models = filter(lambda model: not hasattr(model, 'reversion_perm') or user.has_perm(model.reversion_perm), models) models = filter(lambda model: not hasattr(model, 'reversion_perm') or user.has_perm(model.reversion_perm), models)
return models return models
@@ -66,12 +67,11 @@ class ActivityTable(generic.ListView):
paginate_by = 25 paginate_by = 25
def get_queryset(self): def get_queryset(self):
versions = RIGSVersion.objects.get_for_multiple_models(filter_models(self.kwargs['models'], self.request.user)) return RIGSVersion.objects.get_for_multiple_models(filter_models(self.kwargs.get('models'), self.request.user)).order_by("-revision__date_created")
return versions.order_by("-revision__date_created")
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(ActivityTable, self).get_context_data(**kwargs) context = super(ActivityTable, self).get_context_data(**kwargs)
context['title'] = self.kwargs['app'] context['page_title'] = "{} Activity Stream".format(title(self.kwargs['app']))
if self.kwargs['app'] != 'rigboard': if self.kwargs['app'] != 'rigboard':
context['override'] = 'base_{}.html'.format(self.kwargs['app']) context['override'] = 'base_{}.html'.format(self.kwargs['app'])
@@ -84,8 +84,7 @@ class ActivityFeed(generic.ListView): # Appears on homepage
paginate_by = 25 paginate_by = 25
def get_queryset(self): def get_queryset(self):
versions = RIGSVersion.objects.get_for_multiple_models(filter_models(get_models(), self.request.user)) return RIGSVersion.objects.get_for_multiple_models(filter_models(get_models(), self.request.user)).order_by("-revision__date_created")
return versions.order_by("-revision__date_created")
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
# Call the base implementation first to get a context # Call the base implementation first to get a context