pyramid_cubicweb/rest_api.py
changeset 11599 f8ba6ea94af9
parent 11598 2dc0b0db2329
child 11600 473754eac7c1
--- 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):