Commit c8bd3956 authored by Sylvain Thénault's avatar Sylvain Thénault
Browse files

[entity] make related_rql honors its targettypes argument

--HG--
branch : stable
parent c765adac7f5c
......@@ -691,14 +691,18 @@ class Entity(AppObject, dict):
def related_rql(self, rtype, role='subject', targettypes=None):
rschema = self.schema[rtype]
if role == 'subject':
restriction = 'E eid %%(x)s, E %s X' % rtype
if targettypes is None:
targettypes = rschema.objects(self.e_schema)
restriction = 'E eid %%(x)s, E %s X' % rtype
else:
restriction += 'E is IN (%s)' % ','.join(targettypes)
card = greater_card(rschema, (self.e_schema,), targettypes, 0)
else:
restriction = 'E eid %%(x)s, X %s E' % rtype
if targettypes is None:
targettypes = rschema.subjects(self.e_schema)
restriction = 'E eid %%(x)s, X %s E' % rtype
else:
restriction += 'E is IN (%s)' % ','.join(targettypes)
card = greater_card(rschema, targettypes, (self.e_schema,), 1)
if len(targettypes) > 1:
fetchattrs_list = []
......
......@@ -192,7 +192,19 @@ class EntityTC(EnvBasedTC):
Personne.fetch_attrs, Personne.fetch_order = fetch_config(('nom', ))
# XXX
self.assertEquals(p.related_rql('evaluee'),
'Any X,AA ORDERBY Z DESC WHERE X modification_date Z, E eid %(x)s, E evaluee X, X modification_date AA')
'Any X,AA ORDERBY Z DESC '
'WHERE X modification_date Z, E eid %(x)s, E evaluee X, '
'X modification_date AA')
tag = self.vreg['etypes'].etype_class('Tag')(self.request())
self.assertEquals(tag.related_rql('tags', 'subject'),
'Any X,AA ORDERBY Z DESC '
'WHERE X modification_date Z, E eid %(x)s, E tags X, '
'X modification_date AA')
self.assertEquals(tag.related_rql('tags', 'subject', ('Personne',)),
'Any X,AA,AB ORDERBY AA ASC '
'WHERE E eid %(x)s, E tags XE is IN (Personne), X nom AA, '
'X modification_date AB')
def test_unrelated_rql_security_1(self):
user = self.request().user
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment