From c1a69a1b37f3e2e88d0830c0ba13acfd2d6e3397 Mon Sep 17 00:00:00 2001 From: Jean Jordaan Date: Mon, 18 Nov 2013 12:12:47 +0700 Subject: [PATCH] Allow _ in view and column ids The introduction of SCRIPT_ID_DELIMITER should obviate the need for this restriction. --- Products/CMFPlomino/PlominoColumn.py | 2 -- Products/CMFPlomino/PlominoView.py | 50 +++++++--------------------- Products/CMFPlomino/validator.py | 22 ------------ 3 files changed, 12 insertions(+), 62 deletions(-) diff --git a/Products/CMFPlomino/PlominoColumn.py b/Products/CMFPlomino/PlominoColumn.py index 2f724dc22..5cc8a53e3 100644 --- a/Products/CMFPlomino/PlominoColumn.py +++ b/Products/CMFPlomino/PlominoColumn.py @@ -22,7 +22,6 @@ from Products.CMFPlomino.config import PROJECTNAME from Products.CMFPlomino.browser import PlominoMessageFactory as _ -from validator import isValidPlominoId from Products.CMFPlomino.PlominoUtils import translate import logging @@ -39,7 +38,6 @@ description_msgid=_('CMFPlomino_help_column_id', default="Column id"), i18n_domain='CMFPlomino', ), - validators=("isValidId", isValidPlominoId), ), StringField( name='SelectedField', diff --git a/Products/CMFPlomino/PlominoView.py b/Products/CMFPlomino/PlominoView.py index 47503cf98..b81be11d2 100644 --- a/Products/CMFPlomino/PlominoView.py +++ b/Products/CMFPlomino/PlominoView.py @@ -43,7 +43,6 @@ from PlominoUtils import asUnicode, asList from Products.CMFPlomino.config import * from Products.CMFPlomino.browser import PlominoMessageFactory as _ -from validator import isValidPlominoId import interfaces import logging @@ -59,7 +58,6 @@ description_msgid=_('CMFPlomino_help_view_id', default="If changed after creation, database refresh is needed"), i18n_domain='CMFPlomino', ), - validators = ("isValidId", isValidPlominoId), ), TextField( name='SelectionFormula', @@ -86,23 +84,10 @@ description="Column used to sort the view", format='select', label_msgid=_('CMFPlomino_label_SortColumn', default="Sort column"), - description_msgid=_('CMFPlomino_help_SortColumn', default="Column used to sort the view, and by default for key lookup"), + description_msgid=_('CMFPlomino_help_SortColumn', default="Column used to sort the view"), i18n_domain='CMFPlomino', ), - vocabulary="Column_vocabulary", - schemata="Sorting", - ), - StringField( - name='KeyColumn', - widget=SelectionWidget( - label="Key column", - description="Column used for key lookup", - format='select', - label_msgid=_('CMFPlomino_label_KeyColumn', default="Key column"), - description_msgid=_('CMFPlomino_help_KeyColumn', default="Column used for key lookup, if different from sort column"), - i18n_domain='CMFPlomino', - ), - vocabulary="Column_vocabulary", + vocabulary="SortColumn_vocabulary", schemata="Sorting", ), BooleanField( @@ -437,11 +422,9 @@ def at_post_create_script(self): """ Post create """ db = self.getParentDatabase() - refresh = not db.DoNotReindex db.getIndex().createSelectionIndex( - 'PlominoViewFormula_'+self.getViewName(), - refresh=refresh) - if refresh: + 'PlominoViewFormula_'+self.getViewName()) + if not db.DoNotReindex: self.getParentDatabase().getIndex().refresh() security.declarePublic('declareColumn') @@ -695,30 +678,21 @@ def getPosition(self): security.declarePublic('getDocumentsByKey') def getDocumentsByKey(self, key, getObject=True): - """ Get documents where key or sorted column matches the given key + """ Get documents where the sorted column value matches the given key. """ index = self.getParentDatabase().getIndex() - keycolumn = self.getKeyColumn() - sortcolumn = self.getSortColumn() - - if not (keycolumn or sortcolumn): + sortindex = self.getSortColumn() + if not sortindex: return [] - query = {'PlominoViewFormula_%s' % self.getViewName(): True} - sortkey = None - if keycolumn: - query[self.getIndexKey(keycolumn)] = key - elif sortcolumn: - sortkey = self.getIndexKey(sortcolumn) - query[sortkey] = key - + sortindex = self.getIndexKey(sortindex) results = index.dbsearch( - query, - sortkey, + {'PlominoViewFormula_%s' % self.getViewName(): True, + sortindex: key}, + sortindex, self.getReverseSorting()) if getObject: - # TODO: keep lazy return [d.getObject() for d in results] else: return results @@ -801,7 +775,7 @@ def getIndexKey(self, columnName): key = '' return key - def Column_vocabulary(self): + def SortColumn_vocabulary(self): return [''] + [c.id for c in self.getColumns()] registerType(PlominoView, PROJECTNAME) diff --git a/Products/CMFPlomino/validator.py b/Products/CMFPlomino/validator.py index c32f81ee1..0651f4a6d 100644 --- a/Products/CMFPlomino/validator.py +++ b/Products/CMFPlomino/validator.py @@ -11,25 +11,3 @@ USE_BBB_VALIDATORS = True from zope.interface import implements - - -class PlominoIdValidator: - if USE_BBB_VALIDATORS: - __implements__ = (ivalidator,) - else: - implements(IValidator) - - def __init__(self, name, title='', description=''): - self.name = name - self.title = title or name - self.description = description - - def __call__(self, value, *args, **kwargs): - if '_' in value: - return ("The _ character is not allowed here.") - return True - -isValidPlominoId = PlominoIdValidator( - 'isValidPlominoId', - title='Plomino ids', - description='View and column ids must not contain underscores (_).')