Appy 0.9.0

Milestone information

Gaëtan Delannay
Release registered:
No. Drivers cannot target bugs and blueprints to this milestone.  

Download RDF metadata


Assigned to you:
No blueprints or bugs assigned to you.
6 Gaëtan Delannay, 1 Luc Saffre
2 Implemented
5 Fix Released

Download files for this release

After you've downloaded a file, you can verify its authenticity using its MD5 sum or signature. (How do I verify a download?)

File Description Downloads
download icon (md5) Appy 0.9.0 178
last downloaded 4 weeks ago
Total downloads: 178

Release notes 

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.

Here is the detailed changelog.

- now works from Python2.4 to Python3. Thanks to Lennart Regebro who wrote the 'e=sys.exc_info()[1]' trick for catching exceptions in both Python2.4 and Python3 and Luc Saffre for discovering it.
- Added param Renderer.raiseOnError (False by default), that, if True, will force the Renderer to raise an error instead of dumping it into a note in the pod result.
- Take into account tabs and carriage returns in POD expressions. 'do ... from text' is now obsolete: pod expressions now handle correctly tabs and carriage returns.
- Force raiseOnError=True when working from an ODS template.
- Bugfixes and more blueprints implemented: see the release page.

[pod, px]
- Allow to reference an already defined variable instead of defining one in a var statement, via the '@' prefix. For example, in PX: var='@i = i + 1'.

- Added px.override allowing a plug-in to modify PX codeof some Appy application.

- ZPT (Zope Page Templates) are completely abandoned and recoded with appy.px as smaller objects defined as static attributes throughout Appy classes, to get a more object-oriented approach. PX and POD share the same basic engine for rendering XML code from a mix of XML and Python. For POD, this XML is OpenDocument; for PX, it is XHTML.
- Some security-related aspects from Zope are abandoned and recoded within Appy. For example, workflow-related data is not stored anymore on every object, as required by Zope; Appy has now a full RAM approach: workflow-related security info is available in workflow classes (local roles excepted).
- finalized a LDAP module allowing to authenticate using a distant LDAP directory.
- When bypassing security (via code), conditions for workflow transitions are not checked at all.
- Replaced database fields tool.resultColumnsFor[class] by static attributes class.listColumns.
- plainText is now False by default, method can now be a PX.
- computed fields are now by default rendered in view and cell layouts.
- bugfixes in the validation process.
- field now takes into account 'show' attribute of sub-fields.
- Added wrapper.getLastEvent, allowing to perform kinds of queries into an object's history.
- pod fields now read pod templates directly from disk. Fields 'template' and 'formats' that were generated into the database (and editable through-the-web) are now removed. Thanks to this simplification, we can now define several templates for a unique pod field, ie: multiDoc = Pod(template=('TemplateA.odt', 'TemplateB.odt')).
- A pod field can now freeze and unfreeze any of its multiple templates.
- Added 'freeze actions' to pod fields. For example, allow to upload a replacement file for a frozen pod document.
- The pod field can now accept a string in param 'showTemplate' if a single format is accepted.
- Security bugfix for pod fields: write access to the field is required for performing any freeze-related action.
- Migration to Appy 0.9.0: dump frozen pod fields on disk.
- fields tool.numberOfSearchColumnsForXXX and tool.searchFieldsForXXX are not generated anymore and are replace by static class attributes class.numberOfSearchColumns and class.searchFields.
- klass.creators can now be a method that either returns a list of global roles allowed to create instances of this class, or a boolean indicating if the currently logged user can create instances of this class or not.
- Allow to group transitions.
- Extended the HTTP-XML system to be able to call a method via a HTTP POST containing XML data (SOAP or REST-like).
- method Mixin.xml: if the method result is already XML, it is not marshalled again.
- Added the possibility to define searches for User, Group, Translation and Page classes.
- Allow to edit external users, excepted data like login, name... that come from the external source.
- Added base Appy i18n files containing standard Appy labels.
- Appy web interface has now 2 skins: the default one, with a fixed with; the one named 'wide', that takes the whole screen width. Choosing the skin is made via de Conf instance, attribute 'skin'.
- Binary files stored in fields appy.fields.File are now stored outside the ZODB, on the filesystem. Added migration code for converting File instances to FileInfo instances.
- Ref fields can now also be rendered as dropdown menus: every menu represents a coherent group of link
ed objects. The main menu entry can be textual or an icon.
- Master-slave fields: slave values can now ajax-change when the user modifies master values.
- Added field.persist to avoid storing values for fields that do not require it (like master fields only used to determine selectable values among slave fields).
- Allow for ajax-based master-slave relationships within the search screen for Ref and String fields.
- Removed obsolete attribute Field.sync.
- Removed obsolete function to create objects via an import form.
- Added a transparent clickable logo at the top left (or right if rtl) of the page.
- Automatically generated passwords and captcha challenges do not include numbers and letters that could be misread.
- Added an icon for unlocking single-page objects.
- Added class Appy.Hack allowing to elegantly (more than monkey-)patch methods of existing classes.
- Bugfix in the sync of i18n files
- Allow to include XHTML within messages in Appy popups.
- Allow to specify several folders within an app where to store static ui content (js, css, images).
- When browser settings are ignored or absent, default language is the first one listed in Config.languages.
- Ref field: param 'link' can now be 'list', to produce a nice widget where one can pick selectable objects in a list and transfer them to the list of linked objects.
- Ref field: allow to insert many selected items at once (Ref fields with link='list').
- Ref field has now global actions like 'unlink many', 'link many' and 'delete many'.
- Within Ref fields, added 2 icons for moving tied objects to top or bottom.
- Added attribute Ref.numbered allowing to produce numbered lists of tied objects and controls for easily moving objects from one position to another.
- Added and changed some methods on the basic workflow objects in order to ease modifications on workflow objects (states, transitions) that plugins could perform on some Appy applications.
- Buttons (actions, transitions) can now be stretched to fit the size of the inner label.
- Buttons for workfow conditions are now smaller when shown in lists of objects; added the possibility to define a specific icon for every workflow transition.
- Bugfixes and use of Ref.autoref to avoid circular references within cross-class Ref fields.
- Added method Mixin.onCall allowing to call a specific method on a gen-class from the UI.
- Fixed groups with style 'tabs'; reused the same tabs for representing phases; pages and phases are now outside the portlet, rendered horizontally below the breadcrumb; methods getSupBreadCrumb and getSubBreadCrumb can now be defined on every gen-class to customize what is shown above and below the breadcrumb (=title with a prefix) on view layouts (those methods are similar to getSubTitle and getSupTitle when displaying lists of objects).
- Added ref.render == 'minimal' = a way to render linked objects as a simple list of comma-separated, non clickable infos as defined in shownInfo.
- Added method workflow.Transition.getBack that finds the 'back' transition of a given transition.
- When showing linked objects in a Ref field, we show a message and no data for every object the currently logged user is not allowed to read
- Improved the default UI layout (less table borders).
- Removed appywide.css: css class which is specific to the wide layout are now in appy.css but are used conditionally in PXs.
- Added String.placeholder, similar to HTML attribute 'placeholder' allowing to specify a short hint that describes the expected value of the input field.
- Added a new utility function for formatting elements like phone numbers.
- On a workflow class, one may now define a method 'onTrigger(self, obj, transitionName)' that will be called after any transition has been triggered, but before the a transition-specific action.
- A class may now be flagged as being "popup", ie: Class.popup = ('500px', '400px'): edit and view layouts for this class will appear in a popup.

- remove Data.fs.old before packing the ZODB to avoid disk space problems.
- new mode 'copy' that does not use repozo for backup but a simple copy of Data.fs.
- added a param to define the scope of the LDAP query (base, onelevel or subtree)

- xml_parser: convert nbsp entity to the equivalent utf-8 char.


View the full changelog

This release corresponds to trunk, revision 552.

2 blueprints and 5 bugs targeted

Blueprint Priority Assignee Delivery
Add "unlink" button to unlink objects through Refs Add "unlink" button to unlink objects through Refs 1 Undefined Gaëtan Delannay  11 Implemented
Add for the tool parameters related to workflow rendering Add for the tool parameters related to workflow rendering 1 Undefined Gaëtan Delannay  11 Implemented
Bug report Importance Assignee Status
1331943 #1331943 appy.pod does not work with LibreOffice 4 3 High Gaëtan Delannay  10 Fix Released
1169217 #1169217 Behaviour if errors during 4 Medium Luc Saffre  10 Fix Released
1173295 #1173295 pod generated ods files do not open in Libreoffice nor MS Excel 2010 4 Medium Gaëtan Delannay  10 Fix Released
1328139 #1328139 OSError: [Errno 13] Permission denied: '/Configurations2' 4 Medium Gaëtan Delannay  10 Fix Released
1333352 #1333352 appy.pod for ODS: Python float is rendered as a string in the ODS result 4 Medium Gaëtan Delannay  10 Fix Released
This milestone contains Public information
Everyone can see this information.