Skip to content
Snippets Groups Projects
Verified Commit 7e9c9b66 authored by Jonathan Weth's avatar Jonathan Weth :keyboard:
Browse files

Add missing migration

parent 07106d1b
No related branches found
No related tags found
1 merge request!92Resolve "Add task for checking plausibility of data"
......@@ -7,6 +7,8 @@ from django.utils.translation import gettext as _
import reversion
from calendarweek import CalendarWeek
from aleksis.core.util.core_helpers import celery_optional
class SolveOption:
name: str = "default"
......@@ -90,6 +92,7 @@ DATA_CHECKS_BY_NAME = {check.name: check for check in DATA_CHECKS}
DATA_CHECKS_CHOICES = [(check.name, check.verbose_name) for check in DATA_CHECKS]
@celery_optional
def check_data():
for check in DATA_CHECKS:
logging.info(f"Run check: {check.verbose_name}")
......
# Generated by Django 3.0.10 on 2020-09-19 10:45
import django.contrib.postgres.fields.jsonb
import django.contrib.sites.managers
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("contenttypes", "0002_remove_content_type_name"),
("sites", "0002_alter_domain_unique"),
("alsijil", "0007_personal_note_lesson_documentation_year"),
]
operations = [
migrations.CreateModel(
name="DataCheckResult",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"extended_data",
django.contrib.postgres.fields.jsonb.JSONField(
default=dict, editable=False
),
),
(
"check",
models.CharField(
choices=[
(
"no_personal_notes_in_cancelled_lessons",
"Ensure that there are no personal notes in cancelled lessons",
)
],
max_length=255,
verbose_name="Related data check task",
),
),
("object_id", models.CharField(max_length=255)),
(
"solved",
models.BooleanField(default=False, verbose_name="Issue solved"),
),
(
"sent",
models.BooleanField(
default=False, verbose_name="Notification sent"
),
),
(
"content_type",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to="contenttypes.ContentType",
),
),
(
"site",
models.ForeignKey(
default=1,
editable=False,
on_delete=django.db.models.deletion.CASCADE,
to="sites.Site",
),
),
],
options={
"verbose_name": "Data check result",
"verbose_name_plural": "Data check results",
},
managers=[("objects", django.contrib.sites.managers.CurrentSiteManager()),],
),
]
......@@ -10,7 +10,7 @@
{% block page_title %}{% blocktrans %}Data checks{% endblocktrans %}{% endblock %}
{% block content %}
<a class="btn green waves-effect waves-light" href="#">
<a class="btn green waves-effect waves-light" href="{% url "data_check_run" %}">
<i class="material-icons left">refresh</i>
{% trans "Check data again" %}
</a>
......
......@@ -69,6 +69,7 @@ urlpatterns = [
name="delete_excuse_type",
),
path("data_check/", views.DataCheckView.as_view(), name="check_data",),
path("data_check/run/", views.run_data_checks, name="data_check_run",),
path(
"data_check/<int:id_>/<str:solve_option>/",
views.solve_data_check_view,
......
......@@ -23,7 +23,11 @@ from aleksis.apps.chronos.util.date import get_weeks_for_year, week_weekday_to_d
from aleksis.core.mixins import AdvancedCreateView, AdvancedDeleteView, AdvancedEditView
from aleksis.core.models import Group, Person, SchoolTerm
from aleksis.core.util import messages
from aleksis.core.util.core_helpers import get_site_preferences, objectgetter_optional
from aleksis.core.util.core_helpers import (
get_site_preferences,
is_celery_enabled,
objectgetter_optional,
)
from .forms import (
ExcuseTypeForm,
......@@ -765,15 +769,25 @@ class DataCheckView(ListView):
template_name = "alsijil/data_check/list.html"
context_object_name = "results"
def get_context_data(self, **kwargs: Any) -> Dict[str, Any]:
context = super().get_context_data(**kwargs)
check_data()
return context
def get_queryset(self) -> QuerySet:
return DataCheckResult.objects.filter(solved=False).order_by("check")
def run_data_checks(request: HttpRequest) -> HttpResponse:
check_data()
if is_celery_enabled():
messages.success(
request,
_(
"The data check has been started. Please note that it may take "
"a while before you are able to fetch the data on this page."
),
)
else:
messages.success(request, _("The data check has been finished."))
return redirect("check_data")
def solve_data_check_view(
request: HttpRequest, id_: int, solve_option: str = "default"
):
......
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