cubicweb/req.py
changeset 12181 29dae4b0332a
parent 12179 14f85569eda2
child 12182 50109859da43
equal deleted inserted replaced
12180:72a890b713c1 12181:29dae4b0332a
   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