Computerized Argument Delphi experimentation toolkit
Project description
cadelphi
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.
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:
- Runs inside middleware added after
SessionMiddleware, or - Checks
"session" in request.scopebefore 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 Unauthorizedwhen accessed without a valid session. - Session cookies are signed by Starlette's
SessionMiddleware; override the secret via theCADELPHI_SECRET_KEYenvironment variable for deployments.
Reference
- Seker, Sadi Evren. "Computerized argument Delphi technique." IEEE Access 3 (2015): 368-380. https://ieeexplore.ieee.org/document/7089162
Development tips
- Target Python 3.11+ with FastAPI and SQLAlchemy 2.0 style APIs.
- Use
uvicorn cadelphi.app:app --reload --port 7882during development to enable live code reloading. - Switch the backing database by setting the
CADELPHI_DBenvironment variable to any SQLAlchemy-compatible DSN.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cadelphi-0.1.0.tar.gz.
File metadata
- Download URL: cadelphi-0.1.0.tar.gz
- Upload date:
- Size: 28.7 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3016fba2d9a76e26f378922b84d8f06af5a8527f9320aab487c4fed35f91073d
|
|
| MD5 |
66dc35365d15526e139995d811b4ee5b
|
|
| BLAKE2b-256 |
52121f388921eb006ef13eeab768d56d1ed73b45ace041d67ed8acd5fe0b9195
|
File details
Details for the file cadelphi-0.1.0-py3-none-any.whl.
File metadata
- Download URL: cadelphi-0.1.0-py3-none-any.whl
- Upload date:
- Size: 34.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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7dd5da563e727343ed6588cebcab4f5d4c3be303011d01565932d16a756932f6
|
|
| MD5 |
3b3c4cb46076d0e6cafd5bfa67953623
|
|
| BLAKE2b-256 |
5651dae8dc2c8d4d24ff9f597cd427eb38eeb21b112c339fbb6b8772a30ada8f
|