[FIX] don't blow up filters management if a filter uses an invalid syntax (or an unknown variable) and can't be evaluated

bzr revid: xmo@openerp.com-20120209161542-whs5ye637lijas26
This commit is contained in:
Xavier Morel 2012-02-09 17:15:42 +01:00
parent 2d08b98ea4
commit 77065685ca
2 changed files with 17 additions and 3 deletions

View File

@ -5,6 +5,7 @@ import base64
import csv import csv
import glob import glob
import itertools import itertools
import logging
import operator import operator
import datetime import datetime
import os import os
@ -1177,11 +1178,21 @@ class SearchView(View):
@openerpweb.jsonrequest @openerpweb.jsonrequest
def get_filters(self, req, model): def get_filters(self, req, model):
logger = logging.getLogger(__name__ + '.SearchView.get_filters')
Model = req.session.model("ir.filters") Model = req.session.model("ir.filters")
filters = Model.get_filters(model) filters = Model.get_filters(model)
for filter in filters: for filter in filters:
filter["context"] = req.session.eval_context(parse_context(filter["context"], req.session)) try:
filter["domain"] = req.session.eval_domain(parse_domain(filter["domain"], req.session)) filter["context"] = req.session.eval_context(
parse_context(filter["context"], req.session))
filter["domain"] = req.session.eval_domain(
parse_domain(filter["domain"], req.session))
except Exception:
logger.exception("Failed to parse custom filter %s in %s",
filter['name'], model)
filter['disabled'] = True
del filter['context']
del filter['domain']
return filters return filters
@openerpweb.jsonrequest @openerpweb.jsonrequest

View File

@ -1279,7 +1279,10 @@
<option class="oe-filters-title" value="">Filters</option> <option class="oe-filters-title" value="">Filters</option>
<optgroup label="-- Filters --"> <optgroup label="-- Filters --">
<t t-foreach="filters" t-as="filter"> <t t-foreach="filters" t-as="filter">
<option t-attf-value="get:#{filter_index}"><t t-esc="filter.name"/></option> <option t-attf-value="get:#{filter_index}"
t-att-disabled="filter.disabled and 'disabled'">
<t t-esc="filter.name"/>
</option>
</t> </t>
</optgroup> </optgroup>
<optgroup label="-- Actions --"> <optgroup label="-- Actions --">