61 |
61 |
62 from logilab.mtconverter import xml_escape |
62 from logilab.mtconverter import xml_escape |
63 from logilab.common.graph import has_path |
63 from logilab.common.graph import has_path |
64 from logilab.common.decorators import cached, cachedproperty |
64 from logilab.common.decorators import cached, cachedproperty |
65 from logilab.common.date import datetime2ticks, ustrftime, ticks2datetime |
65 from logilab.common.date import datetime2ticks, ustrftime, ticks2datetime |
66 from logilab.common.deprecation import deprecated |
|
67 from logilab.common.registry import yes |
66 from logilab.common.registry import yes |
68 |
67 |
69 from rql import nodes, utils |
68 from rql import nodes, utils |
70 |
69 |
71 from cubicweb import Unauthorized |
70 from cubicweb import Unauthorized |
86 return display_name(facet._cw, facet.rtype, form=facet.role) |
85 return display_name(facet._cw, facet.rtype, form=facet.role) |
87 |
86 |
88 def get_facet(req, facetid, select, filtered_variable): |
87 def get_facet(req, facetid, select, filtered_variable): |
89 return req.vreg['facets'].object_by_id(facetid, req, select=select, |
88 return req.vreg['facets'].object_by_id(facetid, req, select=select, |
90 filtered_variable=filtered_variable) |
89 filtered_variable=filtered_variable) |
91 |
|
92 @deprecated('[3.13] filter_hiddens moved to cubicweb.web.views.facets with ' |
|
93 'slightly modified prototype') |
|
94 def filter_hiddens(w, baserql, **kwargs): |
|
95 from cubicweb.web.views.facets import filter_hiddens |
|
96 return filter_hiddens(w, baserql, wdgs=kwargs.pop('facets'), **kwargs) |
|
97 |
90 |
98 |
91 |
99 ## rqlst manipulation functions used by facets ################################ |
92 ## rqlst manipulation functions used by facets ################################ |
100 |
93 |
101 def init_facets(rset, select, mainvar=None): |
94 def init_facets(rset, select, mainvar=None): |
161 for dvar in list(select.defined_vars.values()): |
154 for dvar in list(select.defined_vars.values()): |
162 if not (dvar is filtered_variable or dvar.stinfo['relations']): |
155 if not (dvar is filtered_variable or dvar.stinfo['relations']): |
163 select.undefine_variable(dvar) |
156 select.undefine_variable(dvar) |
164 # global tree config: DISTINCT, LIMIT, OFFSET |
157 # global tree config: DISTINCT, LIMIT, OFFSET |
165 select.set_distinct(True) |
158 select.set_distinct(True) |
166 |
|
167 @deprecated('[3.13] use init_facets instead') |
|
168 def prepare_facets_rqlst(rqlst, args=None): |
|
169 assert len(rqlst.children) == 1, 'FIXME: union not yet supported' |
|
170 select = rqlst.children[0] |
|
171 filtered_variable = get_filtered_variable(select) |
|
172 baserql = select.as_string(args) |
|
173 prepare_select(select, filtered_variable) |
|
174 return filtered_variable, baserql |
|
175 |
159 |
176 def prepare_vocabulary_select(select, filtered_variable, rtype, role, |
160 def prepare_vocabulary_select(select, filtered_variable, rtype, role, |
177 select_target_entity=True): |
161 select_target_entity=True): |
178 """prepare a syntax tree to generate a filter vocabulary rql using the given |
162 """prepare a syntax tree to generate a filter vocabulary rql using the given |
179 relation: |
163 relation: |
368 except KeyError: |
352 except KeyError: |
369 varmap[varname] = var = select.make_variable() |
353 varmap[varname] = var = select.make_variable() |
370 return var |
354 return var |
371 |
355 |
372 |
356 |
373 _prepare_vocabulary_rqlst = deprecated('[3.13] renamed prepare_vocabulary_select')( |
|
374 prepare_vocabulary_select) |
|
375 _cleanup_rqlst = deprecated('[3.13] renamed to cleanup_select')(cleanup_select) |
|
376 |
|
377 |
|
378 ## base facet classes ########################################################## |
357 ## base facet classes ########################################################## |
379 |
358 |
380 class AbstractFacet(AppObject): |
359 class AbstractFacet(AppObject): |
381 """Abstract base class for all facets. Facets are stored in their own |
360 """Abstract base class for all facets. Facets are stored in their own |
382 'facets' registry. They are similar to contextual components since the use |
361 'facets' registry. They are similar to contextual components since the use |
476 return [] |
455 return [] |
477 |
456 |
478 @property |
457 @property |
479 def wdgclass(self): |
458 def wdgclass(self): |
480 raise NotImplementedError |
459 raise NotImplementedError |
481 |
|
482 @property |
|
483 @deprecated('[3.13] renamed .select') |
|
484 def rqlst(self): |
|
485 return self.select |
|
486 |
460 |
487 |
461 |
488 class VocabularyFacet(AbstractFacet): |
462 class VocabularyFacet(AbstractFacet): |
489 """This abstract class extend :class:`AbstractFacet` to use the |
463 """This abstract class extend :class:`AbstractFacet` to use the |
490 :class:`FacetVocabularyWidget` as widget, suitable for facets that may |
464 :class:`FacetVocabularyWidget` as widget, suitable for facets that may |