[Testbot] Plone 4.3 - Python 2.7 - Build # 2612 - Still failing! - 103 failure(s)

jenkins at plone.org jenkins at plone.org
Mon Oct 13 16:43:27 UTC 2014


-------------------------------------------------------------------------------
Plone 4.3 - Python 2.7 - Build # 2612 - Still Failing!
-------------------------------------------------------------------------------

http://jenkins.plone.org/job/plone-4.3-python-2.7/2612/


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

Repository: plone.app.contenttypes
Branch: refs/heads/master
Date: 2014-10-12T01:52:53+02:00
Author: Jens W. Klein (jensens) <jk at kleinundpartner.at>
Commit: https://github.com/plone/plone.app.contenttypes/commit/7e7999e7aa43f45bb5bbdce7794b124e29ffbe82

code modernization: sorted imports, use decorators, utf8 headers.

Files changed:
M docs/CHANGES.rst
M plone/app/contenttypes/behaviors/__init__.py
M plone/app/contenttypes/behaviors/collection.py
M plone/app/contenttypes/behaviors/leadimage.py
M plone/app/contenttypes/behaviors/richtext.py
M plone/app/contenttypes/behaviors/tableofcontents.py
M plone/app/contenttypes/behaviors/viewlets.py
M plone/app/contenttypes/browser/__init__.py
M plone/app/contenttypes/browser/collection.py
M plone/app/contenttypes/browser/link_redirect_view.py
M plone/app/contenttypes/browser/utils.py
M plone/app/contenttypes/browser/viewlets.py
M plone/app/contenttypes/content.py
M plone/app/contenttypes/indexers.py
M plone/app/contenttypes/interfaces.py
M plone/app/contenttypes/migration/browser.py
M plone/app/contenttypes/migration/dxmigration.py
M plone/app/contenttypes/migration/migration.py
M plone/app/contenttypes/migration/utils.py
M plone/app/contenttypes/migration/vocabularies.py
M plone/app/contenttypes/permissions.py
M plone/app/contenttypes/schema/__init__.py
M plone/app/contenttypes/testing.py

diff --git a/docs/CHANGES.rst b/docs/CHANGES.rst
index 392f049..02fcd19 100644
--- a/docs/CHANGES.rst
+++ b/docs/CHANGES.rst
@@ -4,6 +4,9 @@ Changelog
 1.2a5 (unreleased)
 ------------------
 
+- Code modernization: sorted imports, use decorators, utf8 headers.
+  [jensens]
+
 - Fix: Added missing types to CMFDiffTool configuraion.
   [jensens]
 
diff --git a/plone/app/contenttypes/behaviors/__init__.py b/plone/app/contenttypes/behaviors/__init__.py
index e69de29..40a96af 100644
--- a/plone/app/contenttypes/behaviors/__init__.py
+++ b/plone/app/contenttypes/behaviors/__init__.py
@@ -0,0 +1 @@
+# -*- coding: utf-8 -*-
diff --git a/plone/app/contenttypes/behaviors/collection.py b/plone/app/contenttypes/behaviors/collection.py
index 59f9edb..81dc156 100644
--- a/plone/app/contenttypes/behaviors/collection.py
+++ b/plone/app/contenttypes/behaviors/collection.py
@@ -5,21 +5,24 @@
 from Products.CMFPlone.interfaces.syndication import IFeed
 from Products.CMFPlone.interfaces.syndication import ISyndicatable
 from plone.app.contentlisting.interfaces import IContentListing
+from plone.app.contenttypes import _
 from plone.autoform.interfaces import IFormFieldProvider
 from plone.dexterity.interfaces import IDexterityContent
 from plone.supermodel import model
 from zope import schema
-from zope.component import adapts, getMultiAdapter, getUtility
-from zope.interface import alsoProvides, implements
+from zope.component import adapter
+from zope.component import getMultiAdapter
+from zope.component import getUtility
+from zope.interface import provider
+from zope.interface import implementer
 from zope.schema.interfaces import IVocabularyFactory
-from zope.schema.vocabulary import SimpleTerm, SimpleVocabulary
-from plone.app.contenttypes import _
+from zope.schema.vocabulary import SimpleTerm
+from zope.schema.vocabulary import SimpleVocabulary
 
 
+ at implementer(IVocabularyFactory)
 class MetaDataFieldsVocabulary(object):
 
