author | sylvain.thenault@logilab.fr |
Mon, 16 Feb 2009 19:50:10 +0100 | |
branch | tls-sprint |
changeset 633 | 087e3f1e87c8 |
parent 631 | 99f5852f8604 |
child 634 | 0badd061ce0f |
permissions | -rw-r--r-- |
0 | 1 |
"""This file contains some basic selectors required by application objects. |
2 |
||
3 |
A selector is responsible to score how well an object may be used with a |
|
4 |
given result set (publishing time selection) |
|
5 |
||
333
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
6 |
If you have trouble with selectors, especially if the objet (typically |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
7 |
a view or a component) you want to use is not selected and you want to |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
8 |
know which one(s) of its selectors fail (e.g. returns 0), you can use |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
9 |
`traced_selection` or even direclty `TRACED_OIDS`. |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
10 |
|
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
11 |
`TRACED_OIDS` is a tuple of traced object ids. The special value |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
12 |
'all' may be used to log selectors for all objects. |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
13 |
|
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
14 |
For instance, say that the following code yields a `NoSelectableObject` |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
15 |
exception:: |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
16 |
|
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
17 |
self.view('calendar', myrset) |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
18 |
|
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
19 |
You can log the selectors involved for *calendar* by replacing the line |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
20 |
above by:: |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
21 |
|
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
22 |
# in Python2.5 |
560
005f78d21fc7
[selectors] fix inline doc
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
446
diff
changeset
|
23 |
from cubicweb.common.selectors import traced_selection |
333
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
24 |
with traced_selection(): |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
25 |
self.view('calendar', myrset) |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
26 |
|
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
27 |
# in Python2.4 |
560
005f78d21fc7
[selectors] fix inline doc
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
446
diff
changeset
|
28 |
from cubicweb.common import selectors |
333
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
29 |
selectors.TRACED_OIDS = ('calendar',) |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
30 |
self.view('calendar', myrset) |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
31 |
selectors.TRACED_OIDS = () |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
32 |
|
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
33 |
|
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
34 |
|
0 | 35 |
:organization: Logilab |
402 | 36 |
:copyright: 2001-2009 LOGILAB S.A. (Paris, FRANCE), all rights reserved. |
0 | 37 |
:contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr |
38 |
""" |
|
39 |
||
40 |
__docformat__ = "restructuredtext en" |
|
41 |
||
333
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
42 |
import logging |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
43 |
|
0 | 44 |
from logilab.common.compat import all |
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
45 |
from logilab.common.deprecation import deprecated_function |
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
46 |
from logilab.common.interface import implements as implements_iface |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
47 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
48 |
from yams import BASE_TYPES |
0 | 49 |
|
230
6e71adc5ccdd
new has_related_entities selector
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
215
diff
changeset
|
50 |
from cubicweb import Unauthorized, NoSelectableObject, role |
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
51 |
from cubicweb.vregistry import NoSelectableObject, Selector, chainall, chainfirst |
0 | 52 |
from cubicweb.cwvreg import DummyCursorError |
53 |
from cubicweb.cwconfig import CubicWebConfiguration |
|
54 |
from cubicweb.schema import split_expression |
|
55 |
||
333
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
56 |
# helpers for debugging selectors |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
57 |
SELECTOR_LOGGER = logging.getLogger('cubicweb.selectors') |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
58 |
TRACED_OIDS = () |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
59 |
|
0 | 60 |
def lltrace(selector): |
61 |
# don't wrap selectors if not in development mode |
|
62 |
if CubicWebConfiguration.mode == 'installed': |
|
63 |
return selector |
|
64 |
def traced(cls, *args, **kwargs): |
|
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
65 |
if isinstance(cls, Selector): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
66 |
selname = cls.__class__.__name__ |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
67 |
oid = args[0].id |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
68 |
else: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
69 |
selname = selector.__name__ |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
70 |
oid = cls.id |
0 | 71 |
ret = selector(cls, *args, **kwargs) |
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
72 |
if TRACED_OIDS == 'all' or oid in TRACED_OIDS: |
633 | 73 |
#SELECTOR_LOGGER.warning('selector %s returned %s for %s', selname, ret, cls) |
74 |
print 'selector %s returned %s for %s' % (selname, ret, cls) |
|
0 | 75 |
return ret |
429
10854a2f9c03
some changes to make update to new selector names easier
sylvain.thenault@logilab.fr
parents:
402
diff
changeset
|
76 |
traced.__name__ = selector.__name__ |
0 | 77 |
return traced |
333
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
78 |
|
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
79 |
class traced_selection(object): |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
80 |
"""selector debugging helper. |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
81 |
|
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
82 |
Typical usage is : |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
83 |
|
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
84 |
>>> with traced_selection(): |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
85 |
... # some code in which you want to debug selectors |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
86 |
... # for all objects |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
87 |
|
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
88 |
or |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
89 |
|
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
90 |
>>> with traced_selection( ('oid1', 'oid2') ): |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
91 |
... # some code in which you want to debug selectors |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
92 |
... # for objects with id 'oid1' and 'oid2' |
0 | 93 |
|
333
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
94 |
""" |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
95 |
def __init__(self, traced='all'): |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
96 |
self.traced = traced |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
97 |
|
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
98 |
def __enter__(self): |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
99 |
global TRACED_OIDS |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
100 |
TRACED_OIDS = self.traced |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
101 |
|
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
102 |
def __exit__(self, exctype, exc, traceback): |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
103 |
global TRACED_OIDS |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
104 |
TRACED_OIDS = () |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
105 |
return traceback is None |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
106 |
|
0 | 107 |
# very basic selectors ######################################################## |
108 |
||
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
109 |
def yes(cls, *args, **kwargs): |
0 | 110 |
"""accept everything""" |
111 |
return 1 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
112 |
yes_selector = deprecated_function(yes) |
0 | 113 |
|
114 |
@lltrace |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
115 |
def none_rset(cls, req, rset, *args, **kwargs): |
0 | 116 |
"""accept no result set""" |
117 |
if rset is None: |
|
118 |
return 1 |
|
119 |
return 0 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
120 |
norset_selector = deprecated_function(none_rset) |
0 | 121 |
|
122 |
@lltrace |
|
430
6fbc0ab79a2d
any_rset is a better name than rset
sylvain.thenault@logilab.fr
parents:
429
diff
changeset
|
123 |
def any_rset(cls, req, rset, *args, **kwargs): |
0 | 124 |
"""accept result set, whatever the number of result""" |
125 |
if rset is not None: |
|
126 |
return 1 |
|
127 |
return 0 |
|
430
6fbc0ab79a2d
any_rset is a better name than rset
sylvain.thenault@logilab.fr
parents:
429
diff
changeset
|
128 |
rset_selector = deprecated_function(any_rset) |
0 | 129 |
|
130 |
@lltrace |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
131 |
def nonempty_rset(cls, req, rset, *args, **kwargs): |
0 | 132 |
"""accept any non empty result set""" |
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
133 |
if rset is not None and rset.rowcount: |
0 | 134 |
return 1 |
135 |
return 0 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
136 |
anyrset_selector = deprecated_function(nonempty_rset) |
0 | 137 |
|
138 |
@lltrace |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
139 |
def empty_rset(cls, req, rset, *args, **kwargs): |
0 | 140 |
"""accept empty result set""" |
141 |
if rset is not None and rset.rowcount == 0: |
|
142 |
return 1 |
|
143 |
return 0 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
144 |
emptyrset_selector = deprecated_function(empty_rset) |
0 | 145 |
|
146 |
@lltrace |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
147 |
def one_line_rset(cls, req, rset, row=None, *args, **kwargs): |
0 | 148 |
"""accept result set with a single line of result""" |
149 |
if rset is not None and (row is not None or rset.rowcount == 1): |
|
150 |
return 1 |
|
151 |
return 0 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
152 |
onelinerset_selector = deprecated_function(one_line_rset) |
0 | 153 |
|
154 |
@lltrace |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
155 |
def two_lines_rset(cls, req, rset, *args, **kwargs): |
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
156 |
"""accept result set with *at least* two lines of result""" |
0 | 157 |
if rset is not None and rset.rowcount > 1: |
158 |
return 1 |
|
159 |
return 0 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
160 |
twolinerset_selector = deprecated_function(two_lines_rset) |
0 | 161 |
|
162 |
@lltrace |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
163 |
def two_cols_rset(cls, req, rset, *args, **kwargs): |
0 | 164 |
"""accept result set with at least one line and two columns of result""" |
165 |
if rset is not None and rset.rowcount > 0 and len(rset.rows[0]) > 1: |
|
166 |
return 1 |
|
167 |
return 0 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
168 |
twocolrset_selector = deprecated_function(two_cols_rset) |
0 | 169 |
|
170 |
@lltrace |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
171 |
def paginated_rset(cls, req, rset, *args, **kwargs): |
0 | 172 |
"""accept result sets with more rows than the page size |
173 |
""" |
|
591
9eeb3d0a4463
get custom page_size as argument
Arthur Lutz <arthur.lutz@logilab.fr>
parents:
560
diff
changeset
|
174 |
page_size = kwargs.get('page_size') |
9eeb3d0a4463
get custom page_size as argument
Arthur Lutz <arthur.lutz@logilab.fr>
parents:
560
diff
changeset
|
175 |
if page_size is None: |
593
6f6549780096
page_size can be given in url attributes
Arthur Lutz <arthur.lutz@logilab.fr>
parents:
591
diff
changeset
|
176 |
page_size = req.form.get('page_size') |
6f6549780096
page_size can be given in url attributes
Arthur Lutz <arthur.lutz@logilab.fr>
parents:
591
diff
changeset
|
177 |
if page_size is None: |
6f6549780096
page_size can be given in url attributes
Arthur Lutz <arthur.lutz@logilab.fr>
parents:
591
diff
changeset
|
178 |
page_size = req.property_value('navigation.page-size') |
6f6549780096
page_size can be given in url attributes
Arthur Lutz <arthur.lutz@logilab.fr>
parents:
591
diff
changeset
|
179 |
else: |
6f6549780096
page_size can be given in url attributes
Arthur Lutz <arthur.lutz@logilab.fr>
parents:
591
diff
changeset
|
180 |
page_size = int(page_size) |
591
9eeb3d0a4463
get custom page_size as argument
Arthur Lutz <arthur.lutz@logilab.fr>
parents:
560
diff
changeset
|
181 |
if rset is None or len(rset) <= page_size: |
0 | 182 |
return 0 |
183 |
return 1 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
184 |
largerset_selector = deprecated_function(paginated_rset) |
0 | 185 |
|
186 |
@lltrace |
|
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
187 |
def sorted_rset(cls, req, rset, row=None, col=0, **kwargs): |
0 | 188 |
"""accept sorted result set""" |
189 |
rqlst = rset.syntax_tree() |
|
190 |
if len(rqlst.children) > 1 or not rqlst.children[0].orderby: |
|
191 |
return 0 |
|
192 |
return 2 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
193 |
sortedrset_selector = deprecated_function(sorted_rset) |
0 | 194 |
|
195 |
@lltrace |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
196 |
def one_etype_rset(cls, req, rset, *args, **kwargs): |
0 | 197 |
"""accept result set where entities in the first columns are all of the |
198 |
same type |
|
199 |
""" |
|
200 |
if len(rset.column_types(0)) != 1: |
|
201 |
return 0 |
|
202 |
return 1 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
203 |
oneetyperset_selector = deprecated_function(one_etype_rset) |
0 | 204 |
|
205 |
@lltrace |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
206 |
def two_etypes_rset(cls, req, rset, **kwargs): |
0 | 207 |
"""accepts resultsets containing several entity types""" |
208 |
if rset: |
|
209 |
etypes = rset.column_types(0) |
|
210 |
if len(etypes) > 1: |
|
211 |
return 1 |
|
212 |
return 0 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
213 |
multitype_selector = deprecated_function(two_etypes_rset) |
0 | 214 |
|
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
215 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
216 |
class match_search_state(Selector): |
633 | 217 |
def __init__(self, *expected): |
218 |
self.expected = expected |
|
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
219 |
|
633 | 220 |
@lltrace |
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
221 |
def __call__(self, cls, req, rset, row=None, col=0, **kwargs): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
222 |
"""checks if the current request search state is in one of the expected states |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
223 |
the wrapped class |
0 | 224 |
|
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
225 |
search state should be either 'normal' or 'linksearch' (eg searching for an |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
226 |
object to create a relation with another) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
227 |
""" |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
228 |
try: |
633 | 229 |
if not req.search_state[0] in self.expected: |
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
230 |
return 0 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
231 |
except AttributeError: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
232 |
return 1 # class doesn't care about search state, accept it |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
233 |
return 1 |
0 | 234 |
|
633 | 235 |
|
236 |
class match_form_params(match_search_state): |
|
237 |
"""check if parameters specified as initializer arguments are specified |
|
238 |
in request form parameters |
|
239 |
""" |
|
240 |
@lltrace |
|
241 |
def __call__(self, cls, req, *args, **kwargs): |
|
242 |
score = 0 |
|
243 |
for param in self.expected: |
|
244 |
val = req.form.get(param) |
|
245 |
if not val: |
|
246 |
return 0 |
|
247 |
score += 1 |
|
248 |
return len(self.expected) |
|
249 |
||
250 |
||
251 |
class match_kwargs(match_search_state): |
|
252 |
"""check if parameters specified as initializer arguments are specified |
|
253 |
in named parameters |
|
254 |
""" |
|
255 |
@lltrace |
|
256 |
def __call__(self, cls, req, *args, **kwargs): |
|
257 |
for arg in self.expected: |
|
258 |
if not arg in kwargs: |
|
259 |
return 0 |
|
260 |
return len(self.expected) |
|
261 |
||
262 |
||
0 | 263 |
@lltrace |
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
264 |
def anonymous_user(cls, req, *args, **kwargs): |
0 | 265 |
"""accept if user is anonymous""" |
266 |
if req.cnx.anonymous_connection: |
|
267 |
return 1 |
|
268 |
return 0 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
269 |
anonymous_selector = deprecated_function(anonymous_user) |
0 | 270 |
|
271 |
@lltrace |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
272 |
def authenticated_user(cls, req, *args, **kwargs): |
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
273 |
"""accept if user is authenticated""" |
431 | 274 |
return not anonymous_user(cls, req, *args, **kwargs) |
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
275 |
not_anonymous_selector = deprecated_function(authenticated_user) |
0 | 276 |
|
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
277 |
# abstract selectors ########################################################## |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
278 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
279 |
class EClassSelector(Selector): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
280 |
"""abstract class for selectors working on the entity classes of the result |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
281 |
set |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
282 |
""" |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
283 |
once_is_enough = False |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
284 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
285 |
@lltrace |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
286 |
def __call__(self, cls, req, rset, row=None, col=0, **kwargs): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
287 |
if not rset: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
288 |
return 0 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
289 |
score = 0 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
290 |
if row is None: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
291 |
for etype in rset.column_types(col): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
292 |
if etype is None: # outer join |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
293 |
continue |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
294 |
if etype in BASE_TYPES: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
295 |
return 0 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
296 |
escore = self.score_class(cls.vreg.etype_class(etype), req) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
297 |
if not escore: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
298 |
return 0 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
299 |
elif self.once_is_enough: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
300 |
return escore |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
301 |
score += escore |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
302 |
else: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
303 |
etype = rset.description[row][col] |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
304 |
if etype is not None and not etype in BASE_TYPES: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
305 |
score = self.score_class(cls.vreg.etype_class(etype), req) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
306 |
return score and (score + 1) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
307 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
308 |
def score_class(self, eclass, req): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
309 |
raise NotImplementedError() |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
310 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
311 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
312 |
class EntitySelector(Selector): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
313 |
"""abstract class for selectors working on the entity instances of the |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
314 |
result set |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
315 |
""" |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
316 |
@lltrace |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
317 |
def __call__(self, cls, req, rset, row=None, col=0, **kwargs): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
318 |
if not rset: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
319 |
return 0 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
320 |
score = 0 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
321 |
if row is None: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
322 |
for row, rowvalue in enumerate(rset.rows): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
323 |
if rowvalue[col] is None: # outer join |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
324 |
continue |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
325 |
try: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
326 |
escore = self.score_entity(rset.get_entity(row, col)) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
327 |
except NotAnEntity: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
328 |
return 0 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
329 |
if not escore: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
330 |
return 0 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
331 |
score += escore |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
332 |
else: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
333 |
etype = rset.description[row][col] |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
334 |
if etype is not None: # outer join |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
335 |
try: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
336 |
score = self.score_entity(rset.get_entity(row, col)) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
337 |
except NotAnEntity: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
338 |
return 0 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
339 |
return score and (score + 1) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
340 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
341 |
def score_entity(self, entity): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
342 |
raise NotImplementedError() |
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
343 |
|
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
344 |
# not so basic selectors ###################################################### |
0 | 345 |
|
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
346 |
class implements(EClassSelector): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
347 |
"""initializer takes a list of interfaces or entity types as argument |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
348 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
349 |
* if row is None, return the number of implemented interfaces for each |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
350 |
entity's class in the result set at the specified column (or column 0). |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
351 |
If any class has no matching interface, return 0. |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
352 |
* if row is specified, return number of implemented interfaces by the |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
353 |
entity's class at this row (and column) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
354 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
355 |
if some interface is an entity class, the score will reflect class |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
356 |
proximity so the most specific object'll be selected |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
357 |
""" |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
358 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
359 |
def __init__(self, *expected_ifaces): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
360 |
self.expected_ifaces = expected_ifaces |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
361 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
362 |
def score_class(self, eclass, req): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
363 |
score = 0 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
364 |
for iface in self.expected_ifaces: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
365 |
if isinstance(iface, basestring): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
366 |
# entity type |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
367 |
iface = eclass.vreg.etype_class(iface) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
368 |
if implements_iface(eclass, iface): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
369 |
score += 1 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
370 |
if getattr(iface, '__registry__', None) == 'etypes': |
633 | 371 |
score += 1 |
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
372 |
# adjust score if the interface is an entity class |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
373 |
if iface is eclass: |
633 | 374 |
score += len(eclass.e_schema.ancestors()) |
375 |
print 'is majoration', len(eclass.e_schema.ancestors()) |
|
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
376 |
else: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
377 |
parents = [e.type for e in eclass.e_schema.ancestors()] |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
378 |
for index, etype in enumerate(reversed(parents)): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
379 |
basecls = eclass.vreg.etype_class(etype) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
380 |
if iface is basecls: |
633 | 381 |
score += index |
382 |
print 'etype majoration', index |
|
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
383 |
break |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
384 |
return score |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
385 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
386 |
|
633 | 387 |
class specified_etype_implements(implements): |
388 |
"""return the "interface score" for class associated to 'etype' (expected in |
|
389 |
request form or arguments) |
|
390 |
""" |
|
391 |
||
392 |
@lltrace |
|
393 |
def __call__(cls, req, *args, **kwargs): |
|
394 |
try: |
|
395 |
etype = req.form['etype'] |
|
396 |
except KeyError: |
|
397 |
try: |
|
398 |
etype = kwargs['etype'] |
|
399 |
except KeyError: |
|
400 |
return 0 |
|
401 |
return self.score_class(cls.vreg.etype_class(etype), req) |
|
402 |
||
403 |
||
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
404 |
class relation_possible(EClassSelector): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
405 |
"""initializer takes relation name as argument and an optional role (default |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
406 |
as subject) and target type (default to unspecified) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
407 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
408 |
* if row is None, return 1 if every entity's class in the result set at the |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
409 |
specified column (or column 0) may have this relation (as role). If target |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
410 |
type is specified, check the relation's end may be of this target type. |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
411 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
412 |
* if row is specified, check relation is supported by the entity's class at |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
413 |
this row (and column) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
414 |
""" |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
415 |
def __init__(self, rtype, role='subject', target_etype=None, |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
416 |
permission='read', once_is_enough=False): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
417 |
self.rtype = rtype |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
418 |
self.role = role |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
419 |
self.target_etype = target_etype |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
420 |
self.permission = permission |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
421 |
self.once_is_enough = once_is_enough |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
422 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
423 |
@lltrace |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
424 |
def __call__(self, cls, *args, **kwargs): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
425 |
rschema = cls.schema.rschema(self.rtype) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
426 |
if not (rschema.has_perm(req, self.permission) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
427 |
or rschema.has_local_role(self.permission)): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
428 |
return 0 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
429 |
return super(relation_possible, self)(cls, *args, **kwargs) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
430 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
431 |
def score_class(self, eclass, req): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
432 |
eschema = eclass.e_schema |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
433 |
try: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
434 |
if self.role == 'object': |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
435 |
rschema = eschema.object_relation(self.rtype) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
436 |
else: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
437 |
rschema = eschema.subject_relation(self.rtype) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
438 |
except KeyError: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
439 |
return 0 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
440 |
if self.target_etype is not None: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
441 |
try: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
442 |
if self.role == 'object': |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
443 |
return self.target_etype in rschema.objects(eschema) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
444 |
else: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
445 |
return self.target_etype in rschema.subjects(eschema) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
446 |
except KeyError, ex: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
447 |
return 0 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
448 |
return 1 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
449 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
450 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
451 |
class non_final_entity(EClassSelector): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
452 |
"""initializer takes no argument |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
453 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
454 |
* if row is None, return 1 if there are only non final entity's class in the |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
455 |
result set at the specified column (or column 0) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
456 |
* if row is specified, return 1 if entity's class at this row (and column) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
457 |
isn't final |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
458 |
""" |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
459 |
def score_class(self, eclass, req): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
460 |
return int(not eclass.e_schema.is_final()) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
461 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
462 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
463 |
class match_user_groups(Selector): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
464 |
"""initializer takes users group as argument |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
465 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
466 |
* check logged user is in one of the given groups. If special 'owners' group |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
467 |
given: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
468 |
- if row is specified check the entity at the given row/col is owned by |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
469 |
the logged user |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
470 |
- if row is not specified check all entities in col are owned by the |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
471 |
logged user |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
472 |
""" |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
473 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
474 |
def __init__(self, *required_groups): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
475 |
self.required_groups = required_groups |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
476 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
477 |
@lltrace |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
478 |
def __call__(self, cls, req, rset=None, row=None, col=0, **kwargs): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
479 |
user = req.user |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
480 |
if user is None: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
481 |
return int('guests' in self.require_groups) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
482 |
score = user.matching_groups(self.require_groups) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
483 |
if not score and 'owners' in self.require_groups and rset: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
484 |
nbowned = 0 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
485 |
if row is not None: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
486 |
if not user.owns(rset[row][col]): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
487 |
return 0 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
488 |
score = 1 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
489 |
else: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
490 |
score = all(user.owns(r[col or 0]) for r in rset) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
491 |
return 0 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
492 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
493 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
494 |
class has_editable_relation(EntitySelector): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
495 |
"""initializer takes no argument |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
496 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
497 |
* if row is specified check the entity at the given row/col has some |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
498 |
relation editable by the logged user |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
499 |
* if row is not specified check all entities in col are owned have some |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
500 |
relation editable by the logged userlogged user |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
501 |
""" |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
502 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
503 |
def score_entity(self, entity): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
504 |
# if user has no update right but it can modify some relation, |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
505 |
# display action anyway |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
506 |
for dummy in entity.srelations_by_category(('generic', 'metadata'), |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
507 |
'add'): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
508 |
return 1 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
509 |
for rschema, targetschemas, role in entity.relations_by_category( |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
510 |
('primary', 'secondary'), 'add'): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
511 |
if not rschema.is_final(): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
512 |
return 1 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
513 |
return 0 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
514 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
515 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
516 |
class may_add_relation(EntitySelector): |
633 | 517 |
"""initializer takes a relation type and optional role (default to |
518 |
'subject') as argument |
|
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
519 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
520 |
if row is specified check the relation may be added to the entity at the |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
521 |
given row/col (if row specified) or to every entities in the given col (if |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
522 |
row is not specified) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
523 |
""" |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
524 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
525 |
def __init__(self, rtype, role='subject'): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
526 |
self.rtype = rtype |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
527 |
self.role = role |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
528 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
529 |
def score_entity(self, entity): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
530 |
rschema = entity.schema.rschema(self.rtype) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
531 |
if self.role == 'subject': |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
532 |
if not rschema.has_perm(req, 'add', fromeid=entity.eid): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
533 |
return False |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
534 |
elif not rschema.has_perm(req, 'add', toeid=entity.eid): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
535 |
return False |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
536 |
return True |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
537 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
538 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
539 |
class has_permission(EntitySelector): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
540 |
"""initializer takes a schema action (eg 'read'/'add'/'delete'/'update') as |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
541 |
argument |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
542 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
543 |
* if row is specified check user has permission to do the requested action |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
544 |
on the entity at the given row/col |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
545 |
* if row is specified check user has permission to do the requested action |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
546 |
on all entities in the given col |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
547 |
""" |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
548 |
def __init__(self, schema_action): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
549 |
self.schema_action = schema_action |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
550 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
551 |
@lltrace |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
552 |
def __call__(self, cls, req, rset, row=None, col=0, **kwargs): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
553 |
user = req.user |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
554 |
action = self.schema_action |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
555 |
if row is None: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
556 |
score = 0 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
557 |
need_local_check = [] |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
558 |
geteschema = cls.schema.eschema |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
559 |
for etype in rset.column_types(0): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
560 |
if etype in BASE_TYPES: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
561 |
return 0 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
562 |
eschema = geteschema(etype) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
563 |
if not user.matching_groups(eschema.get_groups(action)): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
564 |
if eschema.has_local_role(action): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
565 |
# have to ckeck local roles |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
566 |
need_local_check.append(eschema) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
567 |
continue |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
568 |
else: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
569 |
# even a local role won't be enough |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
570 |
return 0 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
571 |
score += accepted |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
572 |
if need_local_check: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
573 |
# check local role for entities of necessary types |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
574 |
for i, row in enumerate(rset): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
575 |
if not rset.description[i][0] in need_local_check: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
576 |
continue |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
577 |
if not self.score_entity(rset.get_entity(i, col)): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
578 |
return 0 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
579 |
score += 1 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
580 |
return score |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
581 |
if rset.description[row][col] in BASE_TYPES: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
582 |
return 0 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
583 |
return self.score_entity(rset.get_entity(row, col)) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
584 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
585 |
def score_entity(self, entity): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
586 |
if entity.has_perm(self.schema_action): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
587 |
return 1 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
588 |
return 0 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
589 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
590 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
591 |
class has_add_permission(EClassSelector): |
633 | 592 |
"""return 1 if the user may add some entity of the types found in the |
593 |
result set (0 else) |
|
594 |
""" |
|
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
595 |
def score_class(self, eclass, req): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
596 |
eschema = eclass.e_schema |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
597 |
if not (eschema.is_final() or eschema.is_subobject(strict=True)) \ |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
598 |
and eschema.has_perm(req, 'add'): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
599 |
return 1 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
600 |
return 0 |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
601 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
602 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
603 |
class score_entity(EntitySelector): |
633 | 604 |
"""initializer takes a function as argument (which is expected to take an |
605 |
entity as argument) |
|
606 |
||
607 |
return the score returned by the function on the entity at the given row/col |
|
608 |
(if row specified) or the sum of the score for every entities in the given |
|
609 |
col (if row is not specified). Return 0 at the first entity scoring to zero. |
|
610 |
""" |
|
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
611 |
def __init__(self, scorefunc): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
612 |
self.score_entity = scorefunc |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
613 |
|
633 | 614 |
|
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
615 |
# XXX not so basic selectors ###################################################### |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
616 |
|
0 | 617 |
@lltrace |
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
618 |
def _rql_condition(cls, req, rset, row=None, col=0, **kwargs): |
0 | 619 |
"""accept single entity result set if the entity match an rql condition |
620 |
""" |
|
621 |
if cls.condition: |
|
622 |
eid = rset[row or 0][col or 0] |
|
623 |
if 'U' in frozenset(split_expression(cls.condition)): |
|
624 |
rql = 'Any X WHERE X eid %%(x)s, U eid %%(u)s, %s' % cls.condition |
|
625 |
else: |
|
626 |
rql = 'Any X WHERE X eid %%(x)s, %s' % cls.condition |
|
627 |
try: |
|
628 |
return len(req.execute(rql, {'x': eid, 'u': req.user.eid}, 'x')) |
|
629 |
except Unauthorized: |
|
630 |
return 0 |
|
631 |
||
632 |
return 1 |
|
254
b1eda3dd844a
more selector renaming
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
247
diff
changeset
|
633 |
_rqlcondition_selector = deprecated_function(_rql_condition) |
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
634 |
|
0 | 635 |
@lltrace |
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
636 |
def but_etype(cls, req, rset, row=None, col=0, **kwargs): |
0 | 637 |
"""restrict the searchstate_accept_one_selector to exclude entity's type |
638 |
refered by the .etype attribute |
|
639 |
""" |
|
640 |
if rset.description[row or 0][col or 0] == cls.etype: |
|
641 |
return 0 |
|
642 |
return 1 |
|
254
b1eda3dd844a
more selector renaming
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
247
diff
changeset
|
643 |
but_etype_selector = deprecated_function(but_etype) |
0 | 644 |
|
645 |
@lltrace |
|
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
646 |
def etype_rtype_selector(cls, req, rset, row=None, col=0, **kwargs): |
0 | 647 |
"""only check if the user has read access on the entity's type refered |
648 |
by the .etype attribute and on the relations's type refered by the |
|
649 |
.rtype attribute if set. |
|
650 |
""" |
|
651 |
schema = cls.schema |
|
652 |
perm = getattr(cls, 'require_permission', 'read') |
|
653 |
if hasattr(cls, 'etype'): |
|
654 |
eschema = schema.eschema(cls.etype) |
|
655 |
if not (eschema.has_perm(req, perm) or eschema.has_local_role(perm)): |
|
656 |
return 0 |
|
657 |
if hasattr(cls, 'rtype'): |
|
394 | 658 |
rschema = schema.rschema(cls.rtype) |
659 |
if not (rschema.has_perm(req, perm) or rschema.has_local_role(perm)): |
|
0 | 660 |
return 0 |
661 |
return 1 |
|
662 |
||
663 |
@lltrace |
|
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
664 |
def has_related_entities(cls, req, rset, row=None, col=0, **kwargs): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
665 |
return bool(rset.get_entity(row or 0, col or 0).related(cls.rtype, role(cls))) |
0 | 666 |
|
237
3df2e0ae2eba
begin selector renaming (work in progress)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
236
diff
changeset
|
667 |
@lltrace |
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
668 |
def user_can_add_etype(cls, req, rset, row=None, col=0, **kwargs): |
0 | 669 |
"""only check if the user has add access on the entity's type refered |
670 |
by the .etype attribute. |
|
671 |
""" |
|
672 |
if not cls.schema.eschema(cls.etype).has_perm(req, 'add'): |
|
673 |
return 0 |
|
674 |
return 1 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
675 |
add_etype_selector = deprecated_function(user_can_add_etype) |
0 | 676 |
|
677 |
@lltrace |
|
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
678 |
def match_context_prop(cls, req, rset, row=None, col=0, context=None, |
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
679 |
**kwargs): |
0 | 680 |
propval = req.property_value('%s.%s.context' % (cls.__registry__, cls.id)) |
681 |
if not propval: |
|
682 |
propval = cls.context |
|
446
3a3ab6bbccc5
use empty string instead of None as possible context value to avoid getting an <optgroup> tag in associated widget
sylvain.thenault@logilab.fr
parents:
431
diff
changeset
|
683 |
if context is not None and propval and context != propval: |
0 | 684 |
return 0 |
685 |
return 1 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
686 |
contextprop_selector = deprecated_function(match_context_prop) |
0 | 687 |
|
688 |
@lltrace |
|
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
689 |
def primary_view(cls, req, rset, row=None, col=0, view=None, |
0 | 690 |
**kwargs): |
691 |
if view is not None and not view.is_primary(): |
|
692 |
return 0 |
|
693 |
return 1 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
694 |
primaryview_selector = deprecated_function(primary_view) |
0 | 695 |
|
142
0425ee84cfa6
add selector to test if result set is an object (for rss feed component)
Laure Bourgois <Laure.Bourgois@logilab.fr>
parents:
0
diff
changeset
|
696 |
def appobject_selectable(registry, oid): |
161
328bc32b5701
repairing error from preceding commit
Laure Bourgois <Laure.Bourgois@logilab.fr>
parents:
157
diff
changeset
|
697 |
"""return a selector that will have a positive score if an object for the |
328bc32b5701
repairing error from preceding commit
Laure Bourgois <Laure.Bourgois@logilab.fr>
parents:
157
diff
changeset
|
698 |
given registry and object id is selectable for the input context |
328bc32b5701
repairing error from preceding commit
Laure Bourgois <Laure.Bourgois@logilab.fr>
parents:
157
diff
changeset
|
699 |
""" |
142
0425ee84cfa6
add selector to test if result set is an object (for rss feed component)
Laure Bourgois <Laure.Bourgois@logilab.fr>
parents:
0
diff
changeset
|
700 |
@lltrace |
0425ee84cfa6
add selector to test if result set is an object (for rss feed component)
Laure Bourgois <Laure.Bourgois@logilab.fr>
parents:
0
diff
changeset
|
701 |
def selector(cls, req, rset, *args, **kwargs): |
0425ee84cfa6
add selector to test if result set is an object (for rss feed component)
Laure Bourgois <Laure.Bourgois@logilab.fr>
parents:
0
diff
changeset
|
702 |
try: |
0425ee84cfa6
add selector to test if result set is an object (for rss feed component)
Laure Bourgois <Laure.Bourgois@logilab.fr>
parents:
0
diff
changeset
|
703 |
cls.vreg.select_object(registry, oid, req, rset, *args, **kwargs) |
0425ee84cfa6
add selector to test if result set is an object (for rss feed component)
Laure Bourgois <Laure.Bourgois@logilab.fr>
parents:
0
diff
changeset
|
704 |
return 1 |
0425ee84cfa6
add selector to test if result set is an object (for rss feed component)
Laure Bourgois <Laure.Bourgois@logilab.fr>
parents:
0
diff
changeset
|
705 |
except NoSelectableObject: |
0425ee84cfa6
add selector to test if result set is an object (for rss feed component)
Laure Bourgois <Laure.Bourgois@logilab.fr>
parents:
0
diff
changeset
|
706 |
return 0 |
0425ee84cfa6
add selector to test if result set is an object (for rss feed component)
Laure Bourgois <Laure.Bourgois@logilab.fr>
parents:
0
diff
changeset
|
707 |
return selector |
0425ee84cfa6
add selector to test if result set is an object (for rss feed component)
Laure Bourgois <Laure.Bourgois@logilab.fr>
parents:
0
diff
changeset
|
708 |
|
0 | 709 |
|
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
710 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
711 |
# XXX DEPRECATED ############################################################## |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
712 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
713 |
def nfentity_selector(cls, req, rset, row=None, col=0, **kwargs): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
714 |
return non_final_entity()(cls, req, rset, row, col) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
715 |
nfentity_selector = deprecated_function(nfentity_selector) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
716 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
717 |
def implement_interface(cls, req, rset, row=None, col=0, **kwargs): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
718 |
return implements(*cls.accepts_interfaces)(cls, req, rset, row, col) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
719 |
_interface_selector = deprecated_function(implement_interface) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
720 |
interface_selector = deprecated_function(implement_interface) |
633 | 721 |
implement_interface = deprecated_function(implement_interface, 'use implements') |
722 |
||
723 |
def accept_etype(cls, req, *args, **kwargs): |
|
724 |
"""check etype presence in request form *and* accepts conformance""" |
|
725 |
return specified_etype_implements(*cls.accepts)(cls, req, *args) |
|
726 |
etype_form_selector = deprecated_function(accept_etype) |
|
727 |
accept_etype = deprecated_function(accept_etype, 'use specified_etype_implements') |
|
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
728 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
729 |
def searchstate_selector(cls, req, rset, row=None, col=0, **kwargs): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
730 |
return match_search_state(cls.search_states)(cls, req, rset, row, col) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
731 |
searchstate_selector = deprecated_function(searchstate_selector) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
732 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
733 |
def match_user_group(cls, req, rset=None, row=None, col=0, **kwargs): |
633 | 734 |
return match_user_groups(*cls.require_groups)(cls, req, rset, row, col, **kwargs) |
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
735 |
in_group_selector = deprecated_function(match_user_group) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
736 |
match_user_group = deprecated_function(match_user_group) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
737 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
738 |
def has_relation(cls, req, rset, row=None, col=0, **kwargs): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
739 |
return relation_possible(cls.rtype, role(cls), cls.etype, |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
740 |
getattr(cls, 'require_permission', 'read'))(cls, req, rset, row, col, **kwargs) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
741 |
has_relation = deprecated_function(has_relation) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
742 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
743 |
def one_has_relation(cls, req, rset, row=None, col=0, **kwargs): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
744 |
return relation_possible(cls.rtype, role(cls), cls.etype, |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
745 |
getattr(cls, 'require_permission', 'read', |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
746 |
once_is_enough=True))(cls, req, rset, row, col, **kwargs) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
747 |
one_has_relation = deprecated_function(one_has_relation, 'use relation_possible selector') |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
748 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
749 |
def accept_rset(cls, req, rset, row=None, col=0, **kwargs): |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
750 |
"""simply delegate to cls.accept_rset method""" |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
751 |
return implements(*cls.accepts)(cls, req, rset, row=row, col=col) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
752 |
accept_rset_selector = deprecated_function(accept_rset) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
753 |
accept_rset = deprecated_function(accept_rset, 'use implements selector') |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
754 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
755 |
accept = chainall(non_final_entity(), accept_rset, name='accept') |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
756 |
accept_selector = deprecated_function(accept) |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
757 |
accept = deprecated_function(accept, 'use implements selector') |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
758 |
|
0 | 759 |
# compound selectors ########################################################## |
760 |
||
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
761 |
accept_one = deprecated_function(chainall(one_line_rset, accept, |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
762 |
name='accept_one')) |
254
b1eda3dd844a
more selector renaming
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
247
diff
changeset
|
763 |
accept_one_selector = deprecated_function(accept_one) |
237
3df2e0ae2eba
begin selector renaming (work in progress)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
236
diff
changeset
|
764 |
|
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
765 |
rql_condition = chainall(non_final_entity(), one_line_rset, _rql_condition, |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
766 |
name='rql_condition') |
254
b1eda3dd844a
more selector renaming
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
247
diff
changeset
|
767 |
rqlcondition_selector = deprecated_function(rql_condition) |
b1eda3dd844a
more selector renaming
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
247
diff
changeset
|
768 |
|
0 | 769 |
|
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
770 |
searchstate_accept = chainall(nonempty_rset, match_search_state, accept, |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
771 |
name='searchstate_accept') |
254
b1eda3dd844a
more selector renaming
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
247
diff
changeset
|
772 |
searchstate_accept_selector = deprecated_function(searchstate_accept) |
b1eda3dd844a
more selector renaming
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
247
diff
changeset
|
773 |
|
b1eda3dd844a
more selector renaming
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
247
diff
changeset
|
774 |
searchstate_accept_one = chainall(one_line_rset, match_search_state, |
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
775 |
accept, _rql_condition, |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
776 |
name='searchstate_accept_one') |
254
b1eda3dd844a
more selector renaming
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
247
diff
changeset
|
777 |
searchstate_accept_one_selector = deprecated_function(searchstate_accept_one) |
b1eda3dd844a
more selector renaming
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
247
diff
changeset
|
778 |
|
631
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
779 |
searchstate_accept_one_but_etype = chainall(searchstate_accept_one, but_etype, |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
780 |
name='searchstate_accept_one_but_etype') |
254
b1eda3dd844a
more selector renaming
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
247
diff
changeset
|
781 |
searchstate_accept_one_but_etype_selector = deprecated_function( |
b1eda3dd844a
more selector renaming
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
247
diff
changeset
|
782 |
searchstate_accept_one_but_etype) |
633 | 783 |
|
784 |
#req_form_params_selector = deprecated_function(match_form_params) # form_params |
|
785 |
#kwargs_selector = deprecated_function(match_kwargs) # expected_kwargs |