News and announcements

Appy 0.9.2 has been released

Written for Appy by Gaëtan Delannay on 2015-04-30

Appy 0.9.2 includes some significant changes, bugfixes and improvements, in the appy.pod as well as in the appy.gen parts.
Check full changelog at
On Pypi:

Appy 0.9.1 has been released

Written for Appy by Gaëtan Delannay on 2014-11-12

Release 0.9.1 has little impact on appy.pod (2 bugfixes and 1 new feature) but continues to heavily improve the web framework part (gen). Check full changelog at

Appy 0.9.0 has been released

Written for Appy by Gaëtan Delannay on 2014-06-23

Release 0.9.0 brings more independence from Zope for appy.gen and ensures, for appy.pod, compatibility with the latest LibreOffice and Python versions.

Check full changelog at

Appy 0.8.5 has been released

Written for Appy by Gaëtan Delannay on 2013-08-12

This is the last release of series 0.8. It is a bugfix release, also including minor improvements, mainly at the gen and px levels. This is the last 'gen' version where ZPTs (Zope Page Templates) will work. They will be replaced with PXs (appy.px=PythonXml) in the next Appy version.

[pod,px] 'loop' variable, available in the pox/px context, allows to know if we are managing an even or odd elem via loop.<elem>.odd and loop.<elem>.even.

- Added the posssibility to create a custom widget that displays an icon for generating a doc from a pod field, but with an additional param allowing to customize the pod context.
- Some actions were triggered via icons. That was not explicit enough for basic users. So now, every action is triggerd by a button that displays an icon+a text.
- In the process of migrating from ZPT (Zope Page Templates) to appy.px (Python Xml).
- On Page instances, one may now define a method for conditionnally showing the 'edit' button on 'view' layout.
- An app may now, on its Config class, define a method getHomeObject that must return an object that will be the home object for a given (class of) user(s). This object's menu will appear when the user is consulting a page with no tied menu (like a search for example).
- Moved Appy fields into appy/fields together with their PX.
- Added a validator for String fields, for validating Belgian NISS numbers.
- Replaced, in PXs, function 'img' by function 'url', that returns the URL of an external resource to be included in the XHTML, like an image, a Javascript file or a CSS file.
- Created param config.groupsForGlobalRoles that disables by default creation of a group for every global role.
- On a appy class it is now possible to define a static method 'generateUid' that generates a UID for every instance of this class, instead of using the standard Appy way to produce such UIDs.
- Changed the way to customize the Config in an app.

- PX is now thread-safe.
- Added the possibility to have several PX actions in the same XHTML tag. If several PX actions are defined, they are evaluated in this order: var, for, if.
- Added tag 'var2', similar to 'var', but that is executed after tags 'for' and 'if'.
- Managed special HTML attributes like 'checked' and 'selected'.
- Better error reporting when encountering a parsing error in a PX.
- Added boolean param 'unicode' that defines if PX result must be unicode or an encoded str.

- dav: improved Resource.soap: better handling of HTTP header SOAPAction.
- dav: Upgraded to use httplib.HTTPConnection instead of httplib.HTTP.
- dav.Resource: allow to retrieve the result encoded or not in utf8.

Appy 0.8.4 has been released

Written for Appy by Gaëtan Delannay on 2013-06-13

- Added the possibility to define several variables, in 'with' statements, separated by ';'.
- Added the possibility, for function 'document', to import, into an ODT result, external documents of various formats: doc, xls, ppt, etc. This new 'ConvertImporter' uses LibreOffice to first convert the doc into PDF, and then uses the PdfImporter to split the PDF into images (one image per page) and include in in the pod result.
- Allowed to call a pod template within another pod template via new POD function 'pod'.
- Improved error handling.
- Bugfix: error when a pod template does not have a 'mimetype' file inside (
- Bugfix: error when parsing some ods pod templates: some cells do not have attribute 'office:value-type' (see bug
- An expression that begins with char ':' is considered XML code that will come into the result unescaped.
- Within the context of a 'for' statement, loop objects now have additional boolean attributes named 'first' and 'last' that allow to know if the currently walked element is, respectively, the first of the last element of the whole list.
- Added params 'pageBreakBefore' and 'pageBreakAfter' to OdtImporter and PodImporter.
- Updated 'print' statements throughout Appy code, in order to be Python3x as well as Python2x-compliant. But Python3x support is not yet complete.
- Added new method 'pageBreak' allowing to insert a page break via a note 'do xxx from pageBreak()'
- Line breaks which are found within pod expression results are converted to odf line-breaks into the pod result.

- gen now integrates ckeditor 4.1.
- Integrated ckeditor inline editing via boolean parameter field.inlineEdit.
- can now be configured even for anonymous users.
- Added tool.sendMail as an easy access method for function appy.gen.mail.sendMail.
- A Page instance that does not have sub-pages does not show the portlet.
- Added field appyclass.breadcrumb, allowing to show/hide the breadcrumb when displaying instances of this class
- Added field appyclass.resultMode, allowing to choose between 'list' or 'grid' mode (previously, only list mode was enabled) when showing instances of this class as a result of some query.
- appyclass.getIcons now receives the nav param, in case one wants to reproduce, on an icon or a picture, the link to the element. For example, on a artist's site that presents its artworks, getIcons can be used to create a clickable link to a small version of the artwork, that leads to the full-size picture.
- Bugfix: sort references.
- Allow to show transitions on 'view' and/or 'result' layout types.
- UI improvements.
- Added the possibility to define dict someClass.styles (with, currently, a single entry 'title'), allowing to specify alternative CSS classes for class-related elements (here, 'title' allows to define an alternative CSS class for the link allowing to click on some instance of the class on a query or ref.
- Added a basic integration of gen applications with Google Analytics.
- Bugfix in the query engine.
- Bugfix: do not show the Calendar widget (search and edit layouts) if field.calendar is False.
- Bugfix in the start and end dates for the Calendar widget.
- Added Config.discreetLogin allowing to put a discreet link on the main page for logging in, instead of the login form in the central strip, for sites where logged users do not represent the majority of visitors (only some admins).
- Corrected Zope index type for Date fields.
- wrapper.appyUser returns the admin if the user is 'System Processes', the virtual user that runs when Zope is starting.
- Added the possibility, for an admin, to unlock a page that was locked for too long by some user.
- Improvement in the management of Unauthorized exceptions.
- Added attributes 'created' and 'modified', now accessible on Appy wrappers.
- Added method AbstractWrapper.countRef that allows to count the number of objects tied to a given object via a Ref field whose name is given as method param.
- Replaced attributes tool.enableAdvancedSearchForX by Obsolete fields 'enableAdvancedSearchX' are not generated anymore on the tool.
- Added a mechanism for caching method calls that are performed several times for displaying a single ui page (ie: methods).
- Bugfix in the way to index text fields containing line breaks.

- Added a new script that allows to search for some pattern within odt and ods files.
- Added script bin/ to check connection to LibreOffice.

- First version of a new template engine Python-XML, sharing the pod roots.

15 of 21 results