Skip to content
Snippets Groups Projects
Verified Commit 99deed55 authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

Back crud_events partial with reversion and remove easyaudit

parent bb0bfec9
No related branches found
No related tags found
1 merge request!385Resolve "Replace django-easy-audit"
Pipeline #4366 passed
...@@ -19,7 +19,6 @@ from django.views.generic import CreateView, UpdateView ...@@ -19,7 +19,6 @@ from django.views.generic import CreateView, UpdateView
from django.views.generic.edit import DeleteView, ModelFormMixin from django.views.generic.edit import DeleteView, ModelFormMixin
import reversion import reversion
from easyaudit.models import CRUDEvent
from guardian.admin import GuardedModelAdmin from guardian.admin import GuardedModelAdmin
from jsonstore.fields import IntegerField, JSONFieldMixin from jsonstore.fields import IntegerField, JSONFieldMixin
from material.base import Layout, LayoutNode from material.base import Layout, LayoutNode
...@@ -54,8 +53,7 @@ class ExtensibleModel(models.Model, metaclass=_ExtensibleModelBase): ...@@ -54,8 +53,7 @@ class ExtensibleModel(models.Model, metaclass=_ExtensibleModelBase):
This base model ensures all objects in AlekSIS apps fulfill the This base model ensures all objects in AlekSIS apps fulfill the
following properties: following properties:
* crud_events property to retrieve easyaudit's CRUD event log * _versions property to retrieve all versions of the model from reversion
* created_at and updated_at properties based n CRUD events
* Allow injection of fields and code from AlekSIS apps to extend * Allow injection of fields and code from AlekSIS apps to extend
model functionality. model functionality.
...@@ -109,50 +107,30 @@ class ExtensibleModel(models.Model, metaclass=_ExtensibleModelBase): ...@@ -109,50 +107,30 @@ class ExtensibleModel(models.Model, metaclass=_ExtensibleModelBase):
pass pass
@property @property
def crud_events(self) -> QuerySet: def _versions(self) -> List[Tuple[str, Tuple[Any, Any]]]:
"""Get all CRUD events connected to this object from easyaudit.""" """Get all versions of this object from django-reversion.
content_type = ContentType.objects.get_for_model(self)
return CRUDEvent.objects.filter( Includes diffs to previous version.
object_id=self.pk, content_type=content_type """
).select_related("user", "user__person") versions = reversion.models.Version.objects.get_for_object(self)
@property versions_with_changes = []
def crud_event_create(self) -> Optional[CRUDEvent]: for i, version in enumerate(versions):
"""Return create event of this object.""" diff = {}
return self.crud_events.filter(event_type=CRUDEvent.CREATE).latest("datetime") if i > 0:
prev_version = versions[i-1]
@property for k, val in version.field_dict.items():
def crud_event_update(self) -> Optional[CRUDEvent]: prev_val = prev_version.get(k, None)
"""Return last event of this object.""" if prev_val != val:
return self.crud_events.latest("datetime") diff[k] = (prev_val, val)
@property versions_with_changes.append((version, diff))
def created_at(self) -> Optional[datetime]:
"""Determine creation timestamp from CRUD log."""
if self.crud_event_create:
return self.crud_event_create.datetime
@property return versions_with_changes
def updated_at(self) -> Optional[datetime]:
"""Determine last timestamp from CRUD log."""
if self.crud_event_update:
return self.crud_event_update.datetime
extended_data = JSONField(default=dict, editable=False) extended_data = JSONField(default=dict, editable=False)
@property
def created_by(self) -> Optional[models.Model]:
"""Determine user who created this object from CRUD log."""
if self.crud_event_create:
return self.crud_event_create.user
@property
def updated_by(self) -> Optional[models.Model]:
"""Determine user who last updated this object from CRUD log."""
if self.crud_event_update:
return self.crud_event_update.user
extended_data = JSONField(default=dict, editable=False) extended_data = JSONField(default=dict, editable=False)
@classmethod @classmethod
......
...@@ -65,7 +65,6 @@ INSTALLED_APPS = [ ...@@ -65,7 +65,6 @@ INSTALLED_APPS = [
"dbbackup", "dbbackup",
"settings_context_processor", "settings_context_processor",
"sass_processor", "sass_processor",
"easyaudit",
"django_any_js", "django_any_js",
"django_yarnpkg", "django_yarnpkg",
"django_tables2", "django_tables2",
...@@ -131,7 +130,6 @@ MIDDLEWARE = [ ...@@ -131,7 +130,6 @@ MIDDLEWARE = [
"impersonate.middleware.ImpersonateMiddleware", "impersonate.middleware.ImpersonateMiddleware",
"django.contrib.messages.middleware.MessageMiddleware", "django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware", "django.middleware.clickjacking.XFrameOptionsMiddleware",
"easyaudit.middleware.easyaudit.EasyAuditMiddleware",
"maintenance_mode.middleware.MaintenanceModeMiddleware", "maintenance_mode.middleware.MaintenanceModeMiddleware",
"aleksis.core.util.middlewares.EnsurePersonMiddleware", "aleksis.core.util.middlewares.EnsurePersonMiddleware",
"django_prometheus.middleware.PrometheusAfterMiddleware", "django_prometheus.middleware.PrometheusAfterMiddleware",
......
{% load i18n data_helpers %} {% load i18n data_helpers %}
<ul class="collection"> <ul class="collection">
{% for event in obj.crud_events %} {% for version in obj._versions %}
{% if no_m2m and event.event_type == event.M2M_CHANGE or event.event_type == event.M2M_CHANGE_REV %} <li class="collection-item">
{% else %} <strong>
<li class="collection-item"> {{ version.0.revision.get_comment }}
<strong> {{ version.0.revision.user.person }}
{% if event.event_type == event.CREATE %} </strong>
{% blocktrans with person=event.user.person %}
Created by {{ person }}
{% endblocktrans %}
{% elif event.event_type == event.UPDATE %}
{% blocktrans with person=event.user.person %}
Updated by {{ person }}
{% endblocktrans %}
{% elif event.event_type == event.DELETE %}
{% blocktrans with person=event.user.person %}
Deleted by {{ person }}
{% endblocktrans %}
{% elif event.event_type == event.M2M_CHANGE %}
{% blocktrans with person=event.user.person %}
Updated by {{ person }}
{% endblocktrans %}
{% elif event.event_type == event.M2M_CHANGE_REV %}
{% blocktrans with person=event.user.person %}
Updated by {{ person }}
{% endblocktrans %}
{% endif %}
</strong>
<div class="left" style="margin-right: 10px;"> <div class="left" style="margin-right: 10px;">
{% if event.event_type == event.CREATE %} {% if forloop.first %}
<i class="material-icons">add_circle</i> <i class="material-icons">add_circle</i>
{% elif event.event_type == event.UPDATE %} {% else %}
<i class="material-icons">edit</i> <i class="material-icons">edit</i>
{% elif event.event_type == event.DELETE %}
<i class="material-icons">delete</i>
{% elif event.event_type == event.M2M_CHANGE %}
<i class="material-icons">edit</i>
{% elif event.event_type == event.M2M_CHANGE_REV %}
<i class="material-icons">edit</i>
{% endif %}
</div>
<div class="right">
{{ event.datetime }}
</div>
{% parse_json event.changed_fields as changed_fields %}
{% if changed_fields %}
<ul>
{% for field, change in changed_fields.items %}
{% verbose_name event.content_type.app_label event.content_type.model field as verbose_name %}
<li>
{{ verbose_name }}: <s>{{ change.0 }}</s> → {{ change.1 }}
</li>
{% endfor %}
</ul>
{% endif %} {% endif %}
</li> </div>
{% endif %} <div class="right">
{{ version.0.revision.date_created }}
</div>
{% if version.1 %}
<ul>
{% for field, change in version.1.items %}
{% verbose_name version.0.revision.content_type.app_label version.0.revision.content_type.model field as verbose_name %}
<li>
{{ verbose_name }}: <s>{{ change.0 }}</s> → {{ change.1 }}
</li>
{% endfor %}
</ul>
{% endif %}
</li>
{% endfor %} {% endfor %}
</ul> </ul>
...@@ -32,7 +32,6 @@ python = "^3.7" ...@@ -32,7 +32,6 @@ python = "^3.7"
Django = "^3.0" Django = "^3.0"
django-any-js = "^1.0" django-any-js = "^1.0"
django-debug-toolbar = "^2.0" django-debug-toolbar = "^2.0"
django-easy-audit = {version ="^1.2rc1", allow-prereleases = true}
django-middleware-global-request = "^0.1.2" django-middleware-global-request = "^0.1.2"
django-menu-generator = "^1.0.4" django-menu-generator = "^1.0.4"
django-tables2 = "^2.1" django-tables2 = "^2.1"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment