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(" #00000000" + str(random.uniform(1, 10)) + ""
- 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:
pienin
suurin
{%if vapaa %} kaava:
diff --git a/web/templates/tupa/forms/nolla_suoritus.html b/web/templates/tupa/forms/nolla_suoritus.html
index 231ec394..6eb18531 100644
--- a/web/templates/tupa/forms/nolla_suoritus.html
+++ b/web/templates/tupa/forms/nolla_suoritus.html
@@ -18,9 +18,9 @@
{%if vapaa %} Vapaa: {%else%} Kiinteä {% endif %}
@@ -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 @@
piste
aika
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 @@
piste
aika
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"%}
aloittamatta
- {% endifequal %}
- {%ifequal tilanne.0 "o"%}
+ {% endif %}
+ {%if tilanne.0 == "o"%}
syötetty osittain
- {% endifequal %}
- {%ifequal tilanne.0 "s"%}
+ {% endif %}
+ {%if tilanne.0 == "s"%}
syötetty
- {% endifequal %}
- {%ifequal tilanne.0 "t"%}
+ {% endif %}
+ {%if tilanne.0 == "t"%}
tarkistettu
- {% endifequal %}
- {%ifequal tilanne.0 "v"%}
+ {% endif %}
+ {%if tilanne.0 == "v"%}
syöttövirhe
- {% endifequal %}
+ {% endif %}
tarkistettu
@@ -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 %}
{% 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 %}
+