From 6cd0e71f627abbe67486f09ce1ddc7619a91dcf1 Mon Sep 17 00:00:00 2001 From: Tom Gross Date: Mon, 2 Jan 2017 21:35:44 +0100 Subject: [PATCH 1/7] cache expensive vocabulary construction --- .gitignore | 1 + src/collective/taxonomy/vocabulary.py | 1 - src/collective/taxonomy/widget.py | 27 +++++++++++++++++++++++++-- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 55c3069..b0fbc60 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ .coverage .installed.cfg .mr.developer.cfg +local.cfg bin build develop-eggs diff --git a/src/collective/taxonomy/vocabulary.py b/src/collective/taxonomy/vocabulary.py index c6a51b6..6b86123 100644 --- a/src/collective/taxonomy/vocabulary.py +++ b/src/collective/taxonomy/vocabulary.py @@ -20,7 +20,6 @@ class TaxonomyVocabulary(object): implements(IVocabularyFactory) def __call__(self, adapter): - results = [] sm = getSite().getSiteManager() utilities = sm.getUtilitiesFor(ITaxonomy) return SimpleVocabulary([ diff --git a/src/collective/taxonomy/widget.py b/src/collective/taxonomy/widget.py index 49b20b4..2f9c320 100644 --- a/src/collective/taxonomy/widget.py +++ b/src/collective/taxonomy/widget.py @@ -1,3 +1,5 @@ +from time import time +from plone.memoize import ram import zope.interface import zope.component import zope.schema.interfaces @@ -5,13 +7,34 @@ from z3c.form import interfaces from z3c.form.browser.orderedselect import OrderedSelectWidget from z3c.form.widget import FieldWidget +from z3c.form.widget import SequenceWidget +from z3c.form.browser import widget from interfaces import ITaxonomySelectWidget +ONE_DAY = 60 * 60 * 24 + +@zope.interface.implementer(ITaxonomySelectWidget, + interfaces.IOrderedSelectWidget) class TaxonomySelectWidget(OrderedSelectWidget): - zope.interface.implements(ITaxonomySelectWidget, - interfaces.IOrderedSelectWidget) + + @ram.cache(lambda *args: time() // ONE_DAY) + def _get_items(self): + return [ + self.getItem(term, count) + for count, term in enumerate(self.terms) + ] + + def update(self): + """See z3c.form.interfaces.IWidget.""" + SequenceWidget.update(self) + widget.addFieldClass(self) + self.items = self._get_items() + self.selectedItems = [ + self.getItem(self.terms.getTermByToken(token), count) + for count, token in enumerate(self.value)] + self.notselectedItems = self.deselect() @zope.component.adapter(zope.schema.interfaces.ISequence, From 04afde6c282efd8edca6c8f7fca48f109356cb23 Mon Sep 17 00:00:00 2001 From: Tom Gross Date: Thu, 12 Jan 2017 10:44:06 +0000 Subject: [PATCH 2/7] change cache key for taxonomy --- src/collective/taxonomy/widget.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/collective/taxonomy/widget.py b/src/collective/taxonomy/widget.py index 2f9c320..665ce05 100644 --- a/src/collective/taxonomy/widget.py +++ b/src/collective/taxonomy/widget.py @@ -15,11 +15,19 @@ ONE_DAY = 60 * 60 * 24 +def _cache_one_day(fun, self): + key = '{0}{1}'.format( + self.field.__name__, + time() // ONE_DAY + ) + return key + + @zope.interface.implementer(ITaxonomySelectWidget, interfaces.IOrderedSelectWidget) class TaxonomySelectWidget(OrderedSelectWidget): - @ram.cache(lambda *args: time() // ONE_DAY) + @ram.cache(_cache_one_day) def _get_items(self): return [ self.getItem(term, count) From e158e8265a01eaf6b78b00db32f9f89672c5f0f0 Mon Sep 17 00:00:00 2001 From: Tom Gross Date: Thu, 1 Jun 2017 12:24:52 +0000 Subject: [PATCH 3/7] Fix MANIFEST.in --- MANIFEST.in | 23 ++--------------------- setup.py | 1 + 2 files changed, 3 insertions(+), 21 deletions(-) diff --git a/MANIFEST.in b/MANIFEST.in index 0b729dd..3931479 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -4,24 +4,5 @@ include .coveragerc include buildout.cfg include travis.cfg recursive-include images *.gif -recursive-include src *.babelrc -recursive-include src *.cfg -recursive-include src *.css -recursive-include src *.eot -recursive-include src *.eslintignore -recursive-include src *.eslintrc -recursive-include src *.gitkeep -recursive-include src *.html -recursive-include src *.js -recursive-include src *.json -recursive-include src *.map -recursive-include src *.po -recursive-include src *.pot -recursive-include src *.pt -recursive-include src *.sh -recursive-include src *.svg -recursive-include src *.ttf -recursive-include src *.txt -recursive-include src *.woff -recursive-include src *.xml -recursive-include src *.zcml +graft src +global-exclude *.pyc diff --git a/setup.py b/setup.py index 2f28fb4..9dd71b2 100644 --- a/setup.py +++ b/setup.py @@ -16,6 +16,7 @@ def read(*pathnames): name='collective.taxonomy', version=version, description="Create, edit and use hierarchical taxonomies in Plone!", + url='http://pypi.python.org/pypi/collective.taxonomy', long_description='\n'.join([ read('README.rst'), read('CHANGES.rst'), From c3a5a24c52339a01664d46da837a6a4b369b065b Mon Sep 17 00:00:00 2001 From: Tom Gross Date: Thu, 1 Jun 2017 12:25:27 +0000 Subject: [PATCH 4/7] Preparing release 1.4.4.post1 --- CHANGES.rst | 4 ++-- setup.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index c499167..5da313b 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -2,8 +2,8 @@ Changes ======= -1.4.5 (unreleased) ------------------- +1.4.4.post1 (2017-06-01) +------------------------ - Add explicit dependency on plone.api >= 1.5 which the api.portal.get_current_language api was introduced. diff --git a/setup.py b/setup.py index 9dd71b2..e339483 100644 --- a/setup.py +++ b/setup.py @@ -10,7 +10,7 @@ def read(*pathnames): fh = open(os.path.join(os.path.dirname(__file__), *pathnames)) return fh.read().decode('utf-8') -version = '1.4.5.dev0' +version = '1.4.4.post1' setup( name='collective.taxonomy', From 30d7d28a60716aab3c5fadd0912065493e8b3da6 Mon Sep 17 00:00:00 2001 From: Tom Gross Date: Thu, 1 Jun 2017 12:25:53 +0000 Subject: [PATCH 5/7] Back to development: 1.4.5 --- CHANGES.rst | 6 ++++++ setup.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index 5da313b..35ae5de 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -2,6 +2,12 @@ Changes ======= +1.4.5 (unreleased) +------------------ + +- Nothing changed yet. + + 1.4.4.post1 (2017-06-01) ------------------------ diff --git a/setup.py b/setup.py index e339483..9dd71b2 100644 --- a/setup.py +++ b/setup.py @@ -10,7 +10,7 @@ def read(*pathnames): fh = open(os.path.join(os.path.dirname(__file__), *pathnames)) return fh.read().decode('utf-8') -version = '1.4.4.post1' +version = '1.4.5.dev0' setup( name='collective.taxonomy', From 0b6958a15888e0bf4297746e2f1b18f3e721a0d9 Mon Sep 17 00:00:00 2001 From: Peter Mathis Date: Tue, 10 Jul 2018 23:41:52 +0200 Subject: [PATCH 6/7] make cachekey more generic --- src/collective/taxonomy/widget.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/collective/taxonomy/widget.py b/src/collective/taxonomy/widget.py index 665ce05..795d481 100644 --- a/src/collective/taxonomy/widget.py +++ b/src/collective/taxonomy/widget.py @@ -1,24 +1,24 @@ -from time import time -from plone.memoize import ram -import zope.interface +# -*- coding: utf-8 -*- import zope.component +import zope.interface import zope.schema.interfaces +from plone.memoize import ram + from z3c.form import interfaces +from z3c.form.browser import widget from z3c.form.browser.orderedselect import OrderedSelectWidget from z3c.form.widget import FieldWidget from z3c.form.widget import SequenceWidget -from z3c.form.browser import widget from interfaces import ITaxonomySelectWidget -ONE_DAY = 60 * 60 * 24 - -def _cache_one_day(fun, self): - key = '{0}{1}'.format( +def _items_cachekey(fun, self): + key = '{0}-{1}'.format( self.field.__name__, - time() // ONE_DAY + # self.terms.terms contains the Taxonomy utility + self.terms.terms.data._p_mtime, ) return key @@ -27,7 +27,7 @@ def _cache_one_day(fun, self): interfaces.IOrderedSelectWidget) class TaxonomySelectWidget(OrderedSelectWidget): - @ram.cache(_cache_one_day) + @ram.cache(_items_cachekey) def _get_items(self): return [ self.getItem(term, count) From 7655c8e95a8025072709bf0c9c5199cd95b7222e Mon Sep 17 00:00:00 2001 From: Peter Mathis Date: Wed, 11 Jul 2018 00:00:01 +0200 Subject: [PATCH 7/7] use super().update() for TaxonomySelectWidget --- src/collective/taxonomy/widget.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/collective/taxonomy/widget.py b/src/collective/taxonomy/widget.py index 795d481..287abe0 100644 --- a/src/collective/taxonomy/widget.py +++ b/src/collective/taxonomy/widget.py @@ -6,10 +6,8 @@ from plone.memoize import ram from z3c.form import interfaces -from z3c.form.browser import widget from z3c.form.browser.orderedselect import OrderedSelectWidget from z3c.form.widget import FieldWidget -from z3c.form.widget import SequenceWidget from interfaces import ITaxonomySelectWidget @@ -36,8 +34,7 @@ def _get_items(self): def update(self): """See z3c.form.interfaces.IWidget.""" - SequenceWidget.update(self) - widget.addFieldClass(self) + super(TaxonomySelectWidget, self).update() self.items = self._get_items() self.selectedItems = [ self.getItem(self.terms.getTermByToken(token), count)