author | sylvain.thenault@logilab.fr |
Mon, 16 Feb 2009 18:26:13 +0100 | |
branch | tls-sprint |
changeset 631 | 99f5852f8604 |
parent 593 | 6f6549780096 |
child 633 | 087e3f1e87c8 |
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: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
73 |
SELECTOR_LOGGER.warning('selector %s returned %s for %s', selname, ret, cls) |
0 | 74 |
return ret |
429
10854a2f9c03
some changes to make update to new selector names easier
sylvain.thenault@logilab.fr
parents:
402
diff
changeset
|
75 |
traced.__name__ = selector.__name__ |
0 | 76 |
return traced |
333
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
77 |
|
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
78 |
class traced_selection(object): |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
79 |
"""selector debugging helper. |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
80 |
|
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
81 |
Typical usage is : |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
82 |
|
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
83 |
>>> with traced_selection(): |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
84 |
... # some code in which you want to debug selectors |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
85 |
... # for all objects |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
86 |
|
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
87 |
or |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
88 |
|
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
89 |
>>> with traced_selection( ('oid1', 'oid2') ): |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
90 |
... # some code in which you want to debug selectors |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
91 |
... # for objects with id 'oid1' and 'oid2' |
0 | 92 |
|
333
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
93 |
""" |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
94 |
def __init__(self, traced='all'): |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
95 |
self.traced = traced |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
96 |
|
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
97 |
def __enter__(self): |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
98 |
global TRACED_OIDS |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
99 |
TRACED_OIDS = self.traced |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
100 |
|
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
101 |
def __exit__(self, exctype, exc, traceback): |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
102 |
global TRACED_OIDS |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
103 |
TRACED_OIDS = () |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
104 |
return traceback is None |
c65eccf85895
simplify selectors debugging
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
266
diff
changeset
|
105 |
|
0 | 106 |
# very basic selectors ######################################################## |
107 |
||
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
108 |
def yes(cls, *args, **kwargs): |
0 | 109 |
"""accept everything""" |
110 |
return 1 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
111 |
yes_selector = deprecated_function(yes) |
0 | 112 |
|
113 |
@lltrace |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
114 |
def none_rset(cls, req, rset, *args, **kwargs): |
0 | 115 |
"""accept no result set""" |
116 |
if rset is None: |
|
117 |
return 1 |
|
118 |
return 0 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
119 |
norset_selector = deprecated_function(none_rset) |
0 | 120 |
|
121 |
@lltrace |
|
430
6fbc0ab79a2d
any_rset is a better name than rset
sylvain.thenault@logilab.fr
parents:
429
diff
changeset
|
122 |
def any_rset(cls, req, rset, *args, **kwargs): |
0 | 123 |
"""accept result set, whatever the number of result""" |
124 |
if rset is not None: |
|
125 |
return 1 |
|
126 |
return 0 |
|
430
6fbc0ab79a2d
any_rset is a better name than rset
sylvain.thenault@logilab.fr
parents:
429
diff
changeset
|
127 |
rset_selector = deprecated_function(any_rset) |
0 | 128 |
|
129 |
@lltrace |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
130 |
def nonempty_rset(cls, req, rset, *args, **kwargs): |
0 | 131 |
"""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
|
132 |
if rset is not None and rset.rowcount: |
0 | 133 |
return 1 |
134 |
return 0 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
135 |
anyrset_selector = deprecated_function(nonempty_rset) |
0 | 136 |
|
137 |
@lltrace |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
138 |
def empty_rset(cls, req, rset, *args, **kwargs): |
0 | 139 |
"""accept empty result set""" |
140 |
if rset is not None and rset.rowcount == 0: |
|
141 |
return 1 |
|
142 |
return 0 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
143 |
emptyrset_selector = deprecated_function(empty_rset) |
0 | 144 |
|
145 |
@lltrace |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
146 |
def one_line_rset(cls, req, rset, row=None, *args, **kwargs): |
0 | 147 |
"""accept result set with a single line of result""" |
148 |
if rset is not None and (row is not None or rset.rowcount == 1): |
|
149 |
return 1 |
|
150 |
return 0 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
151 |
onelinerset_selector = deprecated_function(one_line_rset) |
0 | 152 |
|
153 |
@lltrace |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
154 |
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
|
155 |
"""accept result set with *at least* two lines of result""" |
0 | 156 |
if rset is not None and rset.rowcount > 1: |
157 |
return 1 |
|
158 |
return 0 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
159 |
twolinerset_selector = deprecated_function(two_lines_rset) |
0 | 160 |
|
161 |
@lltrace |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
162 |
def two_cols_rset(cls, req, rset, *args, **kwargs): |
0 | 163 |
"""accept result set with at least one line and two columns of result""" |
164 |
if rset is not None and rset.rowcount > 0 and len(rset.rows[0]) > 1: |
|
165 |
return 1 |
|
166 |
return 0 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
167 |
twocolrset_selector = deprecated_function(two_cols_rset) |
0 | 168 |
|
169 |
@lltrace |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
170 |
def paginated_rset(cls, req, rset, *args, **kwargs): |
0 | 171 |
"""accept result sets with more rows than the page size |
172 |
""" |
|
591
9eeb3d0a4463
get custom page_size as argument
Arthur Lutz <arthur.lutz@logilab.fr>
parents:
560
diff
changeset
|
173 |
page_size = kwargs.get('page_size') |
9eeb3d0a4463
get custom page_size as argument
Arthur Lutz <arthur.lutz@logilab.fr>
parents:
560
diff
changeset
|
174 |
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
|
175 |
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
|
176 |
if page_size is None: |
6f6549780096
page_size can be given in url attributes
Arthur Lutz <arthur.lutz@logilab.fr>
parents:
591
diff
changeset
|
177 |
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
|
178 |
else: |
6f6549780096
page_size can be given in url attributes
Arthur Lutz <arthur.lutz@logilab.fr>
parents:
591
diff
changeset
|
179 |
page_size = int(page_size) |
591
9eeb3d0a4463
get custom page_size as argument
Arthur Lutz <arthur.lutz@logilab.fr>
parents:
560
diff
changeset
|
180 |
if rset is None or len(rset) <= page_size: |
0 | 181 |
return 0 |
182 |
return 1 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
183 |
largerset_selector = deprecated_function(paginated_rset) |
0 | 184 |
|
185 |
@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
|
186 |
def sorted_rset(cls, req, rset, row=None, col=0, **kwargs): |
0 | 187 |
"""accept sorted result set""" |
188 |
rqlst = rset.syntax_tree() |
|
189 |
if len(rqlst.children) > 1 or not rqlst.children[0].orderby: |
|
190 |
return 0 |
|
191 |
return 2 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
192 |
sortedrset_selector = deprecated_function(sorted_rset) |
0 | 193 |
|
194 |
@lltrace |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
195 |
def one_etype_rset(cls, req, rset, *args, **kwargs): |
0 | 196 |
"""accept result set where entities in the first columns are all of the |
197 |
same type |
|
198 |
""" |
|
199 |
if len(rset.column_types(0)) != 1: |
|
200 |
return 0 |
|
201 |
return 1 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
202 |
oneetyperset_selector = deprecated_function(one_etype_rset) |
0 | 203 |
|
204 |
@lltrace |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
205 |
def two_etypes_rset(cls, req, rset, **kwargs): |
0 | 206 |
"""accepts resultsets containing several entity types""" |
207 |
if rset: |
|
208 |
etypes = rset.column_types(0) |
|
209 |
if len(etypes) > 1: |
|
210 |
return 1 |
|
211 |
return 0 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
212 |
multitype_selector = deprecated_function(two_etypes_rset) |
0 | 213 |
|
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
|
214 |
|
99f5852f8604
major selector 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 |
class match_search_state(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
|
216 |
def __init__(self, *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
|
217 |
self.expected_states = 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
|
218 |
|
99f5852f8604
major selector 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 |
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
|
220 |
"""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
|
221 |
the wrapped class |
0 | 222 |
|
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
|
223 |
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
|
224 |
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
|
225 |
""" |
99f5852f8604
major selector 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 |
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
|
227 |
if not req.search_state[0] in cls.search_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
|
228 |
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
|
229 |
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
|
230 |
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
|
231 |
return 1 |
0 | 232 |
|
233 |
@lltrace |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
234 |
def anonymous_user(cls, req, *args, **kwargs): |
0 | 235 |
"""accept if user is anonymous""" |
236 |
if req.cnx.anonymous_connection: |
|
237 |
return 1 |
|
238 |
return 0 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
239 |
anonymous_selector = deprecated_function(anonymous_user) |
0 | 240 |
|
241 |
@lltrace |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
242 |
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
|
243 |
"""accept if user is authenticated""" |
431 | 244 |
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
|
245 |
not_anonymous_selector = deprecated_function(authenticated_user) |
0 | 246 |
|
247 |
@lltrace |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
248 |
def match_form_params(cls, req, *args, **kwargs): |
0 | 249 |
"""check if parameters specified by the form_params attribute on |
250 |
the wrapped class are specified in request form parameters |
|
251 |
""" |
|
252 |
score = 0 |
|
253 |
for param in cls.form_params: |
|
254 |
val = req.form.get(param) |
|
255 |
if not val: |
|
256 |
return 0 |
|
257 |
score += 1 |
|
258 |
return score + 1 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
259 |
req_form_params_selector = deprecated_function(match_form_params) |
0 | 260 |
|
261 |
@lltrace |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
262 |
def match_kwargs(cls, req, *args, **kwargs): |
0 | 263 |
"""check if arguments specified by the expected_kwargs attribute on |
264 |
the wrapped class are specified in given named parameters |
|
265 |
""" |
|
266 |
values = [] |
|
267 |
for arg in cls.expected_kwargs: |
|
268 |
if not arg in kwargs: |
|
269 |
return 0 |
|
270 |
return 1 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
271 |
kwargs_selector = deprecated_function(match_kwargs) |
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
272 |
|
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
|
273 |
# 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
|
274 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
275 |
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
|
276 |
"""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
|
277 |
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
|
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 |
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
|
280 |
|
99f5852f8604
major selector 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 |
@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
|
282 |
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
|
283 |
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
|
284 |
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
|
285 |
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
|
286 |
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
|
287 |
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
|
288 |
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
|
289 |
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
|
290 |
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
|
291 |
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
|
292 |
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
|
293 |
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
|
294 |
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
|
295 |
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
|
296 |
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
|
297 |
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
|
298 |
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
|
299 |
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
|
300 |
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
|
301 |
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
|
302 |
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
|
303 |
|
99f5852f8604
major selector 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 |
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
|
305 |
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
|
306 |
|
99f5852f8604
major selector 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 |
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
|
309 |
"""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
|
310 |
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
|
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 |
@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
|
313 |
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
|
314 |
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
|
315 |
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
|
316 |
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
|
317 |
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
|
318 |
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
|
319 |
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
|
320 |
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
|
321 |
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
|
322 |
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
|
323 |
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
|
324 |
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
|
325 |
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
|
326 |
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
|
327 |
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
|
328 |
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
|
329 |
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
|
330 |
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
|
331 |
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
|
332 |
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
|
333 |
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
|
334 |
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
|
335 |
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
|
336 |
|
99f5852f8604
major selector 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 |
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
|
338 |
raise NotImplementedError() |
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
339 |
|
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
340 |
# not so basic selectors ###################################################### |
0 | 341 |
|
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
|
342 |
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
|
343 |
"""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
|
344 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
345 |
* 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
|
346 |
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
|
347 |
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
|
348 |
* 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
|
349 |
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
|
350 |
|
99f5852f8604
major selector 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 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
|
352 |
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
|
353 |
""" |
99f5852f8604
major selector 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 |
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
|
356 |
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
|
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 |
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
|
359 |
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
|
360 |
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
|
361 |
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
|
362 |
# 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
|
363 |
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
|
364 |
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
|
365 |
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
|
366 |
if getattr(iface, '__registry__', None) == 'etypes': |
99f5852f8604
major selector 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 |
# 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
|
368 |
if iface is eclass: |
99f5852f8604
major selector 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 += len(eclass.e_schema.ancestors()) + 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 |
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
|
371 |
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
|
372 |
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
|
373 |
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
|
374 |
if iface is basecls: |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
375 |
score += index + 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
|
376 |
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
|
377 |
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
|
378 |
|
99f5852f8604
major selector 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 |
|
99f5852f8604
major selector 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 |
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
|
381 |
"""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
|
382 |
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
|
383 |
|
99f5852f8604
major selector 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 |
* 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
|
385 |
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
|
386 |
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
|
387 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
388 |
* 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
|
389 |
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
|
390 |
""" |
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
391 |
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
|
392 |
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
|
393 |
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
|
394 |
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
|
395 |
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
|
396 |
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
|
397 |
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
|
398 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
399 |
@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
|
400 |
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
|
401 |
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
|
402 |
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
|
403 |
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
|
404 |
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
|
405 |
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
|
406 |
|
99f5852f8604
major selector 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 |
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
|
408 |
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
|
409 |
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
|
410 |
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
|
411 |
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
|
412 |
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
|
413 |
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
|
414 |
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
|
415 |
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
|
416 |
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
|
417 |
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
|
418 |
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
|
419 |
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
|
420 |
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
|
421 |
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
|
422 |
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
|
423 |
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
|
424 |
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
|
425 |
|
99f5852f8604
major selector 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 |
|
99f5852f8604
major selector 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 |
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
|
428 |
"""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
|
429 |
|
99f5852f8604
major selector 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 |
* 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
|
431 |
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
|
432 |
* 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
|
433 |
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
|
434 |
""" |
99f5852f8604
major selector 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 |
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
|
436 |
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
|
437 |
|
99f5852f8604
major selector 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 |
|
99f5852f8604
major selector 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 |
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
|
440 |
"""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
|
441 |
|
99f5852f8604
major selector 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 |
* 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
|
443 |
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
|
444 |
- 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
|
445 |
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
|
446 |
- 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
|
447 |
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
|
448 |
""" |
99f5852f8604
major selector 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 |
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
|
451 |
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
|
452 |
|
99f5852f8604
major selector 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 |
@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
|
454 |
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
|
455 |
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
|
456 |
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
|
457 |
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
|
458 |
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
|
459 |
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
|
460 |
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
|
461 |
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
|
462 |
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
|
463 |
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
|
464 |
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
|
465 |
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
|
466 |
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
|
467 |
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
|
468 |
|
99f5852f8604
major selector 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 |
|
99f5852f8604
major selector 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 |
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
|
471 |
"""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
|
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 |
* 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
|
474 |
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
|
475 |
* 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
|
476 |
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
|
477 |
""" |
99f5852f8604
major selector 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 |
|
99f5852f8604
major selector 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 |
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
|
480 |
# 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
|
481 |
# 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
|
482 |
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
|
483 |
'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
|
484 |
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
|
485 |
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
|
486 |
('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
|
487 |
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
|
488 |
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
|
489 |
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
|
490 |
|
99f5852f8604
major selector 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 |
|
99f5852f8604
major selector 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 |
class may_add_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
|
493 |
"""initializer a relation type and optional role (default to 'subject') 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
|
494 |
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
|
495 |
|
99f5852f8604
major selector 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 |
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
|
497 |
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
|
498 |
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
|
499 |
""" |
99f5852f8604
major selector 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 |
|
99f5852f8604
major selector 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 |
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
|
502 |
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
|
503 |
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
|
504 |
|
99f5852f8604
major selector 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 |
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
|
506 |
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
|
507 |
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
|
508 |
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
|
509 |
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
|
510 |
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
|
511 |
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
|
512 |
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
|
513 |
|
99f5852f8604
major selector 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 |
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
|
516 |
"""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
|
517 |
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
|
518 |
|
99f5852f8604
major selector 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 |
* 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
|
520 |
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
|
521 |
* 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
|
522 |
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
|
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 |
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
|
525 |
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
|
526 |
|
99f5852f8604
major selector 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 |
@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
|
528 |
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
|
529 |
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
|
530 |
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
|
531 |
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
|
532 |
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
|
533 |
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
|
534 |
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
|
535 |
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
|
536 |
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
|
537 |
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
|
538 |
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
|
539 |
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
|
540 |
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
|
541 |
# 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
|
542 |
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
|
543 |
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
|
544 |
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
|
545 |
# 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
|
546 |
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
|
547 |
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
|
548 |
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
|
549 |
# 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
|
550 |
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
|
551 |
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
|
552 |
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
|
553 |
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
|
554 |
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
|
555 |
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
|
556 |
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
|
557 |
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
|
558 |
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
|
559 |
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
|
560 |
|
99f5852f8604
major selector 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 |
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
|
562 |
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
|
563 |
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
|
564 |
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
|
565 |
|
99f5852f8604
major selector 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 |
|
99f5852f8604
major selector 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 |
class has_add_permission(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
|
568 |
|
99f5852f8604
major selector 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 |
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
|
570 |
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
|
571 |
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
|
572 |
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
|
573 |
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
|
574 |
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
|
575 |
|
99f5852f8604
major selector 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 |
|
99f5852f8604
major selector 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 |
class score_entity(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
|
578 |
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
|
579 |
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
|
580 |
|
99f5852f8604
major selector 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 |
# 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
|
582 |
|
0 | 583 |
@lltrace |
237
3df2e0ae2eba
begin selector renaming (work in progress)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
236
diff
changeset
|
584 |
def accept_etype(cls, req, *args, **kwargs): |
0 | 585 |
"""check etype presence in request form *and* accepts conformance""" |
586 |
try: |
|
587 |
etype = req.form['etype'] |
|
588 |
except KeyError: |
|
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
|
589 |
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
|
590 |
etype = kwargs['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
|
591 |
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
|
592 |
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
|
593 |
return implements(*cls.accepts).score_class(cls.vreg.etype_class(etype), req) |
237
3df2e0ae2eba
begin selector renaming (work in progress)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
236
diff
changeset
|
594 |
etype_form_selector = deprecated_function(accept_etype) |
0 | 595 |
|
596 |
@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
|
597 |
def _rql_condition(cls, req, rset, row=None, col=0, **kwargs): |
0 | 598 |
"""accept single entity result set if the entity match an rql condition |
599 |
""" |
|
600 |
if cls.condition: |
|
601 |
eid = rset[row or 0][col or 0] |
|
602 |
if 'U' in frozenset(split_expression(cls.condition)): |
|
603 |
rql = 'Any X WHERE X eid %%(x)s, U eid %%(u)s, %s' % cls.condition |
|
604 |
else: |
|
605 |
rql = 'Any X WHERE X eid %%(x)s, %s' % cls.condition |
|
606 |
try: |
|
607 |
return len(req.execute(rql, {'x': eid, 'u': req.user.eid}, 'x')) |
|
608 |
except Unauthorized: |
|
609 |
return 0 |
|
610 |
||
611 |
return 1 |
|
254
b1eda3dd844a
more selector renaming
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
247
diff
changeset
|
612 |
_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
|
613 |
|
0 | 614 |
@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
|
615 |
def but_etype(cls, req, rset, row=None, col=0, **kwargs): |
0 | 616 |
"""restrict the searchstate_accept_one_selector to exclude entity's type |
617 |
refered by the .etype attribute |
|
618 |
""" |
|
619 |
if rset.description[row or 0][col or 0] == cls.etype: |
|
620 |
return 0 |
|
621 |
return 1 |
|
254
b1eda3dd844a
more selector renaming
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
247
diff
changeset
|
622 |
but_etype_selector = deprecated_function(but_etype) |
0 | 623 |
|
624 |
@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
|
625 |
def etype_rtype_selector(cls, req, rset, row=None, col=0, **kwargs): |
0 | 626 |
"""only check if the user has read access on the entity's type refered |
627 |
by the .etype attribute and on the relations's type refered by the |
|
628 |
.rtype attribute if set. |
|
629 |
""" |
|
630 |
schema = cls.schema |
|
631 |
perm = getattr(cls, 'require_permission', 'read') |
|
632 |
if hasattr(cls, 'etype'): |
|
633 |
eschema = schema.eschema(cls.etype) |
|
634 |
if not (eschema.has_perm(req, perm) or eschema.has_local_role(perm)): |
|
635 |
return 0 |
|
636 |
if hasattr(cls, 'rtype'): |
|
394 | 637 |
rschema = schema.rschema(cls.rtype) |
638 |
if not (rschema.has_perm(req, perm) or rschema.has_local_role(perm)): |
|
0 | 639 |
return 0 |
640 |
return 1 |
|
641 |
||
642 |
@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
|
643 |
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
|
644 |
return bool(rset.get_entity(row or 0, col or 0).related(cls.rtype, role(cls))) |
0 | 645 |
|
237
3df2e0ae2eba
begin selector renaming (work in progress)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
236
diff
changeset
|
646 |
@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
|
647 |
def user_can_add_etype(cls, req, rset, row=None, col=0, **kwargs): |
0 | 648 |
"""only check if the user has add access on the entity's type refered |
649 |
by the .etype attribute. |
|
650 |
""" |
|
651 |
if not cls.schema.eschema(cls.etype).has_perm(req, 'add'): |
|
652 |
return 0 |
|
653 |
return 1 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
654 |
add_etype_selector = deprecated_function(user_can_add_etype) |
0 | 655 |
|
656 |
@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
|
657 |
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
|
658 |
**kwargs): |
0 | 659 |
propval = req.property_value('%s.%s.context' % (cls.__registry__, cls.id)) |
660 |
if not propval: |
|
661 |
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
|
662 |
if context is not None and propval and context != propval: |
0 | 663 |
return 0 |
664 |
return 1 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
665 |
contextprop_selector = deprecated_function(match_context_prop) |
0 | 666 |
|
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 primary_view(cls, req, rset, row=None, col=0, view=None, |
0 | 669 |
**kwargs): |
670 |
if view is not None and not view.is_primary(): |
|
671 |
return 0 |
|
672 |
return 1 |
|
236
8ab9e72dd8f1
begin renaming for selectors, keeping bw compat
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
230
diff
changeset
|
673 |
primaryview_selector = deprecated_function(primary_view) |
0 | 674 |
|
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
|
675 |
def appobject_selectable(registry, oid): |
161
328bc32b5701
repairing error from preceding commit
Laure Bourgois <Laure.Bourgois@logilab.fr>
parents:
157
diff
changeset
|
676 |
"""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
|
677 |
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
|
678 |
""" |
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
|
679 |
@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
|
680 |
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
|
681 |
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
|
682 |
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
|
683 |
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
|
684 |
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
|
685 |
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
|
686 |
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
|
687 |
|
0 | 688 |
|
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 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
690 |
# 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
|
691 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
692 |
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
|
693 |
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
|
694 |
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
|
695 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
696 |
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
|
697 |
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
|
698 |
_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
|
699 |
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
|
700 |
implement_interface = 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
|
701 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
702 |
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
|
703 |
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
|
704 |
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
|
705 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
706 |
def match_user_group(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
|
707 |
return match_user_groups(cls.require_groups)(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
|
708 |
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
|
709 |
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
|
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 |
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
|
712 |
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
|
713 |
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
|
714 |
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
|
715 |
|
99f5852f8604
major selector 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 |
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
|
717 |
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
|
718 |
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
|
719 |
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
|
720 |
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
|
721 |
|
99f5852f8604
major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents:
593
diff
changeset
|
722 |
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
|
723 |
"""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
|
724 |
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
|
725 |
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
|
726 |
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
|
727 |
|
99f5852f8604
major selector 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 |
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
|
729 |
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
|
730 |
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
|
731 |
|
0 | 732 |
# compound selectors ########################################################## |
733 |
||
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
|
734 |
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
|
735 |
name='accept_one')) |
254
b1eda3dd844a
more selector renaming
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
247
diff
changeset
|
736 |
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
|
737 |
|
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
|
738 |
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
|
739 |
name='rql_condition') |
254
b1eda3dd844a
more selector renaming
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
247
diff
changeset
|
740 |
rqlcondition_selector = deprecated_function(rql_condition) |
b1eda3dd844a
more selector renaming
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
247
diff
changeset
|
741 |
|
0 | 742 |
|
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
|
743 |
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
|
744 |
name='searchstate_accept') |
254
b1eda3dd844a
more selector renaming
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
247
diff
changeset
|
745 |
searchstate_accept_selector = deprecated_function(searchstate_accept) |
b1eda3dd844a
more selector renaming
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
247
diff
changeset
|
746 |
|
b1eda3dd844a
more selector renaming
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
247
diff
changeset
|
747 |
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
|
748 |
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
|
749 |
name='searchstate_accept_one') |
254
b1eda3dd844a
more selector renaming
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
247
diff
changeset
|
750 |
searchstate_accept_one_selector = deprecated_function(searchstate_accept_one) |
b1eda3dd844a
more selector renaming
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
247
diff
changeset
|
751 |
|
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
|
752 |
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
|
753 |
name='searchstate_accept_one_but_etype') |
254
b1eda3dd844a
more selector renaming
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
247
diff
changeset
|
754 |
searchstate_accept_one_but_etype_selector = deprecated_function( |
b1eda3dd844a
more selector renaming
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
247
diff
changeset
|
755 |
searchstate_accept_one_but_etype) |