Author: matevz
Date: Wed Aug 14 08:31:39 2013
New Revision: 1513765
URL: http://svn.apache.org/r1513765
Log:
Ref. #596 - ProductBatchModifyModule caching (patch from Olemis)
Modified:
bloodhound/trunk/bloodhound_multiproduct/multiproduct/ticket/batch.py
Modified: bloodhound/trunk/bloodhound_multiproduct/multiproduct/ticket/batch.py
URL:
http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_multiproduct/multiproduct/ticket/batch.py?rev=1513765&r1=1513764&r2=1513765&view=diff
==============================================================================
--- bloodhound/trunk/bloodhound_multiproduct/multiproduct/ticket/batch.py
(original)
+++ bloodhound/trunk/bloodhound_multiproduct/multiproduct/ticket/batch.py Wed
Aug 14 08:31:39 2013
@@ -1,57 +1,59 @@
-
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-from trac.ticket.batch import BatchModifyModule
-from trac.util.translation import _
-from trac.web.chrome import add_script_data
-from multiproduct.env import ProductEnvironment
-
-
-class ProductBatchModifyModule(BatchModifyModule):
- def add_template_data(self, req, data, tickets):
- if isinstance(self.env, ProductEnvironment):
- super(ProductBatchModifyModule, self).add_template_data(
- req, data, tickets)
- return
-
- data['batch_modify'] = True
- data['query_href'] = req.session['query_href'] or req.href.query()
-
- tickets_by_product = {}
- for t in tickets:
- tickets_by_product.setdefault(t['product'], []).append(t)
-
- data['action_controls'] = []
- global_env = ProductEnvironment.lookup_global_env(self.env)
- tmpenv = self.env
- for k,v in tickets_by_product.iteritems():
- self.env = ProductEnvironment(global_env, k) if k else global_env
- data['action_controls'] += self._get_action_controls(req, v)
- self.env = tmpenv
- batch_list_modes = [
- {'name': _("add"), 'value': "+"},
- {'name': _("remove"), 'value': "-"},
- {'name': _("add / remove"), 'value': "+-"},
- {'name': _("set to"), 'value': "="},
- ]
- add_script_data(req, batch_list_modes=batch_list_modes,
- batch_list_properties=self._get_list_fields())
-
-import trac.ticket.batch
-trac.ticket.batch.BatchModifyModule = ProductBatchModifyModule
-trac.ticket.BatchModifyModule = ProductBatchModifyModule
+
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+from trac.ticket.batch import BatchModifyModule
+from trac.util.translation import _
+from trac.web.chrome import add_script_data
+from multiproduct.env import ProductEnvironment
+
+
+class ProductBatchModifyModule(BatchModifyModule):
+ def add_template_data(self, req, data, tickets):
+ if isinstance(self.env, ProductEnvironment):
+ super(ProductBatchModifyModule, self).add_template_data(
+ req, data, tickets)
+ return
+
+ data['batch_modify'] = True
+ data['query_href'] = req.session['query_href'] or req.href.query()
+
+ tickets_by_product = {}
+ for t in tickets:
+ tickets_by_product.setdefault(t['product'], []).append(t)
+
+ data['action_controls'] = []
+ global_env = ProductEnvironment.lookup_global_env(self.env)
+ cache = {}
+ for k,v in tickets_by_product.iteritems():
+ batchmdl = cache.get(k or '')
+ if batchmdl is None:
+ env = ProductEnvironment(global_env, k) if k else global_env
+ cache[k] = batchmdl = ProductBatchModifyModule(env)
+ data['action_controls'] += batchmdl._get_action_controls(req, v)
+ batch_list_modes = [
+ {'name': _("add"), 'value': "+"},
+ {'name': _("remove"), 'value': "-"},
+ {'name': _("add / remove"), 'value': "+-"},
+ {'name': _("set to"), 'value': "="},
+ ]
+ add_script_data(req, batch_list_modes=batch_list_modes,
+ batch_list_properties=self._get_list_fields())
+
+import trac.ticket.batch
+trac.ticket.batch.BatchModifyModule = ProductBatchModifyModule
+trac.ticket.BatchModifyModule = ProductBatchModifyModule