How do I verify a
Appy 0.9.2 includes some significant changes, bugfixes and improvements, in the appy.pod as well as in the appy.gen parts.
Appy 0.9.2 corresponds to revision 32 on https://forge.pallavi.be/projects/appy/repository
- In an ods template, you can now define a variable 'columnsRepeated' that specifies, for every column of the table representing a spreadsheet, how much times it will be repeated by subsequent 'for... cell' statements. For example, if you have a spreadsheet with 2 columns, and you will need to repeat the second one 100 times, define a statement 'do table with columnsRepeated=(1,100)'. If you don't do that, pod will be unable to guess what column must be repeated and how, will consider your table has having 2 columns and will produce a resulting table spreading the cells within a 2-columns wide table.
- If you define a variable named 'tableName' inside a table, it will be used to name the table. For information, with Calc, every spreadsheet is represented as a table; the table name is the name that appears in the corresponding tab, in the bottom of the screen.
- Bugfix: complete tracebacks when errors within Python expressions and within 'for' actions.
- converter.py: added param '-t' allowing to specify a LibreOffice file whose styles will be imported in the pod result (works only for odt files). Thanks to IMIO.
- Pod expressions can now be defined in fields of type 'text-input' (in addition to existing fields 'conditional-text' and track-changed text). Thanks to IMIO.
- Added parameter 'stylesTemplate' to the Renderer, allowing to specify a LibreOffice file whose styles will be imported in the pod result. Thanks to IMIO.
- Take into account tag 's'. Thanks to IMIO.
- xhtml2odt: removal of unnecessary spaces.
- xhtml2odt: better handling for column sizes.
- xhtml2odt: take into account widths of td and th tags, from 'width' attributes or from the corresponding CSS property within 'style' attributes.
- xhtml2odt: take into account width of tables (style='width:' or width='', in px or %) and table alignment (left, rigt, center) if the table does not span the whole document width.
- xhtml2odt: take into account table widths (percentages or pixels) and added, via style mappings, the possibility to change the default behaviour. For tables that do not span the whole page width, take alignment into account.
- xhtml2odt: implemented styled 'span' tags.
- xhtml2odt: manage 'ol' tags with attribute 'start'.
- When an EvaluationError is raised, the original error is kept in evalError.originalError.
- 'from' clause: one can now write 'from+', which means that the root tag of the target element will be kept: the content of the 'from expression' will be dumped into it instead of completely replacing it.
- Refactoring: generate list styles in content.xml from new Python classes styles_manager::BulletedProperties and styles_manager::NumberedProperties.
- Added the possibility to define custom list styles; support of ol->type attribute and of CSS list-style-type attribute for ol and ul tags.
- Removed RTF support. Reimplemented the pod test system with an ODT test plan. appy/shared/rtf.py has been replaced with appy/shared/tables.py, the tables parser now based on ODT.
- Added boolean param Config.userLink allowing to show/hide (show by default) the link, in the user strip, to go to the user page. When Config.userLink is False, still display the user name, but as non-clickable text.
- appy.gen.mail.py: bugfix (management of recipients).
- String field: bugfixes: show differences in multilingual fields.
- String field: bugfix when ajax-editing an empty multilingual field.
- appy.Object: allow to get object attributes like accessing dict keys, ie object[attr]
- appy.object: added method 'clone'.
- Wrapper.getLastEvent can now work on some history given as parameter instead of object.history. Moreover, parameter 'not before' can also hold a list of transitions.
- appy.Hack: added method 'inject' that injects from some class all static attributes and method to another one.
- appy.Hack: bugfix (patch of static methods).
- On a gen class, one can define static attribute 'showHistory', being a method or a boolean value. It indicates if the history is visible or not.
- On the User class, added passwords fields on the main page. This way, when creating a user, those fields are used. But when the user wants to change it own password, passwords on the 'passwords' page are then used.
- Bugfix while creating default users.
- Bugfix: do not perform LDAP authentication when ldapConfig.enabled is False.
- Class.listColumns can now be a static method (accepting the tool as single arg).
- Indexed Ref fields are now sortable. For every such field, 2 indexes are created: a list index for searching, and a standard index for sorting (by their title).
- Boolean field: bugfix (default layouts).
- Bugfix: for showing a field on layout buttons, the buttons layout must explicitly be returned by the show method.
- Action.py: added param 'icon' allowing to specify a specific icon.
- Added attribute 'xml' on every field allowing to customize the XML marshalling process.
- Added new layout 'xml', now different from the 'view' layout, allowing to define which fields are to be dumped in the XML version of some object.
- Security fix in ToolMixin::getUser.
- Bugfix in Mixin::getUrl.
- Ref field: param 'shownInfo' can now be a method.
- Ref field: Removed pxViewPickList, replaced by a recursive call pxView->pxView.
- Ref field: bugfix: add a tied object with noForm=True
- Ref field: added param link='popupRef'.
- Bugfix: the mime type received by Zope in FileUpload instances seems to be wrong under some unknown circumstances.
- Added attribute Field.view allowing to specify, for any field, an alternative pxView.
- Mixin.xml: if an error occurs, log it before xml-marshalling it to the caller app.
- Added the possiblity to synchronize external users from a LDAP.
- Added method UserWrapper.addRole (add a role programmatically).
- Added to the LDAP config, a user map allowing to automatically assign roles and groups to ldap-imported users.
- Added the possibility to display the content of indexes for a given object on its view layout (param 'indexed' in the request).
- Indexer: textual content of indexes now keep only words of more than 2 chars and other improvements.
- Authorize anyone to get static content (images, css, js...) from any Appy app.
- Added param Field.mustIndex, that, for indexed fields, defines (via a method) when indexation must occur or not. Indeed, in some cases, an index is required on some field but we don't want all objects to have an index value for this field at any time.
- Implemented live search on any root gen-class.
- Highlight keywords in query results.
- Display action fields with layout 'buttons' in query results and tied objects for refs, besides transitions.
- Show delete button when allowed on the view layout.
- Improved method AbstractWrapper::createFrom.
- Executng actions from list of tied objects (ref field): bugfix.
- Ensure the tool can't be deleted.
- Wrapper.sort can now sort according to param field.insert if sortKey is None.
- Table of indexed fields: for managers only; added local roles in it.
- appy/fields/file.py: added missing i18n labels.
- Added css style for rendering nice tables within the message popup.
- Improvements in the rendering of buttons throughout the web UI.
- Ref field and Search: added param 'showActions' allowing to show or not the range of icons and buttons below or besides every tied or queried object.
- Allow Refs with render='menus' to appear in layout 'buttons'.
- Stop caching methods used as default values for gen field: it can lead to headaches.
- ToolMixin::getHomePage: removed unneeded calls to m_goto.
- Table of indexes: indexed date values are now correctly displayed as DateTime instances.
- More translations in German.
- Bug and performance fixes in the authentication mechanism.
- Added parameter Ref.collapsible allowing to show/hide (via a cookie in the UI, similar to object history) available or tied items.
- Bugfix: remove carriage returns when normalizing strings intended to be used as filenames.
- String.inlineEdit can now be a method.
- mail.py: more log info when something is wrong.
- Pod field: bugfix (download name of pod template being links to other pod templates + UI bug)
- Pod field: Manager does not have all output formats anymore, because in some situations, generating a doc in some formats does make sense (ie for frozen docs)
- Pod field: added param 'downloadName' allowing to speficy a method producing a custom name for the pod result file that will be downloaded by the browser.
- Pod field: bugfix (send by email).
- Pod field: added param 'useTemplateName'.
- Changes in the way binary files are downloaded.
- Modified Ajax system to be able to ajax-refresh a single row within query results or ref tied object.
- appy.js: closing the confirm popup via button 'no' cleans field 'comment'.
- Implemented an anti-double-click system.
- List field: bugfix with empty-like values (integer 0 for example).
- Calendar field: added param 'delete' allowing to define who can delete what event type in the calendar.
- Calendar field: added a 'timeline' calendar view.
- Calendar field: allow to have several events at the same day via the concept of timeslots.
- Calendar field: added a validation mechanism that converts 'request' event types to 'final' event types.
- Calendar field: the timeline can now accept multiple events in a single cell.
- Calendar field: allow automatic check/uncheck of validation checkboxes within calendars (month and timeline views).
- Calendar field: added the possibility, in a timeline, to define total rows and columns.
- Calendar field: one may now specify a method in param validator for validating the creation of an event.
- Calendar field: added params 'topPx' and 'bottomPx' allowing to define custom content before and after rendering the calendar view.
- Calendar field: added the notion of layer.
- Calendar field: added the possibility to define the part of the legend that is specific to every layer.
- Calendar field: Validation.removeDiscarded can now be a method.
- Calendar field: added the possibility to define custom actions on calendars via class Calendar.Action.
- Appy is now integrated to ckeditor 4.4.7 via CDN (check http://cdn.ckeditor.com).
- Bugfix: automatic search screens contained SearchableText twice.
- Bugfix: getFormattedValue must produce a different value for strings with format=TEXT depending on the layout type.
- Nice rendering of popups within popups.
- Search: bugfix in filtered unnamed searches.
- Bugfix: name clash when a transition is named 'comment'.
- Added AbstractWrapper::getHistoryComments allowing to collect comments of all history events of some type.
- Added field dict, similar to List but that stores dicts in the database, with a set of keys given in method field.keys.
- Bugfix: ckeditor with ie8.
- Static param SomeClass.resultModes replaces 'resultMode' and allows to define the way instances of this class are shown on query results: as a 'list' (the default), a 'grid' or using a custom px that must be defined on SomeClass.
- CSS class 'noStyle' renamed to 'no'.
- Dict field: when storing new values, not-impacted existing values are kept.
- Added pages px404, px403, px500 to manage all kinds of errors. When an anonymous user tries to get a URL that requires to be authenticated, he is redirected to the login screen, and, on successfull login, is then redirected to the given URL.
- Added a i18n label for the footer text
- List of MIME types completed.
- dav.py: method 'get' can now accept parameters.
- xml_parser.py: changes to the XmlMarshaller (due to XML-related changes).
- xml_parser.py: improvements to the XmlMarshaller and bugfix: Mixin.xml returns appy.Object instances correctly marshalled.
- LinesCounter now counts lines of XML code.
- Added utils::flipDict allowing to flip keys<->values of a dict.
- Added script appy/bin/odfwalk.py allowing to modify or consult the content of odf files in a folder hierarchy (the script manages the unzip and re-zip of odf files and let a caller script access the unzipped content).
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.
- 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).
- 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 tha...
This release corresponds to trunk, revision 627.
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.
- converter.py now works from Python2.4 to Python3. Thanks to Lennart Regebro who wrote the 'e=sys.exc_info()' 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.
This release corresponds to trunk, revision 552.
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...
This release corresponds to trunk, revision 442.
- 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 (https://bugs.launchpad.net/bugs/1173009)
- Bugfix: error when parsing some ods pod templates: some cells do not have attribute 'office:value-type' (see bug https://bugs.launch...
This version corresponds to trunk, revision 418.
- Added the possibility to use POD with ODS (Calc) templates. Integration with gen (Pod field).
- Bugfix for https://bugs.launchpad.net/appy/+bug/1083533 (thanks Gauthier): management of HTML entities with the standard Python SAX parser expatreader.
- Bugfix while generating filenames for files included into pod results.
- Changed the way pod results are re-zipped, in order to be compliant with section 17.4 of the OpenDocument format specification (bug https://bugs.launchpad.net/appy/+bug/1101237).
- Use, when available, Python's uuid module to generate images and file names to be included in pod results.
- Performance improvement: stop computing tag names, create a dict of precomputed tags before starting parsing.
- Bugfix: import several times an image from the same URL.
This version corresponds to trunk, revision 365.
- Added some layouts for Ref fields in Ref.wLayouts and Ref.wdLayouts.
- Added a new, simpler way of defining auto-references (=Ref fields that refer to the class containing the field), via method appy.gen.autoref.
- Stop catching exceptions raised by Actions (so a partial action can't be committed anymore).
- Cleaner and more robust approach when using Zope database indexes.
- ckeditor now works with IE.
- Now it is possible to index and search Ref fields.
- Added a i18n label used for the title of web pages and added a default favicon and the possibility to override it.
- Bugfix in the standard banner for RTL languages.
- Added some default page and field layouts.
- Added the possiblity to extract in a clean way text from XHTML field values.
- Fine-tuned indexing machinery wi...
This version corresponds to trunk, revision 326.
- 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 styles_manager.py.
- Allow to import S...
This version corresponds to trunk, revision 279.
- Added class appy.pod.parts.OdtTable 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.
This version corresponds to trunk, revision 200.
- bugfix when importing images under Windows (https://answers.launchpad.net/appy/+question/171611)
- added the possibility to specify size of images to import (see https://answers.launchpad.net/appy/+question/171846)
- 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 rein...
This version corresponds to trunk, revision 173.