News and announcements

Appy 0.8.1 has been released

Written for Appy by Gaëtan Delannay on 2012-08-16

- xhtml2odt: ability to include images from img tags (anonymously). Non-anonymous solution for a Appy/Zope server only.
- xhtml2odt: bugfix in management of styles applied to inner p tags added within li tags.
- xhtml2odt: generate ODT tables from XHTML tables, taking into account variable column sizes.
- xhtml2odt: bugfix: apply styles mapping to 'p' tags that are added automatically by xhtml2odt (was only implemented for p tags inside li tags).
- Function 'document': allow to specify size of images in cm or px, or via a 'style' tag.
- Improved styles mapping system: one may now express things like: 'p[text-align=center]':'StandardCentered' (ie, map an HTML tag having some CSS attributes to a specific ODT style). See verbose docstrings in
- Allow to import SVG files (requires installing imagemagick).
- Bugfix while including a PDF file into a document
- Ease the inclusion of Plone images from a Plone/Zope DB through 'do text from document' statements.
- Variable named 'loop' is now available in the POD context of any section within a 'for' statement, with attributes like loop.[iterVariableName].length (=total number of looped elements) and loop.[iterVariableName].nb (=index of currently looped element)
- Added some default appy-related table styles for producing cells with text in bold/normal, aligned right/left, etc.
- Bugfix while dumping large size images into pod templates from appy.gen FileWrapper instances.
- Added a default POD style 'podPageBreak' allowing to include page breaks via do... from... statements.

