From ecef920d0c989e61292b098f895eac1faa1e108b Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Tue, 19 Nov 2024 20:43:04 +0200 Subject: [PATCH 01/39] Explicitly mark used fields in FormSet Using shorthand "__all__" is counted as explicit here. Remove unused inlineformset_factory and ModelForm. These fixes are due to deprecation in Django 1.6 and future removal in Django 1.8. --- web/tupa/formit.py | 42 +++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/web/tupa/formit.py b/web/tupa/formit.py index c8b7b42e..08630e06 100644 --- a/web/tupa/formit.py +++ b/web/tupa/formit.py @@ -37,24 +37,26 @@ class VartioForm(ModelForm): class Meta: model = Vartio + fields = [ + "nro", + "nimi", + "lippukunta", + "piiri", + "ulkopuolella", + "keskeyttanyt", + ] VartioFormSet = inlineformset_factory( Sarja, Vartio, extra=30, - fields=( - "nro", - "nimi", - "lippukunta", - "piiri", - "ulkopuolella", - "keskeyttanyt", - ), form=VartioForm, ) -MaariteFormSet = inlineformset_factory(OsaTehtava, SyoteMaarite, extra=3) +MaariteFormSet = inlineformset_factory( + OsaTehtava, SyoteMaarite, extra=3, fields="__all__" +) class SarjaForm(ModelForm): @@ -74,13 +76,22 @@ class SarjaForm(ModelForm): vartion_minimikoko = forms.IntegerField(widget=forms.HiddenInput, required=False) -SarjaFormSet = inlineformset_factory(Kisa, Sarja, extra=8, form=SarjaForm) +SarjaFormSet = inlineformset_factory( + Kisa, + Sarja, + extra=8, + form=SarjaForm, + fields=[ + "nimi", + "tasapiste_teht1", + "tasapiste_teht2", + "tasapiste_teht3", + ], +) SarjaFormSet.helppiteksti = mark_safe( '' ) -TehtavaValintaFormSet = inlineformset_factory(Sarja, Tehtava, fields=("jarjestysnro",)) - class TuhoaTehtavaForm(ModelForm): nimi = forms.CharField(widget=forms.HiddenInput, required=False) @@ -99,6 +110,7 @@ class TuhoaTehtavaForm(ModelForm): class Meta: model = Tehtava + fields = [] tuhoaTehtaviaFormset = modelformset_factory( @@ -398,11 +410,7 @@ def clean_nimi(self): class Meta: model = Kisa - - -class PoistaTehtavaForm(ModelForm): - class Meta: - model = Tehtava + fields = "__all__" class UploadFileForm(forms.Form): From 550193def3f97c127dc09e27d4c9d8a48ef89874 Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Wed, 20 Nov 2024 13:33:38 +0200 Subject: [PATCH 02/39] Use XHTML style boolean attribute to silence deprecation warning This fix is due to future change in functionality in Django 1.8. --- web/tupa/formit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/tupa/formit.py b/web/tupa/formit.py index 08630e06..e4a02e70 100644 --- a/web/tupa/formit.py +++ b/web/tupa/formit.py @@ -250,7 +250,7 @@ def initPisteSyote(self, fieldName): if not kesk == None and not nro == None: if kesk <= nro: # Keskeyttänyt self.fields[fieldName].widget.attrs["class"] = "kesk" - self.fields[fieldName].widget.attrs["readonly"] = True + self.fields[fieldName].widget.attrs["readonly"] = "readonly" self.initial[fieldName] = "kesk" From 602efad6963fe64fb79ee65f0f5f24074cf94917 Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Wed, 20 Nov 2024 13:47:01 +0200 Subject: [PATCH 03/39] Upgrade Django to 1.7 Remove souht as Django 1.7 has built-in migrations. --- README.md | 1 + docs/manual.md | 2 +- requirements.txt | 3 +-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 7206b9dc..d77db471 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ Tämän ohjelman mukana pitäisi tulla kopio GPL-lisenssistä; jos näin ei ole, * Rakenna kontti: `docker build -t kipa_dev -f dev.Dockerfile .` * Käynnistä kontti: `docker run -it --rm --volume ".:/app" --volume "/tmp/tietokanta:/db" -p 8000:8000 kipa_dev bash` * Kontissa: `cd web` +* Kontissa: `python manage.py migrate` * Kontissa: `python manage.py runserver 0.0.0.0:8000` ### Yksikkötestien ajaminen diff --git a/docs/manual.md b/docs/manual.md index d72a2482..8b4d7f5e 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -139,7 +139,7 @@ Vieraile tupa2.sf.net Imagen linkkiä varten. Kipan laskenta perustuu Pythonin-ohjelmointikielellä kirjoitettuun koodiin. Tällä hetkellä kehitysversiossa on käytössä Python 3.3. -Djangon versio 1.6 on testattu kehityspalvelimen kanssa toimivaksi. +Djangon versio 1.7 on testattu kehityspalvelimen kanssa toimivaksi. Apache-asennus ei toimi kehitysversiossa. diff --git a/requirements.txt b/requirements.txt index 7be70edb..618fcc86 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,3 @@ -django==1.6 -south +django==1.7 #mysql-python # git+https://github.com/PyMySQL/mysqlclient-python.git@v1.4.6#egg=MySQLdb From 76da2657475f1971f1b2fa2d206846e0922f9de0 Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Fri, 22 Nov 2024 14:30:16 +0200 Subject: [PATCH 04/39] Document that manage.py syncdb is no longer in use --- docs/manual.md | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/docs/manual.md b/docs/manual.md index 8b4d7f5e..01e85d1b 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -922,15 +922,11 @@ Käyttää testidatana kaikkia fixtures/tests/ löytyviä XML-päätteisiä tietokantapohjia. ``` -python manage.py syncdb +python manage.py makemigrations +python manage.py migrate ``` - -päivittää tietokantatiedoston "tupa.db" "models.py" päivitetyn määrittelyn perustella. - -VAROITUS: Mikäli tietokannan rakenne olennaisesti muuttuu, on -mahdollista ettei se enään ole yhteensopiva jo olemassa olevan tietokannan kanssa. -Näin tietokantaa voi olla vaikea enään muokata päivityksen jälkeen. -On suositeltavaa varmuuskopioida ja nollata tietokanta aina ennen päivittämistä. +Ovat komentoja, joilla saadaan päivitettyä tietokannan rakennetta, jos models.py on muuttunut. +Djangon dokumentaatio opastaa niiden käytössä. ``` python manage.py flush From 133dba2833af92a6827536cebeb5d9da0ceb88aa Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Thu, 21 Nov 2024 10:22:48 +0200 Subject: [PATCH 05/39] Upgrade Python to version 3.4 --- .github/workflows/continuous-integration.yml | 4 ++-- Dockerfile | 4 ++-- README.md | 2 +- dev.Dockerfile | 4 ++-- docs/manual.md | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index e8d52123..5a37f937 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -18,8 +18,8 @@ jobs: pip install 'black==24.10.0' - name: Check formatting run: | - black -t py33 --check . - black -t py33 --check web/**/*.py.example + black -t py34 --check . + black -t py34 --check web/**/*.py.example unit-tests-sqlite: runs-on: ubuntu-latest timeout-minutes: 15 diff --git a/Dockerfile b/Dockerfile index 41402928..3d237342 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.3 +FROM python:3.4 WORKDIR /app/web @@ -8,4 +8,4 @@ CMD ["python", "./manage.py", "runserver", "0.0.0.0:3000"] COPY . /app/ COPY web/settings/docker.py.example /app/web/settings/docker.py -RUN pip install --trusted-host pypi.python.org -r /app/requirements.txt +RUN pip install -r /app/requirements.txt diff --git a/README.md b/README.md index d77db471..8b5ab7bd 100644 --- a/README.md +++ b/README.md @@ -47,4 +47,4 @@ Kipaan suunniteltua kirjautumista. ### Python-koodin formatointi -Koodi noudattaa Black-autoformatterin vesion 24.10.0 mukaista tyyliä. Blackille annetaan lippu `--target-version py33`. Formatointi tarkastetaan osana CI-putkea. +Koodi noudattaa Black-autoformatterin vesion 24.10.0 mukaista tyyliä. Blackille annetaan lippu `--target-version py34`. Formatointi tarkastetaan osana CI-putkea. diff --git a/dev.Dockerfile b/dev.Dockerfile index afe411f8..f971a8b4 100644 --- a/dev.Dockerfile +++ b/dev.Dockerfile @@ -1,7 +1,7 @@ -FROM python:3.3 +FROM python:3.4 WORKDIR /app COPY ./requirements.txt /requirements.txt -RUN pip install --trusted-host pypi.python.org -r /requirements.txt +RUN pip install -r /requirements.txt diff --git a/docs/manual.md b/docs/manual.md index 01e85d1b..64d19383 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -137,7 +137,7 @@ Vieraile tupa2.sf.net Imagen linkkiä varten. ### Muut käyttöjärjestelmät / itse muokattava asennus Kipan laskenta perustuu Pythonin-ohjelmointikielellä kirjoitettuun koodiin. -Tällä hetkellä kehitysversiossa on käytössä Python 3.3. +Tällä hetkellä kehitysversiossa on käytössä Python 3.4. Djangon versio 1.7 on testattu kehityspalvelimen kanssa toimivaksi. From 43f8b29235343a3bcc19e0035196afe173157f37 Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Thu, 21 Nov 2024 10:43:46 +0200 Subject: [PATCH 06/39] Upgrade Django to 1.8 --- README.md | 2 +- docs/manual.md | 2 +- requirements.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 8b5ab7bd..7312d502 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Tämän ohjelman mukana pitäisi tulla kopio GPL-lisenssistä; jos näin ei ole, * Rakenna kontti: `docker build -t kipa_dev -f dev.Dockerfile .` * Käynnistä kontti: `docker run -it --rm --volume ".:/app" --volume "/tmp/tietokanta:/db" -p 8000:8000 kipa_dev bash` * Kontissa: `cd web` -* Kontissa: `python manage.py migrate` +* Kontissa: `python manage.py migrate --fake-initial --noinput` * Kontissa: `python manage.py runserver 0.0.0.0:8000` ### Yksikkötestien ajaminen diff --git a/docs/manual.md b/docs/manual.md index 64d19383..45b41978 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -139,7 +139,7 @@ Vieraile tupa2.sf.net Imagen linkkiä varten. Kipan laskenta perustuu Pythonin-ohjelmointikielellä kirjoitettuun koodiin. Tällä hetkellä kehitysversiossa on käytössä Python 3.4. -Djangon versio 1.7 on testattu kehityspalvelimen kanssa toimivaksi. +Djangon versio 1.8 on testattu kehityspalvelimen kanssa toimivaksi. Apache-asennus ei toimi kehitysversiossa. diff --git a/requirements.txt b/requirements.txt index 618fcc86..22a746e7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -django==1.7 +django==1.8 #mysql-python # git+https://github.com/PyMySQL/mysqlclient-python.git@v1.4.6#egg=MySQLdb From a05e6cc1095dfb1f9d11405dd569a8a0391c964e Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Thu, 21 Nov 2024 12:26:34 +0200 Subject: [PATCH 07/39] Add django.contrib.auth.middleware.SessionAuthenticationMiddleware In Django 1.10, session verification will be enabled regardless of whether or not SessionAuthenticationMiddleware is enabled. This is made to silence deprecation warning. --- web/settings/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/web/settings/__init__.py b/web/settings/__init__.py index 9017a4d5..6e419cd8 100644 --- a/web/settings/__init__.py +++ b/web/settings/__init__.py @@ -86,6 +86,7 @@ "django.contrib.sessions.middleware.SessionMiddleware", "django.contrib.messages.middleware.MessageMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", + "django.contrib.auth.middleware.SessionAuthenticationMiddleware", ) ROOT_URLCONF = "urls" From c51e64f564c4b83a49f34c497102d1af5a7b59fc Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Thu, 21 Nov 2024 12:49:27 +0200 Subject: [PATCH 08/39] Pass callable views to url() and declare urlpatterns as list django.conf.urls.patterns is deprecated and will be removed in Django 2.0. --- web/tupa/urls.py | 103 ++++++++++++++++++++++++----------------------- web/urls.py | 27 +++++++------ 2 files changed, 66 insertions(+), 64 deletions(-) diff --git a/web/tupa/urls.py b/web/tupa/urls.py index 39f28fe2..5da3e170 100644 --- a/web/tupa/urls.py +++ b/web/tupa/urls.py @@ -2,82 +2,83 @@ # Copyright (C) 2010 Espoon Partiotuki ry. ept@partio.fi from __future__ import absolute_import -from django.conf.urls import patterns +from django.conf.urls import url from django.conf import settings +from django.views.static import serve + +from .views import * tal = r"(?P(talletettu)?)/?$" -urlpatterns = patterns( - "tupa.views", - (r"^apua/", "apua"), - (r"^$", "etusivu"), - (r"^post_txt/(?P[^/]+)/$", "post_txt"), - (r"^(?P[^/]+)/tallenna/$", "tallennaKisa"), - (r"^login/$", "loginSivu"), - (r"^logout/$", "logoutSivu"), - (r"^lisaaKisa/$", "korvaaKisa"), - (r"^(?P[^/]+)/$", "kisa"), - (r"^uusiKisa/maarita/$", "maaritaKisa"), - (r"^(?P[^/]+)/korvaa/$", "korvaaKisa"), - (r"^(?P[^/]+)/poista/$", "poistaKisa"), - (r"^(?P[^/]+)/maarita/" + tal, "maaritaKisa"), - (r"^(?P[^/]+)/maarita/tehtava/$", "maaritaValitseTehtava"), - ( +urlpatterns = [ + url(r"^apua/", apua), + url(r"^$", etusivu), + url(r"^post_txt/(?P[^/]+)/$", post_txt), + url(r"^(?P[^/]+)/tallenna/$", tallennaKisa), + url(r"^login/$", loginSivu), + url(r"^logout/$", logoutSivu), + url(r"^lisaaKisa/$", korvaaKisa), + url(r"^(?P[^/]+)/$", kisa), + url(r"^uusiKisa/maarita/$", maaritaKisa), + url(r"^(?P[^/]+)/korvaa/$", korvaaKisa), + url(r"^(?P[^/]+)/poista/$", poistaKisa), + url(r"^(?P[^/]+)/maarita/" + tal, maaritaKisa), + url(r"^(?P[^/]+)/maarita/tehtava/$", maaritaValitseTehtava), + url( r"^(?P[^/]+)/maarita/tehtava/uusi/sarja/(?P\d+)/$", - "maaritaTehtava", + maaritaTehtava, ), - ( + url( r"^(?P[^/]+)/maarita/tehtava/(?P\d+)/" + tal, - "maaritaTehtava", + maaritaTehtava, ), - ( + url( r"^(?P[^/]+)/maarita/vaiheet/(?P\d+)/(?P\d*)/?", - "tehtavanVaiheet", + tehtavanVaiheet, ), - (r"^(?P[^/]+)/maarita/vartiot/" + tal, "maaritaVartiot"), - ( + url(r"^(?P[^/]+)/maarita/vartiot/" + tal, maaritaVartiot), + url( r"^(?P[^/]+)/maarita/tehtava/kopioi/sarjaan/(?P\d+)/$", - "kopioiTehtavia", + kopioiTehtavia, ), - (r"^(?P[^/]+)/maarita/testitulos/" + tal, "testiTulos"), - ( + url(r"^(?P[^/]+)/maarita/testitulos/" + tal, testiTulos), + url( r"^(?P[^/]+)/luo/sarja/(?P\d+)/testitulokset/$", - "luoTestiTulokset", + luoTestiTulokset, ), - (r"^(?P[^/]+)/maarita/tuomarineuvos/" + tal, "tuomarineuvos"), - (r"^(?P[^/]+)/syota/(?P(tarkistus/)?)$", "syotaKisa"), - ( + url(r"^(?P[^/]+)/maarita/tuomarineuvos/" + tal, tuomarineuvos), + url(r"^(?P[^/]+)/syota/(?P(tarkistus/)?)$", syotaKisa), + url( r"^(?P[^/]+)/syota/(?P(tarkistus/)?)tehtava/(?P\d+)/" + tal, - "syotaTehtava", + syotaTehtava, ), - (r"^(?P[^/]+)/tulosta/normaali/$", "tulosta"), - ( + url(r"^(?P[^/]+)/tulosta/normaali/$", tulosta), + url( r"^(?P[^/]+)/tulosta/normaali/sarja/(?P\d+)/$", - "tulostaSarja", + tulostaSarja, ), - (r"^(?P[^/]+)/tulosta/tilanne/$", "laskennanTilanne"), - (r"^(?P[^/]+)/tulosta/heijasta/sarja/(?P\d+)/$", "heijasta"), - (r"^(?P[^/]+)/tulosta/heijasta/$", "heijasta"), - ( + url(r"^(?P[^/]+)/tulosta/tilanne/$", laskennanTilanne), + url(r"^(?P[^/]+)/tulosta/heijasta/sarja/(?P\d+)/$", heijasta), + url(r"^(?P[^/]+)/tulosta/heijasta/$", heijasta), + url( r"^(?P[^/]+)/tulosta/tuloste/sarja/(?P\d+)/$", - "tulostaSarjaHTML", + tulostaSarjaHTML, ), - (r"^(?P[^/]+)/tulosta/tuloste/$", "tulosta"), - ( + url(r"^(?P[^/]+)/tulosta/tuloste/$", tulosta), + url( r"^(?P[^/]+)/tulosta/csv/sarja/(?P\d+)/$", - "sarjanTuloksetCSV", + sarjanTuloksetCSV, ), - (r"^(?P[^/]+)/tulosta/csv/$", "tulosta"), - (r"^(?P[^/]+)/tulosta/piirit/$", "piirit"), -) + url(r"^(?P[^/]+)/tulosta/csv/$", tulosta), + url(r"^(?P[^/]+)/tulosta/piirit/$", piirit), +] if settings.DEBUG: - urlpatterns += patterns( - "", - ( + urlpatterns += [ + url( r"^kipamedia/(?P.*)$", - "django.views.static.serve", + serve, {"document_root": settings.STATIC_DOC_ROOT}, ), - ) + ] diff --git a/web/urls.py b/web/urls.py index 5c59709e..803ca2b5 100644 --- a/web/urls.py +++ b/web/urls.py @@ -1,24 +1,25 @@ from __future__ import absolute_import -from django.conf.urls import include, patterns +from django.conf.urls import include, url from django.contrib import admin from django.conf import settings +from django.views.static import serve + +from tupa.views import raportti_500 admin.autodiscover() -urlpatterns = patterns( - "", - (r"^kipa/", include("tupa.urls")), - (r"^admin/", include(admin.site.urls)), -) +urlpatterns = [ + url(r"^kipa/", include("tupa.urls")), + url(r"^admin/", include(admin.site.urls)), +] if settings.SERVE_MEDIA: - urlpatterns += patterns( - "", - ( + urlpatterns += [ + url( r"^kipamedia/(?P.*)$", - "django.views.static.serve", + serve, {"document_root": settings.STATIC_DOC_ROOT}, - ), - ) + ) + ] -handler500 = "tupa.views.raportti_500" +handler500 = raportti_500 From 1372bd547526e773efff9a8739cfcc64b4f34d7c Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Thu, 21 Nov 2024 12:55:56 +0200 Subject: [PATCH 09/39] Use new TEMPLATES setting to define where templates are This set value tells to load templates from app's subdirectory named "templates" --- web/settings/__init__.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/web/settings/__init__.py b/web/settings/__init__.py index 6e419cd8..4d6e2066 100644 --- a/web/settings/__init__.py +++ b/web/settings/__init__.py @@ -91,12 +91,15 @@ ROOT_URLCONF = "urls" -TEMPLATE_DIRS = ( - hakemisto + "/templates", - # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". - # Always use forward slashes, even on Windows. - # Don't forget to use absolute paths, not relative paths. -) +TEMPLATES = [ + { + "BACKEND": "django.template.backends.django.DjangoTemplates", + "DIRS": [ + hakemisto + "/templates", + ], + "APP_DIRS": True, + }, +] INSTALLED_APPS = [ "django.contrib.auth", From 57fb33d38c5d91f238bd4ca825d7371b90fb5092 Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Thu, 21 Nov 2024 14:07:34 +0200 Subject: [PATCH 10/39] Replace render_to_response with render This is due deprecation of context_instance argument for render_to_response. See https://docs.djangoproject.com/en/1.8/releases/1.8/#dictionary-and-context-instance-arguments-of-rendering-functions --- web/tupa/views.py | 119 +++++++++++++++++++++++----------------------- 1 file changed, 60 insertions(+), 59 deletions(-) diff --git a/web/tupa/views.py b/web/tupa/views.py index 213ca11c..360490d2 100644 --- a/web/tupa/views.py +++ b/web/tupa/views.py @@ -6,7 +6,7 @@ from django import forms from django.core import serializers -from django.shortcuts import render_to_response, redirect, get_object_or_404 +from django.shortcuts import render, redirect, get_object_or_404 from django.http import HttpResponse from django.utils.safestring import mark_safe from decimal import ROUND_UP, Decimal @@ -146,10 +146,10 @@ def etusivu(request): vanha_tietokanta = testaa_tietokanta() if vanha_tietokanta: kisat = None - return render_to_response( + return render( + request, "tupa/index.html", - {"vanha_tietokanta": vanha_tietokanta, "object_list": kisat}, - context_instance=RequestContext(request), + context={"vanha_tietokanta": vanha_tietokanta, "object_list": kisat}, ) @@ -164,15 +164,15 @@ def kisa(request, kisa_nimi): for s in kisa.sarja_set.all(): s.taustaTulokset() # tulosten taustalaskenta - return render_to_response( + return render( + request, "tupa/kisa.html", - { + context={ "kisa": kisa, "kisa_nimi": kisa_nimi, "heading": "Etusivu", "vanha_tietokanta": vanha_tietokanta, }, - context_instance=RequestContext(request), ) @@ -183,15 +183,15 @@ def tulosta(request, kisa_nimi, tulostyyppi=""): if len(tulostyyppi): tulostyyppi += "/" sarjat = Sarja.objects.select_related().filter(kisa__nimi=kisa_nimi) - return render_to_response( + return render( + request, "tupa/tulosta.html", - { + context={ "sarja_list": sarjat, "kisa_nimi": kisa_nimi, "tulostyyppi": tulostyyppi, "heading": "Tulokset sarjoittain", }, - context_instance=RequestContext(request), ) @@ -240,21 +240,22 @@ def maaritaKisa(request, kisa_nimi=None, talletettu=None): taakse = "/kipa/" if kisa_nimi: taakse = "/kipa/" + kisa_nimi + "/" - return render_to_response( + return render( + request, "tupa/maarita.html", - { + context={ "heading": "Määritä kisa", "forms": (kisaForm,), "formsets": (sarjaFormit,), "kisa_nimi": kisa_nimi, "talletettu": tal, }, - context_instance=RequestContext(request), ) else: - return render_to_response( + return render( + request, "tupa/maarita_riisuttu.html", - { + context={ "heading": "Määritä kisa", "forms": (kisaForm,), "formsets": (sarjaFormit,), @@ -262,7 +263,6 @@ def maaritaKisa(request, kisa_nimi=None, talletettu=None): "talletettu": tal, "ohjaus_nappi": "siirry vartioiden määrittelyyn", }, - context_instance=RequestContext(request), ) @@ -294,14 +294,14 @@ def maaritaValitseTehtava(request, kisa_nimi): if posti: return kipaResponseRedirect("/kipa/" + kisa_nimi + "/maarita/tehtava/") else: - return render_to_response( + return render( + request, "tupa/maaritaValitseTehtava.html", - { + context={ "taulukko": taulukko, "heading": "Muokkaa tehtävää", "kisa_nimi": kisa_nimi, }, - context_instance=RequestContext(request), ) @@ -349,16 +349,16 @@ def maaritaVartiot(request, kisa_nimi, talletettu=None): and request.META["HTTP_REFERER"][-23:] == "/kipa/uusiKisa/maarita/" ): ohjaus_nappi = "siirry tehtävien määritykseen" # Ensimmäisellä talletuksella näkyy siirry nappi. - return render_to_response( + return render( + request, "tupa/valitse_formset.html", - { + context={ "taulukko": taulukko, "heading": "Määritä vartiot", "kisa_nimi": kisa_nimi, "talletettu": tal, "ohjaus_nappi": ohjaus_nappi, }, - context_instance=RequestContext(request), ) @@ -438,9 +438,10 @@ def maaritaTehtava(request, kisa_nimi, tehtava_id=None, sarja_id=None, talletett tal = "" if talletettu == "talletettu" and not posti: tal = "Talletettu!" # Edellisellä sivulla talletettu - return render_to_response( + return render( + request, "tupa/maarita.html", - { + context={ "forms": [tehtavaForm], "heading": otsikko, "kisa_nimi": kisa_nimi, @@ -452,7 +453,6 @@ def maaritaTehtava(request, kisa_nimi, tehtava_id=None, sarja_id=None, talletett "talletettu": tal, "ohjaus_nappi": "lisää uusi tehtävä", }, - context_instance=RequestContext(request), ) @@ -474,10 +474,10 @@ def syotaKisa(request, kisa_nimi, tarkistus=None): tehtavat.id = s.id tehtavat.otsikko = s.nimi taulukko.append(tehtavat) - return render_to_response( + return render( + request, "tupa/valitse_linkki.html", - {"taulukko": taulukko, "heading": otsikko, "kisa_nimi": kisa_nimi}, - context_instance=RequestContext(request), + context={"taulukko": taulukko, "heading": otsikko, "kisa_nimi": kisa_nimi}, ) @@ -585,9 +585,10 @@ def syotaTehtava(request, kisa_nimi, tehtava_id, talletettu=None, tarkistus=None tilanne = tehtavanTilanne(tehtava) if syottovirhe: tilanne = "v" - return render_to_response( + return render( + request, "tupa/syota_tehtava.html", - { + context={ "tehtava": tehtava, "sarja": tehtava.sarja.id, "maaritteet": maaritteet, @@ -619,7 +620,6 @@ def syotaTehtava(request, kisa_nimi, tehtava_id, talletettu=None, tarkistus=None "title": "Syötä tuloksia", }, }, - context_instance=RequestContext(request), ) @@ -665,16 +665,16 @@ def testiTulos(request, kisa_nimi, talletettu=None): if talletettu == "talletettu" and not posti: tal = "Talletettu!" - return render_to_response( + return render( + request, "tupa/testitulos.html", - { + context={ "taulukko": taulukko, "heading": "Testituloksien määritys", "kisa_nimi": kisa_nimi, "taakse": "/kipa/" + kisa_nimi + "/", "talletettu": tal, }, - context_instance=RequestContext(request), ) @@ -720,9 +720,10 @@ def tuomarineuvos(request, kisa_nimi, talletettu=None): if talletettu == "talletettu" and not posti: tal = "Talletettu!" - return render_to_response( + return render( + request, "tupa/tuomarineuvos.html", - { + context={ "taulukko": taulukko, "heading": "Tuomarineuvoston antamien tulosten määritys", "kisa_nimi": kisa_nimi, @@ -756,9 +757,10 @@ def tulostaSarja( templaatti = "tupa/tuloksetHTML.html" if vaihtoaika: templaatti = "tupa/heijasta.html" - return render_to_response( + return render( + request, templaatti, - { + context={ "tulos_taulukko": mukana, "ulkona_taulukko": ulkona, "kisa_nimi": kisa_nimi, @@ -769,7 +771,6 @@ def tulostaSarja( "vaihto_id": vaihto_id, "taakse": {"url": "../../", "title": "Tulokset sarjoittain"}, }, - context_instance=RequestContext(request), ) @@ -941,16 +942,16 @@ class KopioiForm(forms.Form): if redirect: return kipaResponseRedirect("/kipa/" + kisa.nimi + "/maarita/tehtava/") else: - return render_to_response( + return render( + request, "tupa/valitse_form.html", - { + context={ "heading": "Kopioi Tehtäviä sarjaan: " + sarjaan.nimi, "taulukko": formit, "kisa_nimi": kisa_nimi, "taakse": "/kipa/" + kisa_nimi + "/maarita/tehtava/", "napin_tyyppi": "kopioi", }, - context_instance=RequestContext(request), ) @@ -974,10 +975,10 @@ def poistaKisa(request, kisa_nimi): kisa.delete() return kipaResponseRedirect("/kipa/") otsikko = "Poista kisa" - return render_to_response( + return render( + request, "tupa/poista_kisa.html", - {"heading": otsikko, "kisa_nimi": kisa_nimi}, - context_instance=RequestContext(request), + context={"heading": otsikko, "kisa_nimi": kisa_nimi}, ) @@ -1107,16 +1108,16 @@ def korvaaKisa(request, kisa_nimi=None): form = UploadFileForm() if kisa_nimi: - return render_to_response( + return render( + request, "tupa/upload.html", - {"heading": otsikko, "form": form, "kisa_nimi": kisa_nimi}, - context_instance=RequestContext(request), + context={"heading": otsikko, "form": form, "kisa_nimi": kisa_nimi}, ) else: - return render_to_response( + return render( + request, "tupa/upload_riisuttu.html", - {"heading": otsikko, "form": form, "kisa_nimi": kisa_nimi}, - context_instance=RequestContext(request), + context={"heading": otsikko, "form": form, "kisa_nimi": kisa_nimi}, ) @@ -1162,11 +1163,7 @@ def raportti_500(request): """ linkki = mark_safe("" - return render_to_response( - "500.html", - {"error": mark_safe(linkki)}, - context_instance=RequestContext(request), - ) + return render(request, "500.html", context={"error": mark_safe(linkki)}) def haeTulos(tuloksetSarjalle, vartio, tehtava): @@ -1261,10 +1258,14 @@ def laskennanTilanne(request, kisa_nimi): taulukko[suurin + 1][sarake] = (None, "0 %") sarake += 1 - return render_to_response( + return render( + request, "tupa/laskennan_tilanne.html", - {"taulukko": taulukko, "kisa_nimi": kisa_nimi, "heading": "Laskennan tilanne"}, - context_instance=RequestContext(request), + context={ + "taulukko": taulukko, + "kisa_nimi": kisa_nimi, + "heading": "Laskennan tilanne", + }, ) From e16b3f4253bbd7d87d2dcb82dafe99c43acaef5c Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Thu, 21 Nov 2024 21:10:11 +0200 Subject: [PATCH 11/39] Upgrade Django to 1.9 Add needed context processors. Remove redeclaration of default template loaders. --- docs/manual.md | 2 +- requirements.txt | 2 +- web/settings/__init__.py | 13 +++++++------ 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/docs/manual.md b/docs/manual.md index 45b41978..77be535c 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -139,7 +139,7 @@ Vieraile tupa2.sf.net Imagen linkkiä varten. Kipan laskenta perustuu Pythonin-ohjelmointikielellä kirjoitettuun koodiin. Tällä hetkellä kehitysversiossa on käytössä Python 3.4. -Djangon versio 1.8 on testattu kehityspalvelimen kanssa toimivaksi. +Djangon versio 1.9 on testattu kehityspalvelimen kanssa toimivaksi. Apache-asennus ei toimi kehitysversiossa. diff --git a/requirements.txt b/requirements.txt index 22a746e7..6f148f82 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -django==1.8 +django==1.9 #mysql-python # git+https://github.com/PyMySQL/mysqlclient-python.git@v1.4.6#egg=MySQLdb diff --git a/web/settings/__init__.py b/web/settings/__init__.py index 4d6e2066..36bbb9e2 100644 --- a/web/settings/__init__.py +++ b/web/settings/__init__.py @@ -75,12 +75,6 @@ # Make this unique, and don't share it with anybody. SECRET_KEY = "shbtq($_^om(xep=5f97k2+ntb3!cqn+)%8r#s6udzqnhj$5p6" -# List of callables that know how to import templates from various sources. -TEMPLATE_LOADERS = ( - "django.template.loaders.filesystem.Loader", - "django.template.loaders.app_directories.Loader", -) - MIDDLEWARE_CLASSES = ( "django.middleware.common.CommonMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", @@ -98,6 +92,13 @@ hakemisto + "/templates", ], "APP_DIRS": True, + "OPTIONS": { + "context_processors": [ + "django.template.context_processors.request", + "django.contrib.auth.context_processors.auth", + "django.contrib.messages.context_processors.messages", + ], + }, }, ] From 8c5212656a86b4b3f24ec9a85484d789c4a35925 Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Thu, 21 Nov 2024 21:26:21 +0200 Subject: [PATCH 12/39] Explicit cascade deletion behavior on_delete will become a required argument in Django 2.0. --- web/tupa/models.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/web/tupa/models.py b/web/tupa/models.py index ebc28dd9..c1f3e629 100644 --- a/web/tupa/models.py +++ b/web/tupa/models.py @@ -5,6 +5,7 @@ from __future__ import absolute_import from django.core.cache import cache from django.db import models +from django.db.models import CASCADE from .TulosLaskin import laskeSarja import settings @@ -39,7 +40,7 @@ class Sarja(models.Model): nimi = models.CharField(max_length=255) vartion_maksimikoko = models.IntegerField(blank=True, null=True, default=0) vartion_minimikoko = models.IntegerField(blank=True, null=True, default=0) - kisa = models.ForeignKey(Kisa) + kisa = models.ForeignKey(Kisa, on_delete=CASCADE) tasapiste_teht1 = models.IntegerField(blank=True, null=True) tasapiste_teht2 = models.IntegerField(blank=True, null=True) tasapiste_teht3 = models.IntegerField(blank=True, null=True) @@ -103,7 +104,7 @@ class Meta: class Vartio(models.Model): nro = models.IntegerField() nimi = models.CharField(max_length=255) - sarja = models.ForeignKey(Sarja) + sarja = models.ForeignKey(Sarja, on_delete=CASCADE) piiri = models.CharField(max_length=255, blank=True) lippukunta = models.CharField(max_length=255, blank=True) puhelinnro = models.CharField(max_length=255, blank=True) @@ -153,7 +154,7 @@ class Tehtava(models.Model): rastikasky = models.TextField(blank=True) jarjestysnro = models.IntegerField() kaava = models.CharField(max_length=255) - sarja = models.ForeignKey(Sarja) + sarja = models.ForeignKey(Sarja, on_delete=CASCADE) tarkistettu = models.BooleanField(default=False) maksimipisteet = models.CharField(max_length=255) svirhe = models.BooleanField(default=False) @@ -219,7 +220,7 @@ class OsaTehtava(models.Model): nimi = models.CharField(max_length=255) tyyppi = models.CharField(max_length=255, choices=OSA_TYYPIT) kaava = models.CharField(max_length=255) - tehtava = models.ForeignKey(Tehtava) + tehtava = models.ForeignKey(Tehtava, on_delete=CASCADE) def save(self, *args, **kwargs): # Tulokset uusiksi tallennuksen yhteydessä self.tehtava.sarja.tuloksetUusiksi() @@ -250,7 +251,7 @@ class SyoteMaarite(models.Model): nimi = models.CharField(max_length=255) tyyppi = models.CharField(max_length=255, choices=TYYPPI_VAIHTOEHDOT) kali_vihje = models.CharField(max_length=255, blank=True, null=True) - osa_tehtava = models.ForeignKey(OsaTehtava) + osa_tehtava = models.ForeignKey(OsaTehtava, on_delete=CASCADE) def save(self, *args, **kwargs): # Tulokset uusiksi tallennuksen yhteydessä self.osa_tehtava.tehtava.sarja.tuloksetUusiksi() @@ -285,8 +286,8 @@ class Meta: class Syote(models.Model): arvo = models.CharField(max_length=255, blank=True, null=True) - vartio = models.ForeignKey(Vartio, blank=True, null=True) - maarite = models.ForeignKey(SyoteMaarite) + vartio = models.ForeignKey(Vartio, blank=True, null=True, on_delete=CASCADE) + maarite = models.ForeignKey(SyoteMaarite, on_delete=CASCADE) tarkistus = models.CharField(max_length=255, blank=True, null=True) def save(self, *args, **kwargs): # Tulokset uusiksi tallennuksen yhteydessä @@ -324,8 +325,8 @@ class Meta: class TulosTaulu(models.Model): - vartio = models.ForeignKey(Vartio) - tehtava = models.ForeignKey(Tehtava) + vartio = models.ForeignKey(Vartio, on_delete=CASCADE) + tehtava = models.ForeignKey(Tehtava, on_delete=CASCADE) pisteet = models.CharField(max_length=255) def save(self, *args, **kwargs): # Tulokset uusiksi tallennuksen yhteydessä @@ -370,7 +371,7 @@ class Meta: class Parametri(models.Model): nimi = models.CharField(max_length=255) arvo = models.CharField(max_length=255) - osa_tehtava = models.ForeignKey(OsaTehtava) + osa_tehtava = models.ForeignKey(OsaTehtava, on_delete=CASCADE) class Meta: verbose_name_plural = "OsaTehtavan paramentrit" From 29a08060f2281453f274f3dbc68730fa3f751367 Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Thu, 21 Nov 2024 21:37:52 +0200 Subject: [PATCH 13/39] include() not needed in admin site url conf Error was: Cannot override the namespace for a dynamic module that provides a namespace. --- web/urls.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/urls.py b/web/urls.py index 803ca2b5..6f038a88 100644 --- a/web/urls.py +++ b/web/urls.py @@ -10,7 +10,7 @@ urlpatterns = [ url(r"^kipa/", include("tupa.urls")), - url(r"^admin/", include(admin.site.urls)), + url(r"^admin/", admin.site.urls), ] if settings.SERVE_MEDIA: From c81cbc0b304c505ea76a32760bdae3c52ada8628 Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Fri, 22 Nov 2024 09:27:33 +0200 Subject: [PATCH 14/39] Upgrade Django to 1.10 --- docs/manual.md | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/manual.md b/docs/manual.md index 77be535c..05e3c57c 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -139,7 +139,7 @@ Vieraile tupa2.sf.net Imagen linkkiä varten. Kipan laskenta perustuu Pythonin-ohjelmointikielellä kirjoitettuun koodiin. Tällä hetkellä kehitysversiossa on käytössä Python 3.4. -Djangon versio 1.9 on testattu kehityspalvelimen kanssa toimivaksi. +Djangon versio 1.10 on testattu kehityspalvelimen kanssa toimivaksi. Apache-asennus ei toimi kehitysversiossa. diff --git a/requirements.txt b/requirements.txt index 6f148f82..ac27922f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -django==1.9 +django==1.10 #mysql-python # git+https://github.com/PyMySQL/mysqlclient-python.git@v1.4.6#egg=MySQLdb From 7b05d3c85519e6c2fe3ca37bb955912b164fa0da Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Fri, 22 Nov 2024 14:03:00 +0200 Subject: [PATCH 15/39] Use new MIDDLEWARE setting Old-style middleware using settings.MIDDLEWARE_CLASSES is deprecated. --- web/settings/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/settings/__init__.py b/web/settings/__init__.py index 36bbb9e2..590045d1 100644 --- a/web/settings/__init__.py +++ b/web/settings/__init__.py @@ -75,13 +75,13 @@ # Make this unique, and don't share it with anybody. SECRET_KEY = "shbtq($_^om(xep=5f97k2+ntb3!cqn+)%8r#s6udzqnhj$5p6" -MIDDLEWARE_CLASSES = ( +MIDDLEWARE = [ "django.middleware.common.CommonMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", "django.contrib.messages.middleware.MessageMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", "django.contrib.auth.middleware.SessionAuthenticationMiddleware", -) +] ROOT_URLCONF = "urls" From 53644fb3a5b2c870b7e86f1024fdeff777565faf Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Fri, 22 Nov 2024 14:36:08 +0200 Subject: [PATCH 16/39] Upgrade Django to 1.11 --- docs/manual.md | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/manual.md b/docs/manual.md index 05e3c57c..68cbb404 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -139,7 +139,7 @@ Vieraile tupa2.sf.net Imagen linkkiä varten. Kipan laskenta perustuu Pythonin-ohjelmointikielellä kirjoitettuun koodiin. Tällä hetkellä kehitysversiossa on käytössä Python 3.4. -Djangon versio 1.10 on testattu kehityspalvelimen kanssa toimivaksi. +Djangon versio 1.11 on testattu kehityspalvelimen kanssa toimivaksi. Apache-asennus ei toimi kehitysversiossa. diff --git a/requirements.txt b/requirements.txt index ac27922f..041d20e1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -django==1.10 +django==1.11 #mysql-python # git+https://github.com/PyMySQL/mysqlclient-python.git@v1.4.6#egg=MySQLdb From 8f6a6e49adc19e50e446a2e05facbf03c26aee18 Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Sat, 23 Nov 2024 18:38:48 +0200 Subject: [PATCH 17/39] Renderer argument is required on Django 2.1 --- web/tupa/formit.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/web/tupa/formit.py b/web/tupa/formit.py index e4a02e70..79e2ee34 100644 --- a/web/tupa/formit.py +++ b/web/tupa/formit.py @@ -150,9 +150,9 @@ def __init__(self, helptext, *argcv): super(HelpWidget, self).__init__(*argcv) self.helptext = helptext - def render(self, name, value=None, attrs=None): + def render(self, name, value=None, attrs=None, renderer=None): return ( - mark_safe(super(HelpWidget, self).render(name, value, attrs)) + mark_safe(super(HelpWidget, self).render(name, value, attrs, renderer)) + "' @@ -164,7 +164,7 @@ class AikaWidget(forms.TextInput): Text input widget, exept for value formatting field values are converted from total seconds to "hh:mm:ss" """ - def render(self, name, value, attrs=None): + def render(self, name, value, attrs=None, renderer=None): newValue = value if newValue: try: @@ -182,7 +182,7 @@ def render(self, name, value, attrs=None): newValue = str(h) + ":" + str(min) + ":" + str(sec) except ValueError: pass - return super(AikaWidget, self).render(name, newValue, attrs) + return super(AikaWidget, self).render(name, newValue, attrs, renderer) class PisteField(forms.CharField): From ebecc559b611f6ac3d1b785415fd84a401c4c3a9 Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Sat, 23 Nov 2024 18:48:29 +0200 Subject: [PATCH 18/39] Upgrade Django to 2.0 SessionAuthenticationMiddlewar was removed as planned in commit "Add django.contrib.auth.middleware.SessionAuthenticationMiddleware". --- docs/manual.md | 2 +- requirements.txt | 2 +- web/settings/__init__.py | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/manual.md b/docs/manual.md index 68cbb404..ee5e800b 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -139,7 +139,7 @@ Vieraile tupa2.sf.net Imagen linkkiä varten. Kipan laskenta perustuu Pythonin-ohjelmointikielellä kirjoitettuun koodiin. Tällä hetkellä kehitysversiossa on käytössä Python 3.4. -Djangon versio 1.11 on testattu kehityspalvelimen kanssa toimivaksi. +Djangon versio 2.0 on testattu kehityspalvelimen kanssa toimivaksi. Apache-asennus ei toimi kehitysversiossa. diff --git a/requirements.txt b/requirements.txt index 041d20e1..3e832928 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -django==1.11 +django==2.0 #mysql-python # git+https://github.com/PyMySQL/mysqlclient-python.git@v1.4.6#egg=MySQLdb diff --git a/web/settings/__init__.py b/web/settings/__init__.py index 590045d1..34591dc2 100644 --- a/web/settings/__init__.py +++ b/web/settings/__init__.py @@ -80,7 +80,6 @@ "django.contrib.sessions.middleware.SessionMiddleware", "django.contrib.messages.middleware.MessageMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", - "django.contrib.auth.middleware.SessionAuthenticationMiddleware", ] ROOT_URLCONF = "urls" From 29b973f0961469e56c8645e27a6d4377d20a18b6 Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Sat, 23 Nov 2024 20:00:08 +0200 Subject: [PATCH 19/39] Remove unnecessary databas dump endpoint --- web/tupa/urls.py | 1 - web/tupa/views.py | 34 ---------------------------------- 2 files changed, 35 deletions(-) diff --git a/web/tupa/urls.py b/web/tupa/urls.py index 5da3e170..b06c23b2 100644 --- a/web/tupa/urls.py +++ b/web/tupa/urls.py @@ -13,7 +13,6 @@ urlpatterns = [ url(r"^apua/", apua), url(r"^$", etusivu), - url(r"^post_txt/(?P[^/]+)/$", post_txt), url(r"^(?P[^/]+)/tallenna/$", tallennaKisa), url(r"^login/$", loginSivu), url(r"^logout/$", logoutSivu), diff --git a/web/tupa/views.py b/web/tupa/views.py index 360490d2..c3cd4401 100644 --- a/web/tupa/views.py +++ b/web/tupa/views.py @@ -2,7 +2,6 @@ # Copyright (C) 2011 Espoon Partiotuki ry. ept@partio.fi from __future__ import absolute_import -import re from django import forms from django.core import serializers @@ -1121,39 +1120,6 @@ def korvaaKisa(request, kisa_nimi=None): ) -def post_txt(request, parametrit): - """ - Apunäkymä virhetilanteisiin. (error 500,server internal error) - -Luo kisan tietokannan xml formaattiin ja lisää perään post_data:n testausta varten. - -Palauttaa xml tiedoston. - """ - from xml.dom.minidom import parseString - - kisa_nimi = re.search(r"^osoite=/kipa/(\w+)/", parametrit).group(1) - kisa = get_object_or_404(Kisa, nimi=kisa_nimi) - test_data = kisa_xml(kisa) - post_data = parametrit.split("&") - doc = parseString(test_data) - post_test = doc.createElement("post_request") - post_test.setAttribute("address", post_data[0].split("=")[1]) - - for p in post_data[1:]: - data = p.split("=") - elem = doc.createElement("input") - elem.setAttribute("name", data[0]) - elem.setAttribute("value", data[1]) - post_test.appendChild(elem) - doc.childNodes[0].appendChild(post_test) - - response = HttpResponse( - doc.toprettyxml(indent=" "), - content_type="application/xml", - context_instance=RequestContext(request), - ) - response["Content-Disposition"] = "attachment; filename=tietokanta.xml" - return response - - def raportti_500(request): """ Html Error 500 sivu (Server internal error), From 8c538eeb2cf37a3d1ea3689c546e6b5bd25e2978 Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Sat, 23 Nov 2024 20:44:16 +0200 Subject: [PATCH 20/39] Use simplified URL routing syntax --- web/tupa/urls.py | 117 ++++++++++++++++++++++++----------------------- web/urls.py | 11 +++-- 2 files changed, 67 insertions(+), 61 deletions(-) diff --git a/web/tupa/urls.py b/web/tupa/urls.py index b06c23b2..4cd9a099 100644 --- a/web/tupa/urls.py +++ b/web/tupa/urls.py @@ -2,81 +2,86 @@ # Copyright (C) 2010 Espoon Partiotuki ry. ept@partio.fi from __future__ import absolute_import -from django.conf.urls import url +from functools import partial from django.conf import settings +from django.urls import path from django.views.static import serve from .views import * -tal = r"(?P(talletettu)?)/?$" - urlpatterns = [ - url(r"^apua/", apua), - url(r"^$", etusivu), - url(r"^(?P[^/]+)/tallenna/$", tallennaKisa), - url(r"^login/$", loginSivu), - url(r"^logout/$", logoutSivu), - url(r"^lisaaKisa/$", korvaaKisa), - url(r"^(?P[^/]+)/$", kisa), - url(r"^uusiKisa/maarita/$", maaritaKisa), - url(r"^(?P[^/]+)/korvaa/$", korvaaKisa), - url(r"^(?P[^/]+)/poista/$", poistaKisa), - url(r"^(?P[^/]+)/maarita/" + tal, maaritaKisa), - url(r"^(?P[^/]+)/maarita/tehtava/$", maaritaValitseTehtava), - url( - r"^(?P[^/]+)/maarita/tehtava/uusi/sarja/(?P\d+)/$", - maaritaTehtava, + path("apua/", apua), + path("", etusivu), + path("/tallenna/", tallennaKisa), + path("login/", loginSivu), + path("logout/", logoutSivu), + path("lisaaKisa/", korvaaKisa), + path("/", kisa), + path("uusiKisa/maarita/", maaritaKisa), + path("/korvaa/", korvaaKisa), + path("/poista/", poistaKisa), + path("/maarita/", maaritaKisa), + path( + "/maarita/talletettu/", partial(maaritaKisa, talletettu="talletettu") ), - url( - r"^(?P[^/]+)/maarita/tehtava/(?P\d+)/" + tal, - maaritaTehtava, + path("/maarita/tehtava/", maaritaValitseTehtava), + path("/maarita/tehtava/uusi/sarja//", maaritaTehtava), + path("/maarita/tehtava//", maaritaTehtava), + path( + "/maarita/tehtava//talletettu/", + partial(maaritaTehtava, talletettu="talletettu"), ), - url( - r"^(?P[^/]+)/maarita/vaiheet/(?P\d+)/(?P\d*)/?", - tehtavanVaiheet, + path( + "/maarita/vaiheet///", tehtavanVaiheet ), - url(r"^(?P[^/]+)/maarita/vartiot/" + tal, maaritaVartiot), - url( - r"^(?P[^/]+)/maarita/tehtava/kopioi/sarjaan/(?P\d+)/$", - kopioiTehtavia, + path("/maarita/vartiot/", maaritaVartiot), + path( + "/maarita/vartiot/talletettu", + partial(maaritaVartiot, talletettu="talletettu"), ), - url(r"^(?P[^/]+)/maarita/testitulos/" + tal, testiTulos), - url( - r"^(?P[^/]+)/luo/sarja/(?P\d+)/testitulokset/$", - luoTestiTulokset, + path("/maarita/tehtava/kopioi/sarjaan//", kopioiTehtavia), + path("/maarita/testitulos/", testiTulos), + path( + "/maarita/testitulos/talletettu(", + partial(testiTulos, talletettu="talletettu"), ), - url(r"^(?P[^/]+)/maarita/tuomarineuvos/" + tal, tuomarineuvos), - url(r"^(?P[^/]+)/syota/(?P(tarkistus/)?)$", syotaKisa), - url( - r"^(?P[^/]+)/syota/(?P(tarkistus/)?)tehtava/(?P\d+)/" - + tal, - syotaTehtava, + path("/luo/sarja//testitulokset/", luoTestiTulokset), + path("/maarita/tuomarineuvos/", tuomarineuvos), + path( + "/maarita/tuomarineuvos/talletettu", + partial(tuomarineuvos, talletettu="talletettu"), ), - url(r"^(?P[^/]+)/tulosta/normaali/$", tulosta), - url( - r"^(?P[^/]+)/tulosta/normaali/sarja/(?P\d+)/$", - tulostaSarja, + path("/syota/", syotaKisa), + path("/syota/tarkistus/", partial(syotaKisa, tarkistus=True)), + path("/syota/tehtava//", syotaTehtava), + path( + "/syota/tehtava//talletettu/", + partial(syotaTehtava, talletettu="talletettu"), ), - url(r"^(?P[^/]+)/tulosta/tilanne/$", laskennanTilanne), - url(r"^(?P[^/]+)/tulosta/heijasta/sarja/(?P\d+)/$", heijasta), - url(r"^(?P[^/]+)/tulosta/heijasta/$", heijasta), - url( - r"^(?P[^/]+)/tulosta/tuloste/sarja/(?P\d+)/$", - tulostaSarjaHTML, + path( + "/syota/tarkistus/tehtava//", + partial(syotaTehtava, tarkistus=True), ), - url(r"^(?P[^/]+)/tulosta/tuloste/$", tulosta), - url( - r"^(?P[^/]+)/tulosta/csv/sarja/(?P\d+)/$", - sarjanTuloksetCSV, + path( + "/syota/tarkistus/tehtava//talletettu/", + partial(syotaTehtava, tarkistus=True, talletettu="talletettu"), ), - url(r"^(?P[^/]+)/tulosta/csv/$", tulosta), - url(r"^(?P[^/]+)/tulosta/piirit/$", piirit), + path("/tulosta/normaali/", tulosta), + path("/tulosta/normaali/sarja//", tulostaSarja), + path("/tulosta/tilanne/", laskennanTilanne), + path("/tulosta/heijasta/sarja//", heijasta), + path("/tulosta/heijasta/", heijasta), + path("/tulosta/tuloste/sarja//", tulostaSarjaHTML), + path("/tulosta/tuloste/", tulosta), + path("/tulosta/csv/sarja//", sarjanTuloksetCSV), + path("/tulosta/csv/", tulosta), + path("/tulosta/piirit/", piirit), ] if settings.DEBUG: urlpatterns += [ - url( - r"^kipamedia/(?P.*)$", + path( + "kipamedia/", serve, {"document_root": settings.STATIC_DOC_ROOT}, ), diff --git a/web/urls.py b/web/urls.py index 6f038a88..ee648e21 100644 --- a/web/urls.py +++ b/web/urls.py @@ -1,7 +1,8 @@ from __future__ import absolute_import -from django.conf.urls import include, url +from django.conf.urls import include from django.contrib import admin from django.conf import settings +from django.urls import path from django.views.static import serve from tupa.views import raportti_500 @@ -9,14 +10,14 @@ admin.autodiscover() urlpatterns = [ - url(r"^kipa/", include("tupa.urls")), - url(r"^admin/", admin.site.urls), + path("kipa/", include("tupa.urls")), + path("admin/", admin.site.urls), ] if settings.SERVE_MEDIA: urlpatterns += [ - url( - r"^kipamedia/(?P.*)$", + path( + "kipamedia/", serve, {"document_root": settings.STATIC_DOC_ROOT}, ) From 8809910e89452c1823e2387a93d6ffcb9d1f4cbe Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Sat, 23 Nov 2024 21:33:50 +0200 Subject: [PATCH 21/39] Upgrade Python to 3.7 --- .github/workflows/continuous-integration.yml | 4 ++-- Dockerfile | 2 +- README.md | 2 +- dev.Dockerfile | 2 +- docs/manual.md | 2 +- web/tupa/tests.py | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index 5a37f937..6ee81f3c 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -18,8 +18,8 @@ jobs: pip install 'black==24.10.0' - name: Check formatting run: | - black -t py34 --check . - black -t py34 --check web/**/*.py.example + black -t py37 --check . + black -t py37 --check web/**/*.py.example unit-tests-sqlite: runs-on: ubuntu-latest timeout-minutes: 15 diff --git a/Dockerfile b/Dockerfile index 3d237342..b9d633e8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.4 +FROM python:3.7 WORKDIR /app/web diff --git a/README.md b/README.md index 7312d502..83df6147 100644 --- a/README.md +++ b/README.md @@ -47,4 +47,4 @@ Kipaan suunniteltua kirjautumista. ### Python-koodin formatointi -Koodi noudattaa Black-autoformatterin vesion 24.10.0 mukaista tyyliä. Blackille annetaan lippu `--target-version py34`. Formatointi tarkastetaan osana CI-putkea. +Koodi noudattaa Black-autoformatterin vesion 24.10.0 mukaista tyyliä. Blackille annetaan lippu `--target-version py37`. Formatointi tarkastetaan osana CI-putkea. diff --git a/dev.Dockerfile b/dev.Dockerfile index f971a8b4..c5d7f9b8 100644 --- a/dev.Dockerfile +++ b/dev.Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.4 +FROM python:3.7 WORKDIR /app diff --git a/docs/manual.md b/docs/manual.md index ee5e800b..4382f30d 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -137,7 +137,7 @@ Vieraile tupa2.sf.net Imagen linkkiä varten. ### Muut käyttöjärjestelmät / itse muokattava asennus Kipan laskenta perustuu Pythonin-ohjelmointikielellä kirjoitettuun koodiin. -Tällä hetkellä kehitysversiossa on käytössä Python 3.4. +Tällä hetkellä kehitysversiossa on käytössä Python 3.7. Djangon versio 2.0 on testattu kehityspalvelimen kanssa toimivaksi. diff --git a/web/tupa/tests.py b/web/tupa/tests.py index 5761d0dd..ce7ed281 100644 --- a/web/tupa/tests.py +++ b/web/tupa/tests.py @@ -405,7 +405,7 @@ def run_tests( verbosity=1, interactive=True, failfast=True, - **kwargs + **kwargs, ): return run_one_fixture(test_labels, verbosity, interactive, extra_tests) From 05093def291bd5f7324134c55d5b832b5d2beda9 Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Sun, 24 Nov 2024 12:16:27 +0200 Subject: [PATCH 22/39] Fix regex warnings * Square brackets in character classes are escaped. * Raw string is used for regexes. * Square brackets not escaped when not a part of character class. * Match parenthesis with character class --- web/tupa/taulukkolaskin.py | 14 +++++++------- web/tupa/tests.py | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/web/tupa/taulukkolaskin.py b/web/tupa/taulukkolaskin.py index cd943794..d26d17f5 100644 --- a/web/tupa/taulukkolaskin.py +++ b/web/tupa/taulukkolaskin.py @@ -63,10 +63,10 @@ def laske(lauseke, m={}, funktiot={}): lause = re.sub(r"([-][0](?![0-9.]))", r"", lause) # Korvataan funktiot # Vakionumerot numeroinstansseiksi: - oper = r"-+*/(,[<>=" - num = "-?\d+([.]\d+)?" + oper = r"-+*/(,\[<>=" + num = r"-?\d+([.]\d+)?" lause = re.sub( - r"((?')", lause, ) @@ -76,17 +76,17 @@ def laske(lauseke, m={}, funktiot={}): lause = re.sub(r"\.([a-zA-Z_]\w*)(?=\.)", r"['\g<1>']", lause) # .x. -> [x]. lause = re.sub(r"\.([a-zA-Z_]+[a-zA-Z_0-9]*)", r"['\g<1>']", lause) # .x -> [x] lause = re.sub( - r"\.(\d+)(?=[" + oper + "]|$|\]|\))", r"['\g<1>']", lause + r"\.(\d+)(?=[" + oper + "]|$|]|[)])", r"['\g<1>']", lause ) # .n -> [n] lause = re.sub( - r"(?<=[" + oper + r"])([a-zA-Z_0-9]\w*(?=[[]))", r"m['\g<1>']", lause + r"(?<=[" + oper + r"])([a-zA-Z_0-9]\w*(?=[\[]))", r"m['\g<1>']", lause ) # x[ -> m[x][ # Korvataan yksinäiset muuttujat (lähinnä funktioita): lause = re.sub( - r"([a-zA-Z_][a-zA-Z_0-9]*(?![a-zA-Z_0-9.(]|[[']))", r"m['\g<1>']", lause + r"([a-zA-Z_][a-zA-Z_0-9]*(?![a-zA-Z_0-9.(]|[\[']))", r"m['\g<1>']", lause ) # x -> m[x] lause = re.sub( - r"([a-zA-Z_][a-zA-Z_0-9]*(?![a-zA-Z_0-9.]|[[']))", r"f['\g<1>']", lause + r"([a-zA-Z_][a-zA-Z_0-9]*(?![a-zA-Z_0-9.]|[\[']))", r"f['\g<1>']", lause ) # x( -> f[x]( tulos = None # lasketaan tulos: diff --git a/web/tupa/tests.py b/web/tupa/tests.py index ce7ed281..db3a89f1 100644 --- a/web/tupa/tests.py +++ b/web/tupa/tests.py @@ -314,7 +314,7 @@ def testTehtavanUudelleenTallennus(self): ) page = str(c.get(osoite).content) page = page.replace("\n", "") - page = re.sub("\s+", " ", page) + page = re.sub(r"\s+", " ", page) all = re.findall( ')', page ) @@ -335,7 +335,7 @@ def testTehtavanUudelleenTallennus(self): if all: for i in all: j = re.search( - "<(\s*?option.*?selected=[\"']selected[\"'].*?)>", i[1] + r"<(\s*?option.*?selected=[\"']selected[\"'].*?)>", i[1] ) if j: value = re.search("value=[\"'](.*?)[\"']", j.group(1)) From ee6bbf26e42036848f15b26499852b0b7edd0ab3 Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Sun, 24 Nov 2024 15:41:17 +0200 Subject: [PATCH 23/39] Upgrade Django to 2.1 --- docs/manual.md | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/manual.md b/docs/manual.md index 4382f30d..a60279e3 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -139,7 +139,7 @@ Vieraile tupa2.sf.net Imagen linkkiä varten. Kipan laskenta perustuu Pythonin-ohjelmointikielellä kirjoitettuun koodiin. Tällä hetkellä kehitysversiossa on käytössä Python 3.7. -Djangon versio 2.0 on testattu kehityspalvelimen kanssa toimivaksi. +Djangon versio 2.1 on testattu kehityspalvelimen kanssa toimivaksi. Apache-asennus ei toimi kehitysversiossa. diff --git a/requirements.txt b/requirements.txt index 3e832928..0408dc7c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -django==2.0 +django==2.1 #mysql-python # git+https://github.com/PyMySQL/mysqlclient-python.git@v1.4.6#egg=MySQLdb From 86e2d2d8b54e93f6bf3f29c90427d602e1b59d02 Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Mon, 25 Nov 2024 16:10:44 +0200 Subject: [PATCH 24/39] Upgrade Django to 2.2 --- docs/manual.md | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/manual.md b/docs/manual.md index a60279e3..05ddbc2e 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -139,7 +139,7 @@ Vieraile tupa2.sf.net Imagen linkkiä varten. Kipan laskenta perustuu Pythonin-ohjelmointikielellä kirjoitettuun koodiin. Tällä hetkellä kehitysversiossa on käytössä Python 3.7. -Djangon versio 2.1 on testattu kehityspalvelimen kanssa toimivaksi. +Djangon versio 2.2 on testattu kehityspalvelimen kanssa toimivaksi. Apache-asennus ei toimi kehitysversiossa. diff --git a/requirements.txt b/requirements.txt index 0408dc7c..063641c6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -django==2.1 +django==2.2 #mysql-python # git+https://github.com/PyMySQL/mysqlclient-python.git@v1.4.6#egg=MySQLdb From 63479b418353679e35a105c543ceb7b007430221 Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Mon, 25 Nov 2024 17:50:19 +0200 Subject: [PATCH 25/39] Upgrade Django to 3.0 --- docs/manual.md | 2 +- requirements.txt | 2 +- web/settings/__init__.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/manual.md b/docs/manual.md index 05ddbc2e..d553ca12 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -139,7 +139,7 @@ Vieraile tupa2.sf.net Imagen linkkiä varten. Kipan laskenta perustuu Pythonin-ohjelmointikielellä kirjoitettuun koodiin. Tällä hetkellä kehitysversiossa on käytössä Python 3.7. -Djangon versio 2.2 on testattu kehityspalvelimen kanssa toimivaksi. +Djangon versio 3.0 on testattu kehityspalvelimen kanssa toimivaksi. Apache-asennus ei toimi kehitysversiossa. diff --git a/requirements.txt b/requirements.txt index 063641c6..7817c8fe 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -django==2.2 +django==3.0 #mysql-python # git+https://github.com/PyMySQL/mysqlclient-python.git@v1.4.6#egg=MySQLdb diff --git a/web/settings/__init__.py b/web/settings/__init__.py index 34591dc2..77402125 100644 --- a/web/settings/__init__.py +++ b/web/settings/__init__.py @@ -44,7 +44,7 @@ TIME_ZONE = "Europe/Helsinki" # Language code for this installation. -LANGUAGE_CODE = "fi-FI" +LANGUAGE_CODE = "fi" SITE_ID = 1 From 980205af74d119f55bb8e55dee6dad251f06ff28 Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Mon, 25 Nov 2024 17:53:57 +0200 Subject: [PATCH 26/39] Upgrade Django 3.1 --- docs/manual.md | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/manual.md b/docs/manual.md index d553ca12..11153989 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -139,7 +139,7 @@ Vieraile tupa2.sf.net Imagen linkkiä varten. Kipan laskenta perustuu Pythonin-ohjelmointikielellä kirjoitettuun koodiin. Tällä hetkellä kehitysversiossa on käytössä Python 3.7. -Djangon versio 3.0 on testattu kehityspalvelimen kanssa toimivaksi. +Djangon versio 3.1 on testattu kehityspalvelimen kanssa toimivaksi. Apache-asennus ei toimi kehitysversiossa. diff --git a/requirements.txt b/requirements.txt index 7817c8fe..6cb9e823 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -django==3.0 +django==3.1 #mysql-python # git+https://github.com/PyMySQL/mysqlclient-python.git@v1.4.6#egg=MySQLdb From 12c7ecdee9d0458b76d0872ebf2b80b26757abf1 Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Mon, 25 Nov 2024 18:09:57 +0200 Subject: [PATCH 27/39] Replace depracated ifequal tag with if tag Also ifnotequal tag with if and "!=" --- web/templates/tupa/forms/arviointi.html | 2 +- .../tupa/forms/maksimi_suoritus.html | 6 ++--- web/templates/tupa/forms/nolla_suoritus.html | 20 ++++++++-------- web/templates/tupa/forms/osa_tehtava.html | 6 ++--- web/templates/tupa/forms/puhdas_kaava.html | 4 ++-- web/templates/tupa/forms/vapaa_kaava.html | 4 ++-- web/templates/tupa/heijasta.html | 24 +++++++++---------- web/templates/tupa/laskennan_tilanne.html | 20 ++++++++-------- web/templates/tupa/syota_tehtava.html | 22 ++++++++--------- web/templates/tupa/tulokset.html | 24 +++++++++---------- web/templates/tupa/tuloksetHTML.html | 24 +++++++++---------- web/templates/tupa/valitse.html | 4 ++-- web/templates/tupa/valitse_form.html | 4 ++-- 13 files changed, 82 insertions(+), 82 deletions(-) diff --git a/web/templates/tupa/forms/arviointi.html b/web/templates/tupa/forms/arviointi.html index b09f9754..5157e9a3 100644 --- a/web/templates/tupa/forms/arviointi.html +++ b/web/templates/tupa/forms/arviointi.html @@ -7,7 +7,7 @@

Käytössa:

+{% if arvio.value == "abs" %}checked="checked" {% endif %}/>

{{oikea.errors}} diff --git a/web/templates/tupa/forms/maksimi_suoritus.html b/web/templates/tupa/forms/maksimi_suoritus.html index 49b116be..86fd4fc8 100644 --- a/web/templates/tupa/forms/maksimi_suoritus.html +++ b/web/templates/tupa/forms/maksimi_suoritus.html @@ -9,13 +9,13 @@ Parhaat pisteet saa:


@@ -47,22 +47,22 @@ +{% if nollan_kerroin.value == "1.5" %}checked="checked" {% endif %}/> 1.5 (pienin tulos saa parhaat pisteet)
+{% if nollan_kerroin.value == "0.5" %}checked="checked" {% endif%}/> 0.5 (suurin tulos saa parhaat pisteet)
+{% endif %} +{% endif %} +{% endif %}/> muu: diff --git a/web/templates/tupa/forms/osa_tehtava.html b/web/templates/tupa/forms/osa_tehtava.html index 4cdea044..df134dd3 100644 --- a/web/templates/tupa/forms/osa_tehtava.html +++ b/web/templates/tupa/forms/osa_tehtava.html @@ -23,14 +23,14 @@

{{ heading }}

+ {%if sarake.tyyppi == tyyppi %} checked='checked' {% endif %} /> {{sarake.otsikko}}     {% endfor %} {% for sarake in taulukko%} diff --git a/web/templates/tupa/forms/puhdas_kaava.html b/web/templates/tupa/forms/puhdas_kaava.html index d4055ad7..02169951 100644 --- a/web/templates/tupa/forms/puhdas_kaava.html +++ b/web/templates/tupa/forms/puhdas_kaava.html @@ -17,10 +17,10 @@ diff --git a/web/templates/tupa/forms/vapaa_kaava.html b/web/templates/tupa/forms/vapaa_kaava.html index ca8bff8e..8b34703e 100644 --- a/web/templates/tupa/forms/vapaa_kaava.html +++ b/web/templates/tupa/forms/vapaa_kaava.html @@ -13,10 +13,10 @@ diff --git a/web/templates/tupa/heijasta.html b/web/templates/tupa/heijasta.html index 7252d9df..ad143673 100644 --- a/web/templates/tupa/heijasta.html +++ b/web/templates/tupa/heijasta.html @@ -114,13 +114,13 @@ {{ sarake.maksimipisteet }} {% else %} - {% ifnotequal forloop.counter 0 %} - {% ifnotequal forloop.counter 1 %} - {% ifnotequal forloop.counter 2 %} + {% if forloop.counter != 0 %} + {% if forloop.counter != 1 %} + {% if forloop.counter != 2 %} {{ sarake.maksimipisteet }} - {% endifnotequal %} - {% endifnotequal %} - {% endifnotequal %} + {% endif %} + {% endif %} + {% endif %} {% endif %} {%endfor %} @@ -137,7 +137,7 @@ {% else %} {% for sarake in rivi %} {% comment %} ylarivi {% endcomment %} - {% ifequal forloop.counter 2 %} + {% if forloop.counter == 2 %} {% comment %} ekasarake {% endcomment %} {{ sarake.nro }} {{sarake.nimi}} {%if sarake.lippukunta %}
{%endif%} @@ -145,7 +145,7 @@ {%if sarake.piiri %}
{%endif%} {{sarake.piiri}} {% else %} - {% ifequal forloop.counter 3 %} + {% if forloop.counter == 3 %} {{sarake}} {% comment %} muut sarakkeet {% endcomment %} {% else %} @@ -154,8 +154,8 @@ {{ sarake }} {% if forloop.first %} {%endif%} - {% endifequal %} - {% endifequal %} + {% endif %} + {% endif %} {% endfor %} {% endif %} @@ -169,7 +169,7 @@ {% for sarake in rivi %} - {% ifequal forloop.counter 2 %} + {% if forloop.counter == 2 %} {% comment %} ekasarake {% endcomment %} {{ sarake.nro }} {{ sarake.nimi }} {%if sarake.lippukunta %}
{%endif%} @@ -184,7 +184,7 @@ {{ sarake }} {% if forloop.first %} {%endif%} - {% endifequal %} + {% endif %} {% endfor %} {%if forloop.counter|divisibleby:"5" %} diff --git a/web/templates/tupa/laskennan_tilanne.html b/web/templates/tupa/laskennan_tilanne.html index a116dab4..7ef4464b 100644 --- a/web/templates/tupa/laskennan_tilanne.html +++ b/web/templates/tupa/laskennan_tilanne.html @@ -22,23 +22,23 @@

Laskennan tilanne {% now " j.n.Y G:i"%}

{{ sarake.1 }} {%else%} - {% ifequal sarake.0 "a" %} + {% if sarake.0 == "a" %} {{sarake.1|alaviiva_pois}} - {%else%}{% ifequal sarake.0 "o" %} + {%else%}{% if sarake.0 == "o" %} {{sarake.1}} - {%else%}{% ifequal sarake.0 "s" %} + {%else%}{% if sarake.0 == "s" %} {{sarake.1}} - {%else%}{% ifequal sarake.0 "t" %} + {%else%}{% if sarake.0 == "t" %} {{sarake.1|alaviiva_pois}} - {%else%}{% ifequal sarake.0 "v" %} + {%else%}{% if sarake.0 == "v" %} {{sarake.1|alaviiva_pois}} {%else%} {{sarake.1}} - {% endifequal %} - {% endifequal %} - {% endifequal %} - {% endifequal %} - {% endifequal %} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endif %} {% endif %} {%endfor%} diff --git a/web/templates/tupa/syota_tehtava.html b/web/templates/tupa/syota_tehtava.html index 49ddafcd..64487eee 100755 --- a/web/templates/tupa/syota_tehtava.html +++ b/web/templates/tupa/syota_tehtava.html @@ -70,21 +70,21 @@

