Skip to content
/ myHPI Public

Django/Wagtail page serving myhpi.de

Notifications You must be signed in to change notification settings

fsr-de/myHPI

Repository files navigation

myHPI

tests Coverage Status

This tool is used to manage the student representative website at https://myhpi.de. It is a CMS based on Wagtail/Django and adds several functionalities like polls.

Development setup

For a quick start, use the dev container, e.g. by installing the Dev Containers extension in Visual Studio Code or using the built-in feature in JetBrains IDEs. This automatically installs all dependencies in a container. After starting the container, setup your local data by following the Manual Setup from step 9 (creating a superuser).

Manual setup

To set up a development version on your local machine, you need to execute the following steps:

  1. Check out repository and cd to it
  2. Set up a virtualenv for the project with Python >=3.11 and activate it (e.g., python3 -m venv venv and source venv/bin/activate)
  3. Install poetry (if not already installed): curl -sSL https://install.python-poetry.org/ | python -
  4. Install dependencies with poetry install
  5. Create env file by copying the .env.example file to .env, e.g. cp .env.example .env (Notice that for some functionality like OIDC some settings must be changed)
  6. Migrate the database with python manage.py migrate
  7. Install bootstrap with python tools/install_bootstrap.py
  8. Optionally: Compile translations with python manage.py compilemessages -i venv (does not work on Windows, recommended to skip this step or see docs)
  9. Optionally: Create test data with python manage.py create_test_data
  10. Create a local superuser with python manage.py createsuperuser
  11. Start the development server with python manage.py runserver
  12. Open your web browser, visit http://localhost:8000/admin and log in with the user you just created

Tests

Test the code with python manage.py test myhpi.tests.

Code style

Pre-commit hook

We recommend installing a pre-commit hook with pre-commit install. The hook will do the following steps before every commit:

  • run autoflake with a couple of flags to remove unused imports,
  • run isort . to sort imports,
  • run black . to format the python code
  • run djlint-reformat-django --quiet and djlint-django to format and lint template files (html) according to the pyproject.toml configuration
  • run prettier-eslint --write --list-different to format the JavaScript code, (S)CSS, Markdown and YAML files according to the .prettierrc configuration

If you want to do that manually, run pre-commit run --all-files. Next to that, we also run pylint myhpi to check for semantic issues in the code.

IDE support

To get optional linting-related warnings within your IDE and format files when saving them, follow these steps:

  • Install IDE plugins
  • Set configuration
    • Linting and formatting are already configured by the .prettierrc and pyproject.tml files which are also used by the pre-commit hook
    • You still have to write IDE-specific configuration to e.g. enable formatting on save and assign file types to the correct plugin
      • Find configuration examples for IDEs below
Configuration in VSCode

Workspace settings:

{
  "editor.formatOnSave": true,
  "editor.defaultFormatter": "ms-python.black-formatter",
  "[javascript][css][scss][markdown][yaml]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "[html]": {
    "editor.defaultFormatter": "monosans.djlint"
  },
}

Tips

  • To create translations: Run python manage.py makemessages -l de -i venv. Fill in the translations in django.po. Apply changes by running python manage.py compilemessages -i venv.

Reset database

  1. Delete db.sqlite3
  2. Conduct development setup steps 7+