211 :returns: A :class:`ResultSet` |
211 :returns: A :class:`ResultSet` |
212 |
212 |
213 >>> users = find('CWGroup', name=u"users").one() |
213 >>> users = find('CWGroup', name=u"users").one() |
214 >>> groups = find('CWGroup').entities() |
214 >>> groups = find('CWGroup').entities() |
215 """ |
215 """ |
216 parts = ['Any X WHERE X is %s' % etype] |
216 parts = ['Any X WHERE X is {0}'.format(etype)] |
217 varmaker = rqlvar_maker(defined='X') |
217 varmaker = rqlvar_maker(defined='X') |
218 eschema = self.vreg.schema.eschema(etype) |
218 eschema = self.vreg.schema.eschema(etype) |
219 for attr, value in kwargs.items(): |
219 for attr, value in kwargs.items(): |
220 if isinstance(value, list) or isinstance(value, tuple): |
220 if isinstance(value, list) or isinstance(value, tuple): |
221 raise NotImplementedError( |
221 raise NotImplementedError( |
223 if hasattr(value, 'eid'): |
223 if hasattr(value, 'eid'): |
224 kwargs[attr] = value.eid |
224 kwargs[attr] = value.eid |
225 if attr.startswith('reverse_'): |
225 if attr.startswith('reverse_'): |
226 attr = attr[8:] |
226 attr = attr[8:] |
227 assert attr in eschema.objrels, \ |
227 assert attr in eschema.objrels, \ |
228 '%s not in %s object relations' % (attr, eschema) |
228 '{0} not in {1} object relations'.format(attr, eschema) |
229 parts.append( |
229 parts.append('{var} {attr} X, {var} eid %(reverse_{attr})s'.format( |
230 '%(varname)s %(attr)s X, ' |
230 var=next(varmaker), attr=attr)) |
231 '%(varname)s eid %%(reverse_%(attr)s)s' |
|
232 % {'attr': attr, 'varname': next(varmaker)}) |
|
233 else: |
231 else: |
234 assert attr in eschema.subjrels, \ |
232 assert attr in eschema.subjrels, \ |
235 '%s not in %s subject relations' % (attr, eschema) |
233 '{0} not in {1} subject relations'.format(attr, eschema) |
236 parts.append('X %(attr)s %%(%(attr)s)s' % {'attr': attr}) |
234 parts.append('X {attr} %({attr})s'.format(attr=attr)) |
237 |
235 |
238 rql = ', '.join(parts) |
236 rql = ', '.join(parts) |
239 |
237 |
240 return self.execute(rql, kwargs) |
238 return self.execute(rql, kwargs) |
241 |
239 |