Guillotina. The Full Stack Data Framework


Toulouse sprint - June 2019

From the 13th to the 16th of June 2019

Guillotina is a great framework which can help in many use cases, it allows to deliver fast and scale.
We think too many people do not know it and we want to raise the level of awareness about Guillotina.

That is why the Toulouse Guillotina sprint objective is to enhance the developer-friendly aspects of Guillotina which are commonly provided by well-known existing web frameworks (like powerful admin interface, simple object model), and to push more specific aspects which make Guillotina such a unique framework (traversal, async, object database).

We will work on:

  • expand the features of admin interface:
    • integrate it with some of the addon packages we have (users and search for example)
    • executioner addon policy
  • better guillotina cms support
  • normalize some of the endpoints,
  • improve db/transaction apis
  • GOS (the new Guillotina database)

Sprint outcomes

Guillotina server:

  • As Python 3.7 has context vars we’ve been able to replace aiotasks external package and frame logic to hold request object and depend on python 3.7
  • We’ve decoupled transaction and task information from request with the context vars enabling to use transactions out of a request allowing to go to a streaming protocol to work with guillotina objects.
  • In order to provide a better search experience we added pgcatalog (JSONB indexing) as official as contrib package(comes ootb). With this feature indexing information is tied to transaction which allows to search after creation without Elasticsearch ingesting delay
  • In order to be able to serve http2 we started an ASGI implementation so we can serve guillotina with uvcorn and plan to drop aiohttp support at G6.
  • In order to provide cache headers on each HTTP request we are adding options to configure it on the service decorator and provide purge subscription.
  • As a long time task we started to implement a DB for guillotina with rocks db and Rust so we can provide full text search, indexing and storage on the same server.
  • We released Guillotina 5 alpha1 with all the changes.

On the frontend side, we have been working on the Executioner (the Guillotina built-in admin interface):

  • First, we have upgraded the Angular project and its dependencies to Angular 7.
  • We have successfully experimented Cypress as an end-to-end testing solution. It is faster than RobotFramework, easier to deploy. The only downside was the syntax (tests are written in JS), but by connecting it to Cucumber, we have been able to use a very nice natural language syntax, very similar to the RobotFramework.
  • We have added pagination support in the Executioner navigation tree (which allows to browser containers with more than 20 items).

We have also made some progress on other frontend topics:

  • We have upgraded the pastanaga-angular library to Angular 8,
  • The Volto compatibility with Guillotina has been improved, and testing has been fixed,
  • We have started an Angular library allying backend traversing and Redux state management
  • And we have implemented the first alpha version of mrs-developer (successor of mr-developer, allowing to checkout Git repositories as dependencies in any NPM project)

Past sprints