{{tehtava.nimi|alaviiva_pois}}

--> Tehtävän tila: - {%ifequal tilanne.0 "a"%} + {%if tilanne.0 == "a"%} - {% endifequal %} - {%ifequal tilanne.0 "o"%} + {% endif %} + {%if tilanne.0 == "o"%} - {% endifequal %} - {%ifequal tilanne.0 "s"%} + {% endif %} + {%if tilanne.0 == "s"%} - {% endifequal %} - {%ifequal tilanne.0 "t"%} + {% endif %} + {%if tilanne.0 == "t"%} - {% endifequal %} - {%ifequal tilanne.0 "v"%} + {% endif %} + {%if tilanne.0 == "v"%} - {% endifequal %} + {% endif %} @@ -128,7 +128,7 @@

{{tehtava.nimi|alaviiva_pois}}

{% for maarite in osatehtava.syotemaarite_set.all %} {{ maarite.tyyppi }} - {% ifequal maarite.tyyppi "aika" %}(hh:mm:ss){% endifequal %} + {% if maarite.tyyppi == "aika" %}(hh:mm:ss){% endif %} {% endfor %} diff --git a/web/templates/tupa/tulokset.html b/web/templates/tupa/tulokset.html index 1f197096..aa6ebc7d 100644 --- a/web/templates/tupa/tulokset.html +++ b/web/templates/tupa/tulokset.html @@ -86,13 +86,13 @@ {{ sarake.maksimipisteet }} {% else %} - {% ifnotequal forloop.counter 0 %} - {% ifnotequal forloop.counter 1 %} - {% ifnotequal forloop.counter 2 %} + {% if forloop.counter != 0 %} + {% if forloop.counter != 1 %} + {% if forloop.counter != 2 %} {{ sarake.maksimipisteet }} - {% endifnotequal %} - {% endifnotequal %} - {% endifnotequal %} + {% endif %} + {% endif %} + {% endif %} {% endif %} {%endfor %} @@ -109,7 +109,7 @@ {% else %} {% for sarake in rivi %} {% comment %} ylarivi {% endcomment %} - {% ifequal forloop.counter 2 %} + {% if forloop.counter == 2 %} {% comment %} ekasarake {% endcomment %} {{ sarake.nro }} {{sarake.nimi}} {%if sarake.lippukunta %}
{%endif%} @@ -117,7 +117,7 @@ {%if sarake.piiri %}
{%endif%} {{sarake.piiri}} {% else %} - {% ifequal forloop.counter 3 %} + {% if forloop.counter == 3 %} {{sarake}} {% comment %} muut sarakkeet {% endcomment %} {% else %} @@ -126,8 +126,8 @@ {{ sarake }} {% if forloop.first %} {%endif%} - {% endifequal %} - {% endifequal %} + {% endif %} + {% endif %} {% endfor %} {% endif %} @@ -141,7 +141,7 @@ {% for sarake in rivi %} - {% ifequal forloop.counter 2 %} + {% if forloop.counter == 2 %} {% comment %} ekasarake {% endcomment %} {{ sarake.nro }} {{ sarake.nimi }} {%if sarake.lippukunta %}
{%endif%} @@ -156,7 +156,7 @@ {{ sarake }} {% if forloop.first %} {%endif%} - {% endifequal %} + {% endif %} {% endfor %} {%if forloop.counter|divisibleby:"5" %} diff --git a/web/templates/tupa/tuloksetHTML.html b/web/templates/tupa/tuloksetHTML.html index 92b01e56..5237951b 100755 --- a/web/templates/tupa/tuloksetHTML.html +++ b/web/templates/tupa/tuloksetHTML.html @@ -113,13 +113,13 @@ {{ sarake.maksimipisteet }} {% else %} - {% ifnotequal forloop.counter 0 %} - {% ifnotequal forloop.counter 1 %} - {% ifnotequal forloop.counter 2 %} + {% if forloop.counter != 0 %} + {% if forloop.counter != 1 %} + {% if forloop.counter != 2 %} {{ sarake.maksimipisteet }} - {% endifnotequal %} - {% endifnotequal %} - {% endifnotequal %} + {% endif %} + {% endif %} + {% endif %} {% endif %} {%endfor %} @@ -136,7 +136,7 @@ {% else %} {% for sarake in rivi %} {% comment %} ylarivi {% endcomment %} - {% ifequal forloop.counter 2 %} + {% if forloop.counter == 2 %} {% comment %} ekasarake {% endcomment %} {{ sarake.nro }} {{sarake.nimi}} {%if sarake.lippukunta %}
{%endif%} @@ -144,7 +144,7 @@ {%if sarake.piiri %}
{%endif%} {{sarake.piiri}} {% else %} - {% ifequal forloop.counter 3 %} + {% if forloop.counter == 3 %} {{sarake}} {% comment %} muut sarakkeet {% endcomment %} {% else %} @@ -153,8 +153,8 @@ {{ sarake }} {% if forloop.first %} {%endif%} - {% endifequal %} - {% endifequal %} + {% endif %} + {% endif %} {% endfor %} {% endif %} @@ -168,7 +168,7 @@ {% for sarake in rivi %} - {% ifequal forloop.counter 2 %} + {% if forloop.counter == 2 %} {% comment %} ekasarake {% endcomment %} {{ sarake.nro }} {{ sarake.nimi }} {%if sarake.lippukunta %}
{%endif%} @@ -183,7 +183,7 @@ {{ sarake }} {% if forloop.first %} {%endif%} - {% endifequal %} + {% endif %} {% endfor %} {%if forloop.counter|divisibleby:"5" %} diff --git a/web/templates/tupa/valitse.html b/web/templates/tupa/valitse.html index 07999689..d59e3780 100644 --- a/web/templates/tupa/valitse.html +++ b/web/templates/tupa/valitse.html @@ -15,11 +15,11 @@

