Appy 0.9.10

This release contains lots of bugfixes, minor functional as well as performance improvements, on all framework parts.

Detailed changelog

Appy 0.9.10 corresponds to revision 592. Details are hereafter.


  • Allow to modify, on a TableProperties instance, the cell and header cell content styles to apply.
  • do... from pod() and do... from document(): allow to insert page breaks before/after the sub-document based on its (odd or even) number of pages.
  • doc_importers: improved the way to insert page breaks into pod results.
  • Added parameter 'script' to the Renderer.
  • Added parameter 'managePageStyles' to the renderer: it allows to rename the sub-page styles as well as specify a start page number for the pages included into the sub-document.
  • Maintain temporary backward compatibility via the use of attribute pod(renamePageStyles=True) instead of pod(managePageStyles='rename').
  • retrieves LO version.
  • added option -s for specifying a script allowing to customize the production of the POD result by allowing, via hook functions, to perform UNO calls to LibreOffice.
  • bugfix (LibreOffice 3 compatibility).
  • Changed interface to the 'finalizeFunction', see
  • Allow to define a background color on span (inner) tags (fluotage).
  • pod statements: bugfix (use of the 'minus' operator in combination with meta-if statements).
  • Multiple meta-if statements: bugfix.
  • Bugfix (doc_importers), thanks Stephan.
  • Import sub-pods: bugfix.
  • Added parameter 'managePageStyles' to pod method 'pod' (do ... from pod(...)).
  • xhtml2odt: support for the 'abbr' tag (in the same way as 'acronym').
  • xhtml2odt: generation of object IDs (tables, etc): bugfix.
  • Completed class TableProperties: margins can now be defined for tables.
  • Added to the renderer and to parameter 'resolveFields'.
  • Manage deprecated parameter 'renamePageStyles' for statement 'do... from pod', but allow to use the new parameter 'managePageStyles'.


  • Added detailed errors in the yellow error message popup.
  • User wrapper: bugfix and added method User.getFirstNameInitial.
  • fields/ and Date field: bugfixes.
  • Ref field: bugfixes (queryable fields).
  • Ref field: no crash (but log) when tied objets are not found.
  • Ref field: added attributes 'subTitle' and 'supTitle' allowing to override tied object's 'getSubTitle' and 'getSupTitle' methods.
  • Ref field: added parameter 'backSecurity'.
  • Pod field: bugfix (freeze formats).
  • Pod field: added parameters 'beforeAction' and 'script'.
  • Pod field (mailings): simplified developer interface and allow the end user to read the mail subject and modify the predefined mail body from the confirm popup.
  • Pod field: log successfull renderings and add more log for query-related pods that may slow down the system.
  • String field (format=String.TEXT) bugfix.
  • String field: take into account widths (for one-line text fields) expressed in percentages.
  • File field: added attribute 'nameStorer' allowing to initialise (in Javascript) another field with the file selected in the File field.
  • List field: allow to insert a row anywhere (no just at the end) and added the possibility to insert rows via the keyboard.
  • added attribute 'shownInfo' allowing to define search-specific columns to display, before using klass.listColumns.
  • Wrapper::getValue: added a parameter allowing to get a value without taking into account the default value/method.
  • Boolean field is now inline-editable.
  • Boolean field: one more layout for fields with long descriptions.
  • Action field: allow to use options in combination with result='redirect'.
  • Minor CSS change for audio tags.
  • An action can now be parameterized by creating a transient object in a popup from another Appy class.
  • UserWrapper::has_permission > hasPermission / UserWrapper::has_role > hasRole
  • Tag group: when an object is created, all tab groups are reinitialised to their first tab.
  • added attribute Transition.historizeActionMessage allowing to append the message produced by self.action to the corresponding event's comment.
  • Added a method Transition::addAction to dynamically add an action to an existing transition.
  • Bugfix for Microsoft Edge.
  • Apply a template for creating an object: bugfix (manage List fields).
  • Major refactoring for searches, refs and navigation.
  • Searches: calendar view: first working version.
  • Searches: calendar view: allow to show events spanning several days.
  • search::calendar mode: bugfixes.
  • Base model: xml layout: bugfixes.
  • Base model: bugfix (visibility of pages).
  • Optimized Javascript code following code analyis performed by CETIC vith tool SonarQube.
  • Keyword highlighting in search results: bugfix.
  • Show object ID in the exception raised when a transition can't be triggered.
  • Tool::computeConnectedUsers: allow to produce a filtered list of connected users, ie for displaying only connected users of a given group, or any other users's subset.
  • Added, in event.log, logging of caller's IP address when the app is behind a reverse proxy like Apache or NGINX.
  • Added a new hook method 'onCreate' allowing to set local roles on a temp object.
  • More appropriate loading icon for actions rendered as icons (and not buttons).
  • Prevent an error to be generated when an object referenced in the catalog does not exist, but generate an error in the log file.
  • appy.css: keep underlining acronym titles, it could be useful.
  • Auto-removal of wrong catalog entries while performing catalog queries, smart isn't it...
  • Added method ToolMixin::repairCatalog for removing dead brains in the catalog (and counting the total number of Appy objects in the database).
  • Wrapper::sendMailIf - allow to send a mail to several users or groups.
  • CSS bugfix (sidebar).
  • appy.js: added functions for managing fields being automatically ajax-refresh with a Javascript timeout.
  • OdtImporter: alternate way to implement 'duplex' sub-pod insertion.
  • Manage CSS color values expressed as rgba().
  • xhtml2odt: allow to keep images' ratios or not.


  • updates (https, key mandatory).
  • Added in appy.shared.utils a class TextReplacements allowing to format text in a way that is similar to reStructuredText.
  • Added a date-related function in appy/shared/
  • added method roundNumber for rounding integer values to another integer value.


  • Added the possibility to define PX-specific CSS and JS code.
  • Added some default variables in every PX context.


  • with one more parameter (a replacement string) you can also perform a grep/replace instead of a simple grep. The output of the script is improved and contains the number of matches or replacements.
  • More improvements for added class RamGrep allowing to call it from another program, with an ODF file specified as a StringIO instance.
  • Updated with a check measuring the time spent to optimize table column width with option -o.
  • publish Appy on Pypi using twine.
Add picture from clipboard (Maximum size: 31.3 MB)