Skip to main content

Computerized Argument Delphi experimentation toolkit

Project description

cadelphi

cadelphi logo

cadelphi is a FastAPI-based toolkit for running Computerized Argument Delphi (CAD) sessions inspired by the methodology described in the IEEE paper Computerized Argument Delphi Method. The application collects arguments, walks participants through a structured three-step Likert voting flow, and provides an administrative console for monitoring discussions.

Cadelphi infographic

Features

  • 🌐 Web interface for participants: Contributors can submit optional arguments, rate existing arguments on a five-point Likert scale, and leave feedback during a guided three-step session.
  • 🧠 Adaptive selection strategies: Configure random, positive-affinity, or negative-affinity argument sequences that mirror CAD literature on exposing participants to supportive or dissenting viewpoints.
  • 🌍 Bilingual experience: The UI supports English and Turkish with an in-app language switcher. Seed data is provided in both languages so you can explore the workflow immediately.
  • 🗃️ Persistent storage: SQLAlchemy models backed by SQLite capture participants, arguments, votes, and comments.
  • 📊 Rich admin console: Review hierarchical topic trees, inspect votes and comments, visualise the argument graph with configurable edge metrics, and adjust system settings from a password-protected dashboard.
  • 🛡️ Security-minded defaults: Argon2 password hashing, per-request CSRF tokens, session hardening, and guarded admin APIs reduce common attack surfaces.

Installation

python -m venv .venv
source .venv/bin/activate  # On Windows use .venv\\Scripts\\activate
pip install --upgrade pip
pip install -e .

Running the application

Launch the bundled Uvicorn entrypoint on port 7882:

cadelphi

When running on your workstation you can browse to http://127.0.0.1:7882/. On remote servers replace the host with the machine's reachable address, for example http://<your-server-ip>:7882/ for the participant portal and http://<your-server-ip>:7882/admin for the admin console.

Default account and sample data

On first start the database is populated with English and Turkish demonstration datasets covering two discussion topics each. The default administrator credentials are:

  • Username: admin
  • Password: password

Sign in and update the password from the Settings page before using the system in production.

Troubleshooting

"SessionMiddleware must be installed to access request.session"

This assertion occurs when a request reaches the CSRF helper before Starlette's SessionMiddleware has attached a session mapping to the request scope. Update to the current release (or apply the same patch) so that the middleware checks for the session mapping before touching it and gracefully skips token seeding when the session is missing. If you maintain forks with custom middleware, ensure that any logic accessing request.session either:

  1. Runs inside middleware added after SessionMiddleware, or
  2. Checks "session" in request.scope before dereferencing the property.

For manual hotfixes, edit cadelphi/app.py and replace the CSRF middleware with the version that guards request.scope.get("session") and only calls ensure_csrf_token when the result is a mutable mapping.

"UNIQUE constraint failed: admin_settings.admin_username"

This error appears when the application tries to insert the built-in admin user even though the account already exists in the database. Earlier revisions seeded the default administrator more than once during startup, so subsequent launches hit SQLite's unique-constraint protection on the admin_username column.

The current codebase now checks for the username explicitly before attempting the insert. Upgrade to this release (or remove any additional admin-seeding logic) and the server will start normally. If you previously ended up with multiple rows in admin_settings because of local testing, delete the duplicates or remove the .cadelphi/cadelphi.db file so a fresh database can be generated.

Security considerations

  • Admin passwords are hashed with passlib[argon2] for modern resistance against brute-force attacks.
  • All form submissions include per-session CSRF tokens that are validated on the server.
  • Admin-only JSON endpoints (graph data and summaries) enforce authentication and respond with 401 Unauthorized when accessed without a valid session.
  • Session cookies are signed by Starlette's SessionMiddleware; override the secret via the CADELPHI_SECRET_KEY environment variable for deployments.

Reference

Development tips

  • Target Python 3.11+ with FastAPI and SQLAlchemy 2.0 style APIs.
  • Use uvicorn cadelphi.app:app --reload --port 7882 during development to enable live code reloading.
  • Switch the backing database by setting the CADELPHI_DB environment variable to any SQLAlchemy-compatible DSN.

What to do next

Need a quick checklist for validating the latest branding refresh and prepping a release? See docs/next_steps.md for the recommended workflow from local testing through packaging and deployment.

License

Distributed under the MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cadelphi-0.2.1.tar.gz (34.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cadelphi-0.2.1-py3-none-any.whl (40.0 kB view details)

Uploaded Python 3

File details

Details for the file cadelphi-0.2.1.tar.gz.

File metadata

  • Download URL: cadelphi-0.2.1.tar.gz
  • Upload date:
  • Size: 34.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.12.1 Linux/6.8.0-1030-azure

File hashes

Hashes for cadelphi-0.2.1.tar.gz
Algorithm Hash digest
SHA256 bb94e1a0f58e9248c273f714f087451ed003fdd4668015859ccdcfb4792b75e1
MD5 a2ea22ea597391cf978262c071558af7
BLAKE2b-256 26be573938381829c7098567d60a9da0465098f5db6a6f1c6d63cc1463139f71

See more details on using hashes here.

File details

Details for the file cadelphi-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: cadelphi-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 40.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.12.1 Linux/6.8.0-1030-azure

File hashes

Hashes for cadelphi-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5af0e87f45f5a38886458af9c532bfa792aa0202075275394c48a7d1914bd1e5
MD5 6627b3e9be2a70edcb981b9c2cc9707f
BLAKE2b-256 9349951d56148180c94ebf1a28d7fbc6e10426b0b95144f3183296e2d08dbaaa

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page