{{ heading }}

{% if taulukko %}
diff --git a/web/templates/tupa/valitse_form.html b/web/templates/tupa/valitse_form.html index ffe3d469..f3828cee 100644 --- a/web/templates/tupa/valitse_form.html +++ b/web/templates/tupa/valitse_form.html @@ -10,10 +10,10 @@ {% block content %}
{{ block.super }} -{%ifequal napin_tyyppi "kopioi" %} +{%if napin_tyyppi == "kopioi" %} {% include "tupa/kopioi.html" %} {% else %} {% include "tupa/tallenna.html" %} -{% endifequal %} +{% endif %}
{% endblock %} From 54544390fb35867ac40a8e91fe073979462a8d1d Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Mon, 25 Nov 2024 18:24:53 +0200 Subject: [PATCH 28/39] Upgrade Django to 3.2 Django's default automatic primary key is changed from integer to 64 bit integer. Define that DEFAULT_AUTO_FIELD so that old database doesn't cause warnings on startup. --- docs/manual.md | 2 +- requirements.txt | 2 +- web/settings/__init__.py | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/manual.md b/docs/manual.md index 11153989..1e5dea06 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -139,7 +139,7 @@ Vieraile tupa2.sf.net Imagen linkkiä varten. Kipan laskenta perustuu Pythonin-ohjelmointikielellä kirjoitettuun koodiin. Tällä hetkellä kehitysversiossa on käytössä Python 3.7. -Djangon versio 3.1 on testattu kehityspalvelimen kanssa toimivaksi. +Djangon versio 3.2 on testattu kehityspalvelimen kanssa toimivaksi. Apache-asennus ei toimi kehitysversiossa. diff --git a/requirements.txt b/requirements.txt index 6cb9e823..747e49bd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -django==3.1 +django==3.2 #mysql-python # git+https://github.com/PyMySQL/mysqlclient-python.git@v1.4.6#egg=MySQLdb diff --git a/web/settings/__init__.py b/web/settings/__init__.py index 77402125..beb46af4 100644 --- a/web/settings/__init__.py +++ b/web/settings/__init__.py @@ -118,6 +118,8 @@ TEST_RUNNER = "tupa.tests.CustomTestRunner" +DEFAULT_AUTO_FIELD = "django.db.models.AutoField" + # Should we serve the media files through Python? SERVE_MEDIA = DEBUG From a8720a96b160f631e1c61d66eaca4175507d25c1 Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Mon, 25 Nov 2024 20:17:34 +0200 Subject: [PATCH 29/39] Upgrade Python to 3.10 --- .github/workflows/continuous-integration.yml | 4 ++-- Dockerfile | 2 +- README.md | 2 +- dev.Dockerfile | 2 +- docs/manual.md | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index 6ee81f3c..e21ac4f2 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -18,8 +18,8 @@ jobs: pip install 'black==24.10.0' - name: Check formatting run: | - black -t py37 --check . - black -t py37 --check web/**/*.py.example + black -t py310 --check . + black -t py310 --check web/**/*.py.example unit-tests-sqlite: runs-on: ubuntu-latest timeout-minutes: 15 diff --git a/Dockerfile b/Dockerfile index b9d633e8..09fa06ac 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.7 +FROM python:3.10 WORKDIR /app/web diff --git a/README.md b/README.md index 83df6147..d3f04466 100644 --- a/README.md +++ b/README.md @@ -47,4 +47,4 @@ Kipaan suunniteltua kirjautumista. ### Python-koodin formatointi -Koodi noudattaa Black-autoformatterin vesion 24.10.0 mukaista tyyliä. Blackille annetaan lippu `--target-version py37`. Formatointi tarkastetaan osana CI-putkea. +Koodi noudattaa Black-autoformatterin vesion 24.10.0 mukaista tyyliä. Blackille annetaan lippu `--target-version py310`. Formatointi tarkastetaan osana CI-putkea. diff --git a/dev.Dockerfile b/dev.Dockerfile index c5d7f9b8..1828c270 100644 --- a/dev.Dockerfile +++ b/dev.Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.7 +FROM python:3.10 WORKDIR /app diff --git a/docs/manual.md b/docs/manual.md index 1e5dea06..b6196e9c 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -137,7 +137,7 @@ Vieraile tupa2.sf.net Imagen linkkiä varten. ### Muut käyttöjärjestelmät / itse muokattava asennus Kipan laskenta perustuu Pythonin-ohjelmointikielellä kirjoitettuun koodiin. -Tällä hetkellä kehitysversiossa on käytössä Python 3.7. +Tällä hetkellä kehitysversiossa on käytössä Python 3.10. Djangon versio 3.2 on testattu kehityspalvelimen kanssa toimivaksi. From 9352784ad68e0d1c4f3f802cb906420a39285058 Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Mon, 25 Nov 2024 20:52:16 +0200 Subject: [PATCH 30/39] Upgrade Django to 4.0 --- docs/manual.md | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/manual.md b/docs/manual.md index b6196e9c..0027fba1 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -139,7 +139,7 @@ Vieraile tupa2.sf.net Imagen linkkiä varten. Kipan laskenta perustuu Pythonin-ohjelmointikielellä kirjoitettuun koodiin. Tällä hetkellä kehitysversiossa on käytössä Python 3.10. -Djangon versio 3.2 on testattu kehityspalvelimen kanssa toimivaksi. +Djangon versio 4.0 on testattu kehityspalvelimen kanssa toimivaksi. Apache-asennus ei toimi kehitysversiossa. diff --git a/requirements.txt b/requirements.txt index 747e49bd..99d69f0a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -django==3.2 +django==4.0 #mysql-python # git+https://github.com/PyMySQL/mysqlclient-python.git@v1.4.6#egg=MySQLdb From c2a3211ae1ee9d2c5046e126a48a6b3ccbc60160 Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Mon, 25 Nov 2024 20:53:28 +0200 Subject: [PATCH 31/39] Do not use time zone support This is the default, but it is going to change in Django 5.0 to be enabled by default. --- web/settings/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/web/settings/__init__.py b/web/settings/__init__.py index beb46af4..926a8b5e 100644 --- a/web/settings/__init__.py +++ b/web/settings/__init__.py @@ -42,6 +42,7 @@ # Local time zone for this installation. TIME_ZONE = "Europe/Helsinki" +USE_TZ = False # Language code for this installation. LANGUAGE_CODE = "fi" From e3d0d1fc4db41a5b14e351b356badd1c895b4913 Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Mon, 25 Nov 2024 21:17:49 +0200 Subject: [PATCH 32/39] Upgrade Django to 4.1 --- docs/manual.md | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/manual.md b/docs/manual.md index 0027fba1..24a633dc 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -139,7 +139,7 @@ Vieraile tupa2.sf.net Imagen linkkiä varten. Kipan laskenta perustuu Pythonin-ohjelmointikielellä kirjoitettuun koodiin. Tällä hetkellä kehitysversiossa on käytössä Python 3.10. -Djangon versio 4.0 on testattu kehityspalvelimen kanssa toimivaksi. +Djangon versio 4.1 on testattu kehityspalvelimen kanssa toimivaksi. Apache-asennus ei toimi kehitysversiossa. diff --git a/requirements.txt b/requirements.txt index 99d69f0a..bd5f239b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -django==4.0 +django==4.1 #mysql-python # git+https://github.com/PyMySQL/mysqlclient-python.git@v1.4.6#egg=MySQLdb From b98657340d4f4cf0cb4410c7048993898f911f8c Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Tue, 26 Nov 2024 07:23:29 +0200 Subject: [PATCH 33/39] Use new recommended style to render forms Add CSS class to make sure that formsets are not spread to multiple "lines". --- web/media/kipa.css | 3 +++ web/settings/__init__.py | 2 ++ web/templates/tupa/maarita.html | 4 +++- web/templates/tupa/maarita_riisuttu.html | 4 +++- web/templates/tupa/valitse_formset.html | 4 +++- 5 files changed, 14 insertions(+), 3 deletions(-) diff --git a/web/media/kipa.css b/web/media/kipa.css index 59e930d5..513e9bd6 100644 --- a/web/media/kipa.css +++ b/web/media/kipa.css @@ -498,3 +498,6 @@ td.th_erotin { .capitalize {text-transform:capitalize;} +.oneRowInlineForm { + display: flex; +} \ No newline at end of file diff --git a/web/settings/__init__.py b/web/settings/__init__.py index 926a8b5e..1c2600c6 100644 --- a/web/settings/__init__.py +++ b/web/settings/__init__.py @@ -121,6 +121,8 @@ DEFAULT_AUTO_FIELD = "django.db.models.AutoField" +FORM_RENDERER = "django.forms.renderers.DjangoDivFormRenderer" + # Should we serve the media files through Python? SERVE_MEDIA = DEBUG diff --git a/web/templates/tupa/maarita.html b/web/templates/tupa/maarita.html index 08734a21..cb59a5f1 100644 --- a/web/templates/tupa/maarita.html +++ b/web/templates/tupa/maarita.html @@ -24,7 +24,9 @@

