diff --git a/.travis.yml b/.travis.yml index 5bc7a878..96068a69 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,6 +7,11 @@ matrix: include: - python: "3.7" dist: xenial + - python: 3.6 + name: "Flake8" + install: pip install -U flake8 + script: flake8 --doctests src setup.py + after_success: install: - pip install zc.buildout - pip install coveralls coverage diff --git a/CHANGES.rst b/CHANGES.rst index f7fd9231..6e9584cf 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,7 +4,7 @@ Changelog 4.4 (unreleased) ---------------- -- Nothing changed yet. +- Flake8 the code. 4.3 (2019-02-08) diff --git a/setup.cfg b/setup.cfg index 1bb9be01..9590533d 100644 --- a/setup.cfg +++ b/setup.cfg @@ -4,7 +4,7 @@ ignore = bootstrap.py [flake8] -ignore = E301 +ignore = W503 # line break before binary operator exclude = bootstrap.py [bdist_wheel] diff --git a/setup.py b/setup.py index e8d799ef..0da50e62 100644 --- a/setup.py +++ b/setup.py @@ -22,8 +22,9 @@ description="Zope's indexing and search solution.", author='Zope Foundation and Contributors', author_email='zope-dev@zope.org', - long_description=(open('README.rst').read() + '\n' + - open('CHANGES.rst').read()), + long_description=(open('README.rst').read() + + '\n' + + open('CHANGES.rst').read()), packages=find_packages('src'), namespace_packages=['Products'], package_dir={'': 'src'}, diff --git a/src/Products/PluginIndexes/DateRangeIndex/tests.py b/src/Products/PluginIndexes/DateRangeIndex/tests.py index 7598986a..36fffc6e 100644 --- a/src/Products/PluginIndexes/DateRangeIndex/tests.py +++ b/src/Products/PluginIndexes/DateRangeIndex/tests.py @@ -58,8 +58,8 @@ def matchingDummiesByTimeValue(value, precision=1): for i, dummy in dummies: start = datetime_to_minutes(dummy.start(), precision) stop = datetime_to_minutes(dummy.stop(), precision) - if ((start is None or start <= value) and - (stop is None or stop >= value)): + if ((start is None or start <= value) + and (stop is None or stop >= value)): result.append((i, dummy)) return result diff --git a/src/Products/ZCTextIndex/BaseIndex.py b/src/Products/ZCTextIndex/BaseIndex.py index e95227ea..56f93d73 100644 --- a/src/Products/ZCTextIndex/BaseIndex.py +++ b/src/Products/ZCTextIndex/BaseIndex.py @@ -274,8 +274,8 @@ def _add_wordinfo(self, wid, f, docid): # Obscure: First check the type. If it's not a dict, it # can't need conversion, and then we can avoid an expensive # len(IIBTree). - if (isinstance(doc2score, type({})) and - len(doc2score) == self.DICT_CUTOFF): + if (isinstance(doc2score, type({})) + and len(doc2score) == self.DICT_CUTOFF): doc2score = IIBTree(doc2score) doc2score[docid] = f self._wordinfo[wid] = doc2score # not redundant: Persistency! @@ -297,8 +297,8 @@ def _mass_add_wordinfo(self, wid2weight, docid): if doc2score is None: doc2score = {} new_word_count += 1 - elif (isinstance(doc2score, dicttype) and - len(doc2score) == self.DICT_CUTOFF): + elif (isinstance(doc2score, dicttype) + and len(doc2score) == self.DICT_CUTOFF): doc2score = IIBTree(doc2score) doc2score[docid] = weight self._wordinfo[wid] = doc2score # not redundant: Persistency! diff --git a/src/Products/ZCTextIndex/ZCTextIndex.py b/src/Products/ZCTextIndex/ZCTextIndex.py index 518ba952..aa8fe94d 100644 --- a/src/Products/ZCTextIndex/ZCTextIndex.py +++ b/src/Products/ZCTextIndex/ZCTextIndex.py @@ -113,10 +113,9 @@ def __init__(self, id, extra=None, caller=None, index_factory=None, self.index = self._index_factory(aq_base(self.getLexicon())) - security.declarePrivate('getLexicon') + @security.private def getLexicon(self): - """Get the lexicon for this index - """ + """Get the lexicon for this index.""" if hasattr(aq_base(self), 'lexicon'): # Fix up old ZCTextIndexes by removing direct lexicon ref # and changing it to an ID @@ -144,7 +143,7 @@ def getLexicon(self): # External methods not in the Pluggable Index API - security.declareProtected(search_zcatalog, 'query') + @security.protected(search_zcatalog) def query(self, query, nbest=10): """Return pair (mapping from docids to scores, num results). @@ -348,7 +347,7 @@ def getPipelineNames(self): _queryLexicon = DTMLFile('dtml/queryLexicon', globals()) - security.declareProtected(LexiconQueryPerm, 'queryLexicon') + @security.protected(LexiconQueryPerm) def queryLexicon(self, REQUEST, words=None, page=0, rows=20, cols=4): """Lexicon browser/query user interface """ @@ -363,8 +362,9 @@ def queryLexicon(self, REQUEST, words=None, page=0, rows=20, cols=4): word_count = len(words) rows = max(min(rows, 500), 1) cols = max(min(cols, 12), 1) - page_count = (word_count / (rows * cols) + - (word_count % (rows * cols) > 0)) + page_count = (word_count + / (rows * cols) + + (word_count % (rows * cols) > 0)) page = max(min(page, page_count - 1), 0) start = rows * cols * page end = min(rows * cols * (page + 1), word_count) diff --git a/src/Products/ZCTextIndex/tests/testZCTextIndex.py b/src/Products/ZCTextIndex/tests/testZCTextIndex.py index 4c67e376..51579894 100644 --- a/src/Products/ZCTextIndex/tests/testZCTextIndex.py +++ b/src/Products/ZCTextIndex/tests/testZCTextIndex.py @@ -284,6 +284,7 @@ def testLexiconIsNotFoundRaisesLookupError(self): def testInvalidIndexTypeRaisesValueError(self): caller = LexiconHolder(self.lexicon) + class Extra(object): index_type = 'Some invalid index type' with self.assertRaises(ValueError): diff --git a/src/Products/ZCatalog/ProgressHandler.py b/src/Products/ZCatalog/ProgressHandler.py index bd1f58a1..a2f0d8ed 100644 --- a/src/Products/ZCatalog/ProgressHandler.py +++ b/src/Products/ZCatalog/ProgressHandler.py @@ -11,6 +11,7 @@ # ############################################################################## +from __future__ import print_function import sys import time from logging import getLogger @@ -52,15 +53,16 @@ def report(self, current, *args, **kw): if self.savepoint: transaction.savepoint(optimistic=True) seconds_so_far = time.time() - self._start - seconds_to_go = (seconds_so_far / current * - (self._max - current)) + seconds_to_go = (seconds_so_far + / current + * (self._max - current)) end = DateTime(time.time() + seconds_to_go) self.output('%d/%d (%.2f%%) Estimated termination: %s' % (current, self._max, (100.0 * current / self._max), end.strftime('%Y/%m/%d %H:%M:%Sh'))) def output(self, text): - print >> self.fp, '%s: %s' % (self._ident, text) + print('%s: %s' % (self._ident, text), file=self.fp) class ZLogHandler(StdoutHandler): diff --git a/src/Products/ZCatalog/ZCatalog.py b/src/Products/ZCatalog/ZCatalog.py index eaa39306..0f605ddc 100644 --- a/src/Products/ZCatalog/ZCatalog.py +++ b/src/Products/ZCatalog/ZCatalog.py @@ -176,7 +176,7 @@ def __init__(self, id, title='', vocab_id=None, container=None): def __len__(self): return len(self._catalog) - security.declareProtected(manage_zcatalog_entries, 'manage_edit') + @security.protected(manage_zcatalog_entries) def manage_edit(self, RESPONSE, URL1, threshold=1000, REQUEST=None): """ edit the catalog """ if not isinstance(threshold, int): @@ -186,7 +186,7 @@ def manage_edit(self, RESPONSE, URL1, threshold=1000, REQUEST=None): RESPONSE.redirect( URL1 + '/manage_main?manage_tabs_message=Catalog%20Changed') - security.declareProtected(manage_zcatalog_entries, 'manage_subbingToggle') + @security.protected(manage_zcatalog_entries) def manage_subbingToggle(self, REQUEST, RESPONSE, URL1): """ toggle subtransactions """ if self.threshold: @@ -195,10 +195,10 @@ def manage_subbingToggle(self, REQUEST, RESPONSE, URL1): self.threshold = 10000 RESPONSE.redirect( - URL1 + - '/manage_catalogAdvanced?manage_tabs_message=Catalog%20Changed') + URL1 + + '/manage_catalogAdvanced?manage_tabs_message=Catalog%20Changed') - security.declareProtected(manage_zcatalog_entries, 'manage_catalogObject') + @security.protected(manage_zcatalog_entries) def manage_catalogObject(self, REQUEST, RESPONSE, URL1, urls=None): """ index Zope object(s) that 'urls' point to """ if urls: @@ -213,11 +213,10 @@ def manage_catalogObject(self, REQUEST, RESPONSE, URL1, urls=None): self.catalog_object(obj, url) RESPONSE.redirect( - URL1 + - '/manage_catalogView?manage_tabs_message=Object%20Cataloged') + URL1 + + '/manage_catalogView?manage_tabs_message=Object%20Cataloged') - security.declareProtected(manage_zcatalog_entries, - 'manage_uncatalogObject') + @security.protected(manage_zcatalog_entries) def manage_uncatalogObject(self, REQUEST, RESPONSE, URL1, urls=None): """ removes Zope object(s) 'urls' from catalog """ @@ -229,10 +228,10 @@ def manage_uncatalogObject(self, REQUEST, RESPONSE, URL1, urls=None): self.uncatalog_object(url) RESPONSE.redirect( - URL1 + - '/manage_catalogView?manage_tabs_message=Object%20Uncataloged') + URL1 + + '/manage_catalogView?manage_tabs_message=Object%20Uncataloged') - security.declareProtected(manage_zcatalog_entries, 'manage_catalogReindex') + @security.protected(manage_zcatalog_entries) def manage_catalogReindex(self, REQUEST, RESPONSE, URL1): """ clear the catalog, then re-index everything """ @@ -247,13 +246,13 @@ def manage_catalogReindex(self, REQUEST, RESPONSE, URL1): c_elapse = time.clock() - c_elapse RESPONSE.redirect( - URL1 + - '/manage_catalogAdvanced?manage_tabs_message=' + - quote('Catalog Updated \n' - 'Total time: %r\n' - 'Total CPU time: %r' % (elapse, c_elapse))) + URL1 + + '/manage_catalogAdvanced?manage_tabs_message=' + + quote('Catalog Updated \n' + 'Total time: %r\n' + 'Total CPU time: %r' % (elapse, c_elapse))) - security.declareProtected(manage_zcatalog_entries, 'refreshCatalog') + @security.protected(manage_zcatalog_entries) def refreshCatalog(self, clear=0, pghandler=None): """ re-index everything we can find """ @@ -288,7 +287,7 @@ def refreshCatalog(self, clear=0, pghandler=None): if pghandler: pghandler.finish() - security.declareProtected(manage_zcatalog_entries, 'manage_catalogClear') + @security.protected(manage_zcatalog_entries) def manage_catalogClear(self, REQUEST=None, RESPONSE=None, URL1=None): """ clears the whole enchilada """ self._catalog.clear() @@ -298,8 +297,7 @@ def manage_catalogClear(self, REQUEST=None, RESPONSE=None, URL1=None): '/manage_catalogAdvanced?' 'manage_tabs_message=Catalog%20Cleared')) - security.declareProtected(manage_zcatalog_entries, - 'manage_catalogFoundItems') + @security.protected(manage_zcatalog_entries) def manage_catalogFoundItems(self, REQUEST, RESPONSE, URL2, URL1, obj_metatypes=None, obj_ids=None, obj_searchterm=None, @@ -332,23 +330,23 @@ def manage_catalogFoundItems(self, REQUEST, RESPONSE, URL2, URL1, c_elapse = time.clock() - c_elapse RESPONSE.redirect( - URL1 + - '/manage_catalogView?manage_tabs_message=' + - quote('Catalog Updated\n' - 'Total time: %r\n' - 'Total CPU time: %r' % (elapse, c_elapse))) + URL1 + + '/manage_catalogView?manage_tabs_message=' + + quote('Catalog Updated\n' + 'Total time: %r\n' + 'Total CPU time: %r' % (elapse, c_elapse))) - security.declareProtected(manage_zcatalog_entries, 'manage_addColumn') + @security.protected(manage_zcatalog_entries) def manage_addColumn(self, name, REQUEST=None, RESPONSE=None, URL1=None): """ add a column """ self.addColumn(name) if REQUEST and RESPONSE: RESPONSE.redirect( - URL1 + - '/manage_catalogSchema?manage_tabs_message=Column%20Added') + URL1 + + '/manage_catalogSchema?manage_tabs_message=Column%20Added') - security.declareProtected(manage_zcatalog_entries, 'manage_delColumn') + @security.protected(manage_zcatalog_entries) def manage_delColumn(self, names, REQUEST=None, RESPONSE=None, URL1=None): """ delete a column or some columns """ if isinstance(names, str): @@ -359,10 +357,10 @@ def manage_delColumn(self, names, REQUEST=None, RESPONSE=None, URL1=None): if REQUEST and RESPONSE: RESPONSE.redirect( - URL1 + - '/manage_catalogSchema?manage_tabs_message=Column%20Deleted') + URL1 + + '/manage_catalogSchema?manage_tabs_message=Column%20Deleted') - security.declareProtected(manage_zcatalog_entries, 'manage_addIndex') + @security.protected(manage_zcatalog_entries) def manage_addIndex(self, name, type, extra=None, REQUEST=None, RESPONSE=None, URL1=None): """add an index """ @@ -370,10 +368,10 @@ def manage_addIndex(self, name, type, extra=None, if REQUEST and RESPONSE: RESPONSE.redirect( - URL1 + - '/manage_catalogIndexes?manage_tabs_message=Index%20Added') + URL1 + + '/manage_catalogIndexes?manage_tabs_message=Index%20Added') - security.declareProtected(manage_zcatalog_entries, 'manage_delIndex') + @security.protected(manage_zcatalog_entries) def manage_delIndex(self, ids=None, REQUEST=None, RESPONSE=None, URL1=None): """ delete an index or some indexes """ @@ -388,10 +386,10 @@ def manage_delIndex(self, ids=None, if REQUEST and RESPONSE: RESPONSE.redirect( - URL1 + - '/manage_catalogIndexes?manage_tabs_message=Index%20Deleted') + URL1 + + '/manage_catalogIndexes?manage_tabs_message=Index%20Deleted') - security.declareProtected(manage_zcatalog_entries, 'manage_clearIndex') + @security.protected(manage_zcatalog_entries) def manage_clearIndex(self, ids=None, REQUEST=None, RESPONSE=None, URL1=None): """ clear an index or some indexes """ @@ -406,10 +404,10 @@ def manage_clearIndex(self, ids=None, if REQUEST and RESPONSE: RESPONSE.redirect( - URL1 + - '/manage_catalogIndexes?manage_tabs_message=Index%20Cleared') + URL1 + + '/manage_catalogIndexes?manage_tabs_message=Index%20Cleared') - security.declareProtected(manage_zcatalog_entries, 'reindexIndex') + @security.protected(manage_zcatalog_entries) def reindexIndex(self, name, REQUEST, pghandler=None): if isinstance(name, str): name = (name, ) @@ -440,7 +438,7 @@ def reindexIndex(self, name, REQUEST, pghandler=None): if pghandler: pghandler.finish() - security.declareProtected(manage_zcatalog_entries, 'manage_reindexIndex') + @security.protected(manage_zcatalog_entries) def manage_reindexIndex(self, ids=None, REQUEST=None, RESPONSE=None, URL1=None): """Reindex indexe(s) from a ZCatalog""" @@ -453,11 +451,11 @@ def manage_reindexIndex(self, ids=None, REQUEST=None, RESPONSE=None, if REQUEST and RESPONSE: RESPONSE.redirect( - URL1 + - '/manage_catalogIndexes' - '?manage_tabs_message=Reindexing%20Performed') + URL1 + + '/manage_catalogIndexes' + '?manage_tabs_message=Reindexing%20Performed') - security.declarePrivate('maintain_zodb_cache') + @security.private def maintain_zodb_cache(self): # self.threshold represents the number of times that catalog_object # needs to be called in order for the catalog to commit @@ -481,7 +479,7 @@ def maintain_zodb_cache(self): return True return False - security.declareProtected(manage_zcatalog_entries, 'catalog_object') + @security.protected(manage_zcatalog_entries) def catalog_object(self, obj, uid=None, idxs=None, update_metadata=1, pghandler=None): if uid is None: @@ -509,73 +507,73 @@ def catalog_object(self, obj, uid=None, idxs=None, update_metadata=1, if pghandler: pghandler.info('committing subtransaction') - security.declareProtected(manage_zcatalog_entries, 'uncatalog_object') + @security.protected(manage_zcatalog_entries) def uncatalog_object(self, uid): self._catalog.uncatalogObject(uid) - security.declareProtected(search_zcatalog, 'uniqueValuesFor') + @security.protected(search_zcatalog) def uniqueValuesFor(self, name): # Return the unique values for a given FieldIndex return self._catalog.uniqueValuesFor(name) - security.declareProtected(search_zcatalog, 'getpath') + @security.protected(search_zcatalog) def getpath(self, rid): # Return the path to a cataloged object given a 'data_record_id_' return self._catalog.paths[rid] - security.declareProtected(search_zcatalog, 'getrid') + @security.protected(search_zcatalog) def getrid(self, path, default=None): # Return 'data_record_id_' the to a cataloged object given a 'path' return self._catalog.uids.get(path, default) - security.declareProtected(search_zcatalog, 'getobject') + @security.protected(search_zcatalog) def getobject(self, rid, REQUEST=None): # Return a cataloged object given a 'data_record_id_' return aq_parent(self).unrestrictedTraverse(self.getpath(rid)) - security.declareProtected(search_zcatalog, 'getMetadataForUID') + @security.protected(search_zcatalog) def getMetadataForUID(self, uid): # return the correct metadata given the uid, usually the path rid = self._catalog.uids[uid] return self._catalog.getMetadataForRID(rid) - security.declareProtected(search_zcatalog, 'getIndexDataForUID') + @security.protected(search_zcatalog) def getIndexDataForUID(self, uid): # return the current index contents given the uid, usually the path rid = self._catalog.uids[uid] return self._catalog.getIndexDataForRID(rid) - security.declareProtected(search_zcatalog, 'getMetadataForRID') + @security.protected(search_zcatalog) def getMetadataForRID(self, rid): # return the correct metadata for the cataloged record id return self._catalog.getMetadataForRID(int(rid)) - security.declareProtected(search_zcatalog, 'getIndexDataForRID') + @security.protected(search_zcatalog) def getIndexDataForRID(self, rid): # return the current index contents for the specific rid return self._catalog.getIndexDataForRID(rid) - security.declareProtected(search_zcatalog, 'getAllBrains') + @security.protected(search_zcatalog) def getAllBrains(self): # return a generator of brains for all cataloged objects for rid in self._catalog.data: yield self._catalog[rid] - security.declareProtected(search_zcatalog, 'schema') + @security.protected(search_zcatalog) def schema(self): return self._catalog.schema.keys() - security.declareProtected(search_zcatalog, 'indexes') + @security.protected(search_zcatalog) def indexes(self): return self._catalog.indexes.keys() - security.declareProtected(search_zcatalog, 'index_objects') + @security.protected(search_zcatalog) def index_objects(self): # This method returns unwrapped indexes! # You should probably use getIndexObjects instead return self._catalog.indexes.values() - security.declareProtected(manage_zcatalog_indexes, 'getIndexObjects') + @security.protected(manage_zcatalog_indexes) def getIndexObjects(self): # Return a list of wrapped(!) indexes getIndex = self._catalog.getIndex @@ -603,7 +601,7 @@ def _searchable_result_columns(self): 'width': 8}) return r - security.declareProtected(search_zcatalog, 'searchResults') + @security.protected(search_zcatalog) def searchResults(self, query=None, **kw): """Search the catalog. @@ -614,7 +612,7 @@ def searchResults(self, query=None, **kw): security.declareProtected(search_zcatalog, '__call__') __call__ = searchResults - security.declareProtected(search_zcatalog, 'search') + @security.protected(search_zcatalog) def search(self, query, sort_index=None, reverse=0, limit=None, merge=1): """Programmatic search interface, use for searching the catalog from @@ -632,7 +630,7 @@ def search(self, query, return self._catalog.search( query, sort_index, reverse, limit, merge) - security.declareProtected(search_zcatalog, 'valid_roles') + @security.protected(search_zcatalog) def valid_roles(self): # Return list of valid roles obj = self @@ -650,7 +648,7 @@ def valid_roles(self): roles.sort() return roles - security.declareProtected(manage_zcatalog_entries, 'ZopeFindAndApply') + @security.protected(manage_zcatalog_entries) def ZopeFindAndApply(self, obj, obj_ids=None, obj_metatypes=None, obj_searchterm=None, obj_expr=None, obj_mtime=None, obj_mspec=None, @@ -712,17 +710,19 @@ def ZopeFindAndApply(self, obj, obj_ids=None, obj_metatypes=None, bs = aq_base(ob) - if ((not obj_ids or absattr(bs.id) in obj_ids) and - (not obj_metatypes or (hasattr(bs, 'meta_type') and - bs.meta_type in obj_metatypes)) and - (not obj_searchterm or - (hasattr(ob, 'PrincipiaSearchSource') and - ob.PrincipiaSearchSource().find(obj_searchterm) >= 0)) and - (not obj_expr or expr_match(ob, obj_expr)) and - (not obj_mtime or mtime_match(ob, obj_mtime, obj_mspec)) and - ((not obj_permission or not obj_roles) or - role_match(ob, obj_permission, obj_roles))): - + if ((not obj_ids or absattr(bs.id) in obj_ids) + and (not obj_metatypes or (hasattr(bs, 'meta_type') + and bs.meta_type in obj_metatypes)) + and (not obj_searchterm + or (hasattr(ob, 'PrincipiaSearchSource') + and ob.PrincipiaSearchSource().find(obj_searchterm) >= 0)) # noqa: E501 + and (not obj_expr + or expr_match(ob, obj_expr)) + and (not obj_mtime + or mtime_match(ob, obj_mtime, obj_mspec)) + and ((not obj_permission + or not obj_roles) + or role_match(ob, obj_permission, obj_roles))): if apply_func: apply_func(ob, (apply_path + '/' + p)) else: @@ -742,7 +742,7 @@ def ZopeFindAndApply(self, obj, obj_ids=None, obj_metatypes=None, return result - security.declareProtected(search_zcatalog, 'resolve_url') + @security.protected(search_zcatalog) def resolve_url(self, path, REQUEST): # Attempt to resolve a url into an object in the Zope # namespace. The url may be absolute or a catalog path @@ -757,7 +757,7 @@ def resolve_url(self, path, REQUEST): except Exception: pass - security.declareProtected(search_zcatalog, 'resolve_path') + @security.protected(search_zcatalog) def resolve_path(self, path): # Attempt to resolve a url into an object in the Zope # namespace. The url may be absolute or a catalog path @@ -768,8 +768,7 @@ def resolve_path(self, path): except Exception: pass - security.declareProtected(manage_zcatalog_entries, - 'manage_normalize_paths') + @security.protected(manage_zcatalog_entries) def manage_normalize_paths(self, REQUEST): """Ensure that all catalog paths are full physical paths @@ -805,7 +804,7 @@ def manage_normalize_paths(self, REQUEST): for path in removed: self.uncatalog_object(path) - security.declareProtected(manage_zcatalog_entries, 'manage_setProgress') + @security.protected(manage_zcatalog_entries) def manage_setProgress(self, pgthreshold=0, RESPONSE=None, URL1=None): """Set parameter to perform logging of reindexing operations very 'pgthreshold' objects @@ -822,7 +821,7 @@ def _getProgressThreshold(self): # Indexing methods - security.declareProtected(manage_zcatalog_indexes, 'addIndex') + @security.protected(manage_zcatalog_indexes) def addIndex(self, name, type, extra=None): if IPluggableIndex.providedBy(type): self._catalog.addIndex(name, type) @@ -862,26 +861,26 @@ def addIndex(self, name, type, extra=None): self._catalog.addIndex(name, index) - security.declareProtected(manage_zcatalog_indexes, 'delIndex') + @security.protected(manage_zcatalog_indexes) def delIndex(self, name): self._catalog.delIndex(name) - security.declareProtected(manage_zcatalog_indexes, 'clearIndex') + @security.protected(manage_zcatalog_indexes) def clearIndex(self, name): self._catalog.getIndex(name).clear() - security.declareProtected(manage_zcatalog_indexes, 'addColumn') + @security.protected(manage_zcatalog_indexes) def addColumn(self, name, default_value=None): return self._catalog.addColumn(name, default_value, threshold=self.threshold) - security.declareProtected(manage_zcatalog_indexes, 'delColumn') + @security.protected(manage_zcatalog_indexes) def delColumn(self, name): return self._catalog.delColumn(name, threshold=self.threshold) # Catalog plan methods - security.declareProtected(manage_zcatalog_entries, 'getCatalogPlan') + @security.protected(manage_zcatalog_entries) def getCatalogPlan(self): """Get a string representation of a query plan""" pmap = PriorityMap.get_value() @@ -904,15 +903,14 @@ def getCatalogPlan(self): output.append('}') return '\n'.join(output) - security.declareProtected(manage_zcatalog_entries, 'getCatalogReport') + @security.protected(manage_zcatalog_entries) def getCatalogReport(self): """Query time reporting.""" rval = self._catalog.getCatalogPlan().report() rval.sort(key=operator.itemgetter('duration'), reverse=True) return rval - security.declareProtected(manage_zcatalog_entries, - 'manage_resetCatalogReport') + @security.protected(manage_zcatalog_entries) def manage_resetCatalogReport(self, REQUEST=None): """Resets the catalog report.""" self._catalog.getCatalogPlan().reset() @@ -921,8 +919,7 @@ def manage_resetCatalogReport(self, REQUEST=None): REQUEST.response.redirect(REQUEST.URL1 + ( '/manage_catalogReport?manage_tabs_message=Report%20cleared')) - security.declareProtected(manage_zcatalog_entries, - 'manage_editCatalogReport') + @security.protected(manage_zcatalog_entries) def manage_editCatalogReport(self, long_query_time=0.1, REQUEST=None): """Edit the long query time.""" if not isinstance(long_query_time, float): diff --git a/src/Products/ZCatalog/ZCatalogIndexes.py b/src/Products/ZCatalog/ZCatalogIndexes.py index 656124bc..7a4f2f13 100644 --- a/src/Products/ZCatalog/ZCatalogIndexes.py +++ b/src/Products/ZCatalog/ZCatalogIndexes.py @@ -72,7 +72,7 @@ def _getOb(self, id, default=_marker): return indexes.get(id) return indexes.get(id, default) - security.declareProtected(manage_zcatalog_indexes, 'objectIds') + @security.protected(manage_zcatalog_indexes) def objectIds(self, spec=None): indexes = aq_parent(aq_inner(self))._catalog.indexes if spec is not None: