Compare commits
4 commits
master
...
feat/proje
| Author | SHA1 | Date | |
|---|---|---|---|
| 2ce2d0db9e | |||
| 9e7122b516 | |||
| 0d14f56dc9 | |||
| 3aa533b452 |
13 changed files with 1380 additions and 74 deletions
5
.gitignore
vendored
5
.gitignore
vendored
|
|
@ -1,3 +1,6 @@
|
||||||
|
py.typed
|
||||||
|
blaenv
|
||||||
|
|
||||||
# virtual env
|
# virtual env
|
||||||
/env/
|
/env/
|
||||||
|
|
||||||
|
|
@ -11,6 +14,8 @@
|
||||||
# aux files
|
# aux files
|
||||||
*.pyc
|
*.pyc
|
||||||
*.sw[mnop]
|
*.sw[mnop]
|
||||||
|
/build/
|
||||||
|
*.egg-info/
|
||||||
|
|
||||||
# secrets
|
# secrets
|
||||||
/django.secret
|
/django.secret
|
||||||
|
|
|
||||||
1
.python-version
Normal file
1
.python-version
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
3.11
|
||||||
12
Dockerfile
12
Dockerfile
|
|
@ -1,4 +1,4 @@
|
||||||
FROM python:3.9.18-slim-bullseye
|
FROM python:3.11.2-slim-bullseye
|
||||||
|
|
||||||
# set work directory
|
# set work directory
|
||||||
WORKDIR /usr/mamweb-docker
|
WORKDIR /usr/mamweb-docker
|
||||||
|
|
@ -16,10 +16,7 @@ RUN apt-get update && apt-get install -y \
|
||||||
imagemagick \
|
imagemagick \
|
||||||
netcat \
|
netcat \
|
||||||
postgresql-client
|
postgresql-client
|
||||||
RUN pip install --upgrade pip
|
RUN pip install --upgrade pip setuptools
|
||||||
COPY ./requirements.txt .
|
|
||||||
COPY ./constraints.txt .
|
|
||||||
RUN pip install -r requirements.txt
|
|
||||||
|
|
||||||
# allow correct locales
|
# allow correct locales
|
||||||
RUN sed -i '/cs_CZ.UTF-8/s/^# //g' /etc/locale.gen && \
|
RUN sed -i '/cs_CZ.UTF-8/s/^# //g' /etc/locale.gen && \
|
||||||
|
|
@ -31,6 +28,11 @@ ENV LC_ALL cs_CZ.UTF-8
|
||||||
# copy project
|
# copy project
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
|
# Install dependencies
|
||||||
|
RUN pip install --upgrade .
|
||||||
|
RUN pip install --upgrade --group dev
|
||||||
|
RUN pip install --upgrade --group doc
|
||||||
|
|
||||||
# create test data once db is ready
|
# create test data once db is ready
|
||||||
RUN chmod +x /usr/mamweb-docker/docker_entrypoint.sh
|
RUN chmod +x /usr/mamweb-docker/docker_entrypoint.sh
|
||||||
ENTRYPOINT ["/usr/mamweb-docker/docker_entrypoint.sh"]
|
ENTRYPOINT ["/usr/mamweb-docker/docker_entrypoint.sh"]
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
# TODO
|
|
||||||
|
|
@ -51,10 +51,6 @@ checklinks.sh
|
||||||
-------------
|
-------------
|
||||||
„Týrací“ skript na kontrolu, že nic, kam se lze proklikat na webu, nehází chybu.
|
„Týrací“ skript na kontrolu, že nic, kam se lze proklikat na webu, nehází chybu.
|
||||||
|
|
||||||
constraints.txt
|
|
||||||
---------------
|
|
||||||
Obsahuje omezení na :ref:`requirements.txt`.
|
|
||||||
|
|
||||||
convert_spaces_to_tabs.sh
|
convert_spaces_to_tabs.sh
|
||||||
-------------------------
|
-------------------------
|
||||||
Skript na změnu odsazování.
|
Skript na změnu odsazování.
|
||||||
|
|
@ -81,6 +77,14 @@ README.md
|
||||||
---------
|
---------
|
||||||
Většina je spíš zbytek po bývalých webařích.
|
Většina je spíš zbytek po bývalých webařích.
|
||||||
|
|
||||||
requirements.txt
|
pyproject.toml
|
||||||
----------------
|
--------------
|
||||||
Seznam balíčků, které jsou potřeba pro běh mamwebu. (Cílem je vytvoření virtualenvu se všemi těmito balíčky, např. pomocí daného příkazu v :ref:`Makefile`.)
|
Popis Pythoního projektu, tedy například seznam balíčků, které jsou potřeba pro běh mamwebu. (Cílem je vytvoření virtualenvu se všemi těmito balíčky, např. pomocí daného příkazu v :ref:`Makefile`.)
|
||||||
|
|
||||||
|
uv.lock + .python-version
|
||||||
|
-------------------------
|
||||||
|
Pokud používáš uv, tak je to soubor s verzemi balíčků + Pythonu, které jsou potřeba pro běh mamwebu.
|
||||||
|
|
||||||
|
dockerfile-compose.yml + docker_entrypoint.sh + Dockerfile
|
||||||
|
----------------------------------------------------------
|
||||||
|
Soubory pro Docker.
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,7 @@ Skripty pro lokální vývoj
|
||||||
^^^^^^^
|
^^^^^^^
|
||||||
|
|
||||||
``make/install_web`` (nebo ekvivalentně ``make/install``)
|
``make/install_web`` (nebo ekvivalentně ``make/install``)
|
||||||
Vytvoří virtualenv a nainstaluje do něj závislosti webu podle ``requirements.txt``. Následně popíše, jak vyrobit zbytek lokálního webu.
|
Vytvoří virtualenv a nainstaluje do něj závislosti webu podle ``pyproject.toml``. Následně popíše, jak vyrobit zbytek lokálního webu.
|
||||||
``make/run``
|
``make/run``
|
||||||
Spustí lokální web (ekvivalentní s ``./manage.py runserver``)
|
Spustí lokální web (ekvivalentní s ``./manage.py runserver``)
|
||||||
``make/schema``
|
``make/schema``
|
||||||
|
|
|
||||||
|
|
@ -62,9 +62,9 @@ se do ní (``cd mamweb``)
|
||||||
|
|
||||||
O zprovoznění webu se stará skript ``make/install_web``, stačí ho spustit. Ten
|
O zprovoznění webu se stará skript ``make/install_web``, stačí ho spustit. Ten
|
||||||
vytvoří virtualenv (neexistuje-li) a nainstaluje do něj závislosti webu (podle
|
vytvoří virtualenv (neexistuje-li) a nainstaluje do něj závislosti webu (podle
|
||||||
souboru ``requirements.txt``).
|
souboru ``pyproject.toml``).
|
||||||
|
|
||||||
.. FIXME: Novowebaři zmínka o requirements.txt tady moc nepomůže, to má být na
|
.. FIXME: Novowebaři zmínka o pyproject.toml tady moc nepomůže, to má být na
|
||||||
stránce o celkové stavbě repozitáře a stacku…
|
stránce o celkové stavbě repozitáře a stacku…
|
||||||
|
|
||||||
Následně je potřeba nahrát další data do databáze, což uděláš pomocí příkazů
|
Následně je potřeba nahrát další data do databáze, což uděláš pomocí příkazů
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ Základ webu
|
||||||
===========
|
===========
|
||||||
|
|
||||||
- ``python3`` – Ideálně Python 3.9, jenž je na Gimlim
|
- ``python3`` – Ideálně Python 3.9, jenž je na Gimlim
|
||||||
- ``python3-pip`` pro instalaci dalších Pythoních balíčků podle ``requirements.txt``
|
- ``python3-pip`` pro instalaci dalších Pythoních balíčků podle ``pyproject.toml``
|
||||||
- ``python3-venv``
|
- ``python3-venv``
|
||||||
- ``gcc`` – kompilace Pythoních knihoven ze zdrojových distribucí (sdist), možná (neotestováno) jde jako alternativu použít ``python3-wheel`` a stahovat bdists
|
- ``gcc`` – kompilace Pythoních knihoven ze zdrojových distribucí (sdist), možná (neotestováno) jde jako alternativu použít ``python3-wheel`` a stahovat bdists
|
||||||
- ``python3-dev`` – taktéž
|
- ``python3-dev`` – taktéž
|
||||||
|
|
@ -45,7 +45,7 @@ Dokumentace
|
||||||
===========
|
===========
|
||||||
|
|
||||||
- ``make`` pro zbuildění
|
- ``make`` pro zbuildění
|
||||||
- Pythoní balíčky podle příslušné části ``requirements.txt``
|
- Pythoní balíčky podle příslušné části ``pyproject.toml``
|
||||||
|
|
||||||
Vývojové nástroje
|
Vývojové nástroje
|
||||||
=================
|
=================
|
||||||
|
|
@ -57,7 +57,7 @@ Vývojové nástroje
|
||||||
- ``ssh``
|
- ``ssh``
|
||||||
- ``graphviz`` pro vygenerování schématu
|
- ``graphviz`` pro vygenerování schématu
|
||||||
- ``rsync``
|
- ``rsync``
|
||||||
- ``ipython3`` – hezčí interaktivní shell (stačí z ``requirements.txt``)
|
- ``ipython3`` – hezčí interaktivní shell (stačí z ``pyproject.toml``)
|
||||||
|
|
||||||
Potenciální usnadnění života
|
Potenciální usnadnění života
|
||||||
============================
|
============================
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,9 @@ ensure_venv
|
||||||
# Aktualizace toolchainu
|
# Aktualizace toolchainu
|
||||||
pip install --upgrade pip setuptools
|
pip install --upgrade pip setuptools
|
||||||
# Instalace závislostí webu
|
# Instalace závislostí webu
|
||||||
pip install -r requirements.txt --upgrade
|
pip install --upgrade .
|
||||||
|
pip install --upgrade --group dev
|
||||||
|
pip install --upgrade --group doc
|
||||||
|
|
||||||
# XXX: Připomínka z původního Makefile:
|
# XXX: Připomínka z původního Makefile:
|
||||||
echo 'Pro vygenerování tesdat spusť ./manage.py testdata
|
echo 'Pro vygenerování tesdat spusť ./manage.py testdata
|
||||||
|
|
|
||||||
88
pyproject.toml
Normal file
88
pyproject.toml
Normal file
|
|
@ -0,0 +1,88 @@
|
||||||
|
[project]
|
||||||
|
name = "mamweb"
|
||||||
|
version = "3.0.0"
|
||||||
|
description = "Web pro seminář M&M"
|
||||||
|
readme = "README.md"
|
||||||
|
requires-python = ">=3.11"
|
||||||
|
dependencies = [
|
||||||
|
"setuptools", # django-polymorphic má rozbité dependencies
|
||||||
|
|
||||||
|
# basic libs
|
||||||
|
"psycopg2", # PostgreSQL adaptér
|
||||||
|
"ipython", # Interaktivní shell
|
||||||
|
"Unidecode", # Přepisuje unicode do ASCII (např. soubory nebo e-maily)
|
||||||
|
"Pillow",
|
||||||
|
"pilkit>=3.0", # Kvůli kompatibilitě s Pillow>=10.0.0
|
||||||
|
|
||||||
|
# Django and modules
|
||||||
|
|
||||||
|
"Django<5.0",
|
||||||
|
"django-reversion", # Version control na datech v databázi
|
||||||
|
"django-countries", # Políčko ve formu / field v modelu ohledně států
|
||||||
|
"django-solo", # Singleton model (speciálně Nastavení)
|
||||||
|
"django-ckeditor-5", # Editor htmlka (hlavně v adminu u flatpages)
|
||||||
|
"django-cleanup", # Uklízí media/ od smazaných „databázových“ souborů
|
||||||
|
"django-taggit", # Taggy v djangu (speciálně zaměření problémů)
|
||||||
|
"django-autocomplete-light>=3.9.0,<3.12.0", # Automatické doplňování (problémů, účastníků, …) ve formulářích
|
||||||
|
"django-imagekit", # Všechny možné obrázky v Djangu
|
||||||
|
"django-polymorphic", # Polymorfismus na django modelech (hlavně Problém nebo treenode)
|
||||||
|
"django-sitetree", # Struktura stránek, hlavně pro meníčko
|
||||||
|
"django_reverse_admin", # Lepší handlování OneToOne fieldů v adminu
|
||||||
|
"django-rest-framework",
|
||||||
|
"django-webpack-loader",
|
||||||
|
"django-rest-polymorphic",
|
||||||
|
"django-colorfield", # Field pro ukládání barvy (např. tagy v korekturovátku)
|
||||||
|
]
|
||||||
|
|
||||||
|
[dependency-groups]
|
||||||
|
dev = [
|
||||||
|
# Potřeba pro test data
|
||||||
|
|
||||||
|
"lorem",
|
||||||
|
|
||||||
|
# debug tools/extensions
|
||||||
|
|
||||||
|
"django-debug-toolbar",
|
||||||
|
"django-extensions",
|
||||||
|
"sqlparse",
|
||||||
|
"Werkzeug",
|
||||||
|
|
||||||
|
# Stahování škol v testech
|
||||||
|
|
||||||
|
"requests",
|
||||||
|
]
|
||||||
|
|
||||||
|
# pro dokumentaci
|
||||||
|
doc = [
|
||||||
|
"myst-parser",
|
||||||
|
"sphinx",
|
||||||
|
"sphinx-rtd-theme",
|
||||||
|
"sphinxcontrib-django",
|
||||||
|
]
|
||||||
|
|
||||||
|
# Zkratka, aby se při `uv sync` nainstalovalo všechno
|
||||||
|
[tool.uv]
|
||||||
|
default-groups = ["dev", "doc"]
|
||||||
|
|
||||||
|
# Aby fungovalo `pip install --upgrade .`
|
||||||
|
[tool.setuptools]
|
||||||
|
packages = [
|
||||||
|
"mamweb",
|
||||||
|
"seminar",
|
||||||
|
"tvorba",
|
||||||
|
"galerie",
|
||||||
|
"korektury",
|
||||||
|
"prednasky",
|
||||||
|
"header_fotky",
|
||||||
|
"various",
|
||||||
|
"api",
|
||||||
|
"aesop",
|
||||||
|
"odevzdavatko",
|
||||||
|
"vysledkovky",
|
||||||
|
"personalni",
|
||||||
|
"soustredeni",
|
||||||
|
"treenode",
|
||||||
|
"vyroci",
|
||||||
|
"sifrovacka",
|
||||||
|
"novinky",
|
||||||
|
]
|
||||||
|
|
@ -1,54 +0,0 @@
|
||||||
-c constraints.txt
|
|
||||||
setuptools # django-polymorphic má rozbité dependencies
|
|
||||||
|
|
||||||
# basic libs
|
|
||||||
psycopg2 # PostgreSQL adaptér
|
|
||||||
ipython # Interaktivní shell
|
|
||||||
Unidecode # Přepisuje unicode do ASCII (např. soubory nebo e-maily)
|
|
||||||
Pillow
|
|
||||||
pilkit>=3.0 # Kvůli kompatibilitě s Pillow>=10.0.0
|
|
||||||
|
|
||||||
# Django and modules
|
|
||||||
|
|
||||||
Django<5.0
|
|
||||||
django-reversion # Version control na datech v databázi
|
|
||||||
django-countries # Políčko ve formu / field v modelu ohledně států
|
|
||||||
django-solo # Singleton model (speciálně Nastavení)
|
|
||||||
django-ckeditor-5 # Editor htmlka (hlavně v adminu u flatpages)
|
|
||||||
django-cleanup # Uklízí media/ od smazaných „databázových“ souborů
|
|
||||||
django-taggit # Taggy v djangu (speciálně zaměření problémů)
|
|
||||||
django-autocomplete-light>=3.9.0,<3.12.0 # Automatické doplňování (problémů, účastníků, …) ve formulářích
|
|
||||||
django-imagekit # Všechny možné obrázky v Djangu
|
|
||||||
django-polymorphic # Polymorfismus na django modelech (hlavně Problém nebo treenode)
|
|
||||||
django-sitetree # Struktura stránek, hlavně pro meníčko
|
|
||||||
django_reverse_admin # Lepší handlování OneToOne fieldů v adminu
|
|
||||||
django-rest-framework
|
|
||||||
django-webpack-loader
|
|
||||||
django-rest-polymorphic
|
|
||||||
django-colorfield # Field pro ukládání barvy (např. tagy v korekturovátku)
|
|
||||||
|
|
||||||
# debug tools/extensions
|
|
||||||
|
|
||||||
django-debug-toolbar
|
|
||||||
django-extensions
|
|
||||||
sqlparse
|
|
||||||
Werkzeug
|
|
||||||
|
|
||||||
# G+, FB authorisation
|
|
||||||
|
|
||||||
# django-allauth
|
|
||||||
# oauthlib
|
|
||||||
# python-openid
|
|
||||||
requests
|
|
||||||
# requests-oauthlib
|
|
||||||
|
|
||||||
# Potřeba pro test data
|
|
||||||
|
|
||||||
lorem
|
|
||||||
|
|
||||||
# pro dokumentaci
|
|
||||||
|
|
||||||
sphinx
|
|
||||||
sphinx_rtd_theme
|
|
||||||
sphinxcontrib-django
|
|
||||||
myst_parser
|
|
||||||
48
tests.py
Normal file
48
tests.py
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
from django.test import TestCase
|
||||||
|
import seminar.models as m
|
||||||
|
from vysledkovky.utils import VysledkovkaRocniku, VysledkovkaCisla
|
||||||
|
from .testutils import create_resitel
|
||||||
|
|
||||||
|
|
||||||
|
class VysledkovkaCislaTestCase(TestCase):
|
||||||
|
@classmethod
|
||||||
|
def setUpTestData(cls):
|
||||||
|
cls.rocnik1 = m.Rocnik.objects.create(prvni_rok=1, rocnik=1)
|
||||||
|
cls.rocnik25 = m.Rocnik.objects.create(prvni_rok=25, rocnik=25)
|
||||||
|
cls.rocnik26 = m.Rocnik.objects.create(prvni_rok=21, rocnik=26)
|
||||||
|
|
||||||
|
cls.cisla1 = [
|
||||||
|
m.Cislo.objects.create(rocnik=cls.rocnik1, poradi=i,)
|
||||||
|
for i in range(5)
|
||||||
|
]
|
||||||
|
|
||||||
|
m.Deadline.objects.create(cislo=cls.cisla1[0], verejna_vysledkovka=True)
|
||||||
|
m.Deadline.objects.create(cislo=cls.cisla1[0], verejna_vysledkovka=True)
|
||||||
|
|
||||||
|
cls.resitele = [create_resitel() for _ in range(10)]
|
||||||
|
|
||||||
|
cls.tema = m.Tema.objects.create(
|
||||||
|
rocnik=cls.rocnik1,
|
||||||
|
stav=m.Problem.STAV_ZADANY,
|
||||||
|
)
|
||||||
|
|
||||||
|
cls.uloha_tematu = m.Uloha.objects.create(
|
||||||
|
nadproblem=cls.tema,
|
||||||
|
stav=m.Problem.STAV_ZADANY,
|
||||||
|
)
|
||||||
|
|
||||||
|
cls.uloha = m.Uloha.objects.create(
|
||||||
|
stav=m.Problem.STAV_ZADANY,
|
||||||
|
)
|
||||||
|
|
||||||
|
cls.reseni = m.Reseni.objects.create()
|
||||||
|
|
||||||
|
# for resitel in cls.resitele[:5]:
|
||||||
|
# m.Reseni_Resitele(resitel=resitel, reseni=cls.reseni)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def test_cisla_rocniku(self):
|
||||||
|
vysledkovka_rocniku = VysledkovkaRocniku(self.rocnik1)
|
||||||
|
|
||||||
|
self.assertListEqual(vysledkovka_rocniku.cisla_rocniku, [self.cisla1[0]])
|
||||||
Loading…
Reference in a new issue