{{heading|alaviiva_pois}}

{{formset.label}} {{formset.helppiteksti}} {{ formset.management_form }} {% for form in formset.forms %} - {{ form }}
+
+ {{ form }} +
{% endfor %} {% endfor%} diff --git a/web/templates/tupa/maarita_riisuttu.html b/web/templates/tupa/maarita_riisuttu.html index 22fe9515..c6091dac 100644 --- a/web/templates/tupa/maarita_riisuttu.html +++ b/web/templates/tupa/maarita_riisuttu.html @@ -21,7 +21,9 @@

{{ heading }}

{{formset.label}} {{ formset.management_form }} {% for form in formset.forms %} - {{ form }}
+
+ {{ form }} +
{% endfor %} {% endfor%} diff --git a/web/templates/tupa/valitse_formset.html b/web/templates/tupa/valitse_formset.html index 2deb097e..ed3757cf 100644 --- a/web/templates/tupa/valitse_formset.html +++ b/web/templates/tupa/valitse_formset.html @@ -15,7 +15,9 @@ Keskeyttäneille vartioille ei enää syötetä tuloksia kyseisestä tehtävästä lähtien.
Sarjan ulkopuolelle siirtyneet vartiot saavat tulokset normaalisti, mutta niiden syötteitä ei käytetä esim. määriteltäessä interpoloinnissa nopeinta suoritusta.

