From 253decc80eb39617bd57778721108ce14d0d7c8d Mon Sep 17 00:00:00 2001 From: David Convent Date: Sun, 14 Apr 2013 15:56:14 +0200 Subject: [PATCH] cleaning up vocabularies and field for pfwbged --- .../dms/thesaurus/browser/thesaurusview.py | 17 +---- src/collective/dms/thesaurus/dmskeyword.py | 2 +- src/collective/dms/thesaurus/dmsthesaurus.py | 18 ----- .../dms/thesaurus/entrypointsfield.py | 19 +---- src/collective/dms/thesaurus/keywordsfield.py | 13 +--- src/collective/dms/thesaurus/vocabulary.py | 74 +++++-------------- 6 files changed, 30 insertions(+), 113 deletions(-) diff --git a/src/collective/dms/thesaurus/browser/thesaurusview.py b/src/collective/dms/thesaurus/browser/thesaurusview.py index 2fc07ff..df5a7ef 100644 --- a/src/collective/dms/thesaurus/browser/thesaurusview.py +++ b/src/collective/dms/thesaurus/browser/thesaurusview.py @@ -4,35 +4,25 @@ from zope.interface import Interface from zope.component import adapter from zope import schema -from zope.schema.interfaces import IChoice from zope.browserpage.viewpagetemplatefile import ViewPageTemplateFile from z3c.form.interfaces import IFormLayer, IFieldWidget, ITextWidget from z3c.form.widget import FieldWidget -from z3c.form import form, button, field -from plone.z3cform import layout +from z3c.form import form, field from z3c.form.browser import text -#from plone.formwidget.autocomplete.widget import AutocompleteFieldWidget -from plone.formwidget.autocomplete.widget import AutocompleteBase, AutocompleteSelectionWidget +from plone.formwidget.autocomplete.widget import AutocompleteSelectionWidget from plone.formwidget.autocomplete.interfaces import IAutocompleteWidget -#from plone.formwidget.autocomplete import AutocompleteFieldWidget from plone.dexterity.browser.view import DefaultView -#from Products.Five.browser import BrowserView - -#from plone.dexterity.interfaces import IDexterityFTI -#from plone.dexterity.utils import getAdditionalSchemata from Products.Five import BrowserView from Products.CMFCore.utils import getToolByName -from zope.schema.vocabulary import SimpleVocabulary from collective.dms.thesaurus import _ -from collective.dms.thesaurus.vocabulary import InternalThesaurusSource class IAutocompleteSearchWidget(IAutocompleteWidget): """Simple autocomplete search input widget @@ -79,16 +69,15 @@ class DmsThesaurusForm(form.Form): ignoreContext = True template = ViewPageTemplateFile('thesaurus_form.pt') -#from .searchform import SearchForm class DmsThesaurusView(DefaultView): def renderForm(self): form = DmsThesaurusForm(self.context, self.request) - #form = SearchForm(self.context, self.request) form.update() return form.render() + class ListKeywordsView(BrowserView): _items = None diff --git a/src/collective/dms/thesaurus/dmskeyword.py b/src/collective/dms/thesaurus/dmskeyword.py index 4efad09..da88e1a 100644 --- a/src/collective/dms/thesaurus/dmskeyword.py +++ b/src/collective/dms/thesaurus/dmskeyword.py @@ -12,7 +12,7 @@ from plone.supermodel import model from . import _ from .keywordsfield import ThesaurusKeywords from .equivalencesfield import ThesaurusKeywordEquivalences -from .dmsthesaurus import NoThesaurusFound +from .vocabulary import NoThesaurusFound class IDmsKeyword(model.Schema): """ """ diff --git a/src/collective/dms/thesaurus/dmsthesaurus.py b/src/collective/dms/thesaurus/dmsthesaurus.py index 29a4d22..1b551d1 100644 --- a/src/collective/dms/thesaurus/dmsthesaurus.py +++ b/src/collective/dms/thesaurus/dmsthesaurus.py @@ -1,32 +1,14 @@ -#import datetime -#from zope import schema -#from zope.component import adapts from zope.interface import implements -#from zope.component import adapter -#from zope.interface import implementer -#from z3c.form.widget import FieldWidget, SequenceWidget -#from plone.dexterity.content import Container from plone.dexterity.schema import DexteritySchemaPolicy from plone.dexterity.content import Container -#from zope.schema.interfaces import ISet -#from zope.schema.interfaces import IFromUnicode -#from z3c.form.interfaces import IFormLayer, IFieldWidget, ISequenceWidget - - from plone.supermodel import model from . import _ from .entrypointsfield import EntryPoints -#from plone.autoform import directives as form -#from plone.directives.form import default_value - -class NoThesaurusFound(Exception): - """No thesaurus found""" - class IDmsThesaurus(model.Schema): """ """ diff --git a/src/collective/dms/thesaurus/entrypointsfield.py b/src/collective/dms/thesaurus/entrypointsfield.py index 4fe32de..6df31db 100644 --- a/src/collective/dms/thesaurus/entrypointsfield.py +++ b/src/collective/dms/thesaurus/entrypointsfield.py @@ -1,33 +1,21 @@ -#from Acquisition import aq_parent - from zope.interface import implements, implementer from zope.component import adapter from zope import schema -from zope.schema.interfaces import IChoice, IContextSourceBinder -#from zope.schema.interfaces import IVocabularyFactory -from zope.schema.vocabulary import SimpleVocabulary -#from zope.schema.vocabulary import SimpleTerm -#from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile +from zope.schema.interfaces import IChoice from zope.schema.interfaces import ISet from zope.schema.interfaces import IFromUnicode from zope.browserpage.viewpagetemplatefile import ViewPageTemplateFile from z3c.form.interfaces import IFormLayer, IFieldWidget -#from z3c.form.interfaces import IWidget from z3c.form.widget import FieldWidget -#from z3c.form.widget import Widget -#from z3c.form.browser.select import SelectWidget -from plone.formwidget.autocomplete.interfaces import IAutocompleteWidget from plone.formwidget.autocomplete.widget import AutocompleteMultiSelectionWidget -from Products.CMFCore.utils import getToolByName - #from . import _ -from collective.dms.thesaurus.vocabulary import InternalThesaurusSource +#from collective.dms.thesaurus.vocabulary import InternalThesaurusSource class IEntryPointChoice(IChoice): """Thesaurus Entry Point Choice Item. @@ -45,10 +33,9 @@ class EntryPoints(schema.Set): def __init__(self, **kw): vt = kw.pop('value_type', - #EntryPointChoice( schema.Choice( required=False, - source=InternalThesaurusSource()) + vocabulary=u'dms.thesaurus.internalrefs') ) super(EntryPoints, self).__init__(value_type=vt, **kw) diff --git a/src/collective/dms/thesaurus/keywordsfield.py b/src/collective/dms/thesaurus/keywordsfield.py index fcdf957..7ca9f70 100644 --- a/src/collective/dms/thesaurus/keywordsfield.py +++ b/src/collective/dms/thesaurus/keywordsfield.py @@ -1,17 +1,11 @@ -from Acquisition import aq_parent - from zope import schema from zope.interface import implements, implementer from zope.component import adapter -#from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile from zope.schema.interfaces import ISet from zope.schema.interfaces import IFromUnicode from z3c.form.interfaces import IFormLayer, IFieldWidget, ISequenceWidget -#from z3c.form.interfaces import IWidget from z3c.form.widget import FieldWidget, SequenceWidget -#from z3c.form.widget import Widget -#from z3c.form.browser.select import SelectWidget from . import _ @@ -23,10 +17,9 @@ class ThesaurusKeywords(schema.Set): def __init__(self, display_backrefs=False, **kw): self.display_backrefs = display_backrefs - vocabulary = kw.pop('vocabulary', u'dms.thesaurus.global') - super(ThesaurusKeywords, self).__init__( - value_type=schema.Choice(vocabulary=vocabulary), - **kw) + voc = kw.pop('vocabulary', u'dms.thesaurus.simple') + vt = kw.pop('value_type', schema.Choice(vocabulary=voc)) + super(ThesaurusKeywords, self).__init__(value_type=vt, **kw) class IThesaurusKeywordsWidget(ISequenceWidget): diff --git a/src/collective/dms/thesaurus/vocabulary.py b/src/collective/dms/thesaurus/vocabulary.py index 9eb293e..adbc4e7 100644 --- a/src/collective/dms/thesaurus/vocabulary.py +++ b/src/collective/dms/thesaurus/vocabulary.py @@ -1,81 +1,51 @@ from zope.interface import Interface -from zope.interface import implements from five import grok -from zope.schema.interfaces import IContextSourceBinder - -#from zope.component import queryUtility from zope.schema.interfaces import IVocabularyFactory -#from zope.schema.interfaces import ISource, IContextSourceBinder from zope.schema.vocabulary import SimpleVocabulary -#from zope.schema.vocabulary import SimpleTerm + from Products.CMFCore.utils import getToolByName +class NoThesaurusFound(Exception): + """No thesaurus found""" + class IMainThesaurus(Interface): """ Marker interface for main thesaurus container """ -class ThesaurusVocabulary(SimpleVocabulary): - - def search(self, query_string): - q = query_string.lower() - return [kw for kw in self._terms if q in kw.title.lower()] - - -class InternalThesaurusSource(object): - implements(IContextSourceBinder) - - _vocabulary = None +class SimpleThesaurusSource(object): + """This basic vocabulary is here mainly for demo purpose. + It is not meant to be used when a Plone site contains more than one + thesaurus. + """ + grok.implements(IVocabularyFactory) def __call__(self, context): - if self._vocabulary is not None: - return self._vocabulary catalog = getToolByName(context, 'portal_catalog') - path = '/'.join(context.getPhysicalPath()) + thesaurus = catalog(portal_type='dmsthesaurus') + if not len(thesaurus): + raise NoThesaurusFound + # build vocab from first thesaurus returned by catalog + thesaurus_path = '/'.join(thesaurus[0].getPath()) results = catalog(portal_type='dmskeyword', - path={'query': path,'depth': 1}) + path={'query': thesaurus_path,'depth': 1}) keywords = [x.getObject() for x in results] - def cmp_keyword(x, y): - return cmp(x.title.lower(), y.title.lower()) - keywords.sort(cmp_keyword) - #keyword_ids = [x.id for x in keywords] - _c = SimpleVocabulary.createTerm - keyword_terms = [ _c(x.id, x.id, x.title) for x in keywords ] - self._vocabulary = ThesaurusVocabulary(keyword_terms) - - def __iter__(self): - # hack to let schema editor handle the field - yield u'DO NOT TOUCH' - - -class GlobalThesaurusSource(object): - implements(IContextSourceBinder) - - def __call__(self, context): - catalog = getToolByName(context, 'portal_catalog') - results = catalog(portal_type='dmskeyword') - keywords = [x.getObject() for x in results] - def cmp_keyword(x, y): - return cmp(x.title, y.title) - keywords.sort(cmp_keyword) - #keyword_ids = [x.id for x in keywords] keyword_terms = [SimpleVocabulary.createTerm( x.id, x.id, x.title) for x in keywords] - return ThesaurusVocabulary(keyword_terms) + return SimpleVocabulary(keyword_terms) def __iter__(self): # hack to let schema editor handle the field yield u'DO NOT TOUCH' -#grok.global_utility(GlobalThesaurusSource, -# name=u'dms.thesaurus.global') +grok.global_utility(SimpleThesaurusSource, + name=u'dms.thesaurus.simple') class KeywordFromSameThesaurusSource(object): - """ - This vocabulary is used for keywords that reference one another + """This vocabulary is used for keywords that reference one another inside the same thesaurus. It should not be used for referencing keywords from other content types. """ @@ -90,11 +60,7 @@ class KeywordFromSameThesaurusSource(object): results = catalog(portal_type='dmskeyword', path={'query': thesaurus_path,'depth': 1}) keywords = [x.getObject() for x in results] - def cmp_keyword(x, y): - return cmp(x.title, y.title) - keywords.sort(cmp_keyword) - keyword_ids = [x.id for x in keywords] keyword_terms = [SimpleVocabulary.createTerm( x.id, x.id, x.title) for x in keywords] return SimpleVocabulary(keyword_terms)