pep8 & Fix term title genration to use the brain id if there is not brain title

This commit is contained in:
Joscha Krutzki 2012-07-09 16:04:12 +02:00
parent 354aa9a465
commit 7a610fb916
8 changed files with 58 additions and 33 deletions

View File

@ -4,6 +4,12 @@ Changelog
1.0.6 (unreleased)
------------------
* pep8
[joka]
* Fix term title genration to use the brain id if there is not brain title
[joka]
* Added Italian translation.
[gborelli]

View File

@ -4,4 +4,5 @@ MessageFactory = MessageFactory('plone.formwidget.contenttree')
from plone.formwidget.contenttree.widget import ContentTreeFieldWidget
from plone.formwidget.contenttree.widget import MultiContentTreeFieldWidget
from plone.formwidget.contenttree.source import PathSourceBinder, ObjPathSourceBinder, UUIDSourceBinder
from plone.formwidget.contenttree.source import PathSourceBinder,\
ObjPathSourceBinder, UUIDSourceBinder

View File

@ -34,12 +34,14 @@ class TestAdapter(object):
def _get_buddy(self):
return None
def _set_buddy(self, value):
print "setting", value
buddy = property(_get_buddy, _set_buddy)
def _get_friends(self):
return []
def _set_friends(self, value):
print "setting", value
friends = property(_get_friends, _set_friends)

View File

@ -3,6 +3,7 @@ from zope import schema
from z3c.formwidget.query.interfaces import IQuerySource
class IContentFilter(Interface):
"""A filter that specifies what content is addable, where
"""
@ -14,19 +15,25 @@ class IContentFilter(Interface):
was found from the given index data (a dict), should be included.
"""
class IContentSource(IQuerySource):
"""A source that can specify content. The generated terms should have
tokens that are URLs to the content, since these are used to create links.
tokens that are URLs to the content, since these are used to create
links.
"""
navigation_tree_query = Attribute("A dict to pass to portal_catalog when "
"searching for items to display. This dictates "
"how the tree is structured, and also provides an "
"upper bound for items allowed by the source.")
navigation_tree_query = Attribute(
"A dict to pass to portal_catalog when "
"searching for items to display. This dictates "
"how the tree is structured, and also provides an "
"upper bound for items allowed by the source."
)
selectable_filter = schema.Object(title=u"Filter",
description=u"The filter will be applied to any returned search results",
schema=IContentFilter)
selectable_filter = schema.Object(
title=u"Filter",
description=u"The filter will be applied to any returned search results",
schema=IContentFilter
)
def isBrainSelectable(self, brain):
"""Return True iff the brain represents a page that can be selected
@ -37,7 +44,7 @@ class IContentSource(IQuerySource):
"""Given a brain, generate a Term that represents this brain
"""
class IContentTreeWidget(Interface):
"""Marker interface for the content tree widget
"""

View File

@ -16,8 +16,8 @@ from plone.app.layout.navigation.interfaces import INavigationQueryBuilder
from plone.app.layout.navigation.root import getNavigationRoot
from plone.formwidget.contenttree.interfaces import IContentSource
from plone.formwidget.contenttree.interfaces import IContentTreeWidget
from plone.formwidget.contenttree.interfaces import IContentSource
from plone.formwidget.contenttree.interfaces import IContentTreeWidget
class QueryBuilder(object):

View File

@ -43,8 +43,8 @@ class CustomFilter(object):
def __init__(self, **kw):
self.criteria = {}
for key, value in kw.items():
if (not isinstance(value, (list, tuple, set, frozenset)) and
not key == 'path'):
if (not isinstance(value, (list, tuple, set, frozenset))
and not key == 'path'):
self.criteria[key] = [value]
elif isinstance(value, (set, frozenset)):
self.criteria[key] = list(value)
@ -56,7 +56,7 @@ class CustomFilter(object):
test_value = index_data.get(key, None)
if test_value is not None:
if (not isinstance(test_value, (list, tuple, set, frozenset))
and not key == 'path'):
and not key == 'path'):
test_value = set([test_value])
elif isinstance(value, (list, tuple)):
test_value = set(test_value)
@ -84,8 +84,8 @@ class PathSource(object):
# Copy path from selectable_filter into the navigation_tree_query
# normally it does not make sense to show elements that wouldn't be
# selectable anyway and are unneeded to navigate to selectable items
if ('path' not in navigation_tree_query and
'path' in selectable_filter.criteria):
if ('path' not in navigation_tree_query
and 'path' in selectable_filter.criteria):
navigation_tree_query['path'] = selectable_filter.criteria['path']
query.update(navigation_tree_query)
@ -133,7 +133,8 @@ class PathSource(object):
if brain is None:
return self._placeholderTerm(value)
if not self.isBrainSelectable(brain):
raise LookupError('Value "%s" does not match criteria for field' % str(value))
raise LookupError('Value "%s" does not match criteria for field'
% str(value))
return self.getTermByBrain(brain)
# Query API - used to locate content, e.g. in non-JS mode
@ -161,7 +162,8 @@ class PathSource(object):
def getTermByBrain(self, brain, real_value=True):
value = brain.getPath()[len(self.portal_path):]
return SimpleTerm(value, token=brain.getPath(), title=brain.Title)
return SimpleTerm(value, token=brain.getPath(), title=brain.Title or
brain.id)
def tokenToPath(self, token):
# token==path for existing sources, but may not be true in future
@ -199,7 +201,8 @@ class ObjPathSource(PathSource):
value = brain._unrestrictedGetObject()
else:
value = brain.getPath()[len(self.portal_path):]
return SimpleTerm(value, token=brain.getPath(), title=brain.Title)
return SimpleTerm(value, token=brain.getPath(), title=brain.Title or
brain.id)
class UUIDSource(PathSource):
@ -221,7 +224,8 @@ class UUIDSource(PathSource):
logger.warn("Brain in UUIDSource has missing UID value. Maybe you "
"need to enable plone.app.referenceablebehavior on "
"portal type %s?", brain.portal_type)
return SimpleTerm(value, token=brain.getPath(), title=brain.Title)
return SimpleTerm(value, token=brain.getPath(), title=brain.Title or
brain.id)
class PathSourceBinder(object):

View File

@ -5,7 +5,10 @@ from zope.testing import doctest
from zope.app.testing.functional import ZCMLLayer
testing_zcml_path = os.path.join(os.path.dirname(__file__), 'testing.zcml')
testing_zcml_layer = ZCMLLayer(testing_zcml_path, 'plone.formwidget.contenttree', 'testing_zcml_layer')
testing_zcml_layer = ZCMLLayer(testing_zcml_path,
'plone.formwidget.contenttree',
'testing_zcml_layer')
def test_suite():
readme_txt = doctest.DocFileSuite('README.txt')
@ -13,4 +16,4 @@ def test_suite():
return unittest.TestSuite([
readme_txt,
])
])

View File

@ -17,7 +17,7 @@ from plone.app.layout.navigation.interfaces import INavtreeStrategy
from plone.app.layout.navigation.navtree import buildFolderTree
from plone.formwidget.autocomplete.widget import \
AutocompleteSelectionWidget, AutocompleteMultiSelectionWidget
AutocompleteSelectionWidget, AutocompleteMultiSelectionWidget
from Products.CMFCore.utils import getToolByName
from Products.Five.browser import BrowserView
@ -30,7 +30,7 @@ class Fetch(BrowserView):
fragment_template = ViewPageTemplateFile('fragment.pt')
recurse_template = ViewPageTemplateFile('input_recurse.pt')
def getTermByBrain(self,brain):
def getTermByBrain(self, brain):
# Ask the widget
return self.context.getTermByBrain(brain)
@ -94,11 +94,11 @@ class Fetch(BrowserView):
children = []
for brain in catalog(navtree_query):
newNode = {'item' : brain,
'depth' : -1, # not needed here
'currentItem' : False,
'currentParent' : False,
'children' : []}
newNode = {'item': brain,
'depth': -1, # not needed here
'currentItem': False,
'currentParent': False,
'children': []}
if strategy.nodeFilter(newNode):
newNode = strategy.decoratorFactory(newNode)
children.append(newNode)
@ -115,7 +115,7 @@ class ContentTreeBase(Explicit):
input_template = ViewPageTemplateFile('input.pt')
hidden_template = ViewPageTemplateFile('hidden.pt')
display_template = None # set by subclass
display_template = None # set by subclass
recurse_template = ViewPageTemplateFile('input_recurse.pt')
# Parameters passed to the JavaScript function
@ -134,7 +134,7 @@ class ContentTreeBase(Explicit):
# are selectable or that are folders.
show_all_nodes = False
def getTermByBrain(self,brain):
def getTermByBrain(self, brain):
return self.bound_source.getTermByBrain(brain)
def render_tree(self):
@ -150,7 +150,8 @@ class ContentTreeBase(Explicit):
query=source.navigation_tree_query,
strategy=strategy)
return self.recurse_template(children=data.get('children', []), level=1)
return self.recurse_template(children=data.get('children', []),
level=1)
def render(self):
if self.mode == z3c.form.interfaces.DISPLAY_MODE:
@ -218,6 +219,7 @@ class ContentTreeBase(Explicit):
domain='plone.formwidget.contenttree',
context=self.request))
class ContentTreeWidget(ContentTreeBase, AutocompleteSelectionWidget):
"""ContentTree widget that allows single selection.
"""