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.2.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.2-py3-none-any.whl (40.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: cadelphi-0.2.2.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.2.tar.gz
Algorithm Hash digest
SHA256 943d6df9db0335b31c8b2c9d9d8c34c85c03a9e1441568e7355ed5c66f074c9d
MD5 f4a91d452c7750c36f434721e73d4a33
BLAKE2b-256 e952121cf24f4726effd30cdc1c114894a13fffc71d92380378c2c32cca682b9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cadelphi-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 40.1 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 1916dfa435f510555c71522c3f2a453c1662144c9677d86d05ab3c4e7dbd7869
MD5 206a241a7109d8ace8b54b0850818fd3
BLAKE2b-256 62969e6e2a5bddf26d43fae35900e75381d714578d0492bc0a0402ba1afa4a88

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