Developer’s Guide to Willow

Welcome to the Willow developer guide. This documentation is geared towards developers who wish to understand how Willow works behind the scenes. It contains information that will help you get started with modifying and extending the project as per your own needs.

Overview

On a high level, Willow operates on a client-server model, whereby an Angular.js front end communicates over WebSockets to a Flask backend. The Flask backend serves the assets for the Angular app, and when requested, performs data cleaning and processing operations asynchronously through Celery workers. Willow is powered by the pandas data science library, with all user models being represented by a pandas.DataFrame object in memory on the server. Data operations requested by the user are queued to be executed asynchronously by Celery workers. All Celery tasks eventually call functions in our dcs Python package which serves as a façade to the pandas library.

Key Dependencies

  • AngularJS as the frontend web application framework
  • SocketIO for WebSocket connections
  • Flask as the back end web application framework
  • Celery for asynchronous data processing tasks
  • pandas for data representation and manipulation
  • matplotlib for visualizations
  • Vagrant for deployment