Commit 4ffa049b authored by Maurits van Rees's avatar Maurits van Rees

Patch zope.interface to remove docstrings and avoid publishing.

From Products.PloneHotfix20161129.
Signed-off-by: default avatarMaurits van Rees <maurits@vanrees.org>
parent fd844dca
...@@ -8,6 +8,9 @@ http://docs.zope.org/zope2/ ...@@ -8,6 +8,9 @@ http://docs.zope.org/zope2/
2.13.25 (unreleased) 2.13.25 (unreleased)
-------------------- --------------------
- Patch zope.interface to remove docstrings and avoid publishing.
From Products.PloneHotfix20161129. [maurits]
- Don't copy items the user is not allowed to view. - Don't copy items the user is not allowed to view.
From Products.PloneHotfix20161129. [maurits] From Products.PloneHotfix20161129. [maurits]
......
# Import all patches.
import publishing
# Have the patches been applied yet?
_patched = False
def apply_patches():
global _patched
if _patched:
return
_patched = True
publishing.apply_patches()
# -*- coding: utf-8 -*-
def delete_method_docstring(klass, method_name):
# Delete the docstring from the class method.
# Objects must have a docstring to be published.
# So this avoids them getting published.
method = getattr(klass, method_name, None)
if (method is not None and hasattr(method, 'im_func') and
hasattr(method.im_func, '__doc__')):
del method.im_func.__doc__
element_methods = [
'getDoc',
'getName',
'getTaggedValue',
'getTaggedValueTags',
'queryTaggedValue',
'setTaggedValue',
]
interface_methods = [
'changed',
'dependents',
'direct',
'extends',
'get',
'getBases',
'getDescriptionFor',
'implementedBy',
'interfaces',
'isEqualOrExtendedBy',
'isOrExtends',
'names',
'namesAndDescriptions',
'providedBy',
'queryDescriptionFor',
'subscribe',
'unsubscribe',
'validateInvariants',
'weakref',
]
# Has this patch been applied yet?
_patched = False
def apply_patches():
global _patched
if _patched:
return
_patched = True
from zope.interface import Attribute
from zope.interface import Interface
from zope.interface.interface import Element
from zope.interface.interface import Method
for klass in [Element, Attribute, Interface, Method]:
try:
del klass.__doc__
except:
pass
for method_name in element_methods:
delete_method_docstring(klass, method_name)
for method_name in interface_methods:
delete_method_docstring(Interface, method_name)
...@@ -60,6 +60,8 @@ def startup(): ...@@ -60,6 +60,8 @@ def startup():
from App.PersistentExtra import patchPersistent from App.PersistentExtra import patchPersistent
import Globals # to set / fetch data import Globals # to set / fetch data
patchPersistent() patchPersistent()
from Zope2.App import patches
patches.apply_patches()
global app global app
......
...@@ -63,6 +63,15 @@ class StartupTests(ZopeTestCase): ...@@ -63,6 +63,15 @@ class StartupTests(ZopeTestCase):
startup() startup()
self.assertEqual(str(handler), logged) self.assertEqual(str(handler), logged)
def test_interface(self):
# We don't want Interface methods to be publishable.
# So they should not have a docstring.
# This is done in Zope2.App.patches.publishing.
from zope.interface import Interface
self.assertFalse(Interface.names.__doc__)
self.assertFalse(Interface.getTaggedValue.__doc__)
self.assertFalse(Interface.setTaggedValue.__doc__)
def test_suite(): def test_suite():
suite = unittest.TestSuite() suite = unittest.TestSuite()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment