From f7d6479e31c9d2305eb437c00cfdd1dabdd1111f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Benoi=CC=82t=20Pin?= Date: Tue, 8 Jul 2014 14:45:29 +0200 Subject: [PATCH] =?utf8?q?R=C3=A9utilisation=20de=20la=20connexion=20Solr,?= =?utf8?q?=20pour=20ne=20pas=20en=20ouvrir=20plus=20que=20n=C3=A9cessaire.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- catalog.py | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/catalog.py b/catalog.py index 4b925bf..05cbd59 100644 --- a/catalog.py +++ b/catalog.py @@ -18,17 +18,21 @@ from BTrees.IIBTree import intersection, IISet from BTrees.IIBTree import weightedIntersection import warnings +_VOLATILE_SOLR_NAME = '_v_solrConnection' + class SolrTransactionHook : ''' commit solr couplé sur le commit de la ZODB ''' - def __init__(self, connection) : - self.connection = connection + def __init__(self, context) : + self.context = context def __call__(self, status) : + con = getattr(self.context, _VOLATILE_SOLR_NAME) if status : - self.connection.commit() - self.connection.close() + con.commit() + con.close() else : - self.connection.close() + con.close() + delattr(self.context, _VOLATILE_SOLR_NAME) class CatalogTool(BaseCatalogTool) : meta_type = 'Plinn Catalog' @@ -45,6 +49,14 @@ class CatalogTool(BaseCatalogTool) : self.solr_url = 'http://localhost:8983/solr' self.delegatedIndexes = ('Title', 'Description', 'SearchableText') + def _getSolrConnection(self) : + if not hasattr(self, _VOLATILE_SOLR_NAME) : + con = SolrConnection(self.solr_url) + setattr(self, _VOLATILE_SOLR_NAME, con) + txn = transaction.get() + txn.addAfterCommitHook(SolrTransactionHook(self)) + return getattr(self, _VOLATILE_SOLR_NAME) + security.declarePrivate('solrAdd') def solrAdd(self, object, idxs=[], uid=None) : if IIndexableObject.providedBy(object): @@ -61,10 +73,8 @@ class CatalogTool(BaseCatalogTool) : for name in idxs : attr = getattr(w, name, '') data[name] = attr() if callable(attr) else attr - c = SolrConnection(self.solr_url) + c = self._getSolrConnection() c.add(**data) - txn = transaction.get() - txn.addAfterCommitHook(SolrTransactionHook(c)) # PortalCatalog api overloads @@ -95,11 +105,9 @@ class CatalogTool(BaseCatalogTool) : """Remove from catalog. """ super(CatalogTool, self).unindexObject(object) - c = SolrConnection(self.solr_url) + c = self._getSolrConnection() url = self.__url(object) c.delete(id=url) - txn = transaction.get() - txn.addAfterCommitHook(SolrTransactionHook(c)) InitializeClass(CatalogTool) -- 2.20.1