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 _ ...@@ -7,6 +7,8 @@ from django.utils.translation import gettext as _
import reversion import reversion
from calendarweek import CalendarWeek from calendarweek import CalendarWeek
from aleksis.core.util.core_helpers import celery_optional
class SolveOption: class SolveOption:
name: str = "default" name: str = "default"
...@@ -90,6 +92,7 @@ DATA_CHECKS_BY_NAME = {check.name: check for check in DATA_CHECKS} ...@@ -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] DATA_CHECKS_CHOICES = [(check.name, check.verbose_name) for check in DATA_CHECKS]
@celery_optional
def check_data(): def check_data():
for check in DATA_CHECKS: for check in DATA_CHECKS:
logging.info(f"Run check: {check.verbose_name}") 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 @@ ...@@ -10,7 +10,7 @@
{% block page_title %}{% blocktrans %}Data checks{% endblocktrans %}{% endblock %} {% block page_title %}{% blocktrans %}Data checks{% endblocktrans %}{% endblock %}
{% block content %} {% 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> <i class="material-icons left">refresh</i>
{% trans "Check data again" %} {% trans "Check data again" %}
</a> </a>
......
...@@ -69,6 +69,7 @@ urlpatterns = [ ...@@ -69,6 +69,7 @@ urlpatterns = [
name="delete_excuse_type", name="delete_excuse_type",
), ),
path("data_check/", views.DataCheckView.as_view(), name="check_data",), path("data_check/", views.DataCheckView.as_view(), name="check_data",),
path("data_check/run/", views.run_data_checks, name="data_check_run",),
path( path(
"data_check/<int:id_>/<str:solve_option>/", "data_check/<int:id_>/<str:solve_option>/",
views.solve_data_check_view, views.solve_data_check_view,
......
...@@ -23,7 +23,11 @@ from aleksis.apps.chronos.util.date import get_weeks_for_year, week_weekday_to_d ...@@ -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.mixins import AdvancedCreateView, AdvancedDeleteView, AdvancedEditView
from aleksis.core.models import Group, Person, SchoolTerm from aleksis.core.models import Group, Person, SchoolTerm
from aleksis.core.util import messages 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 ( from .forms import (
ExcuseTypeForm, ExcuseTypeForm,
...@@ -765,15 +769,25 @@ class DataCheckView(ListView): ...@@ -765,15 +769,25 @@ class DataCheckView(ListView):
template_name = "alsijil/data_check/list.html" template_name = "alsijil/data_check/list.html"
context_object_name = "results" 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: def get_queryset(self) -> QuerySet:
return DataCheckResult.objects.filter(solved=False).order_by("check") 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( def solve_data_check_view(
request: HttpRequest, id_: int, solve_option: str = "default" 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