Appy 0.9.0
Milestone information
- Active:
- No. Drivers cannot target bugs and blueprints to this milestone.
Activities
- Assigned to you:
- No blueprints or bugs assigned to you.
- Assignees:
- 6 Gaëtan Delannay, 1 Luc Saffre
- Blueprints:
- 2 Implemented
- Bugs:
- 5 Fix Released
Download files for this release
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.
[pod]
- converter.py now works from Python2.4 to Python3. Thanks to Lennart Regebro who wrote the 'e=sys.
- Added param Renderer.
- 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'.
[px]
- Added px.override allowing a plug-in to modify PX codeof some Appy application.
[gen]
- 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.resultColu
- computed.py: plainText is now False by default, method can now be a PX.
- computed.py: computed fields are now by default rendered in view and cell layouts.
- list.py: bugfixes in the validation process.
- list.py: field now takes into account 'show' attribute of sub-fields.
- Added wrapper.
- 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=
- 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.numberOfSe
- 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.
- 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.
[bin]
- backup.py: remove Data.fs.old before packing the ZODB to avoid disk space problems.
- backup.py new mode 'copy' that does not use repozo for backup but a simple copy of Data.fs.
- checkldap.py: added a param to define the scope of the LDAP query (base, onelevel or subtree)
[shared]
- xml_parser: convert nbsp entity to the equivalent utf-8 char.
Changelog
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 Renderer.run() | 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 |