jon/README.md
2024-05-13 19:32:34 +02:00

2.2 KiB

jon

the tamer of garfield

Setup

jon is a Python WSGI application written using Flask. This means you'll have to install a bunch of Python packages to get up and running.

Dependencies

pip install -r requirements.txt

You should probably use a virtualenv for that. I develop jon using Python 3.10 but it should work with older versions as well.

Arch Linux

If you're on Arch, these packages are required for running the server:

python python-flask python-flask-login python-psycopg2

Building Frontend JS

Most of jon works without JS but there are some features that require it. The frontend code lives in ./frontend and is written using Elm, a functional language that compiles to JS. To compile the Elm code to .js files, first make sure that the Elm compiler is installed:

elm --version
# 0.19.1

Then run make frontend.

Running

flask --app jon run --debug

--debug restarts the server when a source file changes.

Running with docker

When you prefer running the application using docker you can just use

docker compose up

In case your local username does not line up with your FSMI-username, you need to specify your FSMI-username using USER=<username>, e.g.:

USER=shirkanesi docker compose up

This can also be persisted by following the instructions in the docker-compose.yml

fsmi-db forward

ssh -nNTvL 5432:fsmi-db.fsmi.org:5432 fsmi-login.fsmi.uni-karlsruhe.de

TODO

  • Implement and document report generation
    • How many days will the item last?
    • How many do we need to last X months?
    • etc.
    • Make it print nicely
  • Make it possible to edit entries
  • Fix unsafe client-side sessions, either:
    • Use flask-session for file-backed sessions
    • Use flask-login with a single user stored in memory
  • Improve project structure
  • Use flask.flash for error messages
  • Implement item and snack entry as Elm application
    • Figure out/Add documentation about building entry.js
    • Clean up the code a little and add some comments
    • Needs good documentation for maintainability
  • Use cool new function for deactivating items