- Replaced tiny_mce with ckeditor (in-line editor), version 3.6.3.
- Allow to upload images in ckeditor fields.
- Improved error management.
- Added params String.allowImageUpload and String.styles for tuning the in-line editor corresponding to a String instance with format=XHTML
- Manage borders of images uploaded in such a field
- First draft of a migration script that allows to migrate data from Plone-dependent Appy apps (<= 0.7.1) to Ploneless Appy >= 0.8.0.
- Added method wrapper.search1 that returns a single result (which is the only difference with
- Bugfix while getting objects from the catalog (bypass security when called from code).
- Added new format 'captcha' for a String, allowing to generate a captcha-like widget.
- Allow to define a method Tool.getHomePage that returns the URL of the home page for any user (authenticated, anonymous, manager, or any other code-based distinction)
- Allow an app to define a 'ui' folder for storing new UI-related elements (pages, images, etc) or overriding standard Appy UI elements
- logo.jpg is replaced with banner.jpg (size 900 x 75px)
- Improvements in user management.
- Added obj.mayAct method that allows to display conditionnally the column 'Actions' when an object is shown in a list (query or ref)
- Improved navigation from sub-objects to parent objects
- Improved layout.
- bugfixes in the List field.
- Allow to define several layoutTypes (ie: ('edit', 'result')) as a tuple/list in 'show' attributes of fields.
- Removed fields Tool.showWorkflowCommentFieldForxx (workflow comment may not be entered into the confirm popup).
- Security-related bugfixes.
- Added the possibility to create and manage web pages into an app.
- Every class can now define a method showPortlet. If the class does not define it or if it returns False, the portlet won't be shown when showing/editing instances of this class.
- Added Ref.navigable: if True, referenced objects can appear within the portlet.
- Bugfix while using Zope behind Apache and using the VHM.
- Ref.view macro is not called via Ajax anymore for single-valued Refs (when displaying lists containing single-valued Ref fields, it produces too many ajax requests, leading to ConflictErrors in the ZODB).
- Bugfix while searching the catalog based on object state.
- Added XHTML cleanup code.
- Added String.generatePassword.
- Bugfix: mising HTTP header while sending some responses back to Apache (caused a bug in ckeditor image upload).
- Bugfix while importing images via an image resolver (Zope behind a reverse proxy).
- Improved mail notification mechanism.
- Optimized performance (methods defined in 'show' attrs were called twice on and
- Added String.richText allowing to have ckeditor with more text-formatting icons.
- Added ckeditor 'show source' button by default (impossible to live without that).
- Solved security-related problems.
- .mail: allow to send mail as authenticated user.
- Bugfixes in pages when rendered by IE.
- Improved cleaning and formatting of XHTML content.
- XhtmlCleaner now only keeps useful CSS attributes within XHTML style attributes.
- Added the possibility to define a sortOrder of a Search class.
- Bugfix while managing languages, ui improvements.
- CSS improvements.
- Bugfix: parsing now works even if encoding is declared at the beginning of the Python file.
- A default layout for Boolean fields, including a description, is now available in Boolean.dLayouts.
- Added obj.mayEdit, an additional condition for editing an object (similar to mayDelete).
- Bugfix: specifying a workflow for a User class crashed because, in, Appy took into account the standard workflow on this Class instead of the custom one.
- Security: added missing checks at the code level, ensuring that a user can create instances of a given class (root classes, or instances created via an initiator field)
- Bugfixes in the test system, which works again (was broken after deplonization).
- Possibility to define, programmatically, for a given class, the default view and edit pages, by defining, respectively, methods getDefaultViewPage and getDefaultEditPage.
- Bugfix in attribute Field.focus.
- Bugfix in UserWrapper password management.
- Finalized pending i18n (added some missing labels).
- Added boolean Tool.loadTranslationsAtStartup that, if False, prevents to overwrite, on a production site, translations edited through-the-web by users. If True, at every Zope startup, Translation objects are overwritten by the content of their corresponding po files on disk.
- Added method Wrapper.isEmpty(name) that checks if the content of some field is empty or not on a given object.
- Simpler
- When raising Unauthorized, gen gives more explanations.
- Added support for right-to-left (RTL) languages.
- Implemented a mechanism 'forgot password?'.
- Allow Managers to change the login of a user.
- Bugfix in the 'change user id' function. Now, the method browses every object in the database and updates local roles where the old ID was potentially mentioned.
- Added UserWrapper.checkPassword allowing to check if a password is the right one for a user.
- Field.indexed, instead of being a Boolean, can be a str, to represent the name of a Zope Index. This way, it is possible to bypass the standard Appy choice for index types, ie for Computed fields whose content may produce any type of value.
- Added missing translation labels in the macro displaying object's history.
- Added default fields Tool.dateFormat and Tool.hourFormat that give application-wide default formats for dates with/without hour.
- Added a table in Config->Users that shows the connected users and the date/time of their last access to the app.
- Added the missing search macro for a Computed field.
- Method added param 'noSecurity' allowing to bypass check of roles mentioned as conditions for triggering worfklow actions.
- First version of a Ogone Appy plug-in.
- Add param Config.activateForgotPassword to allow to disable this functionality for sites where the email of users may be unknown.
- More accurate error reporting for Action fields.
- Do not generate base label for a workflow transition if is False.
- Added an alternative predefined layout for pages (including summary, which is absent by default).

- is now able to generate a Debian package for Appy, working with Python 2.6 and Python 2.7; contains optimized code for generating a non-buildout Zope 2.13/Plone4 instance.
- one less arg: outputFolder has been removed (the script now generates the Zope product in <appFolder>/zope)
- new option '-d', for generating a Debian package from the Python (Appy) app.
- is now able to create a pure Zope instance on its own (without mkzopeinstance) from a Zope install made with Debian zope2.12 package.
- Adapted for Appy >0.8.
- added field 'To' to mails sent by the backup procedure (so it not less directly considered as junk mail)

- Bugfix for (appy.shared.dav)
- Improved Debianizer (launches Zope and OO automatically)
- Improved deployment of a Appy app (creation of a Zope instance is no more required; corresponding folders are created in standard unix locations: /etc for the config file, /var/log for logs, /var/lib for the database, /usr/bin for scripts that start and stop the instance).
- Improvements in Debianizing an Appy app: the Debian install creates now scripts for starting the Zope/Appy/app instance and OpenOffice in server mode at boot time.
- Allow to marshall Plone/Zope LazyMap instances.
- Added the possibility to generate a Cortex/Comodit (see application definition for an Appy application.
- .packaging: added the possibility to sign the generated Debian packages.
- .diff: bugfix: work internally on unicode representations of strings to diff: this way, we are sure every char is one char length.
- .diff: bugfix (avoid infinite loop between m_getHtmlDiff and m_getReplacement) and better recovery when the Merger fails to manage overlaps (the whole line is then considered as having been deleted and replaced by something completely different, which is not really the case but at least is shows a simplified diff instead of crashing.
- Bugfix in the XhtmlCleaner that now returns result as a str and not a unicode.
- XmlUnmarshaller can now be ran in 'non utf-8' mode: if enabled, any marshalled string will no be Python unicode, but simple str.

Appy 0.8.0 has been released

Written for Appy by Gaëtan Delannay on 2011-12-15

- Added class that allows to create a complex (ie, with a dynamic number of columns) table programmatically (to be imported with a statement 'do ... from'). This class allows to generate HTML tables as well (qui peut le plus peut le moins)
- Bugfix while generating tracebacks within odt results (unicode-related)
- When using function 'document' in 'from' statements, first arg can now be a appy.shared.utils.FileWrapper instance.

- First pure Zope version of Appy. Plone has been completely removed.
- Brand new web interface for appy.gen applications
- Integrated tinyMCE
- Ref.shownInfo can now specify column widths (ie, 'title*70%')
- Updated default page and field layouts
- Stop generating a label for back references it not needed.
- Reimplemented master/slave-related Javascript code without Plone queryCss
- Ugly Zope acquisition-related bugfix
- Bugfix while rendering file widgets
- Added a widget 'List' for rendering grids of data.
- Generalized use of appy.Object
- Existence of a field value (that triggers search for a default value) is now based on Type.isEmptyValue, and not '==None'
- Bugfix with default values for List fields
- Prevent search icon to be shown for a Ref when there is no linked object
- Use appy.shared.utils.formatNumber function
- Visual bugfix while displaying boolean fields
- Type 'float': added the possibility to define a separator for thousands
- Permission-related bugfix while creating objects through AbstractWrapper.create
- Bugfix in group widget 'tabs'
- Improved layout of grid widgets in view mode
- Use of .pyt extensions for template Python classes in appy.gen.templates in order to avoid byte-compilation errors when distutils installs Appy

- Updated, that is now able to generate a DistUtils tar.gz for Appy
- can now be called with option '-s' (silent): in this mode no question is asked to the user, default values are used
- Updated that generates a better Plone4-ready simple Zope instance;

- Added new class appy.shared.diff.HtmlDiff for computing differences between 2 chunks of HTML code.
- xml_parser.XmlMarshaller: support for default namespaces and 'any' tags.
- dav: bugfix in error handling
- utils: added french-accents-aware functions lower and upper
- utils: improved functions normalizeString and formatNumber

This version corresponds to trunk, revision 200.

Appy 0.7.1 has been released

Written for Appy by Gaëtan Delannay on 2011-12-15

- bugfix when importing images under Windows (
- added the possibility to specify size of images to import (see

- bugfix while validating file fields which are mandatory
- stopped using uid_catalog and added index 'UID' in portal_catalog
- bugfix while searching objects in the limits of a Ref field
- display user info in the main template (name, id, roles)
- when creating an object from a reference, after creation, appy brings the user back to the view page where the Ref field was
- reworked management of Ref fields, that do not use Archetypes and reference catalog anymore.
- added a mechanism for migrating from one Appy version to another, automatically, when reinstalling an Appy application.

- added the possibility to define login and password for SMTP authentication (the script allows to send mail)

This version corresponds to trunk, revision 173.

Appy 0.7.0 has been released

Written for Appy by Gaëtan Delannay on 2011-09-15

- Optimized image importing: when an image is imported several times in a pod template through a call to 'do ... from document(at=path)', pod inserts only one copy of the file into the ODT result;
- xhtml2odt bugfix: when a <div> was contained in <ol><li> or <ul><li>, the whole function ouput was an empty string.
- bugfix in html2odt: in some situations, while using stylesMappings, some empty tags were present in the result, producing a superflous empty paragraph;
- bugfix while importing PNG files under Windows.

- In the default context of any pod field, added function '_' corresponding to obj.translate;
- workflows are now implemented as full Appy worlflows. Plone (DC) workflow are not generated anymore. From the Appy user point of view (=developer), no change has occurred: it is a pure implementation concern;
- began to implement a new global Appy-specific page template and styles;
- added, for every Type, param 'label' allowing to specify an existing i18n label (the one from another field for instance), thus avoiding to generate i18n labels for this Type;
- optimized generation of (more than twice less code);
- stopped generating properties on wrapppers by setting AbstractWrapper as new-style class and using __getattribute__;
- removed from some pages superfluous translations of inexistent labels;
- implemented a variant of Zope's 'has_permission' in method called 'mixin.allows', which does not make some assumptions, like the fact that an admin is Owner of any object or the fact that an Authenticated user has also role Anonymous;
- added button 'refresh security' for refreshing security information on every database object (it is needed because Zope requires us to duplicate security info on every object);
- do not generate "_action_ok" and "action_ko" i18n messages anymore;
- added param Group.label, similar to Type.label;
- allowed to specify in param Group.wide any table width;
- use new index 'getState' for indexing object states;
- reduced size of generated file;
- optimized debug mode: class reload is not done automatically: a 'refresh' icon is available on view and edit views.

- Python dicts can now be marshalled/unmarshalled.

This version corresponds to trunk, revision 169.

Appy 0.6.7 has been released

Written for Appy by Gaëtan Delannay on 2011-06-28

- bugfix in xhtml2odt conversion (algorithm for checking ODT-invalid subtag hierarchies);
- xhtml2odt conversion: force continue-numbering to 'false' for every numbered list.
- solved bug (concurrent work on the same POD template), also tied to question
- xhtml2odt: better management of 'div' tag (considered exactly like a 'p' tag).
- bugfix for encoding of XML attributes (see
- bugfix for (function 'text').
- bugfix in buffers.write: if content is already utf-8-encoded it crashed.

- added param 'maxChars' for any Type, allowing to limit the amount of data in user input fields. Wherever possible, it is implemented using HTML attribute 'maxlength'; on server-side, content that is bigger than specified by maxChars is truncated (ie, it is not possible to force a maxlength for html textareas);
- implemented a first protection against XSS attacks (Javascript detection in user input).
- added a session invalidation mechanism: authenticated users will be automatically logged out when their Zope session will expire.
- improvements in the CodeAnalysis system: more Zope-related extensions are recognized: .vpy, .cpy for Python files, .cpt for Zope Page Templates.
- method "translate": added the possibility to escape XML special chars in translations;

- added a script for checking a LDAP connection
- allow to specify several commands to execute (to separate with semicolons);

1115 of 23 results