After a 4 year break the 5th Buschenschanksprint happened again.
We had 9 participants working on a couple of important issues around Plone and Python 3.
Südsteirische Weinstraße - an area in southern Styria in Austria next to Slovenia known for it's lovely views on hills with vineyards and woods, small villages, Buschenschänken (wine taverns) and its excellent wine.
There we held the fully booked Buschenschanksprint - at a vineyard with an over 100 year old house from the wine maker List Wein.
We were 9 people from the Plone community from the DACH region (in order of registration):
Johannes Raggam (programmatic, BDA, Graz),
Peter Holzer (agitator, BDA, Zurich),
Philip Bauer (Starzel, Munich),
Franz Reinisch (FGRcon, Vienna),
Jens Klein (Klein & Partner, BDA, Innsbruck),
Maik Derstappen (Derico, Leipzig),
Robert Niederreiter (r2 Solutions, Innsbruck),
Markus Hilbert (Akademie der bildenden Künste, Vienna),
Gogo Bernhard (Akademie der bildenden Künste, BDA, Vienna).
We had lucky with the weather, so that we could enjoy the beautiful nature. The culinary part of the sprint was not bad: besides from visits to Buschenschank Gallunder, Buschenschank Muster Stub'n and the Restaurant Magnothek we had an excellent barbecue dinner from our BBC masters Peter and Maik and very tasty and fancy salads from Jens and Markus.
The beautiful surroundings, the tasty dining options, local food and the excellent wine make good ingredients for a community building and socializing event. But equally important is the fact that during the sprint we all live and work on the same place, which allows for spontaneous coding sessions in the middle of the night after discussing new ideas on how to tackle a problem.
Which brings me to the topics of the sprint:
Plone on Python 3
Philip was the topic leader for the Plone on Python 3 topic. After a dramatic introduction to the topic - given the soon ending of support of Python 2 - we all committed to dedicate a good part of our work to this topic.
At the beginning we had 435 from 5999 failing Plone tests on Jenkins for Python 3. We managed to bring it down to 196 / 6966 failing tests. The total number of tests increased because of refactoring tests from PloneTestCase which didn't run on Python 3 to plone.app.testing.
The plan is to support Python 3 with the release of Plone 5.2 while still supporting Python 2. Only after the end of Python 2 support in 2020 we can remove the Python 2 compatibility code paths. For more info on the progress of this PLIP also see the Github project page for it.
Some of the migrated packages were:
- Products.MimeTypesRegistry
- plone.app.layout
- plone.subrequest
- Products.CMFPlacefulWorkflow
- plone.app.contentmenu
- Products.CMFDiffTool
- plone.locking
- plone.batching
We started work on these packages but could not finish them at the sprint:
- plone.outputfilters
- Products.PortalTransforms
Philip will continue work on Python 3 together with David Glick and Jens directly after the upcoming Beethoven sprint. After the sprint there will be a status update on the Plone on Python 3 effort. There is still a lot to do (e.g. no robot tests run at the moment) but things are looking good!
plone.login
Jens and Peter worked on plone.login, a rework of the current skin folder based login functionality. They worked on translations, fixed the password reset functionality and added an autologin after password reset option. Finally they finished it and it was already merged into Plone 5.2 (PLIP 2092). For Plone 5.0 and 5.1 the addon package plone.login can already be used.
After some discussion Jens also removed an hacky Single Sign On feature where someone could login - after a redirect - in another Plone portal and use the cookie after a domain rewrite in the source portal. Besides from being hacky it might also introduce unknown security breach vectors. People might better use standard SSO methods like Shibboleth, OAuth2 and others. If this method is still needed, it might be repackaged in an addon.
YAFOWIL on Python 3
Besides on being part of the Plone on Python 3 team, Robert and Gogo managed to add full Python 3 support to the YAFOWIL form library - including all of the addon widgets, yafowil.yaml, yafowil.webob, yafowil.demo and yafowil.documentation.
yafowil.plone
Robert also worked on autoform functionality in yafowil.plone, so YAFOWIL forms can be used as drop-in replacement for plone.autoform. Autoforms can be enabled via the IYafowilFormBehavior on Dexterity types. If done so, it will use the zope.schema definitions to render YAFOWIL forms instead of z3c.form based forms. This also includes out of the box support for Mockup widgets. In the current state, the default Mockup widget integration needs to get finished to reach parity with the forms rendered on default Plone content types. To avoid code duplication, the widget options calculation in plone.app.z3cform.widget should be generalized in some way. Some YAFOWIL specific directives were added by Jens. Using those, widget-overrides, order and a chain of modifiers can be injected on each field. Here still some work need to be done, but looking at the tests it feels right.
plone.app.event
A recurring topic with every Buschenschanksprint is plone.app.event. Peter worked on it and moved the old-style resource registration to the new resource registry, moved all styles to plonetheme.barceloneta and modernized and simplified the browser views.
collective.navigation
Plone's navigation has always been suspicious of having bad rendering times and some attempts were made to make it more performant. Still, it's a bottleneck in some cases.
Peter continued the work which Johannes recently started on a Navigation replacement for Plone with Dropdown support and added a viewlet based on the plone.tile based tile, configuration support with zope.schema and styles which can be used out of the box.
collective.navigation was started after Johannes found out that rendering a webcouturier.dropdownmenu for a customer project took 500ms to 1500ms - an unacceptable duration (by the way - the toolbar is also a bottleneck). collective.navigation needs for the same structure only 30ms to 80ms - if cached even less than 20ms. Webcouturier dropdownmenu is based on Plone's default navigation data structure adapters (INavigationQueryBuilder, INavtreeStrategy) which are called recursively. The performance gain was achieved through simplification: We only use a single query and the results are resorted afterwards in Python which can efficiently be used for displaying nested data structures. Also we do not do recursive template calls but build the output directly in Python.
As soon Peter has finished his work and has done some more tests we are going to publish the code on the collective repository and write a PLIP for it.
Elemantary particle detector
Besides on working on Python 3 and other projects (an Raspberry Pi based SuperCollider audio player) Gogo worked on a elementary particle detector based on isopropyl-alcohol, dry ice (frozen CO2) a baking tray, a transparent salad bowl and a seal made from noodle-dough. It is a simple construction of a cloud chamber. When radioactive elementary particles shoot through the cloud chamber they can be seen as traces in the fog that consists of saturated alcohol. It was beautiful to see this experiment really working.
Finally
The whole week was intense but also relaxing. I'm looking for the next edition of this sprint in 2019. At least if the world is still spinning round!
Also see the sprint Announcement: Buschenschanksprint 2018 - 11.6-15.6.2018
And now some Photos:
The "Südsteirische Weinstraße". Parts of it.
At the List Vineyard.
Just before dinner.
Our barbecue masters.
Working:
Waiting for the dinner at Magnothek.
At the Buschenschank Muster Stub'n
Discussing.
Experiments with the elementary particle detector.