⚠️ WARNING: newdle is not yet fully finished and is still under heavy development 🚧
While it should be already usable in production, do so at your own risk!
Most important missing features:
- Integration with more generic (not CERN-specific) directory services (e.g. LDAP) (#129)
- Authentication options that do not require OIDC (Flask-Multipass; needs OIDC support first)
- Integration with Indico (#128)
We would really appreciate your help, please have a look at the full list of GitHub issues we need a hand with!
Newdle is the new, shiny tool brought to you by the Indico Team @ CERN
Newdle is part of the MALT project.
Why another tool?
It's true that there are already several commercial and Open Source solutions available that provide ad-hoc "polls". However, we have noticed that none of those tools seem to offer, at the same time, a user-friendly and modern interface and the additional freedom and flexibility that come with being part of an Open Source ecosystem. Additionally, none of them seem to seamlessly integrate with other enterprise systems.
newdle can currently fetch free-busy information from Exchange servers. This information can be used while deciding on candidate slots ("when is everyone free?") as well as when answering to a "poll" ("when am I free?"). We are currently working on integrating with other providers.
newdle is also developed by the same people who are behind Indico, and that's not by pure chance. newdle naturally complements Indico, as it targets what comes immediately before the actual creation of a meeting. This is why we would like to have the possibility to create meetings on Indico once a final date is decided (still work in progress!).
We chose Python 3.7 as the backend language, so make sure you have it installed. To prepare the development environment it is enough to run
make which takes care of installing all required dependencies inside a new virtualenv. Typically that will be the
.venv directory unless you override the environment variable
Make sure you have the
python3.7 binary in your PATH. You can also use the
PYTHON environment variable to override the location of the
python binary. e.g.:
$ PYTHON=/usr/bin/python3.7 make
Before running the alembic migrations make sure you have created a database called
newdle (or adjust the config file). Having done that, run
flask db upgrade to upgrade the schema.
At the initial stages of the development it might be pretty common to change the DB schema which also incurs modifications to the SQLAlchemy models. To facilitate the process of keeping actual schema and models in sync we provide
make newdb command. The purpose of it is to update the initial alembic revision (according to the models declared) and recreate your local database. This is a destructive operation! This command will be removed as soon as there are more alembic revisions.
Running the development server
To run the dev servers, use
make flask-server and
make react-server (in separate terminals). You can use the
REACT_PORT environment variables to override where the dev servers will listen (make sure to set it for both dev servers, since the React server needs to know where the Flask app is running).
Once everything is running, you can access the webapp on
http://127.0.0.1:3000 if you did not change any of the ports.
BROWSER environment variable if you want to prevent new browser windows being opened every time you run
BROWSER=none make react-server
We provide a couple of additional
make targets that should streamline the development process:
make clean- removes all generated files
make distclean- runs
cleantarget first and removes config files afterwards
make lint- runs
flake8, which report possible code style issues
make newdb- recreates the DB tables according to the SQLAlchemy models (run it every time you update the models)
make format- runs code formatters over the entire codebase (black, isort, prettier)
make test- runs Python and React tests
make build- builds a Python wheel which then could be used to install
|Made at CERN
In applying the MIT license, CERN does not waive the privileges and immunities granted to it by virtue of its status as an Intergovernmental Organization or submit itself to any jurisdiction.