-    implements(IVocabularyFactory)
-
     def __call__(self, context):
         cat = getToolByName(context, 'portal_catalog')
         items = [
@@ -31,6 +34,7 @@ def __call__(self, context):
 MetaDataFieldsVocabularyFactory = MetaDataFieldsVocabulary()
 
 
+ at provider(IFormFieldProvider, ISyndicatable)
 class ICollection(model.Schema):
 
     query = schema.List(
@@ -81,18 +85,14 @@ class ICollection(model.Schema):
         )
 
 
-alsoProvides(ICollection, IFormFieldProvider)
-alsoProvides(ICollection, ISyndicatable)
-
-
 class ISyndicatableCollection(ISyndicatable):
     """Marker interface for syndicatable collections.
     """
 
 
+ at implementer(ICollection)
+ at adapter(IDexterityContent)
 class Collection(object):
-    implements(ICollection)
-    adapts(IDexterityContent)
 
     def __init__(self, context):
         self.context = context
@@ -237,8 +237,8 @@ def _get_customViewFields(self):
     customViewFields = property(_get_customViewFields, _set_customViewFields)
 
 
+ at implementer(IFeed)
 class CollectionFeed(BaseCollectionFeed):
-    implements(IFeed)
 
     def _brains(self):
         return ICollection(self.context).results(batch=False)[:self.limit]
diff --git a/plone/app/contenttypes/behaviors/leadimage.py b/plone/app/contenttypes/behaviors/leadimage.py
index 4360107..fbe6388 100644
--- a/plone/app/contenttypes/behaviors/leadimage.py
+++ b/plone/app/contenttypes/behaviors/leadimage.py
@@ -1,16 +1,16 @@
 # -*- coding: utf-8 -*-
-from zope.interface import alsoProvides, implements
-from zope.component import adapts
-from zope import schema
-from plone.supermodel import model
-from plone.dexterity.interfaces import IDexterityContent
+from plone.app.contenttypes import _
 from plone.autoform.interfaces import IFormFieldProvider
-
+from plone.dexterity.interfaces import IDexterityContent
 from plone.namedfile import field as namedfile
-
-from plone.app.contenttypes import _
+from plone.supermodel import model
+from zope import schema
+from zope.component import adapter
+from zope.interface import implementer
+from zope.interface import provider
 
 
+ at provider(IFormFieldProvider)
 class ILeadImage(model.Schema):
 
     image = namedfile.NamedBlobImage(
@@ -25,12 +25,10 @@ class ILeadImage(model.Schema):
         required=False,
     )
 
-alsoProvides(ILeadImage, IFormFieldProvider)
-
 
+ at implementer(ILeadImage)
+ at adapter(IDexterityContent)
 class LeadImage(object):
-    implements(ILeadImage)
-    adapts(IDexterityContent)
 
     def __init__(self, context):
         self.context = context
diff --git a/plone/app/contenttypes/behaviors/richtext.py b/plone/app/contenttypes/behaviors/richtext.py
index e763e09..a3b20ba 100644
--- a/plone/app/contenttypes/behaviors/richtext.py
+++ b/plone/app/contenttypes/behaviors/richtext.py
@@ -1,16 +1,16 @@
 # -*- coding: utf-8 -*-
+from plone.app.contenttypes import _
+from plone.app.textfield import RichText as RichTextField
 from plone.autoform.interfaces import IFormFieldProvider
-
 from plone.autoform.view import WidgetsView
 from plone.dexterity.interfaces import IDexterityContent
-from plone.app.textfield import RichText as RichTextField
 from plone.supermodel import model
-from zope.component import adapts
-from zope.interface import alsoProvides, implements
-
-from plone.app.contenttypes import _
+from zope.component import adapter
+from zope.interface import implementer
+from zope.interface import provider
 
 
+ at provider(IFormFieldProvider)
 class IRichText(model.Schema):
 
     text = RichTextField(
@@ -21,12 +21,9 @@ class IRichText(model.Schema):
     model.primary('text')
 
 
-alsoProvides(IRichText, IFormFieldProvider)
-
-
+ at implementer(IRichText)
+ at adapter(IDexterityContent)
 class RichText(object):
-    implements(IRichText)
-    adapts(IDexterityContent)
 
     def __init__(self, context):
         self.context = context
diff --git a/plone/app/contenttypes/behaviors/tableofcontents.py b/plone/app/contenttypes/behaviors/tableofcontents.py
index 2184131..3bcf4d8 100644
--- a/plone/app/contenttypes/behaviors/tableofcontents.py
+++ b/plone/app/contenttypes/behaviors/tableofcontents.py
@@ -2,12 +2,13 @@
 from plone.autoform.interfaces import IFormFieldProvider
 from plone.supermodel import model
 from zope import schema
-from zope.interface import alsoProvides
 from zope.i18nmessageid import MessageFactory
+from zope.interface import provider
 
 _ = MessageFactory('atcontenttypes')
 
 
+ at provider(IFormFieldProvider)
 class ITableOfContents(model.Schema):
 
     model.fieldset('settings', label=_(u"Settings"),
@@ -23,5 +24,3 @@ class ITableOfContents(model.Schema):
                     u' at the top of the page.'),
         required=False,
     )
-
-alsoProvides(ITableOfContents, IFormFieldProvider)
diff --git a/plone/app/contenttypes/behaviors/viewlets.py b/plone/app/contenttypes/behaviors/viewlets.py
index da7ca68..bfa37ae 100644
--- a/plone/app/contenttypes/behaviors/viewlets.py
+++ b/plone/app/contenttypes/behaviors/viewlets.py
@@ -1,8 +1,7 @@
 # -*- coding: utf-8 -*-
-from plone.app.layout.viewlets import ViewletBase
-
-from plone.app.contenttypes.interfaces import INewsItem
 from plone.app.contenttypes.behaviors.leadimage import ILeadImage
+from plone.app.contenttypes.interfaces import INewsItem
+from plone.app.layout.viewlets import ViewletBase
 
 
 class LeadImageViewlet(ViewletBase):
diff --git a/plone/app/contenttypes/browser/__init__.py b/plone/app/contenttypes/browser/__init__.py
index e69de29..40a96af 100644
--- a/plone/app/contenttypes/browser/__init__.py
+++ b/plone/app/contenttypes/browser/__init__.py
@@ -0,0 +1 @@
+# -*- coding: utf-8 -*-
diff --git a/plone/app/contenttypes/browser/collection.py b/plone/app/contenttypes/browser/collection.py
index 6551f54..ddb2f6f 100644
--- a/plone/app/contenttypes/browser/collection.py
+++ b/plone/app/contenttypes/browser/collection.py
@@ -1,7 +1,6 @@
 # -*- coding: utf-8 -*-
 from Acquisition import aq_inner
 from Products.Five import BrowserView
-
 from plone.app.contenttypes.behaviors.collection import ICollection
 
 
diff --git a/plone/app/contenttypes/browser/link_redirect_view.py b/plone/app/contenttypes/browser/link_redirect_view.py
index 2ed037a..4e4a45d 100644
--- a/plone/app/contenttypes/browser/link_redirect_view.py
+++ b/plone/app/contenttypes/browser/link_redirect_view.py
@@ -1,10 +1,8 @@
 # -*- coding: utf-8 -*-
+from Products.CMFCore.utils import getToolByName
 from Products.Five.browser import BrowserView
 from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
-
-from Products.CMFCore.utils import getToolByName
-
-from ..utils import replace_link_variables_by_paths
+from plone.app.contenttypes.utils import replace_link_variables_by_paths
 
 
 class LinkRedirectView(BrowserView):
diff --git a/plone/app/contenttypes/browser/utils.py b/plone/app/contenttypes/browser/utils.py
index e540950..b816539 100644
--- a/plone/app/contenttypes/browser/utils.py
+++ b/plone/app/contenttypes/browser/utils.py
@@ -6,7 +6,7 @@
 from plone.memoize.view import memoize
 from zope.component import getMultiAdapter
 from zope.interface import Interface
-from zope.interface import implements
+from zope.interface import implementer
 
 
 class IUtils(Interface):
@@ -19,8 +19,8 @@ def getMimeTypeIcon(content_file):
         """
 
 
+ at implementer(IUtils)
 class Utils(BrowserView):
-    implements(IUtils)
 
     @memoize
     def getMimeTypeIcon(self, content_file):
diff --git a/plone/app/contenttypes/browser/viewlets.py b/plone/app/contenttypes/browser/viewlets.py
index 2b58ba3..5344410 100644
--- a/plone/app/contenttypes/browser/viewlets.py
+++ b/plone/app/contenttypes/browser/viewlets.py
@@ -4,7 +4,6 @@
 from Products.CMFCore.permissions import ManagePortal
 from plone.app.layout.viewlets import ViewletBase
 from plone.dexterity.interfaces import IDexterityFTI
-
 import pkg_resources
 
 try:
diff --git a/plone/app/contenttypes/content.py b/plone/app/contenttypes/content.py
index c76985a..5b8d4e5 100644
--- a/plone/app/contenttypes/content.py
+++ b/plone/app/contenttypes/content.py
@@ -1,24 +1,19 @@
 # -*- coding: utf-8 -*-
-from plone.app.contenttypes.interfaces import (
-    ICollection,
-    IDocument,
-    IFile,
-    IFolder,
-    IImage,
-    ILink,
-    INewsItem,
-    IEvent,
-)
-
-from plone.dexterity.content import Item
+from plone.app.contenttypes.interfaces import ICollection
+from plone.app.contenttypes.interfaces import IDocument
+from plone.app.contenttypes.interfaces import IEvent
+from plone.app.contenttypes.interfaces import IFile
+from plone.app.contenttypes.interfaces import IFolder
+from plone.app.contenttypes.interfaces import IImage
+from plone.app.contenttypes.interfaces import ILink
+from plone.app.contenttypes.interfaces import INewsItem
 from plone.dexterity.content import Container
-
-from zope.interface import implements
+from plone.dexterity.content import Item
+from zope.interface import implementer
 
 
+ at implementer(ICollection)
 class Collection(Item):
-    implements(ICollection)
-
     # BBB
 
     def listMetaDataFields(self, exclude=True):
@@ -60,29 +55,43 @@ def results(self, **kwargs):
         return ICollection_behavior(self).results(**kwargs)
 
 
+ at implementer(IDocument)
 class Document(Item):
-    implements(IDocument)
+    """Convinience Item subclass for ``Document`` portal type
+    """
 
 
+ at implementer(IFile)
 class File(Item):
-    implements(IFile)
+    """Convinience subclass for ``File`` portal type
+    """
 
 
+ at implementer(IFolder)
 class Folder(Container):
-    implements(IFolder)
+    """Convinience subclass for ``File`` portal type
+    """
 
 
+ at implementer(IImage)
 class Image(Item):
-    implements(IImage)
+    """Convinience subclass for ``File`` portal type
+    """
 
 
+ at implementer(ILink)
 class Link(Item):
-    implements(ILink)
+    """Convinience subclass for ``File`` portal type
+    """
 
 
+ at implementer(INewsItem)
 class NewsItem(Item):
-    implements(INewsItem)
+    """Convinience subclass for ``File`` portal type
+    """
 
 
+ at implementer(IEvent)
 class Event(Item):
-    implements(IEvent)
+    """Convinience subclass for ``File`` portal type
+    """
diff --git a/plone/app/contenttypes/indexers.py b/plone/app/contenttypes/indexers.py
index 473f261..c5a1b9f 100644
--- a/plone/app/contenttypes/indexers.py
+++ b/plone/app/contenttypes/indexers.py
@@ -1,5 +1,4 @@
 # -*- coding: utf-8 -*-
-from plone.app.contenttypes.utils import replace_link_variables_by_paths
 from Products.CMFCore.utils import getToolByName
 from Products.CMFPlone.utils import safe_unicode
 from ZODB.POSException import ConflictError
@@ -10,6 +9,7 @@
 from plone.app.contenttypes.interfaces import IImage
 from plone.app.contenttypes.interfaces import ILink
 from plone.app.contenttypes.interfaces import INewsItem
+from plone.app.contenttypes.utils import replace_link_variables_by_paths
 from plone.indexer.decorator import indexer
 from plone.rfc822.interfaces import IPrimaryFieldInfo
 
diff --git a/plone/app/contenttypes/interfaces.py b/plone/app/contenttypes/interfaces.py
index 2da0381..3b8a90b 100644
--- a/plone/app/contenttypes/interfaces.py
+++ b/plone/app/contenttypes/interfaces.py
@@ -13,40 +13,40 @@ class IPloneAppContenttypesLayer(Interface):
 
 
 class ICollection(Interface):
-    """
+    """Explixiet marker interface for Collection
     """
 
 
 class IDocument(Interface):
-    """
+    """Explixit marker interface for Document
     """
 
 
 class IFile(Interface):
-    """
+    """Explixit marker interface for File
     """
 
 
 class IFolder(Interface):
-    """
+    """Explixit marker interface for Folder
     """
 
 
 class IImage(Interface):
-    """
+    """Explixit marker interface for Image
     """
 
 
 class ILink(Interface):
-    """
+    """Explixit marker interface for Link
     """
 
 
 class INewsItem(Interface):
-    """
+    """Explixit marker interface for News Item
     """
 
 
 class IEvent(Interface):
-    """
+    """Explixit marker interface for Event
     """
diff --git a/plone/app/contenttypes/migration/browser.py b/plone/app/contenttypes/migration/browser.py
index 2020976..2e82fa9 100644
--- a/plone/app/contenttypes/migration/browser.py
+++ b/plone/app/contenttypes/migration/browser.py
@@ -12,8 +12,8 @@
 from plone.app.contenttypes.migration import migration
 from plone.app.contenttypes.migration.utils import ATCT_LIST
 from plone.app.contenttypes.migration.utils import HAS_MULTILINGUAL
-from plone.app.contenttypes.migration.utils import isSchemaExtended
 from plone.app.contenttypes.migration.utils import installTypeIfNeeded
+from plone.app.contenttypes.migration.utils import isSchemaExtended
 from plone.app.contenttypes.utils import DEFAULT_TYPES
 from plone.browserlayer.interfaces import ILocalBrowserLayerType
 from plone.dexterity.content import DexterityContent
@@ -29,8 +29,8 @@
 from zope.component import getMultiAdapter
 from zope.component import queryUtility
 from zope.interface import Interface
-
 import logging
+
 logger = logging.getLogger(__name__)
 
 # Schema Extender allowed interfaces
diff --git a/plone/app/contenttypes/migration/dxmigration.py b/plone/app/contenttypes/migration/dxmigration.py
index 468333b..b5ce49a 100644
--- a/plone/app/contenttypes/migration/dxmigration.py
+++ b/plone/app/contenttypes/migration/dxmigration.py
@@ -1,11 +1,11 @@
 # -*- coding: utf-8 -*-
-from Products.contentmigration.basemigrator.walker import CatalogWalker
 from Products.contentmigration.basemigrator.migrator import CMFItemMigrator
+from Products.contentmigration.basemigrator.walker import CatalogWalker
 from plone.app.contenttypes.interfaces import IEvent
 from plone.app.contenttypes.migration import datetime_fixer
+from plone.event.utils import default_timezone
 from zope.annotation.interfaces import IAnnotations
 from zope.component.hooks import getSite
-from plone.event.utils import default_timezone
 
 
 def migrate(portal, migrator):
diff --git a/plone/app/contenttypes/migration/migration.py b/plone/app/contenttypes/migration/migration.py
index a64416e..799e1e4 100644
--- a/plone/app/contenttypes/migration/migration.py
+++ b/plone/app/contenttypes/migration/migration.py
@@ -16,9 +16,9 @@
 from Products.contentmigration.basemigrator.walker import CatalogWalker
 from persistent.list import PersistentList
 from plone.app.contenttypes.behaviors.collection import ICollection
+from plone.app.contenttypes.migration import datetime_fixer
 from plone.app.contenttypes.migration.dxmigration import DXEventMigrator
 from plone.app.contenttypes.migration.dxmigration import DXOldEventMigrator
-from plone.app.contenttypes.migration import datetime_fixer
 from plone.app.textfield.value import RichTextValue
 from plone.app.uuid.utils import uuidToObject
 from plone.dexterity.interfaces import IDexterityContent
@@ -32,9 +32,8 @@
 from zope.interface import Interface
 from zope.interface import implementer
 from zope.intid.interfaces import IIntIds
-
-
 import logging
+
 logger = logging.getLogger(__name__)
 
 
diff --git a/plone/app/contenttypes/migration/utils.py b/plone/app/contenttypes/migration/utils.py
index 5d36210..a5c12c0 100644
--- a/plone/app/contenttypes/migration/utils.py
+++ b/plone/app/contenttypes/migration/utils.py
@@ -20,9 +20,8 @@
 from plone.dexterity.interfaces import IDexterityFTI
 from zope.component import getGlobalSiteManager
 from zope.component.hooks import getSite
-
-import pkg_resources
 import os
+import pkg_resources
 
 try:
     pkg_resources.get_distribution('plone.app.collection')
diff --git a/plone/app/contenttypes/migration/vocabularies.py b/plone/app/contenttypes/migration/vocabularies.py
index 9bdaa57..9406106 100644
--- a/plone/app/contenttypes/migration/vocabularies.py
+++ b/plone/app/contenttypes/migration/vocabularies.py
@@ -1,11 +1,11 @@
 # -*- coding: utf-8 -*-
 from Products.CMFCore.utils import getToolByName
+from plone.app.contenttypes import _
 from plone.app.contenttypes.migration.utils import ATCT_LIST
 from plone.app.contenttypes.migration.utils import isSchemaExtended
 from zope.interface import implements
 from zope.schema.interfaces import IVocabularyFactory
 from zope.schema.vocabulary import SimpleVocabulary
-from .. import _
 
 
 def get_terms(context, counter, ext_dict, show_extended):
diff --git a/plone/app/contenttypes/permissions.py b/plone/app/contenttypes/permissions.py
index 7f703aa..9186734 100644
--- a/plone/app/contenttypes/permissions.py
+++ b/plone/app/contenttypes/permissions.py
@@ -2,10 +2,13 @@
 from AccessControl.SecurityInfo import ModuleSecurityInfo
 from Products.CMFCore.permissions import setDefaultRoles
 from plone.app.contenttypes.utils import DEFAULT_TYPES
-# http://developer.plone.org/security/custom_permissions.html
+
 security = ModuleSecurityInfo('plone.app.contenttypes')
+
 TYPE_ROLES = ('Manager', 'Site Administrator', 'Owner', 'Contributor')
+
 perms = []
+
 for typename in DEFAULT_TYPES:
     permid = 'Add' + typename
     permname = 'plone.app.contenttypes: Add ' + typename
diff --git a/plone/app/contenttypes/schema/__init__.py b/plone/app/contenttypes/schema/__init__.py
index e69de29..40a96af 100644
--- a/plone/app/contenttypes/schema/__init__.py
+++ b/plone/app/contenttypes/schema/__init__.py
@@ -0,0 +1 @@
+# -*- coding: utf-8 -*-
diff --git a/plone/app/contenttypes/testing.py b/plone/app/contenttypes/testing.py
index 16aaccb..9e6d8ed 100644
--- a/plone/app/contenttypes/testing.py
+++ b/plone/app/contenttypes/testing.py
@@ -1,21 +1,20 @@
 # -*- coding: utf-8 -*-
 from plone.app.contenttypes.interfaces import IPloneAppContenttypesLayer
-from plone.app.robotframework.testing import REMOTE_LIBRARY_BUNDLE_FIXTURE
+from plone.app.contenttypes.tests.robot.variables import TEST_FOLDER_ID
 from plone.app.event.testing import PAEvent_FIXTURE
-from plone.app.testing import PloneSandboxLayer
-from plone.app.testing import applyProfile
-from plone.app.testing import PLONE_FIXTURE
-from plone.app.testing import IntegrationTesting
+from plone.app.robotframework.testing import REMOTE_LIBRARY_BUNDLE_FIXTURE
 from plone.app.testing import FunctionalTesting
+from plone.app.testing import IntegrationTesting
+from plone.app.testing import PLONE_FIXTURE
+from plone.app.testing import PloneSandboxLayer
 from plone.app.testing import TEST_USER_ID
-from plone.app.testing import setRoles
+from plone.app.testing import applyProfile
 from plone.app.testing import login
+from plone.app.testing import setRoles
 from plone.testing import z2
 from zope.configuration import xmlconfig
 from zope.interface import alsoProvides
-
 import pkg_resources
-from plone.app.contenttypes.tests.robot.variables import TEST_FOLDER_ID
 
 
 def set_browserlayer(request):


Repository: plone.app.contenttypes
Branch: refs/heads/master
Date: 2014-10-13T18:17:06+02:00
Author: Philip Bauer (pbauer) <bauer at starzel.de>
Commit: https://github.com/plone/plone.app.contenttypes/commit/6fe5f7e31a38a3f8f5ddfd311a39bb61ff1ea431

Merge pull request #177 from plone/jensens-cleanup

code modernization: sorted imports, use decorators, utf8 headers.

Files changed:
M docs/CHANGES.rst
M plone/app/contenttypes/behaviors/__init__.py
M plone/app/contenttypes/behaviors/collection.py
M plone/app/contenttypes/behaviors/leadimage.py
M plone/app/contenttypes/behaviors/richtext.py
M plone/app/contenttypes/behaviors/tableofcontents.py
M plone/app/contenttypes/behaviors/viewlets.py
M plone/app/contenttypes/browser/__init__.py
M plone/app/contenttypes/browser/collection.py
M plone/app/contenttypes/browser/link_redirect_view.py
M plone/app/contenttypes/browser/utils.py
M plone/app/contenttypes/browser/viewlets.py
M plone/app/contenttypes/content.py
M plone/app/contenttypes/indexers.py
M plone/app/contenttypes/interfaces.py
M plone/app/contenttypes/migration/browser.py
M plone/app/contenttypes/migration/dxmigration.py
M plone/app/contenttypes/migration/migration.py
M plone/app/contenttypes/migration/utils.py
M plone/app/contenttypes/migration/vocabularies.py
M plone/app/contenttypes/permissions.py
M plone/app/contenttypes/schema/__init__.py
M plone/app/contenttypes/testing.py

diff --git a/docs/CHANGES.rst b/docs/CHANGES.rst
index 392f049..02fcd19 100644
--- a/docs/CHANGES.rst
+++ b/docs/CHANGES.rst
@@ -4,6 +4,9 @@ Changelog
 1.2a5 (unreleased)
 ------------------
 
+- Code modernization: sorted imports, use decorators, utf8 headers.
+  [jensens]
+
 - Fix: Added missing types to CMFDiffTool configuraion.
   [jensens]
 
diff --git a/plone/app/contenttypes/behaviors/__init__.py b/plone/app/contenttypes/behaviors/__init__.py
index e69de29..40a96af 100644
--- a/plone/app/contenttypes/behaviors/__init__.py
+++ b/plone/app/contenttypes/behaviors/__init__.py
@@ -0,0 +1 @@
+# -*- coding: utf-8 -*-
diff --git a/plone/app/contenttypes/behaviors/collection.py b/plone/app/contenttypes/behaviors/collection.py
index 59f9edb..81dc156 100644
--- a/plone/app/contenttypes/behaviors/collection.py
+++ b/plone/app/contenttypes/behaviors/collection.py
@@ -5,21 +5,24 @@
 from Products.CMFPlone.interfaces.syndication import IFeed
 from Products.CMFPlone.interfaces.syndication import ISyndicatable
 from plone.app.contentlisting.interfaces import IContentListing
+from plone.app.contenttypes import _
 from plone.autoform.interfaces import IFormFieldProvider
 from plone.dexterity.interfaces import IDexterityContent
 from plone.supermodel import model
 from zope import schema
-from zope.component import adapts, getMultiAdapter, getUtility
-from zope.interface import alsoProvides, implements
+from zope.component import adapter
+from zope.component import getMultiAdapter
+from zope.component import getUtility
+from zope.interface import provider
+from zope.interface import implementer
 from zope.schema.interfaces import IVocabularyFactory
-from zope.schema.vocabulary import SimpleTerm, SimpleVocabulary
-from plone.app.contenttypes import _
+from zope.schema.vocabulary import SimpleTerm
+from zope.schema.vocabulary import SimpleVocabulary
 
 
+ at implementer(IVocabularyFactory)
 class MetaDataFieldsVocabulary(object):
 
-    implements(IVocabularyFactory)
-
     def __call__(self, context):
         cat = getToolByName(context, 'portal_catalog')
         items = [
@@ -31,6 +34,7 @@ def __call__(self, context):
 MetaDataFieldsVocabularyFactory = MetaDataFieldsVocabulary()
 
 
+ at provider(IFormFieldProvider, ISyndicatable)
 class ICollection(model.Schema):
 
     query = schema.List(
@@ -81,18 +85,14 @@ class ICollection(model.Schema):
         )
 
 
-alsoProvides(ICollection, IFormFieldProvider)
-alsoProvides(ICollection, ISyndicatable)
-
-
 class ISyndicatableCollection(ISyndicatable):
     """Marker interface for syndicatable collections.
     """
 
 
+ at implementer(ICollection)
+ at adapter(IDexterityContent)
 class Collection(object):
-    implements(ICollection)
-    adapts(IDexterityContent)
 
     def __init__(self, context):
         self.context = context
@@ -237,8 +237,8 @@ def _get_customViewFields(self):
     customViewFields = property(_get_customViewFields, _set_customViewFields)
 
 
+ at implementer(IFeed)
 class CollectionFeed(BaseCollectionFeed):
-    implements(IFeed)
 
     def _brains(self):
         return ICollection(self.context).results(batch=False)[:self.limit]
diff --git a/plone/app/contenttypes/behaviors/leadimage.py b/plone/app/contenttypes/behaviors/leadimage.py
index 4360107..fbe6388 100644
--- a/plone/app/contenttypes/behaviors/leadimage.py
+++ b/plone/app/contenttypes/behaviors/leadimage.py
@@ -1,16 +1,16 @@
 # -*- coding: utf-8 -*-
-from zope.interface import alsoProvides, implements
-from zope.component import adapts
-from zope import schema
-from plone.supermodel import model
-from plone.dexterity.interfaces import IDexterityContent
+from plone.app.contenttypes import _
 from plone.autoform.interfaces import IFormFieldProvider
-
+from plone.dexterity.interfaces import IDexterityContent
 from plone.namedfile import field as namedfile
-
-from plone.app.contenttypes import _
+from plone.supermodel import model
+from zope import schema
+from zope.component import adapter
+from zope.interface import implementer
+from zope.interface import provider
 
 
+ at provider(IFormFieldProvider)
 class ILeadImage(model.Schema):
 
     image = namedfile.NamedBlobImage(
@@ -25,12 +25,10 @@ class ILeadImage(model.Schema):
         required=False,
     )
 
-alsoProvides(ILeadImage, IFormFieldProvider)
-
 
+ at implementer(ILeadImage)
+ at adapter(IDexterityContent)
 class LeadImage(object):
-    implements(ILeadImage)
-    adapts(IDexterityContent)
 
     def __init__(self, context):
         self.context = context
diff --git a/plone/app/contenttypes/behaviors/richtext.py b/plone/app/contenttypes/behaviors/richtext.py
index e763e09..a3b20ba 100644
--- a/plone/app/contenttypes/behaviors/richtext.py
+++ b/plone/app/contenttypes/behaviors/richtext.py
@@ -1,16 +1,16 @@
 # -*- coding: utf-8 -*-
+from plone.app.contenttypes import _
+from plone.app.textfield import RichText as RichTextField
 from plone.autoform.interfaces import IFormFieldProvider
-
 from plone.autoform.view import WidgetsView
 from plone.dexterity.interfaces import IDexterityContent
-from plone.app.textfield import RichText as RichTextField
 from plone.supermodel import model
-from zope.component import adapts
-from zope.interface import alsoProvides, implements
-
-from plone.app.contenttypes import _
+from zope.component import adapter
+from zope.interface import implementer
+from zope.interface import provider
 
 
+ at provider(IFormFieldProvider)
 class IRichText(model.Schema):
 
     text = RichTextField(
@@ -21,12 +21,9 @@ class IRichText(model.Schema):
     model.primary('text')
 
 
-alsoProvides(IRichText, IFormFieldProvider)
-
-
+ at implementer(IRichText)
+ at adapter(IDexterityContent)
 class RichText(object):
-    implements(IRichText)
-    adapts(IDexterityContent)
 
     def __init__(self, context):
         self.context = context
diff --git a/plone/app/contenttypes/behaviors/tableofcontents.py b/plone/app/contenttypes/behaviors/tableofcontents.py
index 2184131..3bcf4d8 100644
--- a/plone/app/contenttypes/behaviors/tableofcontents.py
+++ b/plone/app/contenttypes/behaviors/tableofcontents.py
@@ -2,12 +2,13 @@
 from plone.autoform.interfaces import IFormFieldProvider
 from plone.supermodel import model
 from zope import schema
-from zope.interface import alsoProvides
 from zope.i18nmessageid import MessageFactory
+from zope.interface import provider
 
 _ = MessageFactory('atcontenttypes')
 
 
+ at provider(IFormFieldProvider)
 class ITableOfContents(model.Schema):
 
     model.fieldset('settings', label=_(u"Settings"),
@@ -23,5 +24,3 @@ class ITableOfContents(model.Schema):
                     u' at the top of the page.'),
         required=False,
     )
-
-alsoProvides(ITableOfContents, IFormFieldProvider)
diff --git a/plone/app/contenttypes/behaviors/viewlets.py b/plone/app/contenttypes/behaviors/viewlets.py
index da7ca68..bfa37ae 100644
--- a/plone/app/contenttypes/behaviors/viewlets.py
+++ b/plone/app/contenttypes/behaviors/viewlets.py
@@ -1,8 +1,7 @@
 # -*- coding: utf-8 -*-
-from plone.app.layout.viewlets import ViewletBase
-
-from plone.app.contenttypes.interfaces import INewsItem
 from plone.app.contenttypes.behaviors.leadimage import ILeadImage
+from plone.app.contenttypes.interfaces import INewsItem
+from plone.app.layout.viewlets import ViewletBase
 
 
 class LeadImageViewlet(ViewletBase):
diff --git a/plone/app/contenttypes/browser/__init__.py b/plone/app/contenttypes/browser/__init__.py
index e69de29..40a96af 100644
--- a/plone/app/contenttypes/browser/__init__.py
+++ b/plone/app/contenttypes/browser/__init__.py
@@ -0,0 +1 @@
+# -*- coding: utf-8 -*-
diff --git a/plone/app/contenttypes/browser/collection.py b/plone/app/contenttypes/browser/collection.py
index 6551f54..ddb2f6f 100644
--- a/plone/app/contenttypes/browser/collection.py
+++ b/plone/app/contenttypes/browser/collection.py
@@ -1,7 +1,6 @@
 # -*- coding: utf-8 -*-
 from Acquisition import aq_inner
 from Products.Five import BrowserView
-
 from plone.app.contenttypes.behaviors.collection import ICollection
 
 
diff --git a/plone/app/contenttypes/browser/link_redirect_view.py b/plone/app/contenttypes/browser/link_redirect_view.py
index 2ed037a..4e4a45d 100644
--- a/plone/app/contenttypes/browser/link_redirect_view.py
+++ b/plone/app/contenttypes/browser/link_redirect_view.py
@@ -1,10 +1,8 @@
 # -*- coding: utf-8 -*-
+from Products.CMFCore.utils import getToolByName
 from Products.Five.browser import BrowserView
 from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
-
-from Products.CMFCore.utils import getToolByName
-
-from ..utils import replace_link_variables_by_paths
+from plone.app.contenttypes.utils import replace_link_variables_by_paths
 
 
 class LinkRedirectView(BrowserView):
diff --git a/plone/app/contenttypes/browser/utils.py b/plone/app/contenttypes/browser/utils.py
index e540950..b816539 100644
--- a/plone/app/contenttypes/browser/utils.py
+++ b/plone/app/contenttypes/browser/utils.py
@@ -6,7 +6,7 @@
 from plone.memoize.view import memoize
 from zope.component import getMultiAdapter
 from zope.interface import Interface
-from zope.interface import implements
+from zope.interface import implementer
 
 
 class IUtils(Interface):
@@ -19,8 +19,8 @@ def getMimeTypeIcon(content_file):
         """
 
 
+ at implementer(IUtils)
 class Utils(BrowserView):
-    implements(IUtils)
 
     @memoize
     def getMimeTypeIcon(self, content_file):
diff --git a/plone/app/contenttypes/browser/viewlets.py b/plone/app/contenttypes/browser/viewlets.py
index 2b58ba3..5344410 100644
--- a/plone/app/contenttypes/browser/viewlets.py
+++ b/plone/app/contenttypes/browser/viewlets.py
@@ -4,7 +4,6 @@
 from Products.CMFCore.permissions import ManagePortal
 from plone.app.layout.viewlets import ViewletBase
 from plone.dexterity.interfaces import IDexterityFTI
-
 import pkg_resources
 
 try:
diff --git a/plone/app/contenttypes/content.py b/plone/app/contenttypes/content.py
index c76985a..5b8d4e5 100644
--- a/plone/app/contenttypes/content.py
+++ b/plone/app/contenttypes/content.py
@@ -1,24 +1,19 @@
 # -*- coding: utf-8 -*-
-from plone.app.contenttypes.interfaces import (
-    ICollection,
-    IDocument,
-    IFile,
-    IFolder,
-    IImage,
-    ILink,
-    INewsItem,
-    IEvent,
-)
-
-from plone.dexterity.content import Item
+from plone.app.contenttypes.interfaces import ICollection
+from plone.app.contenttypes.interfaces import IDocument
+from plone.app.contenttypes.interfaces import IEvent
+from plone.app.contenttypes.interfaces import IFile
+from plone.app.contenttypes.interfaces import IFolder
+from plone.app.contenttypes.interfaces import IImage
+from plone.app.contenttypes.interfaces import ILink
+from plone.app.contenttypes.interfaces import INewsItem
 from plone.dexterity.content import Container
-
-from zope.interface import implements
+from plone.dexterity.content import Item
+from zope.interface import implementer
 
 
+ at implementer(ICollection)
 class Collection(Item):
-    implements(ICollection)
-
     # BBB
 
     def listMetaDataFields(self, exclude=True):
@@ -60,29 +55,43 @@ def results(self, **kwargs):
         return ICollection_behavior(self).results(**kwargs)
 
 
+ at implementer(IDocument)
 class Document(Item):
-    implements(IDocument)
+    """Convinience Item subclass for ``Document`` portal type
+    """
 
 
+ at implementer(IFile)
 class File(Item):
-    implements(IFile)
+    """Convinience subclass for ``File`` portal type
+    """
 
 
+ at implementer(IFolder)
 class Folder(Container):
-    implements(IFolder)
+    """Convinience subclass for ``File`` portal type
+    """
 
 
+ at implementer(IImage)
 class Image(Item):
-    implements(IImage)
+    """Convinience subclass for ``File`` portal type
+    """
 
 
+ at implementer(ILink)
 class Link(Item):
-    implements(ILink)
+    """Convinience subclass for ``File`` portal type
+    """
 
 
+ at implementer(INewsItem)
 class NewsItem(Item):
-    implements(INewsItem)
+    """Convinience subclass for ``File`` portal type
+    """
 
 
+ at implementer(IEvent)
 class Event(Item):
-    implements(IEvent)
+    """Convinience subclass for ``File`` portal type
+    """
diff --git a/plone/app/contenttypes/indexers.py b/plone/app/contenttypes/indexers.py
index 473f261..c5a1b9f 100644
--- a/plone/app/contenttypes/indexers.py
+++ b/plone/app/contenttypes/indexers.py
@@ -1,5 +1,4 @@
 # -*- coding: utf-8 -*-
-from plone.app.contenttypes.utils import replace_link_variables_by_paths
 from Products.CMFCore.utils import getToolByName
 from Products.CMFPlone.utils import safe_unicode
 from ZODB.POSException import ConflictError
@@ -10,6 +9,7 @@
 from plone.app.contenttypes.interfaces import IImage
 from plone.app.contenttypes.interfaces import ILink
 from plone.app.contenttypes.interfaces import INewsItem
+from plone.app.contenttypes.utils import replace_link_variables_by_paths
 from plone.indexer.decorator import indexer
 from plone.rfc822.interfaces import IPrimaryFieldInfo
 
diff --git a/plone/app/contenttypes/interfaces.py b/plone/app/contenttypes/interfaces.py
index 2da0381..3b8a90b 100644
--- a/plone/app/contenttypes/interfaces.py
+++ b/plone/app/contenttypes/interfaces.py
@@ -13,40 +13,40 @@ class IPloneAppContenttypesLayer(Interface):
 
 
 class ICollection(Interface):
-    """
+    """Explixiet marker interface for Collection
     """
 
 
 class IDocument(Interface):
-    """
+    """Explixit marker interface for Document
     """
 
 
 class IFile(Interface):
-    """
+    """Explixit marker interface for File
     """
 
 
 class IFolder(Interface):
-    """
+    """Explixit marker interface for Folder
     """
 
 
 class IImage(Interface):
-    """
+    """Explixit marker interface for Image
     """
 
 
 class ILink(Interface):
-    """
+    """Explixit marker interface for Link
     """
 
 
 class INewsItem(Interface):
-    """
+    """Explixit marker interface for News Item
     """
 
 
 class IEvent(Interface):
-    """
+    """Explixit marker interface for Event
     """
diff --git a/plone/app/contenttypes/migration/browser.py b/plone/app/contenttypes/migration/browser.py
index 2020976..2e82fa9 100644
--- a/plone/app/contenttypes/migration/browser.py
+++ b/plone/app/contenttypes/migration/browser.py
@@ -12,8 +12,8 @@
 from plone.app.contenttypes.migration import migration
 from plone.app.contenttypes.migration.utils import ATCT_LIST
 from plone.app.contenttypes.migration.utils import HAS_MULTILINGUAL
-from plone.app.contenttypes.migration.utils import isSchemaExtended
 from plone.app.contenttypes.migration.utils import installTypeIfNeeded
+from plone.app.contenttypes.migration.utils import isSchemaExtended
 from plone.app.contenttypes.utils import DEFAULT_TYPES
 from plone.browserlayer.interfaces import ILocalBrowserLayerType
 from plone.dexterity.content import DexterityContent
@@ -29,8 +29,8 @@
 from zope.component import getMultiAdapter
 from zope.component import queryUtility
 from zope.interface import Interface
-
 import logging
+
 logger = logging.getLogger(__name__)
 
 # Schema Extender allowed interfaces
diff --git a/plone/app/contenttypes/migration/dxmigration.py b/plone/app/contenttypes/migration/dxmigration.py
index 468333b..b5ce49a 100644
--- a/plone/app/contenttypes/migration/dxmigration.py
+++ b/plone/app/contenttypes/migration/dxmigration.py
@@ -1,11 +1,11 @@
 # -*- coding: utf-8 -*-
-from Products.contentmigration.basemigrator.walker import CatalogWalker
 from Products.contentmigration.basemigrator.migrator import CMFItemMigrator
+from Products.contentmigration.basemigrator.walker import CatalogWalker
 from plone.app.contenttypes.interfaces import IEvent
 from plone.app.contenttypes.migration import datetime_fixer
+from plone.event.utils import default_timezone
 from zope.annotation.interfaces import IAnnotations
 from zope.component.hooks import getSite
-from plone.event.utils import default_timezone
 
 
 def migrate(portal, migrator):
diff --git a/plone/app/contenttypes/migration/migration.py b/plone/app/contenttypes/migration/migration.py
index a64416e..799e1e4 100644
--- a/plone/app/contenttypes/migration/migration.py
+++ b/plone/app/contenttypes/migration/migration.py
@@ -16,9 +16,9 @@
 from Products.contentmigration.basemigrator.walker import CatalogWalker
 from persistent.list import PersistentList
 from plone.app.contenttypes.behaviors.collection import ICollection
+from plone.app.contenttypes.migration import datetime_fixer
 from plone.app.contenttypes.migration.dxmigration import DXEventMigrator
 from plone.app.contenttypes.migration.dxmigration import DXOldEventMigrator
-from plone.app.contenttypes.migration import datetime_fixer
 from plone.app.textfield.value import RichTextValue
 from plone.app.uuid.utils import uuidToObject
 from plone.dexterity.interfaces import IDexterityContent
@@ -32,9 +32,8 @@
 from zope.interface import Interface
 from zope.interface import implementer
 from zope.intid.interfaces import IIntIds
-
-
 import logging
+
 logger = logging.getLogger(__name__)
 
 
diff --git a/plone/app/contenttypes/migration/utils.py b/plone/app/contenttypes/migration/utils.py
index 5d36210..a5c12c0 100644
--- a/plone/app/contenttypes/migration/utils.py
+++ b/plone/app/contenttypes/migration/utils.py
@@ -20,9 +20,8 @@
 from plone.dexterity.interfaces import IDexterityFTI
 from zope.component import getGlobalSiteManager
 from zope.component.hooks import getSite
-
-import pkg_resources
 import os
+import pkg_resources
 
 try:
     pkg_resources.get_distribution('plone.app.collection')
diff --git a/plone/app/contenttypes/migration/vocabularies.py b/plone/app/contenttypes/migration/vocabularies.py
index 9bdaa57..9406106 100644
--- a/plone/app/contenttypes/migration/vocabularies.py
+++ b/plone/app/contenttypes/migration/vocabularies.py
@@ -1,11 +1,11 @@
 # -*- coding: utf-8 -*-
 from Products.CMFCore.utils import getToolByName
+from plone.app.contenttypes import _
 from plone.app.contenttypes.migration.utils import ATCT_LIST
 from plone.app.contenttypes.migration.utils import isSchemaExtended
 from zope.interface import implements
 from zope.schema.interfaces import IVocabularyFactory
 from zope.schema.vocabulary import SimpleVocabulary
-from .. import _
 
 
 def get_terms(context, counter, ext_dict, show_extended):
diff --git a/plone/app/contenttypes/permissions.py b/plone/app/contenttypes/permissions.py
index 7f703aa..9186734 100644
--- a/plone/app/contenttypes/permissions.py
+++ b/plone/app/contenttypes/permissions.py
@@ -2,10 +2,13 @@
 from AccessControl.SecurityInfo import ModuleSecurityInfo
 from Products.CMFCore.permissions import setDefaultRoles
 from plone.app.contenttypes.utils import DEFAULT_TYPES
-# http://developer.plone.org/security/custom_permissions.html
+
 security = ModuleSecurityInfo('plone.app.contenttypes')
+
 TYPE_ROLES = ('Manager', 'Site Administrator', 'Owner', 'Contributor')
+
 perms = []
+
 for typename in DEFAULT_TYPES:
     permid = 'Add' + typename
     permname = 'plone.app.contenttypes: Add ' + typename
diff --git a/plone/app/contenttypes/schema/__init__.py b/plone/app/contenttypes/schema/__init__.py
index e69de29..40a96af 100644
--- a/plone/app/contenttypes/schema/__init__.py
+++ b/plone/app/contenttypes/schema/__init__.py
@@ -0,0 +1 @@
+# -*- coding: utf-8 -*-
diff --git a/plone/app/contenttypes/testing.py b/plone/app/contenttypes/testing.py
index 16aaccb..9e6d8ed 100644
--- a/plone/app/contenttypes/testing.py
+++ b/plone/app/contenttypes/testing.py
@@ -1,21 +1,20 @@
 # -*- coding: utf-8 -*-
 from plone.app.contenttypes.interfaces import IPloneAppContenttypesLayer
-from plone.app.robotframework.testing import REMOTE_LIBRARY_BUNDLE_FIXTURE
+from plone.app.contenttypes.tests.robot.variables import TEST_FOLDER_ID
 from plone.app.event.testing import PAEvent_FIXTURE
-from plone.app.testing import PloneSandboxLayer
-from plone.app.testing import applyProfile
-from plone.app.testing import PLONE_FIXTURE
-from plone.app.testing import IntegrationTesting
+from plone.app.robotframework.testing import REMOTE_LIBRARY_BUNDLE_FIXTURE
 from plone.app.testing import FunctionalTesting
+from plone.app.testing import IntegrationTesting
+from plone.app.testing import PLONE_FIXTURE
+from plone.app.testing import PloneSandboxLayer
 from plone.app.testing import TEST_USER_ID
-from plone.app.testing import setRoles
+from plone.app.testing import applyProfile
 from plone.app.testing import login
+from plone.app.testing import setRoles
 from plone.testing import z2
 from zope.configuration import xmlconfig
 from zope.interface import alsoProvides
-
 import pkg_resources
-from plone.app.contenttypes.tests.robot.variables import TEST_FOLDER_ID
 
 
 def set_browserlayer(request):




-------------------------------------------------------------------------------
-------------- next part --------------
A non-text attachment was scrubbed...
Name: CHANGES.log
Type: application/octet-stream
Size: 43929 bytes
Desc: not available
URL: <http://lists.plone.org/pipermail/plone-testbot/attachments/20141013/1eac7abd/attachment-0002.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: build.log
Type: application/octet-stream
Size: 291618 bytes
Desc: not available
URL: <http://lists.plone.org/pipermail/plone-testbot/attachments/20141013/1eac7abd/attachment-0003.obj>


More information about the Testbot mailing list