cleaning up vocabularies and field for pfwbged

This commit is contained in:
David Convent 2013-04-14 15:56:14 +02:00
parent dbedab053e
commit 253decc80e
6 changed files with 30 additions and 113 deletions

View File

@ -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

View File

@ -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):
""" """

View File

@ -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):
""" """

View File

@ -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)

View File

@ -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):

View File

@ -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)