[Testbot] Plone 5.0 - Python 2.7 - Build # 3285 - Still failing! - 0 failure(s)

jenkins at plone.org jenkins at plone.org
Thu Oct 2 13:08:06 UTC 2014


-------------------------------------------------------------------------------
Plone 5.0 - Python 2.7 - Build # 3285 - Still Failing!
-------------------------------------------------------------------------------

http://jenkins.plone.org/job/plone-5.0-python-2.7/3285/


-------------------------------------------------------------------------------
CHANGES
-------------------------------------------------------------------------------

Repository: plone.autoform
Branch: refs/heads/master
Date: 2014-10-01T15:39:07+02:00
Author: Jens W. Klein (jensens) <jk at kleinundpartner.at>
Commit: https://github.com/plone/plone.autoform/commit/72536c6a8648b136c9a485eae8a25f660f766974

pep8 cleanup, utf8-header,sorted imports, readability, ...

Files changed:
M CHANGES.rst
M README.rst
M plone/__init__.py
M plone/autoform/__init__.py
M plone/autoform/autoform.txt
M plone/autoform/base.py
M plone/autoform/directives.py
M plone/autoform/form.py
M plone/autoform/interfaces.py
M plone/autoform/supermodel.py
M plone/autoform/testing.py
M plone/autoform/utils.py
M plone/autoform/view.py
M plone/autoform/widgets.py
M setup.py

diff --git a/CHANGES.rst b/CHANGES.rst
index 8c7c7bf..95f05ca 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -4,6 +4,9 @@ Changelog
 1.6.1 (unreleased)
 ------------------
 
+- pep8 cleanup, utf8-header,sorted imports, readability, ...
+  [jensens]
+
 - Fix issue where multiple (plone.supermodel) fieldset directive calls for the
   same fieldset name resulted to duplicate fieldsets (e.g. when updating
   fieldset with new fields in a subschema)
diff --git a/README.rst b/README.rst
index 5e4b549..9477a1a 100644
--- a/README.rst
+++ b/README.rst
@@ -348,6 +348,13 @@ in the ``plone.autoform.interfaces`` module. They can be set several ways:
 * By using the directives from ``plone.autoform.directives`` while defining
   a schema in Python.
 
+Source Code
+===========
+
+Contributors please read the document `Process for Plone core's development <http://docs.plone.org/develop/plone-coredev/index.html>`_
+
+Sources are at the `Plone code repository hosted at Github <https://github.com/plone/plone.autoform>`_.
+
 
 .. _z3c.form: http://pypi.python.org/pypi/z3c.form
 .. _zope.schema: http://pypi.python.org/pypi/zope.schema
diff --git a/plone/__init__.py b/plone/__init__.py
index f48ad10..68c04af 100644
--- a/plone/__init__.py
+++ b/plone/__init__.py
@@ -1,6 +1,2 @@
-# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
-try:
-    __import__('pkg_resources').declare_namespace(__name__)
-except ImportError:
-    from pkgutil import extend_path
-    __path__ = extend_path(__path__, __name__)
+# -*- coding: utf-8 -*-
+__import__('pkg_resources').declare_namespace(__name__)
diff --git a/plone/autoform/__init__.py b/plone/autoform/__init__.py
index e69de29..40a96af 100644
--- a/plone/autoform/__init__.py
+++ b/plone/autoform/__init__.py
@@ -0,0 +1 @@
+# -*- coding: utf-8 -*-
diff --git a/plone/autoform/autoform.txt b/plone/autoform/autoform.txt
index 144480c..13eb36e 100644
--- a/plone/autoform/autoform.txt
+++ b/plone/autoform/autoform.txt
@@ -1,11 +1,11 @@
-Form setup details
+cd Form setup details
 ==================
 
 This package provides tools to construct z3c.form forms out of hints stored
 in tagged values on schema interfaces. A special form base class is used to
 set up the 'fields' and 'groups' properties on form instances.
 
-The tagged values are stored under keys represented by the following 
+The tagged values are stored under keys represented by the following
 constants:
 
     >>> from plone.autoform.interfaces import OMITTED_KEY
@@ -27,7 +27,7 @@ There are several ways to set the form data:
   provides a schema handler for the 'form' prefix that can be used to
   incorporate form hints. See supermodel.txt for details.
 * By using the grok directives in the plone.directives.form package.
-    
+
 For the purposes of this test, we'll set the form data manually.
 
 Test setup
@@ -89,7 +89,7 @@ And finally, a form:
     >>> class TestForm(AutoExtensibleForm, form.Form):
     ...     schema = ITestSchema
     ...     additionalSchemata = (ISupplementarySchema, IOtherSchema,)
-    ...     
+    ...
     ...     ignoreContext = True
 
 This form is in input mode:
@@ -105,28 +105,28 @@ Form data can be held under the following keys:
     OMITTED_KEY -- A list of (interface, fieldName, boolean) triples. If the
         third value evaluates to true, the field with the given fieldName will
         be omitted from forms providing the given interface.
-    
+
     MODES_KEY -- A list of (interface, fieldName, mode string) triples. A mode
         string may be one of the z3c.form widget modes, including 'hidden',
         'input', and 'display'.  The field will be rendered using a widget in
         the specified mode on forms providing the given interface.
-    
+
     WIDGETS_KEY -- A dict of fieldName => widget. The widget can be
         the dotted name of a z3c.form field widget factory, or an actual
         instance of one.
-        
+
     ORDER_KEY -- A list of (fieldName, direction, relative_to) triples.
         direction can be one of 'before' or 'after'. relative_to can be '*'
-        (any/all fields), or the name of a field to move the given field 
+        (any/all fields), or the name of a field to move the given field
         before or after in the form.
-    
-    READ_PERMISSIONS_KEY -- A dict of fieldName => permission id. When a 
+
+    READ_PERMISSIONS_KEY -- A dict of fieldName => permission id. When a
         form is in 'display' mode, the field will be omitted unless the user
         has the given permission in the form's context. The permission id
         should be a Zope 3 style IPermission utility name, not a Zope 2
         permission string.
 
-    WRITE_PERMISSIONS_KEY -- A dict of fieldName => permission id. When a 
+    WRITE_PERMISSIONS_KEY -- A dict of fieldName => permission id. When a
         form is in 'input' mode, the field will be omitted unless the user
         has the given permission in the form's context. The permission id
         should be a Zope 3 style IPermission utility name, not a Zope 2
@@ -218,7 +218,7 @@ Note that if a permission is not found, the field will be allowed.
 Finally, fieldsets are configured like this:
 
     >>> from plone.supermodel.model import Fieldset
-    >>> ITestSchema.setTaggedValue(FIELDSETS_KEY, 
+    >>> ITestSchema.setTaggedValue(FIELDSETS_KEY,
     ...                                 [Fieldset('fieldset1', fields=['three'],
     ...                                           label=u"Fieldset one",
     ...                                           description=u"Description of fieldset one")])
@@ -324,12 +324,12 @@ in full.
 
     >>> Basics.setTaggedValue(MODES_KEY, [(Interface, 'hidden_secret', 'hidden')])
     >>> Basics.setTaggedValue(FIELDSETS_KEY, [Fieldset('Dates', label="Cool dates", fields=['creation_date'])])
-    
+
     >>> class Dates(Interface):
     ...     """Date information"""
     ...     start_date = schema.Date(title=u"Start date")
     ...     end_date = schema.Date(title=u"End date")
-    
+
     >>> class Ownership(Interface):
     ...     """Ownership information"""
     ...     owner = schema.Date(title=u"The owner")
@@ -341,7 +341,7 @@ that this may cause clashes if fields in different schemata share a name.
     >>> class CombiForm(AutoExtensibleForm, form.Form):
     ...     schema = Basics
     ...     additionalSchemata = (Dates, Ownership,)
-    ...     
+    ...
     ...     ignoreContext = True
     ...     ignorePrefix = True
     ...     autoGroups = True
@@ -354,14 +354,14 @@ another fieldset.
 
     >>> combi_form.fields.keys()
     ['title', 'description', 'hidden_secret']
-    
+
     >>> combi_form.widgets['hidden_secret'].mode
     'hidden'
-    
+
 Each additional schema then has its own fields. Note that setting the 'dates'
 fieldset in the base schema had the effect of giving a more specific
 label to the automatically created group for the Dates schema.
-    
+
     >>> [(g.__name__, g.label, g.description, g.fields.keys(),) for g in combi_form.groups]
     [('Dates', 'Cool dates', None, ['creation_date', 'start_date', 'end_date']),
      ('Ownership', 'Ownership', 'Ownership information', ['owner'])]
@@ -377,12 +377,12 @@ condition for group naming when autoGroups is True.
 
     >>> class IUnknownName(Interface):
     ...     this = schema.TextLine()
-    ... 
+    ...
     >>> IUnknownName.__name__ = ''  # dynamic schema, empty __name__
-    
+
     >>> class IAnotherAnonymousSchema(Interface):
     ...     that = schema.TextLine()
-    ... 
+    ...
     >>> IAnotherAnonymousSchema.__name__ = ''
 
     Create an extrinsicly stored name mapping:
@@ -399,22 +399,24 @@ condition for group naming when autoGroups is True.
     >>> class GroupNamingForm(AutoExtensibleForm, form.Form):
     ...     autoGroups = True
     ...     ignoreContext = True
-    ... 
+    ...
     ...     schema = Interface
     ...     additionalSchemata = (IUnknownName, IAnotherAnonymousSchema)
-    ... 
+    ...
     ...     def getPrefix(self, schema):
     ...         if schema in schemaToName:
     ...             return schemaToName.get(schema)
     ...         return super(GroupNamingForm, self).getPrefix(schema)
-    ... 
+    ...
 
     >>> naming_form = GroupNamingForm(context, request)
     >>> naming_form.updateFieldsFromSchemata()
     >>> _getGroup = lambda factory: factory(context, request, None)
     >>> groups = [_getGroup(group) for group in naming_form.groups]
     >>> groups = dict((g.__name__, g) for g in groups)
-    >>> names = tuple(group.__name__ for group in groups.values())
+    >>> names = tuple(sorted(group.__name__ for group in groups.values()))
+    >>> names
+
     >>> assert names == ('groucho', 'harpo')
     >>> assert 'groucho.this' in groups['groucho'].fields
     >>> assert 'harpo.that' in groups['harpo'].fields
diff --git a/plone/autoform/base.py b/plone/autoform/base.py
index b3ca5f9..a9471cc 100644
--- a/plone/autoform/base.py
+++ b/plone/autoform/base.py
@@ -1,8 +1,7 @@
-from z3c.form import field
-
-from plone.z3cform.fieldsets.group import GroupFactory
-
+# -*- coding: utf-8 -*-
 from plone.autoform.utils import processFieldMoves, processFields
+from plone.z3cform.fieldsets.group import GroupFactory
+from z3c.form import field
 
 _marker = object()
 
@@ -84,15 +83,22 @@ def updateFieldsFromSchemata(self):
                             break
 
                     if not found:
-                        fieldset_group = GroupFactory(group_name,
-                                                      field.Fields(),
-                                                      group_name,
-                                                      schema.__doc__)
+                        fieldset_group = GroupFactory(
+                            group_name,
+                            field.Fields(),
+                            group_name,
+                            schema.__doc__
+                        )
                         self.groups.append(fieldset_group)
 
                     defaultGroup = group_name
 
-                processFields(self, schema, prefix=prefix, defaultGroup=defaultGroup, permissionChecks=have_user)
+                processFields(
+                    self, schema,
+                    prefix=prefix,
+                    defaultGroup=defaultGroup,
+                    permissionChecks=have_user
+                )
 
         # Then process relative field movements. The base schema is processed
         # last to allow it to override any movements made in additional
diff --git a/plone/autoform/directives.py b/plone/autoform/directives.py
index 0934ee1..0d99c13 100644
--- a/plone/autoform/directives.py
+++ b/plone/autoform/directives.py
@@ -1,18 +1,20 @@
+# -*- coding: utf-8 -*-
+from plone.autoform.interfaces import MODES_KEY
+from plone.autoform.interfaces import OMITTED_KEY
+from plone.autoform.interfaces import ORDER_KEY
+from plone.autoform.interfaces import READ_PERMISSIONS_KEY
+from plone.autoform.interfaces import WIDGETS_KEY
+from plone.autoform.interfaces import WRITE_PERMISSIONS_KEY
+from plone.autoform.widgets import ParameterizedWidget
+from plone.supermodel.directives import DictCheckerPlugin
+from plone.supermodel.directives import ListCheckerPlugin
+from plone.supermodel.directives import MetadataDictDirective
+from plone.supermodel.directives import MetadataListDirective
 from z3c.form.interfaces import IFieldWidget
 from z3c.form.interfaces import IWidget
 from zope.interface import Interface
 from zope.interface.interfaces import IInterface
 
-from plone.supermodel.directives import MetadataListDirective
-from plone.supermodel.directives import MetadataDictDirective
-from plone.supermodel.directives import ListCheckerPlugin
-from plone.supermodel.directives import DictCheckerPlugin
-
-from plone.autoform.interfaces import OMITTED_KEY, MODES_KEY, WIDGETS_KEY
-from plone.autoform.interfaces import ORDER_KEY
-from plone.autoform.interfaces import READ_PERMISSIONS_KEY, WRITE_PERMISSIONS_KEY
-from plone.autoform.widgets import ParameterizedWidget
-
 
 class omitted(MetadataListDirective):
     """Directive used to omit one or more fields
@@ -22,7 +24,9 @@ class omitted(MetadataListDirective):
 
     def factory(self, *args):
         if not args:
-            raise TypeError('The omitted directive expects at least one argument.')
+            raise TypeError(
+                'The omitted directive expects at least one argument.'
+            )
         form_interface = Interface
         if IInterface.providedBy(args[0]):
             form_interface = args[0]
@@ -54,7 +58,9 @@ class mode(MetadataListDirective):
 
     def factory(self, *args, **kw):
         if len(args) > 1:
-            raise TypeError('The mode directive expects 0 or 1 non-keyword arguments.')
+            raise TypeError(
+                'The mode directive expects 0 or 1 non-keyword arguments.'
+            )
         form_interface = Interface
         if args:
             form_interface = args[0]
@@ -68,34 +74,41 @@ class ModePlugin(OmittedPlugin):
 class widget(MetadataDictDirective):
     """Schema directive used to set the widget for one or more fields.
 
-    Option 1: widget(field1='z3c.form.browser.text.TextWidget', field2=TextWidget)
+    Option 1:
+       ``widget(field1='z3c.form.browser.text.TextWidget', field2=TextWidget)``
 
       The directive is passed keyword arguments mapping field names to widgets.
       The widget can be specified as either a widget class, or as a string
-      with the dotted path to a widget class. It cannot be a widget instance, because
-      a new widget instance needs to be constructed for each request.
+      with the dotted path to a widget class. It cannot be a widget instance,
+      because a new widget instance needs to be constructed for each request.
 
-      (For backwards-compatibility, the widget can also be specified as a field widget factory.
-      A ``field widget factory`` is a callable that returns a widget instance
-      when passed a field and a request.)
+      (For backwards-compatibility, the widget can also be specified as a field
+      widget factory.  A ``field widget factory`` is a callable that returns a
+      widget instance when passed a field and a request.)
 
-    Option 2: widget('field1', TextWidget, label=u'My label')
+    Option 2:
+      ``widget('field1', TextWidget, label=u'My label')``
 
-      This option makes it possible to configure a custom widget _and_ customize its attributes.
+      This option makes it possible to configure a custom widget _and_
+      customize its attributes.
 
       * The first positional arg is a string giving the name of a single field.
-      * The second positional arg is a widget class, again specified as either a direct reference
-        or a dotted path.
-      * The remaining args are keyword arguments mapping arbitrary names to arbitrary values.
-        These will be set as attributes of the widget when it is constructed.
-
-    Option 3: widget('field1', label=u'My label')
-
-      This option makes it possible to _customize_ the field's default widget without naming it
-      explicitly.
-
-      * The first and only positional arg is a string giving the name of a single field.
-      * The remaining args are keyword arguments mapping arbitrary names to arbitrary values.
+      * The second positional arg is a widget class, again specified as either
+        a direct reference or a dotted path.
+      * The remaining args are keyword arguments mapping arbitrary names to
+        arbitrary values. These will be set as attributes of the widget when it
+        is constructed.
+
+    Option 3:
+      ``widget('field1', label=u'My label')``
+
+      This option makes it possible to _customize_ the field's default widget
+      without naming it explicitly.
+
+      * The first and only positional arg is a string giving the name of a
+        single field.
+      * The remaining args are keyword arguments mapping arbitrary names to
+        arbitrary values.
         These will be set as attributes of the widget when it is constructed.
     """
 
@@ -111,9 +124,11 @@ def factory(self, field_name=None, widget_class=None, **kw):
                 widgets[field_name] = widget
         else:
             if widget_class is not None \
-            and not IFieldWidget.implementedBy(widget_class) \
-            and not IWidget.implementedBy(widget_class):
-                raise TypeError('widget_class must implement IWidget or IFieldWidget')
+               and not IFieldWidget.implementedBy(widget_class) \
+               and not IWidget.implementedBy(widget_class):
+                raise TypeError(
+                    'widget_class must implement IWidget or IFieldWidget'
+                )
             widgets[field_name] = ParameterizedWidget(widget_class, **kw)
 
         return widgets
@@ -129,7 +144,8 @@ class order_before(MetadataListDirective):
     key = ORDER_KEY
 
     def factory(self, **kw):
-        return [(field_name, 'before', relative_to) for field_name, relative_to in kw.items()]
+        return [(field_name, 'before', relative_to)
+                for field_name, relative_to in kw.items()]
 
 
 class order_after(MetadataListDirective):
@@ -138,7 +154,8 @@ class order_after(MetadataListDirective):
     key = ORDER_KEY
 
     def factory(self, **kw):
-        return [(field_name, 'after', relative_to) for field_name, relative_to in kw.items()]
+        return [(field_name, 'after', relative_to)
+                for field_name, relative_to in kw.items()]
 
 
 class OrderPlugin(ListCheckerPlugin):
diff --git a/plone/autoform/form.py b/plone/autoform/form.py
index 61f81a8..58315c3 100644
--- a/plone/autoform/form.py
+++ b/plone/autoform/form.py
@@ -1,25 +1,27 @@
-from zope.interface import implements
-
-from plone.z3cform.fieldsets.extensible import ExtensibleForm
-
+# -*- coding: utf-8 -*-
+from plone.autoform.base import AutoFields
 from plone.autoform.interfaces import IAutoExtensibleForm
 from plone.autoform.interfaces import IAutoObjectSubForm
-from plone.autoform.base import AutoFields
+from plone.z3cform.fieldsets.extensible import ExtensibleForm
+from zope.interface import implementer
 
 _marker = object()
 
 
+ at implementer(IAutoExtensibleForm)
 class AutoExtensibleForm(AutoFields, ExtensibleForm):
     """Mixin class for z3c.form forms that support fields extracted from
     a schema
     """
 
-    implements(IAutoExtensibleForm)
     showEmptyGroups = False
 
     @property
     def schema(self):
-        raise NotImplementedError("The class deriving from AutoExtensibleForm must have a 'schema' property")
+        raise NotImplementedError(
+            "The class deriving from AutoExtensibleForm must have a "
+            "'schema' property"
+        )
 
     @property
     def additionalSchemata(self):
@@ -32,17 +34,15 @@ def updateFields(self):
         super(AutoExtensibleForm, self).updateFields()
 
 
+ at implementer(IAutoObjectSubForm)
 class AutoObjectSubForm(AutoFields):
-    """A Mixin class for z3c.form.object.ObjectSubForm forms that supports fields being
-    updated from hints in a schema.
+    """A Mixin class for z3c.form.object.ObjectSubForm forms that supports
+    fields being updated from hints in a schema.
     """
 
-    implements(IAutoObjectSubForm)
-
     @property
     def schema(self):
         return self.__parent__.field.schema
 
     def setupFields(self):
         self.updateFieldsFromSchemata()
-
diff --git a/plone/autoform/interfaces.py b/plone/autoform/interfaces.py
index 742d80c..ebee3bb 100644
--- a/plone/autoform/interfaces.py
+++ b/plone/autoform/interfaces.py
@@ -1,20 +1,18 @@
+# -*- coding: utf-8 -*-
+from plone.supermodel.interfaces import IFieldset
+from z3c.form.interfaces import IFieldWidget
+from z3c.form.interfaces import IFieldsForm, IDisplayForm, IWidget
 from zope.interface import Interface
 from zope.interface.interfaces import IInterface
-
 import zope.schema
 
-from z3c.form.interfaces import IFieldsForm, IDisplayForm, IWidget
-from z3c.form.interfaces import IFieldWidget
-from plone.supermodel.interfaces import IFieldset
-
 # Schema interface tagged value keys
+MODES_KEY = u"plone.autoform.modes"
+OMITTED_KEY = u"plone.autoform.omitted"
+ORDER_KEY = u"plone.autoform.order"
+WIDGETS_KEY = u"plone.autoform.widgets"
 
-OMITTED_KEY   = u"plone.autoform.omitted"
-WIDGETS_KEY   = u"plone.autoform.widgets"
-MODES_KEY     = u"plone.autoform.modes"
-ORDER_KEY     = u"plone.autoform.order"
-
-READ_PERMISSIONS_KEY  = u"plone.autoform.security.read-permissions"
+READ_PERMISSIONS_KEY = u"plone.autoform.security.read-permissions"
 WRITE_PERMISSIONS_KEY = u"plone.autoform.security.write-permissions"
 
 # Supermodel namespace and prefix
@@ -39,16 +37,24 @@ class IAutoExtensibleForm(Interface):
     for details.
     """
 
-    ignorePrefix = zope.schema.Bool(title=u"Do not set a prefix for additional schemata",
-                                    default=False)
+    ignorePrefix = zope.schema.Bool(
+        title=u"Do not set a prefix for additional schemata",
+        default=False
+    )
 
-    schema = zope.schema.Object(title=u"Schema providing form fields",
-                                schema=IInterface)
+    schema = zope.schema.Object(
+        title=u"Schema providing form fields",
+        schema=IInterface
+    )
 
-    additionalSchemata = zope.schema.Tuple(title=u"Supplementary schemata providing additional form fields",
-                                           value_type=zope.schema.Object(title=u"Schema interface",
-                                                                          schema=IInterface),
-                                           required=False)
+    additionalSchemata = zope.schema.Tuple(
+        title=u"Supplementary schemata providing additional form fields",
+        value_type=zope.schema.Object(
+            title=u"Schema interface",
+            schema=IInterface
+        ),
+        required=False
+    )
 
 
 class IAutoObjectSubForm(Interface):
@@ -56,8 +62,10 @@ class IAutoObjectSubForm(Interface):
     to also have its fields updated with form hints. See subform.txt
     """
 
-    schema = zope.schema.Object(title=u"Schema providing form fields",
-                                schema=IInterface)
+    schema = zope.schema.Object(
+        title=u"Schema providing form fields",
+        schema=IInterface
+    )
 
 
 class IWidgetsView(IAutoExtensibleForm, IFieldsForm, IDisplayForm):
@@ -65,15 +73,29 @@ class IWidgetsView(IAutoExtensibleForm, IFieldsForm, IDisplayForm):
     interfaces.
     """
 
-    w = zope.schema.Dict(title=u"Shortcut lookup for all widgets",
-                         description=u"Contains all widgets, including "
-                                      "those from groups within this form",
-                         key_type=zope.schema.ASCIILine(title=u"Widget name, with prefix"),
-                         value_type=zope.schema.Object(title=u"Widget", schema=IWidget))
-
-    fieldsets = zope.schema.Dict(title=u"Lookup fieldset (group) by name",
-                              key_type=zope.schema.ASCIILine(title=u"Fieldset name"),
-                              value_type=zope.schema.Object(title=u"Fieldset", schema=IFieldset))
+    w = zope.schema.Dict(
+        title=u"Shortcut lookup for all widgets",
+        description=u"Contains all widgets, including those from groups "
+                    u"within this form",
+        key_type=zope.schema.ASCIILine(
+            title=u"Widget name, with prefix"
+        ),
+        value_type=zope.schema.Object(
+            title=u"Widget",
+            schema=IWidget
+        )
+    )
+
+    fieldsets = zope.schema.Dict(
+        title=u"Lookup fieldset (group) by name",
+        key_type=zope.schema.ASCIILine(
+            title=u"Fieldset name"
+        ),
+        value_type=zope.schema.Object(
+            title=u"Fieldset",
+            schema=IFieldset
+        )
+    )
 
 
 class IParameterizedWidget(IFieldWidget):
diff --git a/plone/autoform/supermodel.py b/plone/autoform/supermodel.py
index 2827261..1f181d8 100644
--- a/plone/autoform/supermodel.py
+++ b/plone/autoform/supermodel.py
@@ -1,22 +1,25 @@
+# -*- coding: utf-8 -*-
 from lxml import etree
-
+from plone.autoform.interfaces import FORM_NAMESPACE
+from plone.autoform.interfaces import FORM_PREFIX
+from plone.autoform.interfaces import MODES_KEY
+from plone.autoform.interfaces import OMITTED_KEY
+from plone.autoform.interfaces import ORDER_KEY
+from plone.autoform.interfaces import READ_PERMISSIONS_KEY
+from plone.autoform.interfaces import SECURITY_NAMESPACE
+from plone.autoform.interfaces import SECURITY_PREFIX
+from plone.autoform.interfaces import WIDGETS_KEY
+from plone.autoform.interfaces import WRITE_PERMISSIONS_KEY
+from plone.autoform.utils import resolveDottedName
+from plone.autoform.widgets import ParameterizedWidget
+from plone.supermodel.parser import IFieldMetadataHandler
+from plone.supermodel.utils import ns
 from z3c.form.interfaces import IFieldWidget, IValidator
 from z3c.form.util import getSpecification
 from zope.component import provideAdapter
 from zope.interface import implements, Interface
 from zope.interface.interface import InterfaceClass
 
-from plone.supermodel.utils import ns
-from plone.supermodel.parser import IFieldMetadataHandler
-
-from plone.autoform.interfaces import OMITTED_KEY, WIDGETS_KEY, MODES_KEY, ORDER_KEY
-from plone.autoform.interfaces import READ_PERMISSIONS_KEY, WRITE_PERMISSIONS_KEY
-from plone.autoform.interfaces import FORM_NAMESPACE, FORM_PREFIX
-from plone.autoform.interfaces import SECURITY_NAMESPACE, SECURITY_PREFIX
-
-from plone.autoform.utils import resolveDottedName
-from plone.autoform.widgets import ParameterizedWidget
-
 
 class FormSchema(object):
     """Support the form: namespace in model definitions.
@@ -57,10 +60,11 @@ def _add_validator(self, field, value):
             raise ValueError(
                 "z3c.form.interfaces.IValidator not implemented by %s."
                 % value)
-        provideAdapter(validator,
+        provideAdapter(
+            validator,
             (None, None, None, getSpecification(field), None),
             IValidator,
-            )
+        )
 
     def read(self, fieldNode, schema, field):
         name = field.__name__
@@ -106,9 +110,18 @@ def write(self, fieldNode, schema, field):
         name = field.__name__
 
         widget = schema.queryTaggedValue(WIDGETS_KEY, {}).get(name, None)
-        mode = [(i, v) for i, n, v in schema.queryTaggedValue(MODES_KEY, []) if n == name]
-        omitted = [(i, v) for i, n, v in schema.queryTaggedValue(OMITTED_KEY, []) if n == name]
-        order = [(d, v) for n, d, v in schema.queryTaggedValue(ORDER_KEY, []) if n == name]
+        mode = [
+            (i, v) for i, n, v in schema.queryTaggedValue(MODES_KEY, [])
+            if n == name
+        ]
+        omitted = [
+            (i, v) for i, n, v in schema.queryTaggedValue(OMITTED_KEY, [])
+            if n == name
+        ]
+        order = [
+            (d, v) for n, d, v in schema.queryTaggedValue(ORDER_KEY, [])
+            if n == name
+        ]
 
         if widget is not None:
             if not isinstance(widget, ParameterizedWidget):
@@ -138,7 +151,10 @@ def write(self, fieldNode, schema, field):
                 value = "%s:%s" % (interface.__identifier__, value)
             omitted_values.append(value)
         if omitted_values:
-            fieldNode.set(ns('omitted', self.namespace), " ".join(omitted_values))
+            fieldNode.set(
+                ns('omitted', self.namespace),
+                " ".join(omitted_values)
+            )
 
         for direction, relative_to in order:
             if direction == 'before':
@@ -159,7 +175,9 @@ def read(self, fieldNode, schema, field):
         name = field.__name__
 
         read_permission = fieldNode.get(ns('read-permission', self.namespace))
-        write_permission = fieldNode.get(ns('write-permission', self.namespace))
+        write_permission = fieldNode.get(
+            ns('write-permission', self.namespace)
+        )
 
         read_permissions = schema.queryTaggedValue(READ_PERMISSIONS_KEY, {})
         write_permissions = schema.queryTaggedValue(WRITE_PERMISSIONS_KEY, {})
@@ -175,10 +193,21 @@ def read(self, fieldNode, schema, field):
     def write(self, fieldNode, schema, field):
         name = field.__name__
 
-        read_permission = schema.queryTaggedValue(READ_PERMISSIONS_KEY, {}).get(name, None)
-        write_permission = schema.queryTaggedValue(WRITE_PERMISSIONS_KEY, {}).get(name, None)
+        read_permission = schema.queryTaggedValue(
+            READ_PERMISSIONS_KEY, {}
+        ).get(name, None)
+        write_permission = schema.queryTaggedValue(
+            WRITE_PERMISSIONS_KEY,
+            {}
+        ).get(name, None)
 
         if read_permission:
-            fieldNode.set(ns('read-permission', self.namespace), read_permission)
+            fieldNode.set(
+                ns('read-permission', self.namespace),
+                read_permission
+            )
         if write_permission:
-            fieldNode.set(ns('write-permission', self.namespace), write_permission)
+            fieldNode.set(
+                ns('write-permission', self.namespace),
+                write_permission
+            )
diff --git a/plone/autoform/testing.py b/plone/autoform/testing.py
index b2f5e9d..6c8bbff 100644
--- a/plone/autoform/testing.py
+++ b/plone/autoform/testing.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 from plone.testing import Layer
 from plone.testing import z2
 from plone.testing import zca
diff --git a/plone/autoform/utils.py b/plone/autoform/utils.py
index 0bd6f0a..0d4aaf2 100644
--- a/plone/autoform/utils.py
+++ b/plone/autoform/utils.py
@@ -1,28 +1,26 @@
-from zope.component import queryUtility
-from zope.interface import providedBy
-
-from zope.security.interfaces import IPermission
-
-from zope.dottedname.resolve import resolve
-
-from z3c.form import field
-from z3c.form.util import expandPrefix
-from z3c.form.interfaces import IFieldWidget, INPUT_MODE, DISPLAY_MODE
-
+# -*- coding: utf-8 -*-
+from AccessControl import getSecurityManager
+from plone.autoform.interfaces import IParameterizedWidget
+from plone.autoform.interfaces import MODES_KEY
+from plone.autoform.interfaces import OMITTED_KEY
+from plone.autoform.interfaces import ORDER_KEY
+from plone.autoform.interfaces import READ_PERMISSIONS_KEY
+from plone.autoform.interfaces import WIDGETS_KEY
+from plone.autoform.interfaces import WRITE_PERMISSIONS_KEY
+from plone.supermodel.interfaces import FIELDSETS_KEY
 from plone.supermodel.utils import mergedTaggedValueDict
 from plone.supermodel.utils import mergedTaggedValueList
-
 from plone.z3cform.fieldsets.group import GroupFactory
-
 from plone.z3cform.fieldsets.utils import move
-
-from plone.supermodel.interfaces import FIELDSETS_KEY
-
-from plone.autoform.interfaces import OMITTED_KEY, WIDGETS_KEY, MODES_KEY, ORDER_KEY
-from plone.autoform.interfaces import READ_PERMISSIONS_KEY, WRITE_PERMISSIONS_KEY
-from plone.autoform.interfaces import IParameterizedWidget
-
-from AccessControl import getSecurityManager
+from z3c.form import field
+from z3c.form.interfaces import DISPLAY_MODE
+from z3c.form.interfaces import IFieldWidget
+from z3c.form.interfaces import INPUT_MODE
+from z3c.form.util import expandPrefix
+from zope.component import queryUtility
+from zope.dottedname.resolve import resolve
+from zope.interface import providedBy
+from zope.security.interfaces import IPermission
 
 _dottedCache = {}
 
@@ -97,7 +95,9 @@ def _processWidgets(form, widgets, modes, newFields):
         baseName = _bn(fieldInstance)
 
         widgetName = widgets.get(baseName, None)
-        widgetMode = modes.get(baseName, fieldInstance.mode) or form.mode or INPUT_MODE
+        widgetMode = modes.get(baseName, fieldInstance.mode) \
+            or form.mode \
+            or INPUT_MODE
 
         widgetFactory = None
         if widgetName is not None:
@@ -115,7 +115,8 @@ def _processWidgets(form, widgets, modes, newFields):
             newFields[fieldName].mode = widgetMode
 
 
-def processFields(form, schema, prefix='', defaultGroup=None, permissionChecks=True):
+def processFields(form, schema, prefix='', defaultGroup=None,
+                  permissionChecks=True):
     """Add the fields from the schema to the form, taking into account
     the hints in the various tagged values as well as fieldsets. If prefix
     is given, the fields will be prefixed with this prefix. If
@@ -127,23 +128,38 @@ def processFields(form, schema, prefix='', defaultGroup=None, permissionChecks=T
 
     # Get data from tagged values, flattening data from super-interfaces
 
-    # Note: The names always refer to a field in the schema, and never contain a prefix.
+    # Note: The names always refer to a field in the schema, and never
+    # contain a prefix.
+
+    # { name => True }
+    omitted = mergedTaggedValuesForForm(schema, OMITTED_KEY, form)
 
-    omitted = mergedTaggedValuesForForm(schema, OMITTED_KEY, form)   # { name => True }
-    modes = mergedTaggedValuesForForm(schema, MODES_KEY, form)       # { name => e.g. 'hidden' }
-    widgets = mergedTaggedValueDict(schema, WIDGETS_KEY)             # { name => widget/dotted name }
+    # { name => e.g. 'hidden' }
+    modes = mergedTaggedValuesForForm(schema, MODES_KEY, form)
 
-    fieldsets = mergedTaggedValueList(schema, FIELDSETS_KEY)         # list of IFieldset instances
+    # { name => widget/dotted name }
+    widgets = mergedTaggedValueDict(schema, WIDGETS_KEY)
 
-    # Get either read or write permissions depending on what type of form this is
+    # list of IFieldset instances
+    fieldsets = mergedTaggedValueList(schema, FIELDSETS_KEY)
 
+    # Get either read or write permissions depending on what type of
+    # form this is
     readPermissions = {}  # field name -> permission name
     writePermissions = {}  # field name -> permission name
     permissionCache = {}  # permission name -> allowed/disallowed
 
     if permissionChecks:
-        readPermissions = mergedTaggedValueDict(schema, READ_PERMISSIONS_KEY)  # name => permission name
-        writePermissions = mergedTaggedValueDict(schema, WRITE_PERMISSIONS_KEY)  # name => permission name
+        # name => permission name
+        readPermissions = mergedTaggedValueDict(
+            schema,
+            READ_PERMISSIONS_KEY
+        )
+        # name => permission name
+        writePermissions = mergedTaggedValueDict(
+            schema,
+            WRITE_PERMISSIONS_KEY
+        )
         securityManager = getSecurityManager()
 
     # Find the fields we should not worry about
@@ -163,7 +179,11 @@ def processFields(form, schema, prefix='', defaultGroup=None, permissionChecks=T
 
     # Find all allowed fields so that we have something to select from
     omitReadOnly = form.mode != DISPLAY_MODE
-    allFields = field.Fields(schema, prefix=prefix, omitReadOnly=omitReadOnly).omit(*doNotProcess)
+    allFields = field.Fields(
+        schema,
+        prefix=prefix,
+        omitReadOnly=omitReadOnly
+    ).omit(*doNotProcess)
 
     # Check permissions
     if permissionChecks:
@@ -185,7 +205,12 @@ def processFields(form, schema, prefix='', defaultGroup=None, permissionChecks=T
                     if permission is None:
                         permissionCache[permissionName] = True
                     else:
-                        permissionCache[permissionName] = bool(securityManager.checkPermission(permission.title, form.context))
+                        permissionCache[permissionName] = bool(
+                            securityManager.checkPermission(
+                                permission.title,
+                                form.context
+                            )
+                        )
                 if not permissionCache.get(permissionName, True):
                     disallowedFields.append(fieldName)
 
@@ -214,8 +239,8 @@ def processFields(form, schema, prefix='', defaultGroup=None, permissionChecks=T
     for fieldset in fieldsets:
 
         newFields = allFields.select(*[_fn(prefix, fieldName)
-                                            for fieldName in fieldset.fields
-                                                if _fn(prefix, fieldName) in allFields])
+                                       for fieldName in fieldset.fields
+                                       if _fn(prefix, fieldName) in allFields])
 
         if getattr(form, 'showEmptyGroups', False) or (len(newFields) > 0):
             _processWidgets(form, widgets, modes, newFields)
@@ -237,7 +262,8 @@ def processFieldMoves(form, schema, prefix=''):
     processFields().
     """
 
-    order = mergedTaggedValueList(schema, ORDER_KEY)      # (name, 'before'/'after', other name)
+    # (name, 'before'/'after', other name)
+    order = mergedTaggedValueList(schema, ORDER_KEY)
 
     for fieldName, direction, relative_to in order:
 
diff --git a/plone/autoform/view.py b/plone/autoform/view.py
index 04111ed..7e7a024 100644
--- a/plone/autoform/view.py
+++ b/plone/autoform/view.py
@@ -1,29 +1,27 @@
-from zope.interface import implements
-
+# -*- coding: utf-8 -*-
+from plone.autoform.base import AutoFields
+from plone.autoform.interfaces import IWidgetsView
+from plone.z3cform import z2
 from z3c.form.form import DisplayForm
 from z3c.form.interfaces import IFormLayer
+from zope.interface import implementer
 
 try:
     from Products.Five.bbb import AcquisitionBBB as Explicit
 except ImportError:
     from Acquisition import Explicit
 
-from plone.z3cform import z2
-
-from plone.autoform.interfaces import IWidgetsView
-from plone.autoform.base import AutoFields
-
 
+ at implementer(IWidgetsView)
 class WidgetsView(AutoFields, DisplayForm, Explicit):
     """Mix-in to allow widgets (in view mode) to be accesed from browser
     views.
     """
 
-    implements(IWidgetsView)
-
     # You should set one or more of these, or the 'fields' variable
 
     schema = None
+
     additionalSchemata = ()
 
     request_layer = IFormLayer
diff --git a/plone/autoform/widgets.py b/plone/autoform/widgets.py
index 505bbe2..d5b4190 100644
--- a/plone/autoform/widgets.py
+++ b/plone/autoform/widgets.py
@@ -1,21 +1,22 @@
-from z3c.form.widget import FieldWidget
-from z3c.form.interfaces import IWidget
+# -*- coding: utf-8 -*-
+from plone.autoform.interfaces import IParameterizedWidget
+from plone.autoform.interfaces import IWidgetExportImportHandler
+from plone.autoform.utils import resolveDottedName
+from plone.supermodel.utils import elementToValue
+from plone.supermodel.utils import noNS
+from plone.supermodel.utils import valueToElement
+from z3c.form.browser.interfaces import IHTMLFormElement
 from z3c.form.interfaces import IFieldWidget
 from z3c.form.interfaces import IFormLayer
-from z3c.form.browser.interfaces import IHTMLFormElement
-import z3c.form.browser.interfaces
-from zope.component import getSiteManager
+from z3c.form.interfaces import IWidget
+from z3c.form.widget import FieldWidget
 from zope.component import getMultiAdapter
+from zope.component import getSiteManager
 from zope.component import queryUtility
 from zope.interface import implementer
 from zope.interface import providedBy
 from zope.schema import getFields
-from plone.autoform.interfaces import IParameterizedWidget
-from plone.autoform.interfaces import IWidgetExportImportHandler
-from plone.autoform.utils import resolveDottedName
-from plone.supermodel.utils import valueToElement
-from plone.supermodel.utils import elementToValue
-from plone.supermodel.utils import noNS
+import z3c.form.browser.interfaces
 
 
 @implementer(IParameterizedWidget)
@@ -113,7 +114,10 @@ def read(self, widgetNode, params):
         for attributeName, attributeField in self.fieldAttributes.items():
             for node in widgetNode.iterchildren():
                 if noNS(node.tag) == attributeName:
-                    params[attributeName] = elementToValue(attributeField, node)
+                    params[attributeName] = elementToValue(
+                        attributeField,
+                        node
+                    )
 
     def write(self, widgetNode, params):
         for attributeName, attributeField in self.fieldAttributes.items():
@@ -124,4 +128,6 @@ def write(self, widgetNode, params):
                 widgetNode.append(child)
 
 
-TextAreaWidgetExportImportHandler = WidgetExportImportHandler(z3c.form.browser.interfaces.IHTMLTextAreaWidget)
+TextAreaWidgetExportImportHandler = WidgetExportImportHandler(
+    z3c.form.browser.interfaces.IHTMLTextAreaWidget
+)
diff --git a/setup.py b/setup.py
index c321214..f7449c6 100644
--- a/setup.py
+++ b/setup.py
@@ -1,5 +1,7 @@
+# -*- coding: utf-8 -*-
+from setuptools import find_packages
+from setuptools import setup
 import os
-from setuptools import setup, find_packages
 
 
 def read(*rnames):
@@ -20,7 +22,8 @@ def read(*rnames):
     version=version,
     description="Tools to construct z3c.form forms",
     long_description=long_description,
-    # Get more strings from http://www.python.org/pypi?%3Aaction=list_classifiers
+    # Get more strings from http://www.python.org/pypi?%3Aaction=list_
+    # classifiers
     classifiers=[
         "Framework :: Plone",
         "Programming Language :: Python",


Repository: plone.autoform
Branch: refs/heads/master
Date: 2014-10-01T16:00:31+02:00
Author: Jens W. Klein (jensens) <jk at kleinundpartner.at>
Commit: https://github.com/plone/plone.autoform/commit/05f3c00346161773e7eb36fd30303d7873731a5f

revert change in test

Files changed:
M plone/autoform/autoform.txt

diff --git a/plone/autoform/autoform.txt b/plone/autoform/autoform.txt
index 13eb36e..35b78d1 100644
--- a/plone/autoform/autoform.txt
+++ b/plone/autoform/autoform.txt
@@ -415,8 +415,6 @@ condition for group naming when autoGroups is True.
     >>> groups = [_getGroup(group) for group in naming_form.groups]
     >>> groups = dict((g.__name__, g) for g in groups)
     >>> names = tuple(sorted(group.__name__ for group in groups.values()))
-    >>> names
-
     >>> assert names == ('groucho', 'harpo')
     >>> assert 'groucho.this' in groups['groucho'].fields
     >>> assert 'harpo.that' in groups['harpo'].fields


Repository: plone.autoform
Branch: refs/heads/master
Date: 2014-10-01T16:15:41+02:00
Author: Jens W. Klein (jensens) <jk at kleinundpartner.at>
Commit: https://github.com/plone/plone.autoform/commit/e7a11d255083152f6806c89e8a7244d4ff00ffc8

also pep8ify et al tests

Files changed:
M plone/autoform/tests/__init__.py
M plone/autoform/tests/test_directives.py
M plone/autoform/tests/test_doctests.py
M plone/autoform/tests/test_supermodel_handler.py
M plone/autoform/tests/test_utils.py
M plone/autoform/tests/test_widgets.py

diff --git a/plone/autoform/tests/__init__.py b/plone/autoform/tests/__init__.py
index e69de29..40a96af 100644
--- a/plone/autoform/tests/__init__.py
+++ b/plone/autoform/tests/__init__.py
@@ -0,0 +1 @@
+# -*- coding: utf-8 -*-
diff --git a/plone/autoform/tests/test_directives.py b/plone/autoform/tests/test_directives.py
index 6a6f5f8..2de611b 100644
--- a/plone/autoform/tests/test_directives.py
+++ b/plone/autoform/tests/test_directives.py
@@ -1,14 +1,16 @@
-import unittest
-
-from zope.interface import Interface
-import zope.schema
-
+# -*- coding: utf-8 -*-
 from plone.autoform import directives as form
-from plone.supermodel import model
-
-from plone.autoform.interfaces import OMITTED_KEY, WIDGETS_KEY, MODES_KEY, ORDER_KEY
-from plone.autoform.interfaces import READ_PERMISSIONS_KEY, WRITE_PERMISSIONS_KEY
+from plone.autoform.interfaces import MODES_KEY
+from plone.autoform.interfaces import OMITTED_KEY
+from plone.autoform.interfaces import ORDER_KEY
+from plone.autoform.interfaces import READ_PERMISSIONS_KEY
+from plone.autoform.interfaces import WIDGETS_KEY
+from plone.autoform.interfaces import WRITE_PERMISSIONS_KEY
 from plone.autoform.testing import AUTOFORM_INTEGRATION_TESTING
+from plone.supermodel import model
+from zope.interface import Interface
+import unittest
+import zope.schema
 
 
 class DummyWidget(object):
@@ -42,23 +44,23 @@ class IDummy(model.Schema):
         model.finalizeSchemas(IDummy)
 
         self.assertEqual({'foo': 'some.dummy.Widget',
-                           'baz': 'other.Widget'},
-                          IDummy.queryTaggedValue(WIDGETS_KEY))
+                          'baz': 'other.Widget'},
+                         IDummy.queryTaggedValue(WIDGETS_KEY))
         self.assertEqual([(Interface, 'foo', 'true'),
-                           (Interface, 'bar', 'true'),
-                           (model.Schema, 'qux', 'true'),
-                           (model.Schema, 'bar', 'false')],
-                          IDummy.queryTaggedValue(OMITTED_KEY))
+                          (Interface, 'bar', 'true'),
+                          (model.Schema, 'qux', 'true'),
+                          (model.Schema, 'bar', 'false')],
+                         IDummy.queryTaggedValue(OMITTED_KEY))
         self.assertEqual([(Interface, 'bar', 'hidden'),
-                           (model.Schema, 'bar', 'input')],
-                          IDummy.queryTaggedValue(MODES_KEY))
+                          (model.Schema, 'bar', 'input')],
+                         IDummy.queryTaggedValue(MODES_KEY))
         self.assertEqual([('baz', 'before', 'title',),
-                           ('qux', 'after', 'title')],
-                          IDummy.queryTaggedValue(ORDER_KEY))
+                          ('qux', 'after', 'title')],
+                         IDummy.queryTaggedValue(ORDER_KEY))
         self.assertEqual({'foo': 'zope2.View'},
-                          IDummy.queryTaggedValue(READ_PERMISSIONS_KEY))
+                         IDummy.queryTaggedValue(READ_PERMISSIONS_KEY))
         self.assertEqual({'foo': 'cmf.ModifyPortalContent'},
-                          IDummy.queryTaggedValue(WRITE_PERMISSIONS_KEY))
+                         IDummy.queryTaggedValue(WRITE_PERMISSIONS_KEY))
 
     def test_widget_supports_instances_and_strings(self):
 
@@ -69,8 +71,10 @@ class IDummy(model.Schema):
             bar = zope.schema.TextLine(title=u"Bar")
             baz = zope.schema.TextLine(title=u"Baz")
 
-        self.assertEqual({'foo': 'plone.autoform.tests.test_directives.DummyWidget'},
-                  IDummy.queryTaggedValue(WIDGETS_KEY))
+        self.assertEqual(
+            {'foo': 'plone.autoform.tests.test_directives.DummyWidget'},
+            IDummy.queryTaggedValue(WIDGETS_KEY)
+        )
 
     def test_widget_parameterized(self):
         from zope.interface import implementer
@@ -144,23 +148,29 @@ class IDummy(model.Schema):
             qux = zope.schema.TextLine(title=u"Qux")
 
         self.assertEqual({'foo': 'some.dummy.Widget',
-                           'baz': 'other.Widget'},
-                          IDummy.queryTaggedValue(WIDGETS_KEY))
+                          'baz': 'other.Widget'},
+                         IDummy.queryTaggedValue(WIDGETS_KEY))
         self.assertEqual([(Interface, 'foo', 'true'),
-                           (Interface, 'bar', 'true')],
-                          IDummy.queryTaggedValue(OMITTED_KEY))
+                          (Interface, 'bar', 'true')],
+                         IDummy.queryTaggedValue(OMITTED_KEY))
         self.assertEqual([(Interface, 'bar', 'hidden'),
-                           (Interface, 'foo', 'display')],
-                          IDummy.queryTaggedValue(MODES_KEY))
+                          (Interface, 'foo', 'display')],
+                         IDummy.queryTaggedValue(MODES_KEY))
         self.assertEqual([('baz', 'before', 'title'),
-                           ('baz', 'after', 'qux'),
-                           ('qux', 'after', 'bar'),
-                           ('foo', 'before', 'body'), ],
-                          IDummy.queryTaggedValue(ORDER_KEY))
-        self.assertEqual({'foo': 'zope2.View', 'bar': 'zope2.View', 'baz': 'random.Permission'},
-                          IDummy.queryTaggedValue(READ_PERMISSIONS_KEY))
-        self.assertEqual({'foo': 'cmf.ModifyPortalContent', 'baz': 'another.Permission'},
-                          IDummy.queryTaggedValue(WRITE_PERMISSIONS_KEY))
+                          ('baz', 'after', 'qux'),
+                          ('qux', 'after', 'bar'),
+                          ('foo', 'before', 'body'), ],
+                         IDummy.queryTaggedValue(ORDER_KEY))
+        self.assertEqual(
+            {'foo': 'zope2.View',
+             'bar': 'zope2.View',
+             'baz': 'random.Permission'},
+            IDummy.queryTaggedValue(READ_PERMISSIONS_KEY)
+        )
+        self.assertEqual(
+            {'foo': 'cmf.ModifyPortalContent', 'baz': 'another.Permission'},
+            IDummy.queryTaggedValue(WRITE_PERMISSIONS_KEY)
+        )
 
     def test_misspelled_field(self):
 
@@ -191,7 +201,10 @@ class IBar(IFoo):
             form.order_after(foo='bar')
             bar = zope.schema.TextLine()
 
-        self.assertEqual([('foo', 'after', 'bar'), ], IBar.queryTaggedValue(ORDER_KEY))
+        self.assertEqual(
+            [('foo', 'after', 'bar'), ],
+            IBar.queryTaggedValue(ORDER_KEY)
+        )
 
 
 def test_suite():
diff --git a/plone/autoform/tests/test_doctests.py b/plone/autoform/tests/test_doctests.py
index 08e79db..2c6fb10 100644
--- a/plone/autoform/tests/test_doctests.py
+++ b/plone/autoform/tests/test_doctests.py
@@ -1,26 +1,30 @@
-import unittest
-import doctest
-
+# -*- coding: utf-8 -*-
 from plone.testing import layered
 from plone.testing.zca import UNIT_TESTING
+import doctest
+import unittest
 
 
 def test_suite():
     return unittest.TestSuite((
         layered(
-            doctest.DocFileSuite('../autoform.txt',
+            doctest.DocFileSuite(
+                '../autoform.txt',
                 optionflags=doctest.NORMALIZE_WHITESPACE | doctest.ELLIPSIS,),
             layer=UNIT_TESTING),
         layered(
-            doctest.DocFileSuite('subform.txt',
+            doctest.DocFileSuite(
+                'subform.txt',
                 optionflags=doctest.NORMALIZE_WHITESPACE | doctest.ELLIPSIS,),
             layer=UNIT_TESTING),
         layered(
-            doctest.DocFileSuite('../view.txt',
+            doctest.DocFileSuite(
+                '../view.txt',
                 optionflags=doctest.NORMALIZE_WHITESPACE | doctest.ELLIPSIS,),
             layer=UNIT_TESTING),
         layered(
-            doctest.DocFileSuite('../supermodel.txt',
+            doctest.DocFileSuite(
+                '../supermodel.txt',
                 optionflags=doctest.NORMALIZE_WHITESPACE | doctest.ELLIPSIS,),
             layer=UNIT_TESTING),
         ))
diff --git a/plone/autoform/tests/test_supermodel_handler.py b/plone/autoform/tests/test_supermodel_handler.py
index 472da1c..c7123fd 100644
--- a/plone/autoform/tests/test_supermodel_handler.py
+++ b/plone/autoform/tests/test_supermodel_handler.py
@@ -1,20 +1,24 @@
-import unittest2 as unittest
-
+# -*- coding: utf-8 -*-
+from lxml import etree
+from plone.autoform.interfaces import MODES_KEY
+from plone.autoform.interfaces import OMITTED_KEY
+from plone.autoform.interfaces import ORDER_KEY
+from plone.autoform.interfaces import READ_PERMISSIONS_KEY
+from plone.autoform.interfaces import WIDGETS_KEY
+from plone.autoform.interfaces import WRITE_PERMISSIONS_KEY
+from plone.autoform.supermodel import FormSchema
+from plone.autoform.supermodel import SecuritySchema
+from plone.autoform.testing import AUTOFORM_INTEGRATION_TESTING
+from plone.supermodel.utils import ns
+from z3c.form.interfaces import IEditForm
+from z3c.form.interfaces import IForm
+from z3c.form.interfaces import IValidator
+from z3c.form.interfaces import IWidget
 from zope.component import getMultiAdapter
-from zope.interface import implementer
 from zope.interface import Interface
+from zope.interface import implementer
+import unittest2 as unittest
 import zope.schema
-from z3c.form.interfaces import IForm, IEditForm, IValidator
-from z3c.form.interfaces import IWidget
-
-from plone.supermodel.utils import ns
-
-from lxml import etree
-
-from plone.autoform.interfaces import OMITTED_KEY, WIDGETS_KEY, MODES_KEY, ORDER_KEY
-from plone.autoform.interfaces import READ_PERMISSIONS_KEY, WRITE_PERMISSIONS_KEY
-from plone.autoform.supermodel import FormSchema, SecuritySchema
-from plone.autoform.testing import AUTOFORM_INTEGRATION_TESTING
 
 
 @implementer(IWidget)
@@ -31,11 +35,17 @@ class TestFormSchema(unittest.TestCase):
 
     def test_read(self):
         field_node = etree.Element('field')
-        field_node.set(ns("widget", self.namespace), "z3c.form.browser.password.PasswordFieldWidget")
+        field_node.set(
+            ns("widget", self.namespace),
+            "z3c.form.browser.password.PasswordFieldWidget"
+        )
         field_node.set(ns("mode", self.namespace), "hidden")
         field_node.set(ns("omitted", self.namespace), "true")
         field_node.set(ns("before", self.namespace), "somefield")
-        field_node.set(ns("validator", self.namespace), "plone.autoform.tests.test_utils.TestValidator")
+        field_node.set(
+            ns("validator", self.namespace),
+            "plone.autoform.tests.test_utils.TestValidator"
+        )
 
         class IDummy(Interface):
             dummy = zope.schema.TextLine(title=u"dummy")
@@ -43,18 +53,35 @@ class IDummy(Interface):
         handler = FormSchema()
         handler.read(field_node, IDummy, IDummy['dummy'])
 
-        self.assertEqual({'dummy': 'z3c.form.browser.password.PasswordFieldWidget'},
-            IDummy.getTaggedValue(WIDGETS_KEY))
-        self.assertEqual([(Interface, 'dummy', 'true')], IDummy.getTaggedValue(OMITTED_KEY))
-        self.assertEqual([(Interface, 'dummy', 'hidden')], IDummy.getTaggedValue(MODES_KEY))
-        self.assertEqual([('dummy', 'before', 'somefield',)], IDummy.getTaggedValue(ORDER_KEY))
-        validator = getMultiAdapter((None, None, None, IDummy['dummy'], None), IValidator)
+        self.assertEqual(
+            {'dummy': 'z3c.form.browser.password.PasswordFieldWidget'},
+            IDummy.getTaggedValue(WIDGETS_KEY)
+        )
+        self.assertEqual(
+            [(Interface, 'dummy', 'true')],
+            IDummy.getTaggedValue(OMITTED_KEY)
+        )
+        self.assertEqual(
+            [(Interface, 'dummy', 'hidden')],
+            IDummy.getTaggedValue(MODES_KEY)
+        )
+        self.assertEqual(
+            [('dummy', 'before', 'somefield',)],
+            IDummy.getTaggedValue(ORDER_KEY)
+        )
+        validator = getMultiAdapter(
+            (None, None, None, IDummy['dummy'], None),
+            IValidator
+        )
         from plone.autoform.tests.test_utils import TestValidator
         assert isinstance(validator, TestValidator)
 
     def test_read_multiple(self):
         field_node1 = etree.Element('field')
-        field_node1.set(ns("widget", self.namespace), "z3c.form.browser.password.PasswordFieldWidget")
+        field_node1.set(
+            ns("widget", self.namespace),
+            "z3c.form.browser.password.PasswordFieldWidget"
+        )
         field_node1.set(ns("mode", self.namespace), "hidden")
         field_node1.set(ns("omitted", self.namespace), "true")
         field_node1.set(ns("before", self.namespace), "somefield")
@@ -71,13 +98,23 @@ class IDummy(Interface):
         handler.read(field_node1, IDummy, IDummy['dummy1'])
         handler.read(field_node2, IDummy, IDummy['dummy2'])
 
-        self.assertEqual({'dummy1': 'z3c.form.browser.password.PasswordFieldWidget'},
-            IDummy.getTaggedValue(WIDGETS_KEY))
-        self.assertEqual([(Interface, 'dummy1', 'true'), (Interface, 'dummy2', 'yes')],
-                          IDummy.getTaggedValue(OMITTED_KEY))
-        self.assertEqual([(Interface, 'dummy1', 'hidden'), (Interface, 'dummy2', 'display')],
-                          IDummy.getTaggedValue(MODES_KEY))
-        self.assertEqual([('dummy1', 'before', 'somefield',)], IDummy.getTaggedValue(ORDER_KEY))
+        self.assertEqual(
+            {'dummy1': 'z3c.form.browser.password.PasswordFieldWidget'},
+            IDummy.getTaggedValue(WIDGETS_KEY)
+        )
+        self.assertEqual(
+            [(Interface, 'dummy1', 'true'), (Interface, 'dummy2', 'yes')],
+            IDummy.getTaggedValue(OMITTED_KEY)
+        )
+        self.assertEqual(
+            [(Interface, 'dummy1', 'hidden'),
+             (Interface, 'dummy2', 'display')],
+            IDummy.getTaggedValue(MODES_KEY)
+        )
+        self.assertEqual(
+            [('dummy1', 'before', 'somefield',)],
+            IDummy.getTaggedValue(ORDER_KEY)
+        )
 
     def test_read_no_data(self):
         field_node = etree.Element('field')
@@ -95,12 +132,26 @@ class IDummy(Interface):
 
     def test_read_values_with_interfaces(self):
         field_node1 = etree.Element('field')
-        field_node1.set(ns("mode", self.namespace), "z3c.form.interfaces.IForm:hidden")
-        field_node1.set(ns("omitted", self.namespace), "z3c.form.interfaces.IForm:true")
+        field_node1.set(
+            ns("mode", self.namespace),
+            "z3c.form.interfaces.IForm:hidden"
+        )
+        field_node1.set(
+            ns("omitted", self.namespace),
+            "z3c.form.interfaces.IForm:true"
+        )
 
         field_node2 = etree.Element('field')
-        field_node2.set(ns("mode", self.namespace), "z3c.form.interfaces.IForm:hidden z3c.form.interfaces.IEditForm:display")
-        field_node2.set(ns("omitted", self.namespace), "z3c.form.interfaces.IForm:true z3c.form.interfaces.IEditForm:false")
+        field_node2.set(
+            ns("mode", self.namespace),
+            "z3c.form.interfaces.IForm:hidden "
+            "z3c.form.interfaces.IEditForm:display"
+        )
+        field_node2.set(
+            ns("omitted", self.namespace),
+            "z3c.form.interfaces.IForm:true "
+            "z3c.form.interfaces.IEditForm:false"
+        )
 
         class IDummy(Interface):
             dummy1 = zope.schema.TextLine(title=u"dummy1")
@@ -110,10 +161,24 @@ class IDummy(Interface):
         handler.read(field_node1, IDummy, IDummy['dummy1'])
         handler.read(field_node2, IDummy, IDummy['dummy2'])
 
-        expected_modes = [(IForm, u'dummy1', 'hidden'), (IForm, u'dummy2', 'hidden'), (IEditForm, u'dummy2', 'display')]
-        self.assertEqual(expected_modes, IDummy.queryTaggedValue(MODES_KEY))
-        expected_omitted = [(IForm, u'dummy1', 'true'), (IForm, u'dummy2', 'true'), (IEditForm, u'dummy2', 'false')]
-        self.assertEqual(expected_omitted, IDummy.queryTaggedValue(OMITTED_KEY))
+        expected_modes = [
+            (IForm, u'dummy1', 'hidden'),
+            (IForm, u'dummy2', 'hidden'),
+            (IEditForm, u'dummy2', 'display')
+        ]
+        self.assertEqual(
+            expected_modes,
+            IDummy.queryTaggedValue(MODES_KEY)
+        )
+        expected_omitted = [
+            (IForm, u'dummy1', 'true'),
+            (IForm, u'dummy2', 'true'),
+            (IEditForm, u'dummy2', 'false')
+        ]
+        self.assertEqual(
+            expected_omitted,
+            IDummy.queryTaggedValue(OMITTED_KEY)
+        )
 
     def test_read_parameterized_widget(self):
         from plone.autoform.widgets import ParameterizedWidget
@@ -121,8 +186,10 @@ def test_read_parameterized_widget(self):
         param_node = etree.Element('klass')
         param_node.text = 'custom'
         widget_node = etree.Element(ns('widget', self.namespace))
-        widget_node.set('type',
-            'plone.autoform.tests.test_supermodel_handler.DummyWidget')
+        widget_node.set(
+            'type',
+            'plone.autoform.tests.test_supermodel_handler.DummyWidget'
+        )
         widget_node.append(param_node)
         field_node = etree.Element('field')
         field_node.append(widget_node)
@@ -177,7 +244,10 @@ class IDummy(Interface):
         self.assertEqual("SomeWidget", widget_node.get('type'))
         self.assertEqual("true", field_node.get(ns("omitted", self.namespace)))
         self.assertEqual("hidden", field_node.get(ns("mode", self.namespace)))
-        self.assertEqual("somefield", field_node.get(ns("before", self.namespace)))
+        self.assertEqual(
+            "somefield",
+            field_node.get(ns("before", self.namespace))
+        )
 
     def test_write_partial(self):
         field_node = etree.Element('field')
@@ -187,7 +257,10 @@ class IDummy(Interface):
 
         IDummy.setTaggedValue(WIDGETS_KEY, {'dummy': 'SomeWidget'})
         IDummy.setTaggedValue(OMITTED_KEY, [(Interface, 'dummy2', 'true')])
-        IDummy.setTaggedValue(MODES_KEY, [(Interface, 'dummy', 'display'), (Interface, 'dummy2', 'hidden')])
+        IDummy.setTaggedValue(
+            MODES_KEY,
+            [(Interface, 'dummy', 'display'), (Interface, 'dummy2', 'hidden')]
+        )
         IDummy.setTaggedValue(ORDER_KEY, [])
 
         handler = FormSchema()
@@ -221,22 +294,42 @@ class IDummy(Interface):
             dummy1 = zope.schema.TextLine(title=u"dummy1")
             dummy2 = zope.schema.TextLine(title=u"dummy2")
 
-        modes_values = [(IForm, u'dummy1', 'hidden'), (IForm, u'dummy2', 'hidden'), (IEditForm, u'dummy2', 'display')]
+        modes_values = [
+            (IForm, u'dummy1', 'hidden'),
+            (IForm, u'dummy2', 'hidden'),
+            (IEditForm, u'dummy2', 'display')
+        ]
         IDummy.setTaggedValue(MODES_KEY, modes_values)
-        omitted_values = [(IForm, u'dummy1', 'true'), (IForm, u'dummy2', 'true'), (IEditForm, u'dummy2', 'false')]
+        omitted_values = [
+            (IForm, u'dummy1', 'true'),
+            (IForm, u'dummy2', 'true'),
+            (IEditForm, u'dummy2', 'false')
+        ]
         IDummy.setTaggedValue(OMITTED_KEY, omitted_values)
 
         handler = FormSchema()
         handler.write(field_node1, IDummy, IDummy['dummy1'])
         handler.write(field_node2, IDummy, IDummy['dummy2'])
 
-        self.assertEqual("z3c.form.interfaces.IForm:hidden", field_node1.get(ns("mode", self.namespace)))
-        self.assertEqual("z3c.form.interfaces.IForm:true", field_node1.get(ns("omitted", self.namespace)))
-
-        self.assertEqual("z3c.form.interfaces.IForm:hidden z3c.form.interfaces.IEditForm:display",
-                          field_node2.get(ns("mode", self.namespace)))
-        self.assertEqual("z3c.form.interfaces.IForm:true z3c.form.interfaces.IEditForm:false",
-                          field_node2.get(ns("omitted", self.namespace)))
+        self.assertEqual(
+            "z3c.form.interfaces.IForm:hidden",
+            field_node1.get(ns("mode", self.namespace))
+        )
+        self.assertEqual(
+            "z3c.form.interfaces.IForm:true",
+            field_node1.get(ns("omitted", self.namespace))
+        )
+
+        self.assertEqual(
+            "z3c.form.interfaces.IForm:hidden "
+            "z3c.form.interfaces.IEditForm:display",
+            field_node2.get(ns("mode", self.namespace))
+        )
+        self.assertEqual(
+            "z3c.form.interfaces.IForm:true "
+            "z3c.form.interfaces.IEditForm:false",
+            field_node2.get(ns("omitted", self.namespace))
+        )
 
     def test_write_parameterized_widget_string(self):
         from plone.autoform.widgets import ParameterizedWidget
@@ -250,9 +343,12 @@ class IDummy(Interface):
         handler = FormSchema()
         handler.write(fieldNode, IDummy, IDummy['dummy1'])
 
-        self.assertEqual(etree.tostring(fieldNode),
-            '<field><ns0:widget xmlns:ns0="http://namespaces.plone.org/supermodel/form"'
-            ' type="foo"/></field>')
+        self.assertEqual(
+            etree.tostring(fieldNode),
+            '<field><ns0:widget'
+            ' xmlns:ns0="http://namespaces.plone.org/supermodel/form"'
+            ' type="foo"/></field>'
+        )
 
     def test_write_parameterized_widget_default(self):
         from plone.autoform.widgets import ParameterizedWidget
@@ -266,8 +362,10 @@ class IDummy(Interface):
         handler = FormSchema()
         handler.write(fieldNode, IDummy, IDummy['dummy1'])
 
-        self.assertEqual(etree.tostring(fieldNode),
-            '<field/>')
+        self.assertEqual(
+            etree.tostring(fieldNode),
+            '<field/>'
+        )
 
     def test_write_parameterized_widget_with_handler(self):
         from plone.autoform.widgets import ParameterizedWidget
@@ -281,9 +379,12 @@ class IDummy(Interface):
         handler = FormSchema()
         handler.write(fieldNode, IDummy, IDummy['dummy1'])
 
-        self.assertEqual(etree.tostring(fieldNode),
-            '<field><ns0:widget xmlns:ns0="http://namespaces.plone.org/supermodel/form"'
-            ' type="plone.autoform.tests.test_supermodel_handler.DummyWidget">'
+        self.assertEqual(
+            etree.tostring(fieldNode),
+            '<field><ns0:widget'
+            ' xmlns:ns0="http://namespaces.plone.org/supermodel/form"'
+            ' type="plone.autoform.tests.test_supermodel_handler.'
+            'DummyWidget">'
             '<klass>custom</klass>'
             '</ns0:widget></field>')
 
@@ -299,8 +400,10 @@ class IDummy(Interface):
         handler = FormSchema()
         handler.write(fieldNode, IDummy, IDummy['dummy1'])
 
-        self.assertEqual(etree.tostring(fieldNode),
-            '<field><ns0:widget xmlns:ns0="http://namespaces.plone.org/supermodel/form">'
+        self.assertEqual(
+            etree.tostring(fieldNode),
+            '<field><ns0:widget'
+            ' xmlns:ns0="http://namespaces.plone.org/supermodel/form">'
             '<klass>custom</klass></ns0:widget></field>')
 
 
@@ -319,8 +422,14 @@ class IDummy(Interface):
         handler = SecuritySchema()
         handler.read(field_node, IDummy, IDummy['dummy'])
 
-        self.assertEqual({u'dummy': 'dummy.Read'}, IDummy.getTaggedValue(READ_PERMISSIONS_KEY))
-        self.assertEqual({u'dummy': 'dummy.Write'}, IDummy.getTaggedValue(WRITE_PERMISSIONS_KEY))
+        self.assertEqual(
+            {u'dummy': 'dummy.Read'},
+            IDummy.getTaggedValue(READ_PERMISSIONS_KEY)
+        )
+        self.assertEqual(
+            {u'dummy': 'dummy.Write'},
+            IDummy.getTaggedValue(WRITE_PERMISSIONS_KEY)
+        )
 
     def test_read_no_permissions(self):
         field_node = etree.Element('field')
@@ -346,8 +455,14 @@ class IDummy(Interface):
         handler = SecuritySchema()
         handler.write(field_node, IDummy, IDummy['dummy'])
 
-        self.assertEqual("dummy.Read", field_node.get(ns("read-permission", self.namespace)))
-        self.assertEqual("dummy.Write", field_node.get(ns("write-permission", self.namespace)))
+        self.assertEqual(
+            "dummy.Read",
+            field_node.get(ns("read-permission", self.namespace))
+        )
+        self.assertEqual(
+            "dummy.Write",
+            field_node.get(ns("write-permission", self.namespace))
+        )
 
     def test_write_no_permissions(self):
         field_node = etree.Element('field')
@@ -360,8 +475,14 @@ class IDummy(Interface):
         handler = SecuritySchema()
         handler.write(field_node, IDummy, IDummy['dummy'])
 
-        self.assertEqual(None, field_node.get(ns("read-permission", self.namespace)))
-        self.assertEqual(None, field_node.get(ns("write-permission", self.namespace)))
+        self.assertEqual(
+            None,
+            field_node.get(ns("read-permission", self.namespace))
+        )
+        self.assertEqual(
+            None,
+            field_node.get(ns("write-permission", self.namespace))
+        )
 
     def test_write_no_metadata(self):
         field_node = etree.Element('field')
@@ -372,8 +493,14 @@ class IDummy(Interface):
         handler = SecuritySchema()
         handler.write(field_node, IDummy, IDummy['dummy'])
 
-        self.assertEqual(None, field_node.get(ns("read-permission", self.namespace)))
-        self.assertEqual(None, field_node.get(ns("write-permission", self.namespace)))
+        self.assertEqual(
+            None,
+            field_node.get(ns("read-permission", self.namespace))
+        )
+        self.assertEqual(
+            None,
+            field_node.get(ns("write-permission", self.namespace))
+        )
 
 
 def test_suite():
diff --git a/plone/autoform/tests/test_utils.py b/plone/autoform/tests/test_utils.py
index 10f65c1..5df933b 100644
--- a/plone/autoform/tests/test_utils.py
+++ b/plone/autoform/tests/test_utils.py
@@ -1,16 +1,17 @@
-import unittest
+# -*- coding: utf-8 -*-
 from AccessControl.SecurityManagement import noSecurityManager
 from AccessControl.SecurityManagement import setSecurityManager
-from zope.component import provideUtility
-from zope.interface import Interface, Invalid
-from z3c.form.form import Form
-from z3c.form.validator import SimpleFieldValidator
-import zope.schema
 from plone.autoform.interfaces import WRITE_PERMISSIONS_KEY
+from plone.autoform.utils import processFields
 from plone.supermodel.interfaces import FIELDSETS_KEY
 from plone.supermodel.model import Fieldset
-from plone.autoform.utils import processFields
 from plone.testing.zca import UNIT_TESTING
+from z3c.form.form import Form
+from z3c.form.validator import SimpleFieldValidator
+from zope.component import provideUtility
+from zope.interface import Interface, Invalid
+import unittest
+import zope.schema
 
 
 class TestValidator(SimpleFieldValidator):
diff --git a/plone/autoform/tests/test_widgets.py b/plone/autoform/tests/test_widgets.py
index 9cf0580..dbf840d 100644
--- a/plone/autoform/tests/test_widgets.py
+++ b/plone/autoform/tests/test_widgets.py
@@ -1,5 +1,6 @@
-import unittest2 as unittest
+# -*- coding: utf-8 -*-
 from plone.testing.zca import UNIT_TESTING
+import unittest2 as unittest
 
 
 class TestParameterizedWidget(unittest.TestCase):
@@ -7,11 +8,11 @@ class TestParameterizedWidget(unittest.TestCase):
     layer = UNIT_TESTING
 
     def test_widget_instantiated_with_parameters(self):
-        from zope.interface import implementer
-        from zope.schema import Field
+        from plone.autoform.widgets import ParameterizedWidget
         from z3c.form.interfaces import IFieldWidget
         from z3c.form.interfaces import IWidget
-        from plone.autoform.widgets import ParameterizedWidget
+        from zope.interface import implementer
+        from zope.schema import Field
 
         @implementer(IWidget)
         class DummyWidget(object):
@@ -30,12 +31,12 @@ def DummyFieldWidget(field, request):
         self.assertEqual('bar', widget.foo)
 
     def test_default_widget_instantiated(self):
+        from plone.autoform.widgets import ParameterizedWidget
+        from z3c.form.interfaces import IFieldWidget
         from zope.component import provideAdapter
         from zope.interface import Interface
         from zope.interface import implementer
         from zope.schema import Field
-        from z3c.form.interfaces import IFieldWidget
-        from plone.autoform.widgets import ParameterizedWidget
 
         class DummyWidget(object):
             def __init__(self, request):


Repository: plone.autoform
Branch: refs/heads/master
Date: 2014-10-01T16:46:12+02:00
Author: Jens W. Klein (jensens) <jk at kleinundpartner.at>
Commit: https://github.com/plone/plone.autoform/commit/69702485572cab9e8967698f014a6b079c4834d7

looks like my fingers were faster than window focus

Files changed:
M plone/autoform/autoform.txt

diff --git a/plone/autoform/autoform.txt b/plone/autoform/autoform.txt
index 35b78d1..977781a 100644
--- a/plone/autoform/autoform.txt
+++ b/plone/autoform/autoform.txt
@@ -1,4 +1,4 @@
-cd Form setup details
+Form setup details
 ==================
 
 This package provides tools to construct z3c.form forms out of hints stored


Repository: plone.autoform
Branch: refs/heads/master
Date: 2014-10-02T14:43:46+02:00
Author: agitator (agitator) <hpeter at agitator.com>
Commit: https://github.com/plone/plone.autoform/commit/bd1b8767f4f3c504017b8c9ed5414256587ee1ba

Merge pull request #9 from plone/jensens-cleanup

pep8 cleanup, utf8-header,sorted imports, readability, ...

Files changed:
M CHANGES.rst
M README.rst
M plone/__init__.py
M plone/autoform/__init__.py
M plone/autoform/autoform.txt
M plone/autoform/base.py
M plone/autoform/directives.py
M plone/autoform/form.py
M plone/autoform/interfaces.py
M plone/autoform/supermodel.py
M plone/autoform/testing.py
M plone/autoform/tests/__init__.py
M plone/autoform/tests/test_directives.py
M plone/autoform/tests/test_doctests.py
M plone/autoform/tests/test_supermodel_handler.py
M plone/autoform/tests/test_utils.py
M plone/autoform/tests/test_widgets.py
M plone/autoform/utils.py
M plone/autoform/view.py
M plone/autoform/widgets.py
M setup.py

diff --git a/CHANGES.rst b/CHANGES.rst
index 8c7c7bf..95f05ca 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -4,6 +4,9 @@ Changelog
 1.6.1 (unreleased)
 ------------------
 
+- pep8 cleanup, utf8-header,sorted imports, readability, ...
+  [jensens]
+
 - Fix issue where multiple (plone.supermodel) fieldset directive calls for the
   same fieldset name resulted to duplicate fieldsets (e.g. when updating
   fieldset with new fields in a subschema)
diff --git a/README.rst b/README.rst
index 5e4b549..9477a1a 100644
--- a/README.rst
+++ b/README.rst
@@ -348,6 +348,13 @@ in the ``plone.autoform.interfaces`` module. They can be set several ways:
 * By using the directives from ``plone.autoform.directives`` while defining
   a schema in Python.
 
+Source Code
+===========
+
+Contributors please read the document `Process for Plone core's development <http://docs.plone.org/develop/plone-coredev/index.html>`_
+
+Sources are at the `Plone code repository hosted at Github <https://github.com/plone/plone.autoform>`_.
+
 
 .. _z3c.form: http://pypi.python.org/pypi/z3c.form
 .. _zope.schema: http://pypi.python.org/pypi/zope.schema
diff --git a/plone/__init__.py b/plone/__init__.py
index f48ad10..68c04af 100644
--- a/plone/__init__.py
+++ b/plone/__init__.py
@@ -1,6 +1,2 @@
-# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
-try:
-    __import__('pkg_resources').declare_namespace(__name__)
-except ImportError:
-    from pkgutil import extend_path
-    __path__ = extend_path(__path__, __name__)
+# -*- coding: utf-8 -*-
+__import__('pkg_resources').declare_namespace(__name__)
diff --git a/plone/autoform/__init__.py b/plone/autoform/__init__.py
index e69de29..40a96af 100644
--- a/plone/autoform/__init__.py
+++ b/plone/autoform/__init__.py
@@ -0,0 +1 @@
+# -*- coding: utf-8 -*-
diff --git a/plone/autoform/autoform.txt b/plone/autoform/autoform.txt
index 144480c..977781a 100644
--- a/plone/autoform/autoform.txt
+++ b/plone/autoform/autoform.txt
@@ -5,7 +5,7 @@ This package provides tools to construct z3c.form forms out of hints stored
 in tagged values on schema interfaces. A special form base class is used to
 set up the 'fields' and 'groups' properties on form instances.
 
-The tagged values are stored under keys represented by the following 
+The tagged values are stored under keys represented by the following
 constants:
 
     >>> from plone.autoform.interfaces import OMITTED_KEY
@@ -27,7 +27,7 @@ There are several ways to set the form data:
   provides a schema handler for the 'form' prefix that can be used to
   incorporate form hints. See supermodel.txt for details.
 * By using the grok directives in the plone.directives.form package.
-    
+
 For the purposes of this test, we'll set the form data manually.
 
 Test setup
@@ -89,7 +89,7 @@ And finally, a form:
     >>> class TestForm(AutoExtensibleForm, form.Form):
     ...     schema = ITestSchema
     ...     additionalSchemata = (ISupplementarySchema, IOtherSchema,)
-    ...     
+    ...
     ...     ignoreContext = True
 
 This form is in input mode:
@@ -105,28 +105,28 @@ Form data can be held under the following keys:
     OMITTED_KEY -- A list of (interface, fieldName, boolean) triples. If the
         third value evaluates to true, the field with the given fieldName will
         be omitted from forms providing the given interface.
-    
+
     MODES_KEY -- A list of (interface, fieldName, mode string) triples. A mode
         string may be one of the z3c.form widget modes, including 'hidden',
         'input', and 'display'.  The field will be rendered using a widget in
         the specified mode on forms providing the given interface.
-    
+
     WIDGETS_KEY -- A dict of fieldName => widget. The widget can be
         the dotted name of a z3c.form field widget factory, or an actual
         instance of one.
-        
+
     ORDER_KEY -- A list of (fieldName, direction, relative_to) triples.
         direction can be one of 'before' or 'after'. relative_to can be '*'
-        (any/all fields), or the name of a field to move the given field 
+        (any/all fields), or the name of a field to move the given field
         before or after in the form.
-    
-    READ_PERMISSIONS_KEY -- A dict of fieldName => permission id. When a 
+
+    READ_PERMISSIONS_KEY -- A dict of fieldName => permission id. When a
         form is in 'display' mode, the field will be omitted unless the user
         has the given permission in the form's context. The permission id
         should be a Zope 3 style IPermission utility name, not a Zope 2
         permission string.
 
-    WRITE_PERMISSIONS_KEY -- A dict of fieldName => permission id. When a 
+    WRITE_PERMISSIONS_KEY -- A dict of fieldName => permission id. When a
         form is in 'input' mode, the field will be omitted unless the user
         has the given permission in the form's context. The permission id
         should be a Zope 3 style IPermission utility name, not a Zope 2
@@ -218,7 +218,7 @@ Note that if a permission is not found, the field will be allowed.
 Finally, fieldsets are configured like this:
 
     >>> from plone.supermodel.model import Fieldset
-    >>> ITestSchema.setTaggedValue(FIELDSETS_KEY, 
+    >>> ITestSchema.setTaggedValue(FIELDSETS_KEY,
     ...                                 [Fieldset('fieldset1', fields=['three'],
     ...                                           label=u"Fieldset one",
     ...                                           description=u"Description of fieldset one")])
@@ -324,12 +324,12 @@ in full.
 
     >>> Basics.setTaggedValue(MODES_KEY, [(Interface, 'hidden_secret', 'hidden')])
     >>> Basics.setTaggedValue(FIELDSETS_KEY, [Fieldset('Dates', label="Cool dates", fields=['creation_date'])])
-    
+
     >>> class Dates(Interface):
     ...     """Date information"""
     ...     start_date = schema.Date(title=u"Start date")
     ...     end_date = schema.Date(title=u"End date")
-    
+
     >>> class Ownership(Interface):
     ...     """Ownership information"""
     ...     owner = schema.Date(title=u"The owner")
@@ -341,7 +341,7 @@ that this may cause clashes if fields in different schemata share a name.
     >>> class CombiForm(AutoExtensibleForm, form.Form):
     ...     schema = Basics
     ...     additionalSchemata = (Dates, Ownership,)
-    ...     
+    ...
     ...     ignoreContext = True
     ...     ignorePrefix = True
     ...     autoGroups = True
@@ -354,14 +354,14 @@ another fieldset.
 
     >>> combi_form.fields.keys()
     ['title', 'description', 'hidden_secret']
-    
+
     >>> combi_form.widgets['hidden_secret'].mode
     'hidden'
-    
+
 Each additional schema then has its own fields. Note that setting the 'dates'
 fieldset in the base schema had the effect of giving a more specific
 label to the automatically created group for the Dates schema.
-    
+
     >>> [(g.__name__, g.label, g.description, g.fields.keys(),) for g in combi_form.groups]
     [('Dates', 'Cool dates', None, ['creation_date', 'start_date', 'end_date']),
      ('Ownership', 'Ownership', 'Ownership information', ['owner'])]
@@ -377,12 +377,12 @@ condition for group naming when autoGroups is True.
 
     >>> class IUnknownName(Interface):
     ...     this = schema.TextLine()
-    ... 
+    ...
     >>> IUnknownName.__name__ = ''  # dynamic schema, empty __name__
-    
+
     >>> class IAnotherAnonymousSchema(Interface):
     ...     that = schema.TextLine()
-    ... 
+    ...
     >>> IAnotherAnonymousSchema.__name__ = ''
 
     Create an extrinsicly stored name mapping:
@@ -399,22 +399,22 @@ condition for group naming when autoGroups is True.
     >>> class GroupNamingForm(AutoExtensibleForm, form.Form):
     ...     autoGroups = True
     ...     ignoreContext = True
-    ... 
+    ...
     ...     schema = Interface
     ...     additionalSchemata = (IUnknownName, IAnotherAnonymousSchema)
-    ... 
+    ...
     ...     def getPrefix(self, schema):
     ...         if schema in schemaToName:
     ...             return schemaToName.get(schema)
     ...         return super(GroupNamingForm, self).getPrefix(schema)
-    ... 
+    ...
 
     >>> naming_form = GroupNamingForm(context, request)
     >>> naming_form.updateFieldsFromSchemata()
     >>> _getGroup = lambda factory: factory(context, request, None)
     >>> groups = [_getGroup(group) for group in naming_form.groups]
     >>> groups = dict((g.__name__, g) for g in groups)
-    >>> names = tuple(group.__name__ for group in groups.values())
+    >>> names = tuple(sorted(group.__name__ for group in groups.values()))
     >>> assert names == ('groucho', 'harpo')
     >>> assert 'groucho.this' in groups['groucho'].fields
     >>> assert 'harpo.that' in groups['harpo'].fields
diff --git a/plone/autoform/base.py b/plone/autoform/base.py
index b3ca5f9..a9471cc 100644
--- a/plone/autoform/base.py
+++ b/plone/autoform/base.py
@@ -1,8 +1,7 @@
-from z3c.form import field
-
-from plone.z3cform.fieldsets.group import GroupFactory
-
+# -*- coding: utf-8 -*-
 from plone.autoform.utils import processFieldMoves, processFields
+from plone.z3cform.fieldsets.group import GroupFactory
+from z3c.form import field
 
 _marker = object()
 
@@ -84,15 +83,22 @@ def updateFieldsFromSchemata(self):
                             break
 
                     if not found:
-                        fieldset_group = GroupFactory(group_name,
-                                                      field.Fields(),
-                                                      group_name,
-                                                      schema.__doc__)
+                        fieldset_group = GroupFactory(
+                            group_name,
+                            field.Fields(),
+                            group_name,
+                            schema.__doc__
+                        )
                         self.groups.append(fieldset_group)
 
                     defaultGroup = group_name
 
-                processFields(self, schema, prefix=prefix, defaultGroup=defaultGroup, permissionChecks=have_user)
+                processFields(
+                    self, schema,
+                    prefix=prefix,
+                    defaultGroup=defaultGroup,
+                    permissionChecks=have_user
+                )
 
         # Then process relative field movements. The base schema is processed
         # last to allow it to override any movements made in additional
diff --git a/plone/autoform/directives.py b/plone/autoform/directives.py
index 0934ee1..0d99c13 100644
--- a/plone/autoform/directives.py
+++ b/plone/autoform/directives.py
@@ -1,18 +1,20 @@
+# -*- coding: utf-8 -*-
+from plone.autoform.interfaces import MODES_KEY
+from plone.autoform.interfaces import OMITTED_KEY
+from plone.autoform.interfaces import ORDER_KEY
+from plone.autoform.interfaces import READ_PERMISSIONS_KEY
+from plone.autoform.interfaces import WIDGETS_KEY
+from plone.autoform.interfaces import WRITE_PERMISSIONS_KEY
+from plone.autoform.widgets import ParameterizedWidget
+from plone.supermodel.directives import DictCheckerPlugin
+from plone.supermodel.directives import ListCheckerPlugin
+from plone.supermodel.directives import MetadataDictDirective
+from plone.supermodel.directives import MetadataListDirective
 from z3c.form.interfaces import IFieldWidget
 from z3c.form.interfaces import IWidget
 from zope.interface import Interface
 from zope.interface.interfaces import IInterface
 
-from plone.supermodel.directives import MetadataListDirective
-from plone.supermodel.directives import MetadataDictDirective
-from plone.supermodel.directives import ListCheckerPlugin
-from plone.supermodel.directives import DictCheckerPlugin
-
-from plone.autoform.interfaces import OMITTED_KEY, MODES_KEY, WIDGETS_KEY
-from plone.autoform.interfaces import ORDER_KEY
-from plone.autoform.interfaces import READ_PERMISSIONS_KEY, WRITE_PERMISSIONS_KEY
-from plone.autoform.widgets import ParameterizedWidget
-
 
 class omitted(MetadataListDirective):
     """Directive used to omit one or more fields
@@ -22,7 +24,9 @@ class omitted(MetadataListDirective):
 
     def factory(self, *args):
         if not args:
-            raise TypeError('The omitted directive expects at least one argument.')
+            raise TypeError(
+                'The omitted directive expects at least one argument.'
+            )
         form_interface = Interface
         if IInterface.providedBy(args[0]):
             form_interface = args[0]
@@ -54,7 +58,9 @@ class mode(MetadataListDirective):
 
     def factory(self, *args, **kw):
         if len(args) > 1:
-            raise TypeError('The mode directive expects 0 or 1 non-keyword arguments.')
+            raise TypeError(
+                'The mode directive expects 0 or 1 non-keyword arguments.'
+            )
         form_interface = Interface
         if args:
             form_interface = args[0]
@@ -68,34 +74,41 @@ class ModePlugin(OmittedPlugin):
 class widget(MetadataDictDirective):
     """Schema directive used to set the widget for one or more fields.
 
-    Option 1: widget(field1='z3c.form.browser.text.TextWidget', field2=TextWidget)
+    Option 1:
+       ``widget(field1='z3c.form.browser.text.TextWidget', field2=TextWidget)``
 
       The directive is passed keyword arguments mapping field names to widgets.
       The widget can be specified as either a widget class, or as a string
-      with the dotted path to a widget class. It cannot be a widget instance, because
-      a new widget instance needs to be constructed for each request.
+      with the dotted path to a widget class. It cannot be a widget instance,
+      because a new widget instance needs to be constructed for each request.
 
-      (For backwards-compatibility, the widget can also be specified as a field widget factory.
-      A ``field widget factory`` is a callable that returns a widget instance
-      when passed a field and a request.)
+      (For backwards-compatibility, the widget can also be specified as a field
+      widget factory.  A ``field widget factory`` is a callable that returns a
+      widget instance when passed a field and a request.)
 
-    Option 2: widget('field1', TextWidget, label=u'My label')
+    Option 2:
+      ``widget('field1', TextWidget, label=u'My label')``
 
-      This option makes it possible to configure a custom widget _and_ customize its attributes.
+      This option makes it possible to configure a custom widget _and_
+      customize its attributes.
 
       * The first positional arg is a string giving the name of a single field.
-      * The second positional arg is a widget class, again specified as either a direct reference
-        or a dotted path.
-      * The remaining args are keyword arguments mapping arbitrary names to arbitrary values.
-        These will be set as attributes of the widget when it is constructed.
-
-    Option 3: widget('field1', label=u'My label')
-
-      This option makes it possible to _customize_ the field's default widget without naming it
-      explicitly.
-
-      * The first and only positional arg is a string giving the name of a single field.
-      * The remaining args are keyword arguments mapping arbitrary names to arbitrary values.
+      * The second positional arg is a widget class, again specified as either
+        a direct reference or a dotted path.
+      * The remaining args are keyword arguments mapping arbitrary names to
+        arbitrary values. These will be set as attributes of the widget when it
+        is constructed.
+
+    Option 3:
+      ``widget('field1', label=u'My label')``
+
+      This option makes it possible to _customize_ the field's default widget
+      without naming it explicitly.
+
+      * The first and only positional arg is a string giving the name of a
+        single field.
+      * The remaining args are keyword arguments mapping arbitrary names to
+        arbitrary values.
         These will be set as attributes of the widget when it is constructed.
     """
 
@@ -111,9 +124,11 @@ def factory(self, field_name=None, widget_class=None, **kw):
                 widgets[field_name] = widget
         else:
             if widget_class is not None \
-            and not IFieldWidget.implementedBy(widget_class) \
-            and not IWidget.implementedBy(widget_class):
-                raise TypeError('widget_class must implement IWidget or IFieldWidget')
+               and not IFieldWidget.implementedBy(widget_class) \
+               and not IWidget.implementedBy(widget_class):
+                raise TypeError(
+                    'widget_class must implement IWidget or IFieldWidget'
+                )
             widgets[field_name] = ParameterizedWidget(widget_class, **kw)
 
         return widgets
@@ -129,7 +144,8 @@ class order_before(MetadataListDirective):
     key = ORDER_KEY
 
     def factory(self, **kw):
-        return [(field_name, 'before', relative_to) for field_name, relative_to in kw.items()]
+        return [(field_name, 'before', relative_to)
+                for field_name, relative_to in kw.items()]
 
 
 class order_after(MetadataListDirective):
@@ -138,7 +154,8 @@ class order_after(MetadataListDirective):
     key = ORDER_KEY
 
     def factory(self, **kw):
-        return [(field_name, 'after', relative_to) for field_name, relative_to in kw.items()]
+        return [(field_name, 'after', relative_to)
+                for field_name, relative_to in kw.items()]
 
 
 class OrderPlugin(ListCheckerPlugin):
diff --git a/plone/autoform/form.py b/plone/autoform/form.py
index 61f81a8..58315c3 100644
--- a/plone/autoform/form.py
+++ b/plone/autoform/form.py
@@ -1,25 +1,27 @@
-from zope.interface import implements
-
-from plone.z3cform.fieldsets.extensible import ExtensibleForm
-
+# -*- coding: utf-8 -*-
+from plone.autoform.base import AutoFields
 from plone.autoform.interfaces import IAutoExtensibleForm
 from plone.autoform.interfaces import IAutoObjectSubForm
-from plone.autoform.base import AutoFields
+from plone.z3cform.fieldsets.extensible import ExtensibleForm
+from zope.interface import implementer
 
 _marker = object()
 
 
+ at implementer(IAutoExtensibleForm)
 class AutoExtensibleForm(AutoFields, ExtensibleForm):
     """Mixin class for z3c.form forms that support fields extracted from
     a schema
     """
 
-    implements(IAutoExtensibleForm)
     showEmptyGroups = False
 
     @property
     def schema(self):
-        raise NotImplementedError("The class deriving from AutoExtensibleForm must have a 'schema' property")
+        raise NotImplementedError(
+            "The class deriving from AutoExtensibleForm must have a "
+            "'schema' property"
+        )
 
     @property
     def additionalSchemata(self):
@@ -32,17 +34,15 @@ def updateFields(self):
         super(AutoExtensibleForm, self).updateFields()
 
 
+ at implementer(IAutoObjectSubForm)
 class AutoObjectSubForm(AutoFields):
-    """A Mixin class for z3c.form.object.ObjectSubForm forms that supports fields being
-    updated from hints in a schema.
+    """A Mixin class for z3c.form.object.ObjectSubForm forms that supports
+    fields being updated from hints in a schema.
     """
 
-    implements(IAutoObjectSubForm)
-
     @property
     def schema(self):
         return self.__parent__.field.schema
 
     def setupFields(self):
         self.updateFieldsFromSchemata()
-
diff --git a/plone/autoform/interfaces.py b/plone/autoform/interfaces.py
index 742d80c..ebee3bb 100644
--- a/plone/autoform/interfaces.py
+++ b/plone/autoform/interfaces.py
@@ -1,20 +1,18 @@
+# -*- coding: utf-8 -*-
+from plone.supermodel.interfaces import IFieldset
+from z3c.form.interfaces import IFieldWidget
+from z3c.form.interfaces import IFieldsForm, IDisplayForm, IWidget
 from zope.interface import Interface
 from zope.interface.interfaces import IInterface
-
 import zope.schema
 
-from z3c.form.interfaces import IFieldsForm, IDisplayForm, IWidget
-from z3c.form.interfaces import IFieldWidget
-from plone.supermodel.interfaces import IFieldset
-
 # Schema interface tagged value keys
+MODES_KEY = u"plone.autoform.modes"
+OMITTED_KEY = u"plone.autoform.omitted"
+ORDER_KEY = u"plone.autoform.order"
+WIDGETS_KEY = u"plone.autoform.widgets"
 
-OMITTED_KEY   = u"plone.autoform.omitted"
-WIDGETS_KEY   = u"plone.autoform.widgets"
-MODES_KEY     = u"plone.autoform.modes"
-ORDER_KEY     = u"plone.autoform.order"
-
-READ_PERMISSIONS_KEY  = u"plone.autoform.security.read-permissions"
+READ_PERMISSIONS_KEY = u"plone.autoform.security.read-permissions"
 WRITE_PERMISSIONS_KEY = u"plone.autoform.security.write-permissions"
 
 # Supermodel namespace and prefix
@@ -39,16 +37,24 @@ class IAutoExtensibleForm(Interface):
     for details.
     """
 
-    ignorePrefix = zope.schema.Bool(title=u"Do not set a prefix for additional schemata",
-                                    default=False)
+    ignorePrefix = zope.schema.Bool(
+        title=u"Do not set a prefix for additional schemata",
+        default=False
+    )
 
-    schema = zope.schema.Object(title=u"Schema providing form fields",
-                                schema=IInterface)
+    schema = zope.schema.Object(
+        title=u"Schema providing form fields",
+        schema=IInterface
+    )
 
-    additionalSchemata = zope.schema.Tuple(title=u"Supplementary schemata providing additional form fields",
-                                           value_type=zope.schema.Object(title=u"Schema interface",
-                                                                          schema=IInterface),
-                                           required=False)
+    additionalSchemata = zope.schema.Tuple(
+        title=u"Supplementary schemata providing additional form fields",
+        value_type=zope.schema.Object(
+            title=u"Schema interface",
+            schema=IInterface
+        ),
+        required=False
+    )
 
 
 class IAutoObjectSubForm(Interface):
@@ -56,8 +62,10 @@ class IAutoObjectSubForm(Interface):
     to also have its fields updated with form hints. See subform.txt
     """
 
-    schema = zope.schema.Object(title=u"Schema providing form fields",
-                                schema=IInterface)
+    schema = zope.schema.Object(
+        title=u"Schema providing form fields",
+        schema=IInterface
+    )
 
 
 class IWidgetsView(IAutoExtensibleForm, IFieldsForm, IDisplayForm):
@@ -65,15 +73,29 @@ class IWidgetsView(IAutoExtensibleForm, IFieldsForm, IDisplayForm):
     interfaces.
     """
 
-    w = zope.schema.Dict(title=u"Shortcut lookup for all widgets",
-                         description=u"Contains all widgets, including "
-                                      "those from groups within this form",
-                         key_type=zope.schema.ASCIILine(title=u"Widget name, with prefix"),
-                         value_type=zope.schema.Object(title=u"Widget", schema=IWidget))
-
-    fieldsets = zope.schema.Dict(title=u"Lookup fieldset (group) by name",
-                              key_type=zope.schema.ASCIILine(title=u"Fieldset name"),
-                              value_type=zope.schema.Object(title=u"Fieldset", schema=IFieldset))
+    w = zope.schema.Dict(
+        title=u"Shortcut lookup for all widgets",
+        description=u"Contains all widgets, including those from groups "
+                    u"within this form",
+        key_type=zope.schema.ASCIILine(
+            title=u"Widget name, with prefix"
+        ),
+        value_type=zope.schema.Object(
+            title=u"Widget",
+            schema=IWidget
+        )
+    )
+
+    fieldsets = zope.schema.Dict(
+        title=u"Lookup fieldset (group) by name",
+        key_type=zope.schema.ASCIILine(
+            title=u"Fieldset name"
+        ),
+        value_type=zope.schema.Object(
+            title=u"Fieldset",
+            schema=IFieldset
+        )
+    )
 
 
 class IParameterizedWidget(IFieldWidget):
diff --git a/plone/autoform/supermodel.py b/plone/autoform/supermodel.py
index 2827261..1f181d8 100644
--- a/plone/autoform/supermodel.py
+++ b/plone/autoform/supermodel.py
@@ -1,22 +1,25 @@
+# -*- coding: utf-8 -*-
 from lxml import etree
-
+from plone.autoform.interfaces import FORM_NAMESPACE
+from plone.autoform.interfaces import FORM_PREFIX
+from plone.autoform.interfaces import MODES_KEY
+from plone.autoform.interfaces import OMITTED_KEY
+from plone.autoform.interfaces import ORDER_KEY
+from plone.autoform.interfaces import READ_PERMISSIONS_KEY
+from plone.autoform.interfaces import SECURITY_NAMESPACE
+from plone.autoform.interfaces import SECURITY_PREFIX
+from plone.autoform.interfaces import WIDGETS_KEY
+from plone.autoform.interfaces import WRITE_PERMISSIONS_KEY
+from plone.autoform.utils import resolveDottedName
+from plone.autoform.widgets import ParameterizedWidget
+from plone.supermodel.parser import IFieldMetadataHandler
+from plone.supermodel.utils import ns
 from z3c.form.interfaces import IFieldWidget, IValidator
 from z3c.form.util import getSpecification
 from zope.component import provideAdapter
 from zope.interface import implements, Interface
 from zope.interface.interface import InterfaceClass
 
-from plone.supermodel.utils import ns
-from plone.supermodel.parser import IFieldMetadataHandler
-
-from plone.autoform.interfaces import OMITTED_KEY, WIDGETS_KEY, MODES_KEY, ORDER_KEY
-from plone.autoform.interfaces import READ_PERMISSIONS_KEY, WRITE_PERMISSIONS_KEY
-from plone.autoform.interfaces import FORM_NAMESPACE, FORM_PREFIX
-from plone.autoform.interfaces import SECURITY_NAMESPACE, SECURITY_PREFIX
-
-from plone.autoform.utils import resolveDottedName
-from plone.autoform.widgets import ParameterizedWidget
-
 
 class FormSchema(object):
     """Support the form: namespace in model definitions.
@@ -57,10 +60,11 @@ def _add_validator(self, field, value):
             raise ValueError(
                 "z3c.form.interfaces.IValidator not implemented by %s."
                 % value)
-        provideAdapter(validator,
+        provideAdapter(
+            validator,
             (None, None, None, getSpecification(field), None),
             IValidator,
-            )
+        )
 
     def read(self, fieldNode, schema, field):
         name = field.__name__
@@ -106,9 +110,18 @@ def write(self, fieldNode, schema, field):
         name = field.__name__
 
         widget = schema.queryTaggedValue(WIDGETS_KEY, {}).get(name, None)
-        mode = [(i, v) for i, n, v in schema.queryTaggedValue(MODES_KEY, []) if n == name]
-        omitted = [(i, v) for i, n, v in schema.queryTaggedValue(OMITTED_KEY, []) if n == name]
-        order = [(d, v) for n, d, v in schema.queryTaggedValue(ORDER_KEY, []) if n == name]
+        mode = [
+            (i, v) for i, n, v in schema.queryTaggedValue(MODES_KEY, [])
+            if n == name
+        ]
+        omitted = [
+            (i, v) for i, n, v in schema.queryTaggedValue(OMITTED_KEY, [])
+            if n == name
+        ]
+        order = [
+            (d, v) for n, d, v in schema.queryTaggedValue(ORDER_KEY, [])
+            if n == name
+        ]
 
         if widget is not None:
             if not isinstance(widget, ParameterizedWidget):
@@ -138,7 +151,10 @@ def write(self, fieldNode, schema, field):
                 value = "%s:%s" % (interface.__identifier__, value)
             omitted_values.append(value)
         if omitted_values:
-            fieldNode.set(ns('omitted', self.namespace), " ".join(omitted_values))
+            fieldNode.set(
+                ns('omitted', self.namespace),
+                " ".join(omitted_values)
+            )
 
         for direction, relative_to in order:
             if direction == 'before':
@@ -159,7 +175,9 @@ def read(self, fieldNode, schema, field):
         name = field.__name__
 
         read_permission = fieldNode.get(ns('read-permission', self.namespace))
-        write_permission = fieldNode.get(ns('write-permission', self.namespace))
+        write_permission = fieldNode.get(
+            ns('write-permission', self.namespace)
+        )
 
         read_permissions = schema.queryTaggedValue(READ_PERMISSIONS_KEY, {})
         write_permissions = schema.queryTaggedValue(WRITE_PERMISSIONS_KEY, {})
@@ -175,10 +193,21 @@ def read(self, fieldNode, schema, field):
     def write(self, fieldNode, schema, field):
         name = field.__name__
 
-        read_permission = schema.queryTaggedValue(READ_PERMISSIONS_KEY, {}).get(name, None)
-        write_permission = schema.queryTaggedValue(WRITE_PERMISSIONS_KEY, {}).get(name, None)
+        read_permission = schema.queryTaggedValue(
+            READ_PERMISSIONS_KEY, {}
+        ).get(name, None)
+        write_permission = schema.queryTaggedValue(
+            WRITE_PERMISSIONS_KEY,
+            {}
+        ).get(name, None)
 
         if read_permission:
-            fieldNode.set(ns('read-permission', self.namespace), read_permission)
+            fieldNode.set(
+                ns('read-permission', self.namespace),
+                read_permission
+            )
         if write_permission:
-            fieldNode.set(ns('write-permission', self.namespace), write_permission)
+            fieldNode.set(
+                ns('write-permission', self.namespace),
+                write_permission
+            )
diff --git a/plone/autoform/testing.py b/plone/autoform/testing.py
index b2f5e9d..6c8bbff 100644
--- a/plone/autoform/testing.py
+++ b/plone/autoform/testing.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 from plone.testing import Layer
 from plone.testing import z2
 from plone.testing import zca
diff --git a/plone/autoform/tests/__init__.py b/plone/autoform/tests/__init__.py
index e69de29..40a96af 100644
--- a/plone/autoform/tests/__init__.py
+++ b/plone/autoform/tests/__init__.py
@@ -0,0 +1 @@
+# -*- coding: utf-8 -*-
diff --git a/plone/autoform/tests/test_directives.py b/plone/autoform/tests/test_directives.py
index 6a6f5f8..2de611b 100644
--- a/plone/autoform/tests/test_directives.py
+++ b/plone/autoform/tests/test_directives.py
@@ -1,14 +1,16 @@
-import unittest
-
-from zope.interface import Interface
-import zope.schema
-
+# -*- coding: utf-8 -*-
 from plone.autoform import directives as form
-from plone.supermodel import model
-
-from plone.autoform.interfaces import OMITTED_KEY, WIDGETS_KEY, MODES_KEY, ORDER_KEY
-from plone.autoform.interfaces import READ_PERMISSIONS_KEY, WRITE_PERMISSIONS_KEY
+from plone.autoform.interfaces import MODES_KEY
+from plone.autoform.interfaces import OMITTED_KEY
+from plone.autoform.interfaces import ORDER_KEY
+from plone.autoform.interfaces import READ_PERMISSIONS_KEY
+from plone.autoform.interfaces import WIDGETS_KEY
+from plone.autoform.interfaces import WRITE_PERMISSIONS_KEY
 from plone.autoform.testing import AUTOFORM_INTEGRATION_TESTING
+from plone.supermodel import model
+from zope.interface import Interface
+import unittest
+import zope.schema
 
 
 class DummyWidget(object):
@@ -42,23 +44,23 @@ class IDummy(model.Schema):
         model.finalizeSchemas(IDummy)
 
         self.assertEqual({'foo': 'some.dummy.Widget',
-                           'baz': 'other.Widget'},
-                          IDummy.queryTaggedValue(WIDGETS_KEY))
+                          'baz': 'other.Widget'},
+                         IDummy.queryTaggedValue(WIDGETS_KEY))
         self.assertEqual([(Interface, 'foo', 'true'),
-                           (Interface, 'bar', 'true'),
-                           (model.Schema, 'qux', 'true'),
-                           (model.Schema, 'bar', 'false')],
-                          IDummy.queryTaggedValue(OMITTED_KEY))
+                          (Interface, 'bar', 'true'),
+                          (model.Schema, 'qux', 'true'),
+                          (model.Schema, 'bar', 'false')],
+                         IDummy.queryTaggedValue(OMITTED_KEY))
         self.assertEqual([(Interface, 'bar', 'hidden'),
-                           (model.Schema, 'bar', 'input')],
-                          IDummy.queryTaggedValue(MODES_KEY))
+                          (model.Schema, 'bar', 'input')],
+                         IDummy.queryTaggedValue(MODES_KEY))
         self.assertEqual([('baz', 'before', 'title',),
-                           ('qux', 'after', 'title')],
-                          IDummy.queryTaggedValue(ORDER_KEY))
+                          ('qux', 'after', 'title')],
+                         IDummy.queryTaggedValue(ORDER_KEY))
         self.assertEqual({'foo': 'zope2.View'},
-                          IDummy.queryTaggedValue(READ_PERMISSIONS_KEY))
+                         IDummy.queryTaggedValue(READ_PERMISSIONS_KEY))
         self.assertEqual({'foo': 'cmf.ModifyPortalContent'},
-                          IDummy.queryTaggedValue(WRITE_PERMISSIONS_KEY))
+                         IDummy.queryTaggedValue(WRITE_PERMISSIONS_KEY))
 
     def test_widget_supports_instances_and_strings(self):
 
@@ -69,8 +71,10 @@ class IDummy(model.Schema):
             bar = zope.schema.TextLine(title=u"Bar")
             baz = zope.schema.TextLine(title=u"Baz")
 
-        self.assertEqual({'foo': 'plone.autoform.tests.test_directives.DummyWidget'},
-                  IDummy.queryTaggedValue(WIDGETS_KEY))
+        self.assertEqual(
+            {'foo': 'plone.autoform.tests.test_directives.DummyWidget'},
+            IDummy.queryTaggedValue(WIDGETS_KEY)
+        )
 
     def test_widget_parameterized(self):
         from zope.interface import implementer
@@ -144,23 +148,29 @@ class IDummy(model.Schema):
             qux = zope.schema.TextLine(title=u"Qux")
 
         self.assertEqual({'foo': 'some.dummy.Widget',
-                           'baz': 'other.Widget'},
-                          IDummy.queryTaggedValue(WIDGETS_KEY))
+                          'baz': 'other.Widget'},
+                         IDummy.queryTaggedValue(WIDGETS_KEY))
         self.assertEqual([(Interface, 'foo', 'true'),
-                           (Interface, 'bar', 'true')],
-                          IDummy.queryTaggedValue(OMITTED_KEY))
+                          (Interface, 'bar', 'true')],
+                         IDummy.queryTaggedValue(OMITTED_KEY))
         self.assertEqual([(Interface, 'bar', 'hidden'),
-                           (Interface, 'foo', 'display')],
-                          IDummy.queryTaggedValue(MODES_KEY))
+                          (Interface, 'foo', 'display')],
+                         IDummy.queryTaggedValue(MODES_KEY))
         self.assertEqual([('baz', 'before', 'title'),
-                           ('baz', 'after', 'qux'),
-                           ('qux', 'after', 'bar'),
-                           ('foo', 'before', 'body'), ],
-                          IDummy.queryTaggedValue(ORDER_KEY))
-        self.assertEqual({'foo': 'zope2.View', 'bar': 'zope2.View', 'baz': 'random.Permission'},
-                          IDummy.queryTaggedValue(READ_PERMISSIONS_KEY))
-        self.assertEqual({'foo': 'cmf.ModifyPortalContent', 'baz': 'another.Permission'},
-                          IDummy.queryTaggedValue(WRITE_PERMISSIONS_KEY))
+                          ('baz', 'after', 'qux'),
+                          ('qux', 'after', 'bar'),
+                          ('foo', 'before', 'body'), ],
+                         IDummy.queryTaggedValue(ORDER_KEY))
+        self.assertEqual(
+            {'foo': 'zope2.View',
+             'bar': 'zope2.View',
+             'baz': 'random.Permission'},
+            IDummy.queryTaggedValue(READ_PERMISSIONS_KEY)
+        )
+        self.assertEqual(
+            {'foo': 'cmf.ModifyPortalContent', 'baz': 'another.Permission'},
+            IDummy.queryTaggedValue(WRITE_PERMISSIONS_KEY)
+        )
 
     def test_misspelled_field(self):
 
@@ -191,7 +201,10 @@ class IBar(IFoo):
             form.order_after(foo='bar')
             bar = zope.schema.TextLine()
 
-        self.assertEqual([('foo', 'after', 'bar'), ], IBar.queryTaggedValue(ORDER_KEY))
+        self.assertEqual(
+            [('foo', 'after', 'bar'), ],
+            IBar.queryTaggedValue(ORDER_KEY)
+        )
 
 
 def test_suite():
diff --git a/plone/autoform/tests/test_doctests.py b/plone/autoform/tests/test_doctests.py
index 08e79db..2c6fb10 100644
--- a/plone/autoform/tests/test_doctests.py
+++ b/plone/autoform/tests/test_doctests.py
@@ -1,26 +1,30 @@
-import unittest
-import doctest
-
+# -*- coding: utf-8 -*-
 from plone.testing import layered
 from plone.testing.zca import UNIT_TESTING
+import doctest
+import unittest
 
 
 def test_suite():
     return unittest.TestSuite((
         layered(
-            doctest.DocFileSuite('../autoform.txt',
+            doctest.DocFileSuite(
+                '../autoform.txt',
                 optionflags=doctest.NORMALIZE_WHITESPACE | doctest.ELLIPSIS,),
             layer=UNIT_TESTING),
         layered(
-            doctest.DocFileSuite('subform.txt',
+            doctest.DocFileSuite(
+                'subform.txt',
                 optionflags=doctest.NORMALIZE_WHITESPACE | doctest.ELLIPSIS,),
             layer=UNIT_TESTING),
         layered(
-            doctest.DocFileSuite('../view.txt',
+            doctest.DocFileSuite(
+                '../view.txt',
                 optionflags=doctest.NORMALIZE_WHITESPACE | doctest.ELLIPSIS,),
             layer=UNIT_TESTING),
         layered(
-            doctest.DocFileSuite('../supermodel.txt',
+            doctest.DocFileSuite(
+                '../supermodel.txt',
                 optionflags=doctest.NORMALIZE_WHITESPACE | doctest.ELLIPSIS,),
             layer=UNIT_TESTING),
         ))
diff --git a/plone/autoform/tests/test_supermodel_handler.py b/plone/autoform/tests/test_supermodel_handler.py
index 472da1c..c7123fd 100644
--- a/plone/autoform/tests/test_supermodel_handler.py
+++ b/plone/autoform/tests/test_supermodel_handler.py
@@ -1,20 +1,24 @@
-import unittest2 as unittest
-
+# -*- coding: utf-8 -*-
+from lxml import etree
+from plone.autoform.interfaces import MODES_KEY
+from plone.autoform.interfaces import OMITTED_KEY
+from plone.autoform.interfaces import ORDER_KEY
+from plone.autoform.interfaces import READ_PERMISSIONS_KEY
+from plone.autoform.interfaces import WIDGETS_KEY
+from plone.autoform.interfaces import WRITE_PERMISSIONS_KEY
+from plone.autoform.supermodel import FormSchema
+from plone.autoform.supermodel import SecuritySchema
+from plone.autoform.testing import AUTOFORM_INTEGRATION_TESTING
+from plone.supermodel.utils import ns
+from z3c.form.interfaces import IEditForm
+from z3c.form.interfaces import IForm
+from z3c.form.interfaces import IValidator
+from z3c.form.interfaces import IWidget
 from zope.component import getMultiAdapter
-from zope.interface import implementer
 from zope.interface import Interface
+from zope.interface import implementer
+import unittest2 as unittest
 import zope.schema
-from z3c.form.interfaces import IForm, IEditForm, IValidator
-from z3c.form.interfaces import IWidget
-
-from plone.supermodel.utils import ns
-
-from lxml import etree
-
-from plone.autoform.interfaces import OMITTED_KEY, WIDGETS_KEY, MODES_KEY, ORDER_KEY
-from plone.autoform.interfaces import READ_PERMISSIONS_KEY, WRITE_PERMISSIONS_KEY
-from plone.autoform.supermodel import FormSchema, SecuritySchema
-from plone.autoform.testing import AUTOFORM_INTEGRATION_TESTING
 
 
 @implementer(IWidget)
@@ -31,11 +35,17 @@ class TestFormSchema(unittest.TestCase):
 
     def test_read(self):
         field_node = etree.Element('field')
-        field_node.set(ns("widget", self.namespace), "z3c.form.browser.password.PasswordFieldWidget")
+        field_node.set(
+            ns("widget", self.namespace),
+            "z3c.form.browser.password.PasswordFieldWidget"
+        )
         field_node.set(ns("mode", self.namespace), "hidden")
         field_node.set(ns("omitted", self.namespace), "true")
         field_node.set(ns("before", self.namespace), "somefield")
-        field_node.set(ns("validator", self.namespace), "plone.autoform.tests.test_utils.TestValidator")
+        field_node.set(
+            ns("validator", self.namespace),
+            "plone.autoform.tests.test_utils.TestValidator"
+        )
 
         class IDummy(Interface):
             dummy = zope.schema.TextLine(title=u"dummy")
@@ -43,18 +53,35 @@ class IDummy(Interface):
         handler = FormSchema()
         handler.read(field_node, IDummy, IDummy['dummy'])
 
-        self.assertEqual({'dummy': 'z3c.form.browser.password.PasswordFieldWidget'},
-            IDummy.getTaggedValue(WIDGETS_KEY))
-        self.assertEqual([(Interface, 'dummy', 'true')], IDummy.getTaggedValue(OMITTED_KEY))
-        self.assertEqual([(Interface, 'dummy', 'hidden')], IDummy.getTaggedValue(MODES_KEY))
-        self.assertEqual([('dummy', 'before', 'somefield',)], IDummy.getTaggedValue(ORDER_KEY))
-        validator = getMultiAdapter((None, None, None, IDummy['dummy'], None), IValidator)
+        self.assertEqual(
+            {'dummy': 'z3c.form.browser.password.PasswordFieldWidget'},
+            IDummy.getTaggedValue(WIDGETS_KEY)
+        )
+        self.assertEqual(
+            [(Interface, 'dummy', 'true')],
+            IDummy.getTaggedValue(OMITTED_KEY)
+        )
+        self.assertEqual(
+            [(Interface, 'dummy', 'hidden')],
+            IDummy.getTaggedValue(MODES_KEY)
+        )
+        self.assertEqual(
+            [('dummy', 'before', 'somefield',)],
+            IDummy.getTaggedValue(ORDER_KEY)
+        )
+        validator = getMultiAdapter(
+            (None, None, None, IDummy['dummy'], None),
+            IValidator
+        )
         from plone.autoform.tests.test_utils import TestValidator
         assert isinstance(validator, TestValidator)
 
     def test_read_multiple(self):
         field_node1 = etree.Element('field')
-        field_node1.set(ns("widget", self.namespace), "z3c.form.browser.password.PasswordFieldWidget")
+        field_node1.set(
+            ns("widget", self.namespace),
+            "z3c.form.browser.password.PasswordFieldWidget"
+        )
         field_node1.set(ns("mode", self.namespace), "hidden")
         field_node1.set(ns("omitted", self.namespace), "true")
         field_node1.set(ns("before", self.namespace), "somefield")
@@ -71,13 +98,23 @@ class IDummy(Interface):
         handler.read(field_node1, IDummy, IDummy['dummy1'])
         handler.read(field_node2, IDummy, IDummy['dummy2'])
 
-        self.assertEqual({'dummy1': 'z3c.form.browser.password.PasswordFieldWidget'},
-            IDummy.getTaggedValue(WIDGETS_KEY))
-        self.assertEqual([(Interface, 'dummy1', 'true'), (Interface, 'dummy2', 'yes')],
-                          IDummy.getTaggedValue(OMITTED_KEY))
-        self.assertEqual([(Interface, 'dummy1', 'hidden'), (Interface, 'dummy2', 'display')],
-                          IDummy.getTaggedValue(MODES_KEY))
-        self.assertEqual([('dummy1', 'before', 'somefield',)], IDummy.getTaggedValue(ORDER_KEY))
+        self.assertEqual(
+            {'dummy1': 'z3c.form.browser.password.PasswordFieldWidget'},
+            IDummy.getTaggedValue(WIDGETS_KEY)
+        )
+        self.assertEqual(
+            [(Interface, 'dummy1', 'true'), (Interface, 'dummy2', 'yes')],
+            IDummy.getTaggedValue(OMITTED_KEY)
+        )
+        self.assertEqual(
+            [(Interface, 'dummy1', 'hidden'),
+             (Interface, 'dummy2', 'display')],
+            IDummy.getTaggedValue(MODES_KEY)
+        )
+        self.assertEqual(
+            [('dummy1', 'before', 'somefield',)],
+            IDummy.getTaggedValue(ORDER_KEY)
+        )
 
     def test_read_no_data(self):
         field_node = etree.Element('field')
@@ -95,12 +132,26 @@ class IDummy(Interface):
 
     def test_read_values_with_interfaces(self):
         field_node1 = etree.Element('field')
-        field_node1.set(ns("mode", self.namespace), "z3c.form.interfaces.IForm:hidden")
-        field_node1.set(ns("omitted", self.namespace), "z3c.form.interfaces.IForm:true")
+        field_node1.set(
+            ns("mode", self.namespace),
+            "z3c.form.interfaces.IForm:hidden"
+        )
+        field_node1.set(
+            ns("omitted", self.namespace),
+            "z3c.form.interfaces.IForm:true"
+        )
 
         field_node2 = etree.Element('field')
-        field_node2.set(ns("mode", self.namespace), "z3c.form.interfaces.IForm:hidden z3c.form.interfaces.IEditForm:display")
-        field_node2.set(ns("omitted", self.namespace), "z3c.form.interfaces.IForm:true z3c.form.interfaces.IEditForm:false")
+        field_node2.set(
+            ns("mode", self.namespace),
+            "z3c.form.interfaces.IForm:hidden "
+            "z3c.form.interfaces.IEditForm:display"
+        )
+        field_node2.set(
+            ns("omitted", self.namespace),
+            "z3c.form.interfaces.IForm:true "
+            "z3c.form.interfaces.IEditForm:false"
+        )
 
         class IDummy(Interface):
             dummy1 = zope.schema.TextLine(title=u"dummy1")
@@ -110,10 +161,24 @@ class IDummy(Interface):
         handler.read(field_node1, IDummy, IDummy['dummy1'])
         handler.read(field_node2, IDummy, IDummy['dummy2'])
 
-        expected_modes = [(IForm, u'dummy1', 'hidden'), (IForm, u'dummy2', 'hidden'), (IEditForm, u'dummy2', 'display')]
-        self.assertEqual(expected_modes, IDummy.queryTaggedValue(MODES_KEY))
-        expected_omitted = [(IForm, u'dummy1', 'true'), (IForm, u'dummy2', 'true'), (IEditForm, u'dummy2', 'false')]
-        self.assertEqual(expected_omitted, IDummy.queryTaggedValue(OMITTED_KEY))
+        expected_modes = [
+            (IForm, u'dummy1', 'hidden'),
+            (IForm, u'dummy2', 'hidden'),
+            (IEditForm, u'dummy2', 'display')
+        ]
+        self.assertEqual(
+            expected_modes,
+            IDummy.queryTaggedValue(MODES_KEY)
+        )
+        expected_omitted = [
+            (IForm, u'dummy1', 'true'),
+            (IForm, u'dummy2', 'true'),
+            (IEditForm, u'dummy2', 'false')
+        ]
+        self.assertEqual(
+            expected_omitted,
+            IDummy.queryTaggedValue(OMITTED_KEY)
+        )
 
     def test_read_parameterized_widget(self):
         from plone.autoform.widgets import ParameterizedWidget
@@ -121,8 +186,10 @@ def test_read_parameterized_widget(self):
         param_node = etree.Element('klass')
         param_node.text = 'custom'
         widget_node = etree.Element(ns('widget', self.namespace))
-        widget_node.set('type',
-            'plone.autoform.tests.test_supermodel_handler.DummyWidget')
+        widget_node.set(
+            'type',
+            'plone.autoform.tests.test_supermodel_handler.DummyWidget'
+        )
         widget_node.append(param_node)
         field_node = etree.Element('field')
         field_node.append(widget_node)
@@ -177,7 +244,10 @@ class IDummy(Interface):
         self.assertEqual("SomeWidget", widget_node.get('type'))
         self.assertEqual("true", field_node.get(ns("omitted", self.namespace)))
         self.assertEqual("hidden", field_node.get(ns("mode", self.namespace)))
-        self.assertEqual("somefield", field_node.get(ns("before", self.namespace)))
+        self.assertEqual(
+            "somefield",
+            field_node.get(ns("before", self.namespace))
+        )
 
     def test_write_partial(self):
         field_node = etree.Element('field')
@@ -187,7 +257,10 @@ class IDummy(Interface):
 
         IDummy.setTaggedValue(WIDGETS_KEY, {'dummy': 'SomeWidget'})
         IDummy.setTaggedValue(OMITTED_KEY, [(Interface, 'dummy2', 'true')])
-        IDummy.setTaggedValue(MODES_KEY, [(Interface, 'dummy', 'display'), (Interface, 'dummy2', 'hidden')])
+        IDummy.setTaggedValue(
+            MODES_KEY,
+            [(Interface, 'dummy', 'display'), (Interface, 'dummy2', 'hidden')]
+        )
         IDummy.setTaggedValue(ORDER_KEY, [])
 
         handler = FormSchema()
@@ -221,22 +294,42 @@ class IDummy(Interface):
             dummy1 = zope.schema.TextLine(title=u"dummy1")
             dummy2 = zope.schema.TextLine(title=u"dummy2")
 
-        modes_values = [(IForm, u'dummy1', 'hidden'), (IForm, u'dummy2', 'hidden'), (IEditForm, u'dummy2', 'display')]
+        modes_values = [
+            (IForm, u'dummy1', 'hidden'),
+            (IForm, u'dummy2', 'hidden'),
+            (IEditForm, u'dummy2', 'display')
+        ]
         IDummy.setTaggedValue(MODES_KEY, modes_values)
-        omitted_values = [(IForm, u'dummy1', 'true'), (IForm, u'dummy2', 'true'), (IEditForm, u'dummy2', 'false')]
+        omitted_values = [
+            (IForm, u'dummy1', 'true'),
+            (IForm, u'dummy2', 'true'),
+            (IEditForm, u'dummy2', 'false')
+        ]
         IDummy.setTaggedValue(OMITTED_KEY, omitted_values)
 
         handler = FormSchema()
         handler.write(field_node1, IDummy, IDummy['dummy1'])
         handler.write(field_node2, IDummy, IDummy['dummy2'])
 
-        self.assertEqual("z3c.form.interfaces.IForm:hidden", field_node1.get(ns("mode", self.namespace)))
-        self.assertEqual("z3c.form.interfaces.IForm:true", field_node1.get(ns("omitted", self.namespace)))
-
-        self.assertEqual("z3c.form.interfaces.IForm:hidden z3c.form.interfaces.IEditForm:display",
-                          field_node2.get(ns("mode", self.namespace)))
-        self.assertEqual("z3c.form.interfaces.IForm:true z3c.form.interfaces.IEditForm:false",
-                          field_node2.get(ns("omitted", self.namespace)))
+        self.assertEqual(
+            "z3c.form.interfaces.IForm:hidden",
+            field_node1.get(ns("mode", self.namespace))
+        )
+        self.assertEqual(
+            "z3c.form.interfaces.IForm:true",
+            field_node1.get(ns("omitted", self.namespace))
+        )
+
+        self.assertEqual(
+            "z3c.form.interfaces.IForm:hidden "
+            "z3c.form.interfaces.IEditForm:display",
+            field_node2.get(ns("mode", self.namespace))
+        )
+        self.assertEqual(
+            "z3c.form.interfaces.IForm:true "
+            "z3c.form.interfaces.IEditForm:false",
+            field_node2.get(ns("omitted", self.namespace))
+        )
 
     def test_write_parameterized_widget_string(self):
         from plone.autoform.widgets import ParameterizedWidget
@@ -250,9 +343,12 @@ class IDummy(Interface):
         handler = FormSchema()
         handler.write(fieldNode, IDummy, IDummy['dummy1'])
 
-        self.assertEqual(etree.tostring(fieldNode),
-            '<field><ns0:widget xmlns:ns0="http://namespaces.plone.org/supermodel/form"'
-            ' type="foo"/></field>')
+        self.assertEqual(
+            etree.tostring(fieldNode),
+            '<field><ns0:widget'
+            ' xmlns:ns0="http://namespaces.plone.org/supermodel/form"'
+            ' type="foo"/></field>'
+        )
 
     def test_write_parameterized_widget_default(self):
         from plone.autoform.widgets import ParameterizedWidget
@@ -266,8 +362,10 @@ class IDummy(Interface):
         handler = FormSchema()
         handler.write(fieldNode, IDummy, IDummy['dummy1'])
 
-        self.assertEqual(etree.tostring(fieldNode),
-            '<field/>')
+        self.assertEqual(
+            etree.tostring(fieldNode),
+            '<field/>'
+        )
 
     def test_write_parameterized_widget_with_handler(self):
         from plone.autoform.widgets import ParameterizedWidget
@@ -281,9 +379,12 @@ class IDummy(Interface):
         handler = FormSchema()
         handler.write(fieldNode, IDummy, IDummy['dummy1'])
 
-        self.assertEqual(etree.tostring(fieldNode),
-            '<field><ns0:widget xmlns:ns0="http://namespaces.plone.org/supermodel/form"'
-            ' type="plone.autoform.tests.test_supermodel_handler.DummyWidget">'
+        self.assertEqual(
+            etree.tostring(fieldNode),
+            '<field><ns0:widget'
+            ' xmlns:ns0="http://namespaces.plone.org/supermodel/form"'
+            ' type="plone.autoform.tests.test_supermodel_handler.'
+            'DummyWidget">'
             '<klass>custom</klass>'
             '</ns0:widget></field>')
 
@@ -299,8 +400,10 @@ class IDummy(Interface):
         handler = FormSchema()
         handler.write(fieldNode, IDummy, IDummy['dummy1'])
 
-        self.assertEqual(etree.tostring(fieldNode),
-            '<field><ns0:widget xmlns:ns0="http://namespaces.plone.org/supermodel/form">'
+        self.assertEqual(
+            etree.tostring(fieldNode),
+            '<field><ns0:widget'
+            ' xmlns:ns0="http://namespaces.plone.org/supermodel/form">'
             '<klass>custom</klass></ns0:widget></field>')
 
 
@@ -319,8 +422,14 @@ class IDummy(Interface):
         handler = SecuritySchema()
         handler.read(field_node, IDummy, IDummy['dummy'])
 
-        self.assertEqual({u'dummy': 'dummy.Read'}, IDummy.getTaggedValue(READ_PERMISSIONS_KEY))
-        self.assertEqual({u'dummy': 'dummy.Write'}, IDummy.getTaggedValue(WRITE_PERMISSIONS_KEY))
+        self.assertEqual(
+            {u'dummy': 'dummy.Read'},
+            IDummy.getTaggedValue(READ_PERMISSIONS_KEY)
+        )
+        self.assertEqual(
+            {u'dummy': 'dummy.Write'},
+            IDummy.getTaggedValue(WRITE_PERMISSIONS_KEY)
+        )
 
     def test_read_no_permissions(self):
         field_node = etree.Element('field')
@@ -346,8 +455,14 @@ class IDummy(Interface):
         handler = SecuritySchema()
         handler.write(field_node, IDummy, IDummy['dummy'])
 
-        self.assertEqual("dummy.Read", field_node.get(ns("read-permission", self.namespace)))
-        self.assertEqual("dummy.Write", field_node.get(ns("write-permission", self.namespace)))
+        self.assertEqual(
+            "dummy.Read",
+            field_node.get(ns("read-permission", self.namespace))
+        )
+        self.assertEqual(
+            "dummy.Write",
+            field_node.get(ns("write-permission", self.namespace))
+        )
 
     def test_write_no_permissions(self):
         field_node = etree.Element('field')
@@ -360,8 +475,14 @@ class IDummy(Interface):
         handler = SecuritySchema()
         handler.write(field_node, IDummy, IDummy['dummy'])
 
-        self.assertEqual(None, field_node.get(ns("read-permission", self.namespace)))
-        self.assertEqual(None, field_node.get(ns("write-permission", self.namespace)))
+        self.assertEqual(
+            None,
+            field_node.get(ns("read-permission", self.namespace))
+        )
+        self.assertEqual(
+            None,
+            field_node.get(ns("write-permission", self.namespace))
+        )
 
     def test_write_no_metadata(self):
         field_node = etree.Element('field')
@@ -372,8 +493,14 @@ class IDummy(Interface):
         handler = SecuritySchema()
         handler.write(field_node, IDummy, IDummy['dummy'])
 
-        self.assertEqual(None, field_node.get(ns("read-permission", self.namespace)))
-        self.assertEqual(None, field_node.get(ns("write-permission", self.namespace)))
+        self.assertEqual(
+            None,
+            field_node.get(ns("read-permission", self.namespace))
+        )
+        self.assertEqual(
+            None,
+            field_node.get(ns("write-permission", self.namespace))
+        )
 
 
 def test_suite():
diff --git a/plone/autoform/tests/test_utils.py b/plone/autoform/tests/test_utils.py
index 10f65c1..5df933b 100644
--- a/plone/autoform/tests/test_utils.py
+++ b/plone/autoform/tests/test_utils.py
@@ -1,16 +1,17 @@
-import unittest
+# -*- coding: utf-8 -*-
 from AccessControl.SecurityManagement import noSecurityManager
 from AccessControl.SecurityManagement import setSecurityManager
-from zope.component import provideUtility
-from zope.interface import Interface, Invalid
-from z3c.form.form import Form
-from z3c.form.validator import SimpleFieldValidator
-import zope.schema
 from plone.autoform.interfaces import WRITE_PERMISSIONS_KEY
+from plone.autoform.utils import processFields
 from plone.supermodel.interfaces import FIELDSETS_KEY
 from plone.supermodel.model import Fieldset
-from plone.autoform.utils import processFields
 from plone.testing.zca import UNIT_TESTING
+from z3c.form.form import Form
+from z3c.form.validator import SimpleFieldValidator
+from zope.component import provideUtility
+from zope.interface import Interface, Invalid
+import unittest
+import zope.schema
 
 
 class TestValidator(SimpleFieldValidator):
diff --git a/plone/autoform/tests/test_widgets.py b/plone/autoform/tests/test_widgets.py
index 9cf0580..dbf840d 100644
--- a/plone/autoform/tests/test_widgets.py
+++ b/plone/autoform/tests/test_widgets.py
@@ -1,5 +1,6 @@
-import unittest2 as unittest
+# -*- coding: utf-8 -*-
 from plone.testing.zca import UNIT_TESTING
+import unittest2 as unittest
 
 
 class TestParameterizedWidget(unittest.TestCase):
@@ -7,11 +8,11 @@ class TestParameterizedWidget(unittest.TestCase):
     layer = UNIT_TESTING
 
     def test_widget_instantiated_with_parameters(self):
-        from zope.interface import implementer
-        from zope.schema import Field
+        from plone.autoform.widgets import ParameterizedWidget
         from z3c.form.interfaces import IFieldWidget
         from z3c.form.interfaces import IWidget
-        from plone.autoform.widgets import ParameterizedWidget
+        from zope.interface import implementer
+        from zope.schema import Field
 
         @implementer(IWidget)
         class DummyWidget(object):
@@ -30,12 +31,12 @@ def DummyFieldWidget(field, request):
         self.assertEqual('bar', widget.foo)
 
     def test_default_widget_instantiated(self):
+        from plone.autoform.widgets import ParameterizedWidget
+        from z3c.form.interfaces import IFieldWidget
         from zope.component import provideAdapter
         from zope.interface import Interface
         from zope.interface import implementer
         from zope.schema import Field
-        from z3c.form.interfaces import IFieldWidget
-        from plone.autoform.widgets import ParameterizedWidget
 
         class DummyWidget(object):
             def __init__(self, request):
diff --git a/plone/autoform/utils.py b/plone/autoform/utils.py
index 0bd6f0a..0d4aaf2 100644
--- a/plone/autoform/utils.py
+++ b/plone/autoform/utils.py
@@ -1,28 +1,26 @@
-from zope.component import queryUtility
-from zope.interface import providedBy
-
-from zope.security.interfaces import IPermission
-
-from zope.dottedname.resolve import resolve
-
-from z3c.form import field
-from z3c.form.util import expandPrefix
-from z3c.form.interfaces import IFieldWidget, INPUT_MODE, DISPLAY_MODE
-
+# -*- coding: utf-8 -*-
+from AccessControl import getSecurityManager
+from plone.autoform.interfaces import IParameterizedWidget
+from plone.autoform.interfaces import MODES_KEY
+from plone.autoform.interfaces import OMITTED_KEY
+from plone.autoform.interfaces import ORDER_KEY
+from plone.autoform.interfaces import READ_PERMISSIONS_KEY
+from plone.autoform.interfaces import WIDGETS_KEY
+from plone.autoform.interfaces import WRITE_PERMISSIONS_KEY
+from plone.supermodel.interfaces import FIELDSETS_KEY
 from plone.supermodel.utils import mergedTaggedValueDict
 from plone.supermodel.utils import mergedTaggedValueList
-
 from plone.z3cform.fieldsets.group import GroupFactory
-
 from plone.z3cform.fieldsets.utils import move
-
-from plone.supermodel.interfaces import FIELDSETS_KEY
-
-from plone.autoform.interfaces import OMITTED_KEY, WIDGETS_KEY, MODES_KEY, ORDER_KEY
-from plone.autoform.interfaces import READ_PERMISSIONS_KEY, WRITE_PERMISSIONS_KEY
-from plone.autoform.interfaces import IParameterizedWidget
-
-from AccessControl import getSecurityManager
+from z3c.form import field
+from z3c.form.interfaces import DISPLAY_MODE
+from z3c.form.interfaces import IFieldWidget
+from z3c.form.interfaces import INPUT_MODE
+from z3c.form.util import expandPrefix
+from zope.component import queryUtility
+from zope.dottedname.resolve import resolve
+from zope.interface import providedBy
+from zope.security.interfaces import IPermission
 
 _dottedCache = {}
 
@@ -97,7 +95,9 @@ def _processWidgets(form, widgets, modes, newFields):
         baseName = _bn(fieldInstance)
 
         widgetName = widgets.get(baseName, None)
-        widgetMode = modes.get(baseName, fieldInstance.mode) or form.mode or INPUT_MODE
+        widgetMode = modes.get(baseName, fieldInstance.mode) \
+            or form.mode \
+            or INPUT_MODE
 
         widgetFactory = None
         if widgetName is not None:
@@ -115,7 +115,8 @@ def _processWidgets(form, widgets, modes, newFields):
             newFields[fieldName].mode = widgetMode
 
 
-def processFields(form, schema, prefix='', defaultGroup=None, permissionChecks=True):
+def processFields(form, schema, prefix='', defaultGroup=None,
+                  permissionChecks=True):
     """Add the fields from the schema to the form, taking into account
     the hints in the various tagged values as well as fieldsets. If prefix
     is given, the fields will be prefixed with this prefix. If
@@ -127,23 +128,38 @@ def processFields(form, schema, prefix='', defaultGroup=None, permissionChecks=T
 
     # Get data from tagged values, flattening data from super-interfaces
 
-    # Note: The names always refer to a field in the schema, and never contain a prefix.
+    # Note: The names always refer to a field in the schema, and never
+    # contain a prefix.
+
+    # { name => True }
+    omitted = mergedTaggedValuesForForm(schema, OMITTED_KEY, form)
 
-    omitted = mergedTaggedValuesForForm(schema, OMITTED_KEY, form)   # { name => True }
-    modes = mergedTaggedValuesForForm(schema, MODES_KEY, form)       # { name => e.g. 'hidden' }
-    widgets = mergedTaggedValueDict(schema, WIDGETS_KEY)             # { name => widget/dotted name }
+    # { name => e.g. 'hidden' }
+    modes = mergedTaggedValuesForForm(schema, MODES_KEY, form)
 
-    fieldsets = mergedTaggedValueList(schema, FIELDSETS_KEY)         # list of IFieldset instances
+    # { name => widget/dotted name }
+    widgets = mergedTaggedValueDict(schema, WIDGETS_KEY)
 
-    # Get either read or write permissions depending on what type of form this is
+    # list of IFieldset instances
+    fieldsets = mergedTaggedValueList(schema, FIELDSETS_KEY)
 
+    # Get either read or write permissions depending on what type of
+    # form this is
     readPermissions = {}  # field name -> permission name
     writePermissions = {}  # field name -> permission name
     permissionCache = {}  # permission name -> allowed/disallowed
 
     if permissionChecks:
-        readPermissions = mergedTaggedValueDict(schema, READ_PERMISSIONS_KEY)  # name => permission name
-        writePermissions = mergedTaggedValueDict(schema, WRITE_PERMISSIONS_KEY)  # name => permission name
+        # name => permission name
+        readPermissions = mergedTaggedValueDict(
+            schema,
+            READ_PERMISSIONS_KEY
+        )
+        # name => permission name
+        writePermissions = mergedTaggedValueDict(
+            schema,
+            WRITE_PERMISSIONS_KEY
+        )
         securityManager = getSecurityManager()
 
     # Find the fields we should not worry about
@@ -163,7 +179,11 @@ def processFields(form, schema, prefix='', defaultGroup=None, permissionChecks=T
 
     # Find all allowed fields so that we have something to select from
     omitReadOnly = form.mode != DISPLAY_MODE
-    allFields = field.Fields(schema, prefix=prefix, omitReadOnly=omitReadOnly).omit(*doNotProcess)
+    allFields = field.Fields(
+        schema,
+        prefix=prefix,
+        omitReadOnly=omitReadOnly
+    ).omit(*doNotProcess)
 
     # Check permissions
     if permissionChecks:
@@ -185,7 +205,12 @@ def processFields(form, schema, prefix='', defaultGroup=None, permissionChecks=T
                     if permission is None:
                         permissionCache[permissionName] = True
                     else:
-                        permissionCache[permissionName] = bool(securityManager.checkPermission(permission.title, form.context))
+                        permissionCache[permissionName] = bool(
+                            securityManager.checkPermission(
+                                permission.title,
+                                form.context
+                            )
+                        )
                 if not permissionCache.get(permissionName, True):
                     disallowedFields.append(fieldName)
 
@@ -214,8 +239,8 @@ def processFields(form, schema, prefix='', defaultGroup=None, permissionChecks=T
     for fieldset in fieldsets:
 
         newFields = allFields.select(*[_fn(prefix, fieldName)
-                                            for fieldName in fieldset.fields
-                                                if _fn(prefix, fieldName) in allFields])
+                                       for fieldName in fieldset.fields
+                                       if _fn(prefix, fieldName) in allFields])
 
         if getattr(form, 'showEmptyGroups', False) or (len(newFields) > 0):
             _processWidgets(form, widgets, modes, newFields)
@@ -237,7 +262,8 @@ def processFieldMoves(form, schema, prefix=''):
     processFields().
     """
 
-    order = mergedTaggedValueList(schema, ORDER_KEY)      # (name, 'before'/'after', other name)
+    # (name, 'before'/'after', other name)
+    order = mergedTaggedValueList(schema, ORDER_KEY)
 
     for fieldName, direction, relative_to in order:
 
diff --git a/plone/autoform/view.py b/plone/autoform/view.py
index 04111ed..7e7a024 100644
--- a/plone/autoform/view.py
+++ b/plone/autoform/view.py
@@ -1,29 +1,27 @@
-from zope.interface import implements
-
+# -*- coding: utf-8 -*-
+from plone.autoform.base import AutoFields
+from plone.autoform.interfaces import IWidgetsView
+from plone.z3cform import z2
 from z3c.form.form import DisplayForm
 from z3c.form.interfaces import IFormLayer
+from zope.interface import implementer
 
 try:
     from Products.Five.bbb import AcquisitionBBB as Explicit
 except ImportError:
     from Acquisition import Explicit
 
-from plone.z3cform import z2
-
-from plone.autoform.interfaces import IWidgetsView
-from plone.autoform.base import AutoFields
-
 
+ at implementer(IWidgetsView)
 class WidgetsView(AutoFields, DisplayForm, Explicit):
     """Mix-in to allow widgets (in view mode) to be accesed from browser
     views.
     """
 
-    implements(IWidgetsView)
-
     # You should set one or more of these, or the 'fields' variable
 
     schema = None
+
     additionalSchemata = ()
 
     request_layer = IFormLayer
diff --git a/plone/autoform/widgets.py b/plone/autoform/widgets.py
index 505bbe2..d5b4190 100644
--- a/plone/autoform/widgets.py
+++ b/plone/autoform/widgets.py
@@ -1,21 +1,22 @@
-from z3c.form.widget import FieldWidget
-from z3c.form.interfaces import IWidget
+# -*- coding: utf-8 -*-
+from plone.autoform.interfaces import IParameterizedWidget
+from plone.autoform.interfaces import IWidgetExportImportHandler
+from plone.autoform.utils import resolveDottedName
+from plone.supermodel.utils import elementToValue
+from plone.supermodel.utils import noNS
+from plone.supermodel.utils import valueToElement
+from z3c.form.browser.interfaces import IHTMLFormElement
 from z3c.form.interfaces import IFieldWidget
 from z3c.form.interfaces import IFormLayer
-from z3c.form.browser.interfaces import IHTMLFormElement
-import z3c.form.browser.interfaces
-from zope.component import getSiteManager
+from z3c.form.interfaces import IWidget
+from z3c.form.widget import FieldWidget
 from zope.component import getMultiAdapter
+from zope.component import getSiteManager
 from zope.component import queryUtility
 from zope.interface import implementer
 from zope.interface import providedBy
 from zope.schema import getFields
-from plone.autoform.interfaces import IParameterizedWidget
-from plone.autoform.interfaces import IWidgetExportImportHandler
-from plone.autoform.utils import resolveDottedName
-from plone.supermodel.utils import valueToElement
-from plone.supermodel.utils import elementToValue
-from plone.supermodel.utils import noNS
+import z3c.form.browser.interfaces
 
 
 @implementer(IParameterizedWidget)
@@ -113,7 +114,10 @@ def read(self, widgetNode, params):
         for attributeName, attributeField in self.fieldAttributes.items():
             for node in widgetNode.iterchildren():
                 if noNS(node.tag) == attributeName:
-                    params[attributeName] = elementToValue(attributeField, node)
+                    params[attributeName] = elementToValue(
+                        attributeField,
+                        node
+                    )
 
     def write(self, widgetNode, params):
         for attributeName, attributeField in self.fieldAttributes.items():
@@ -124,4 +128,6 @@ def write(self, widgetNode, params):
                 widgetNode.append(child)
 
 
-TextAreaWidgetExportImportHandler = WidgetExportImportHandler(z3c.form.browser.interfaces.IHTMLTextAreaWidget)
+TextAreaWidgetExportImportHandler = WidgetExportImportHandler(
+    z3c.form.browser.interfaces.IHTMLTextAreaWidget
+)
diff --git a/setup.py b/setup.py
index c321214..f7449c6 100644
--- a/setup.py
+++ b/setup.py
@@ -1,5 +1,7 @@
+# -*- coding: utf-8 -*-
+from setuptools import find_packages
+from setuptools import setup
 import os
-from setuptools import setup, find_packages
 
 
 def read(*rnames):
@@ -20,7 +22,8 @@ def read(*rnames):
     version=version,
     description="Tools to construct z3c.form forms",
     long_description=long_description,
-    # Get more strings from http://www.python.org/pypi?%3Aaction=list_classifiers
+    # Get more strings from http://www.python.org/pypi?%3Aaction=list_
+    # classifiers
     classifiers=[
         "Framework :: Plone",
         "Programming Language :: Python",




-------------------------------------------------------------------------------
-------------- next part --------------
A non-text attachment was scrubbed...
Name: CHANGES.log
Type: application/octet-stream
Size: 143597 bytes
Desc: not available
URL: <http://lists.plone.org/pipermail/plone-testbot/attachments/20141002/9e2262df/attachment-0002.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: build.log
Type: application/octet-stream
Size: 289229 bytes
Desc: not available
URL: <http://lists.plone.org/pipermail/plone-testbot/attachments/20141002/9e2262df/attachment-0003.obj>


More information about the Testbot mailing list