An open source platform for data-driven team collaboration, such as Hackathons.
This project can be deployed to any server capable of serving Python applications, and is set up for fast deployment to the Heroku cloud:
You can configure your instance with the following basic environment variables:
SERVER_URL- fully qualified domain name where the site is hosted
SERVER_SSL- in production, add this to make the app redirect all visitors to the HTTPS address
DATABASE_URL- if you are using the Postgres add-on, this would be postgres://username:password@... - in Heroku this is set automatically
CACHE_TYPE- in production, you can use built-in, Redis, Memcache to speed up your site (see
DRIBDAT_ENV- 'dev' to enable debugging, 'prod' to optimise assets etc.
DRIBDAT_SECRET- a long scary string for hashing your passwords - in Heroku this is set automatically
DRIBDAT_APIKEY- for connecting clients to the remote API
DRIBDAT_NOT_REGISTER- set to True to disallow creating accounts on this server
Support for Web analytics can be configured using one of the following variables:
ANALYTICS_FATHOM(Fathom, with optional
ANALYTICS_FATHOM_SITEif you use a custom site)
ANALYTICS_GOOGLE(starts with "UA-...")
If you have a public dashboard for your analytics, you can add the link to the footer by setting it in
OAUTH_TYPE- e.g. 'Slack'
OAUTH_ID- the Client ID of your app (e.g. from api.slack.com)
OAUTH_SECRET- the Client Secret of your app
OAUTH_DOMAIN- (optional) subdomain of your Slack instance
.env to store environment variables for local development.
There are a number of API calls that admins can use to easily get to the data in Dribdat in CSV or JSON format. These are linked in the About page in a running app. Additionally, the site has a See GitHub issues for development status.
Basic data on an event:
Retrieve data on all projects from an event:
Recent activity in projects (all or specific):
Search project contents:
limit query parameter to get more or less than 10 results.
If you would like to use external clients, like the chatbot, to remote control Dribdat you need to set
DRIBDAT_APIKEY. The (experimental) call used to push data into projects is:
For more details see api.py
Install Python, Virtualenv and Pip, or Poetry to start working with the code.
Run the following commands from the repository root folder to bootstrap your environment:
poetry shell poetry install
Or using plain pip:
pip install -r requirements/dev.txt
By default in a dev environment, a SQLite database will be created in the root folder (
dev.db). You can also install and configure your choice of DBMS supported by SQLAlchemy.
Run the following to create your app's database tables and perform the initial migration:
python manage.py db init python manage.py db migrate python manage.py db upgrade
Install frontend resources using Yarn:
Finally, run this command to start the server:
FLASK_DEBUG=1 python manage.py run
You will see a pretty welcome screen at http://localhost:5000
The first user that registers becomes an admin, so don't delay!
To open the interactive shell, run:
python manage.py shell (or, using the Heroku toolchain,
heroku run python manage.py shell)
By default, you will have access to the
User model, as well as Event, Project, Category, Activity. For example, to promote to admin and reset the password of the first user:
u = User.query.first() u.is_admin = True u.set_password('Ins@nEl*/c0mpl3x') u.save()
To run all tests, run:
python manage.py test
Whenever a database migration needs to be made. Run the following commands:
python manage.py db migrate
This will generate a new migration script. Then run:
python manage.py db upgrade
To apply the migration. Watch out for any errors in the process.
For a full migration command reference, run
python manage.py db --help.
If you get errors like ERROR [alembic.env] Can't locate revision identified by 'aa969b4f9f51', usually the fix is to drop the migration history table, and again
db init .. db migrate .. db upgrade. You can do this in your database client, or with a line like this in the case of Heroku:
heroku pg:psql -c "drop table alembic_version" -a my-dribdat-instance
Mantained by @loleg and @gonzalocasas, with special thanks to the Swiss communities for Open Data, Open Networking and Open Source for the many trials and feedbacks. We are also grateful to F. Wieser and M.-C. Gasser at Swisscom for conceptual inputs and financial support of the first alpha release of this project.
This code is originally based on Steven Loria's flask-cookiecutter, which we encourage you to use in YOUR next hackathon!
Additional and ❤️-felt thanks for testing and feedback to: