Appy 0.9.1

Milestone information

Project:
Appy
Series:
0.9
Version:
0.9.1
Released:
2014-11-12  
Registrant:
Gaƫtan Delannay
Release registered:
2014-11-12
Active:
No. Drivers cannot target bugs and blueprints to this milestone.  

Download RDF metadata

Activities

Assigned to you:
No blueprints or bugs assigned to you.
Assignees:
No users assigned to blueprints and bugs.
Blueprints:
No blueprints are targeted to this milestone.
Bugs:
No bugs are targeted to this milestone.

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 appy-0.9.1.zip (md5) Appy 0.9.1 198
last downloaded 20 weeks ago
Total downloads: 198

Release notes 

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). Here is the detailed changelog.

[pod]
- When inserting an image via statement do... from document(...), parameter 'sizeUnit' can now be 'pc' (percentage): in this case, percentages are expressed as a tuple (widthPercentage, heightPercentage) in parameter 'size' and must be integers from 1 to 100.
- Bugfix for https://bugs.launchpad.net/appy/+bug/1244738
- Bugfix: repeated error in a for loop (https://bugs.launchpad.net/appy/+bug/394267).

[gen]
- Added for Ref field, param 'insert' that defines at what position a newly tied object is inserted among referred objects.
- Ref field: added params 'beforeLink' and 'afterUnlink' allowing to hold methods that execute respectively before an item is linked via a Ref or after it has been unlinked; bugfix in mixin::getUrl.
- Calendar widget for Date fields: bugfix (when the date range is in reverse chronological order).
- Ref field: added hook 'afterLink' allowing to execute a method just after an object has been linked.
- Ref field: added attribute 'unlinkElement' allowing to define a specific condition for unlinking a given object (before, it was only possible to define, in attribute 'unlink', a global condition allowing to unlink any object from the Ref.
- Ref field: Ref.select can now hold a Search instance
- Ref field: new mode: Ref.link == 'popup', allowing to select referred objects from a popup window.
- Ref field: Ref.numbered: when clicking on the number, it gets selected automatically: when hitting then 'enter' key it has the same effect as clicking on the 'move' image.
- Ref field: when param Ref.select is a Search instance, Search.name can be ommitted.
- Ref field, and search results: positioned checkboxes on the left.
- Ref field: Ref.linkObject and unlinkObject (and caller methods like wrapper.create) can now be called with attr 'executeMethods' being False: in this case, all methods defined in attrs like 'insert', 'beforelink', 'afterLink' will not be called. Can be useful while migrating data or duplicating objects.
- Ref field: bugfix: empty index value [''] could be stored within the db, as the real value.
- Ref field: added a confirmation popup when the user wants to sort the ref. Indeed, most users think it is like sorting query results: they are not conscious it is a permanent change in the database, with effect for all users.
- Ref field: added the possibility to navigate to tied object number X within a list of tied objects from a Ref that is numbered.
- Bugfix: the link to the home page, when clicking on the logo, is fixed.
- Pod field: added param 'getChecked': if you specify there the name of a Ref field of the same gen class, within the pod template you will be able to know what linked objects are currently selected in the user interface.
- Pod field: bugfix: too long filenames were generated for downloadable pod results.
- Pod field: one of the listed templates in field.template can simply be a pointer to another template from the list. For example, template=('Item.odt', 'Item.odt.variant'). The second file is an empty file and gen will use the first one for the second template. It allows to have similar files for templates that, in the UI, are different, ie, can have different names and appear under different conditions. Note that in the default context of every template, variable 'template' contains the name of the template file. It allows the template to know if he is 'called' under the name 'Item.odt' or 'Item.odt.variant'.
- Pod field: send pod results by email.
- Pod field: bugfix: download a generated or frozen pod result.
- Pod field: bugfix with attr 'formats' without method 'showTemplate'.
- Pod field: get the value of appy cookie 'showSubTitle' in any pod template.
- Added Wrapper.isTemp to know if an object is a temporary one or not.
- Allow to show checkboxes for search results.
- Added code that shows a warning: Appy is not compatible with MSIE below 9.
- Updated the Ajax system to be able to call a method on a Appy wrapper instead of a Zope object.
- Any log entry is now prepended by the user login.
- Boolean field can now be rendered as 2 radio buttons (render='radios').
- Multilingual fields can now be historized.
- Bugfix in string.py (inline editing).
- Changes in parameters of some basic field methods to enable field.languages to be defined dynamically via a method.
- Bugfixes: handle multilingual titles in queries, references, breadcrumbs...
- While <obj>.<fieldName> allows to get the 'DB' value of some field, <obj>.getValue allows to get a variant of it, ie, the formatted version (via an internal call to field.getFormattedValue).
- Performance: cached the user language on the request.
- Integrated ckeditor 4.4.4.
- Users have now a workflow allowing them to deactivated. An inactive user can't log in anymore. This is useful if the User is tied to other objects and cannot be removed without breaking the data model, but does not correspond anymore to an active user that is allowed to log in.
- Added wrapper.createFrom, similar to wrapper.create, but allows to create an object with data from another object (kind of 'duplicate' functionality).
- SMTP and LDAP configuration updated. Module appy.gen.mail can now be used independently of a gen-application.
- Complete NL translation, thanks to Winand Eerens.
- Created method mixin.getListTitle that is responsible for displaying an object's title in the various lists (queries, refs).
- Allow to bypass class.onEdit when creating an object.
- When duplicating a file via appy.fields.file::FileInfo.replicateFile, the source file can be binary data in a str instead of an opened file handler.
- Bugfix: display bilingual info in object history.
- Added field.setSlave allowing to lazy-define master/slave relationships.
- Workflow state: make it performant to write, in a gen-workflow: someState=State(otherState.permissions.copy()).
- Added field.getCatalogValue allowing, for indexed values, to get the value as indexed in the Zope catalog.
- Computed field added param formatMethod allowing to define the way to format the computed value (ie: the formatted value can then be different from the 'raw' value: this can be interesting if the raw value must be indexed.
- Allow to have data change events that contain comments.
- Added a new hook in the object creation algorithm: 'onEditEarly', called before an object being created is linked to its initiator object. Indeed, 'onEdit' is called after the link has been done, and sometimes, the linking may need some information that must be set before calling onEdit, thus via this new method onEditEarly.
- Added an utility method on any wrapper class for removing an event from an object's history.
- Action field: param confirm can be 'text': in this case, the confirm popup contains a textarea whose content is passed as param to the method speficied in param 'action'. Action fields can now be defined in a new layout 'buttons' (show='buttons') in order to appear, on the view layout, besides the extsting series of buttons (edit, next/previous pages...).
- Default User class has now 2 pages: the 2 password fields are on a separate page.
- The zone containing user name in the user strip has evolved.
- A page can now be visible on edit but not on view (ie, the new User page containing only fields 'password' and 'retype password'.
- Removed the obsolete mail notification system.
- Added Wrapper.sendMailIf: one may now send mail to an individual user or to everyone belonging to some group (before, one could only send mail to everyone having some role or permission)
- Workflow.onTrigger method now accepts one more arg, fromState, the name of the state from which the triggered transition starts.
- Allow an Ajax request to return a message, carried as a custom HTTP header and retrieved by appy.js to display a message.
- Added UserWrapper.isSpecial that returns True fr special users (admin, system, anon).

[bin]
- backup.py: better error handling when contacting SMTP server.

[shared]
- utils.py::normalizeString bugfix: when a string was not utf-8-encoded but latin-1-encoded, the method raised an exception.
- xml_parser: added parser XthmlToText that produces the pure textual version of a XHTML content.
- xml_parser::XmlUnmarshaller: bugfix: in non-utf8 mode.
- bugfix: renamed module ldap to ldap_connector.

Changelog 

View the full changelog

This release corresponds to trunk, revision 627.

0 blueprints and 0 bugs targeted

There are no feature specifications or bug tasks targeted to this milestone. The project's maintainer, driver, or bug supervisor can target specifications and bug tasks to this milestone to track the things that are expected to be completed for the release.

This milestone contains Public information
Everyone can see this information.