{% for form in sarake.forms %} - {{ form }}
+
+ {{ form }} +
{% endfor %} {% endblock%} {% block content %} From 8cd3750846c6cc661136b98648fed9d8abebe3ac Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Tue, 26 Nov 2024 07:37:52 +0200 Subject: [PATCH 34/39] Upgrade Django to 4.2 --- docs/manual.md | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/manual.md b/docs/manual.md index 24a633dc..90ef0319 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -139,7 +139,7 @@ Vieraile tupa2.sf.net Imagen linkkiä varten. Kipan laskenta perustuu Pythonin-ohjelmointikielellä kirjoitettuun koodiin. Tällä hetkellä kehitysversiossa on käytössä Python 3.10. -Djangon versio 4.1 on testattu kehityspalvelimen kanssa toimivaksi. +Djangon versio 4.2 on testattu kehityspalvelimen kanssa toimivaksi. Apache-asennus ei toimi kehitysversiossa. diff --git a/requirements.txt b/requirements.txt index bd5f239b..ff4d5f6b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -django==4.1 +django==4.2 #mysql-python # git+https://github.com/PyMySQL/mysqlclient-python.git@v1.4.6#egg=MySQLdb From 4a4302d8f9a7dc7861a560e5a4e842fb8c9b2fdb Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Tue, 26 Nov 2024 09:50:42 +0200 Subject: [PATCH 35/39] Upgrade Python to 3.12 --- .github/workflows/continuous-integration.yml | 4 ++-- Dockerfile | 2 +- README.md | 21 ++++++++++---------- dev.Dockerfile | 7 ------- docs/manual.md | 2 +- web/tupa/TehtavanMaaritys.py | 4 ++-- web/tupa/TulosLaskin.py | 6 +++--- 7 files changed, 20 insertions(+), 26 deletions(-) delete mode 100644 dev.Dockerfile diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index e21ac4f2..15463cff 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -18,8 +18,8 @@ jobs: pip install 'black==24.10.0' - name: Check formatting run: | - black -t py310 --check . - black -t py310 --check web/**/*.py.example + black -t py312 --check . + black -t py312 --check web/**/*.py.example unit-tests-sqlite: runs-on: ubuntu-latest timeout-minutes: 15 diff --git a/Dockerfile b/Dockerfile index 09fa06ac..46ad8b45 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.10 +FROM python:3.12 WORKDIR /app/web diff --git a/README.md b/README.md index d3f04466..8c25d1f2 100644 --- a/README.md +++ b/README.md @@ -17,21 +17,22 @@ Tämän ohjelman mukana pitäisi tulla kopio GPL-lisenssistä; jos näin ei ole, ### Paikallisen kehitysympäristön pystytys + +* Luo Kipalle virtuaaliympäristö jonnekkin: `python -m venv /tmp/venv` +* Ota virtuaaliympäristö käyttöön: `source /tmp/venv/bin/activate` +* Asenna riippuvuudet: `pip install -r requirements.txt` * Luo jonnekkin väliaikainen hakemisto tietokannalle: `mkdir /tmp/tietokanta` * Kopioi kehitystietokanta: `cp docs/initial.db /tmp/tietokanta/kipa.db` * `cp ./web/settings/local.py.example ./web/settings/local.py` -* Muokkaa edellisessä luotuun asetustiedostoon tietokantatiedostolle polku `/db/kipa.db` -* Rakenna kontti: `docker build -t kipa_dev -f dev.Dockerfile .` -* Käynnistä kontti: `docker run -it --rm --volume ".:/app" --volume "/tmp/tietokanta:/db" -p 8000:8000 kipa_dev bash` -* Kontissa: `cd web` -* Kontissa: `python manage.py migrate --fake-initial --noinput` -* Kontissa: `python manage.py runserver 0.0.0.0:8000` +* Muokkaa edellisessä luotuun asetustiedostoon tietokantatiedostolle polku `/tmp/tietokanta/kipa.db` +* `cd web` +* `python manage.py migrate --fake-initial --noinput` +* `python manage.py runserver` ### Yksikkötestien ajaminen -* tarvittaessa edellä kuvattu kontin rakennus ja käynnistäminen -* Kontissa: `cd web` -* Kontissa: `python manage.py test` +* `cd web` +* `python manage.py test` ### E2E-testien ajaminen @@ -47,4 +48,4 @@ Kipaan suunniteltua kirjautumista. ### Python-koodin formatointi -Koodi noudattaa Black-autoformatterin vesion 24.10.0 mukaista tyyliä. Blackille annetaan lippu `--target-version py310`. Formatointi tarkastetaan osana CI-putkea. +Koodi noudattaa Black-autoformatterin vesion 24.10.0 mukaista tyyliä. Blackille annetaan lippu `--target-version py312`. Formatointi tarkastetaan osana CI-putkea. diff --git a/dev.Dockerfile b/dev.Dockerfile deleted file mode 100644 index 1828c270..00000000 --- a/dev.Dockerfile +++ /dev/null @@ -1,7 +0,0 @@ -FROM python:3.10 - -WORKDIR /app - -COPY ./requirements.txt /requirements.txt - -RUN pip install -r /requirements.txt diff --git a/docs/manual.md b/docs/manual.md index 90ef0319..2f27a02b 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -137,7 +137,7 @@ Vieraile tupa2.sf.net Imagen linkkiä varten. ### Muut käyttöjärjestelmät / itse muokattava asennus Kipan laskenta perustuu Pythonin-ohjelmointikielellä kirjoitettuun koodiin. -Tällä hetkellä kehitysversiossa on käytössä Python 3.10. +Tällä hetkellä kehitysversiossa on käytössä Python 3.12. Djangon versio 4.2 on testattu kehityspalvelimen kanssa toimivaksi. diff --git a/web/tupa/TehtavanMaaritys.py b/web/tupa/TehtavanMaaritys.py index 67f4707d..cc28ffcc 100644 --- a/web/tupa/TehtavanMaaritys.py +++ b/web/tupa/TehtavanMaaritys.py @@ -48,7 +48,7 @@ def is_number(s): def is_string(s): - if re.match("^\w+$", s.replace(" ", "_")): + if re.match(r"^\w+$", s.replace(" ", "_")): return True else: return False @@ -71,7 +71,7 @@ def is_kaava(s): else: muuttujat = {} kaava = s.replace(".", "") - haku = re.finditer("([a-zA-Z]+)(?!\w*[(])", kaava) + haku = re.finditer(r"([a-zA-Z]+)(?!\w*[(])", kaava) numero = 1 for h in haku: muuttujat[h.group(1)] = Decimal(numero) diff --git a/web/tupa/TulosLaskin.py b/web/tupa/TulosLaskin.py index aff8a8be..7832a868 100644 --- a/web/tupa/TulosLaskin.py +++ b/web/tupa/TulosLaskin.py @@ -50,7 +50,7 @@ def korvaa(lause, pino, loppu=None): lause = re.sub(r"([^-.+*/()]+[.][.])", "", lause, count=1) poistoon = re.search(r"([^-.+*/()]+[.][.])", lause) haku = re.finditer( - "(?", s, re.UNICODE + r"(([.][^-,+*/ ]+)+)(\.[^-,+*/)(]*)(?![^-,+*/() ])", r"\g<1>", s, re.UNICODE ) muokattu = re.sub( - "(?", muokattu, re.UNICODE + r"(?", muokattu, re.UNICODE ) return muokattu From e76de4b332ef021c6d1dcfe9c8a6720ebe0c655d Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Tue, 26 Nov 2024 10:12:11 +0200 Subject: [PATCH 36/39] Upgrade Django to 5.0 --- docs/manual.md | 2 +- requirements.txt | 2 +- web/tupa/formit.py | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/manual.md b/docs/manual.md index 2f27a02b..4dcac634 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -139,7 +139,7 @@ Vieraile tupa2.sf.net Imagen linkkiä varten. Kipan laskenta perustuu Pythonin-ohjelmointikielellä kirjoitettuun koodiin. Tällä hetkellä kehitysversiossa on käytössä Python 3.12. -Djangon versio 4.2 on testattu kehityspalvelimen kanssa toimivaksi. +Djangon versio 5.0 on testattu kehityspalvelimen kanssa toimivaksi. Apache-asennus ei toimi kehitysversiossa. diff --git a/requirements.txt b/requirements.txt index ff4d5f6b..3edd61ee 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -django==4.2 +django==5.0 #mysql-python # git+https://github.com/PyMySQL/mysqlclient-python.git@v1.4.6#egg=MySQLdb diff --git a/web/tupa/formit.py b/web/tupa/formit.py index 79e2ee34..ae8ad1a3 100644 --- a/web/tupa/formit.py +++ b/web/tupa/formit.py @@ -151,8 +151,8 @@ def __init__(self, helptext, *argcv): self.helptext = helptext def render(self, name, value=None, attrs=None, renderer=None): - return ( - mark_safe(super(HelpWidget, self).render(name, value, attrs, renderer)) + return mark_safe( + super(HelpWidget, self).render(name, value, attrs, renderer) + "' From f2f438dd65d76731583740abf430c8c4703618d1 Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Tue, 26 Nov 2024 10:44:37 +0200 Subject: [PATCH 37/39] Include referred tooltip.js sricpt to "new competition" page --- web/templates/tupa/base_riisuttu.html | 1 + 1 file changed, 1 insertion(+) diff --git a/web/templates/tupa/base_riisuttu.html b/web/templates/tupa/base_riisuttu.html index 30b978c9..da85cfef 100644 --- a/web/templates/tupa/base_riisuttu.html +++ b/web/templates/tupa/base_riisuttu.html @@ -6,6 +6,7 @@ {% block header %} {% endblock %} +