diff -r 2dc0b0db2329 -r f8ba6ea94af9 pyramid_cubicweb/rest_api.py --- a/pyramid_cubicweb/rest_api.py Mon Jun 15 09:31:37 2015 +0200 +++ b/pyramid_cubicweb/rest_api.py Fri Jul 24 13:40:36 2015 +0200 @@ -1,54 +1,9 @@ from __future__ import absolute_import -from rql import TypeResolverException - -from pyramid.decorator import reify -from pyramid.httpexceptions import HTTPNotFound -from pyramid.view import view_config - -class EntityResource(object): - def __init__(self, request, cls, attrname, value): - self.request = request - self.cls = cls - self.attrname = attrname - self.value = value - - @reify - def rset(self): - st = self.cls.fetch_rqlst(self.request.cw_cnx.user, ordermethod=None) - st.add_constant_restriction(st.get_variable('X'), self.attrname, - 'x', 'Substitute') - if self.attrname == 'eid': - try: - rset = self.request.cw_request.execute( - st.as_string(), {'x': int(self.value)}) - except (ValueError, TypeResolverException): - # conflicting eid/type - raise HTTPNotFound() - else: - rset = self.request.cw_request.execute( - st.as_string(), {'x': unicode(self.value)}) - return rset - - -class ETypeResource(object): - @classmethod - def from_match(cls, matchname): - def factory(request): - return cls(request, request.matchdict[matchname]) - return factory - - def __init__(self, request, etype): - vreg = request.registry['cubicweb.registry'] - - self.request = request - self.etype = vreg.case_insensitive_etypes[etype.lower()] - self.cls = vreg['etypes'].etype_class(self.etype) - - def __getitem__(self, value): - attrname = self.cls.cw_rest_attr_info()[0] - return EntityResource(self.request, self.cls, attrname, value) +from pyramid.httpexceptions import HTTPNotFound +from pyramid.view import view_config +from pyramid_cubicweb.resources import EntityResource, ETypeResource class MatchIsETypePredicate(object):