def __call__(self, item):
        cls = get_prop_from_cls(self.cls, item)
        if self.request.path.endswith(item):
            self.query = self.query.outerjoin(item)
            self.query = self.query.options(contains_eager(item))

            self.query = filter_query_by_qs(
                self.session,
                cls,
                self.request.GET,
                existing_query = self.query
            )

            try:
                if self.request.method == 'POST':
                    return cls()

                parent = self.query.one()

                to_return = ModelCollection(
                    [x for x in getattr(parent, item)]
                )
            except ProgrammingError:
                raise KeyError

            return to_return

        new_sa_root = SQLAlchemyRoot(self.request, cls, table_lookup=item)
        new_sa_root.__parent__ = self.__parent__

        return new_sa_root
Beispiel #2
0
    def __call__(self, item):
        cls = get_prop_from_cls(self.cls, item)
        if self.request.path.endswith(item):
            self.query = self.query.outerjoin(item)
            self.query = self.query.options(contains_eager(item))

            self.query = filter_query_by_qs(self.session,
                                            cls,
                                            self.request.GET,
                                            existing_query=self.query)

            try:
                if self.request.method == 'POST':
                    return cls()

                parent = self.query.one()

                to_return = ModelCollection([x for x in getattr(parent, item)])
            except ProgrammingError:
                raise KeyError

            return to_return

        new_sa_root = SQLAlchemyRoot(self.request, cls, table_lookup=item)
        new_sa_root.__parent__ = self.__parent__

        return new_sa_root
Beispiel #3
0
    def __getitem__(self, k):
        try:
            key = getattr(self.cls, self.cls._traversal_lookup_key)

            result = self.session.query(self.cls).filter(key == k)

            # This is the final object we want, so lets return the result
            # if its not, lets return the query itself
            #            if self.request.path.split('/')[-2] == self.table_lookup:

            try:
                result = filter_query_by_qs(self.session,
                                            self.cls,
                                            self.request.GET,
                                            existing_query=result)

                result = result.one()
            except (ProgrammingError, DataError):
                raise KeyError


#                getitem = QueryGetItem(self.cls, result,
#                    self.request, result.__getitem__
#                )
#
#                getitem.__parent__ = self

#                result.__getitem__ =  getitem

# we need give the SQLAlchemy model an instance of the request
# so that it can check if we are in a PUT or POST
            result._request = self.request

            result.__parent__ = self

            return result
        except NoResultFound as e:
            # POSTing to the URL with ID already set?
            if self.request.method == 'POST' and self.cls != None:
                cls = self.cls()
                cls.__parent__ = self

            raise KeyError
    def __getitem__(self, k):
        try:
            key = getattr(self.cls, self.cls._traversal_lookup_key)

            result =  self.session.query(self.cls).filter(key == k)

            # This is the final object we want, so lets return the result
            # if its not, lets return the query itself
#            if self.request.path.split('/')[-2] == self.table_lookup:

            try:
                result = filter_query_by_qs(self.session, self.cls,
                        self.request.GET
                        , existing_query = result
                )

                result = result.one()
            except (ProgrammingError, DataError):
                raise KeyError
#                getitem = QueryGetItem(self.cls, result,
#                    self.request, result.__getitem__
#                )
#
#                getitem.__parent__ = self

#                result.__getitem__ =  getitem

            # we need give the SQLAlchemy model an instance of the request
            # so that it can check if we are in a PUT or POST
            result._request = self.request

            result.__parent__ = self

            return result
        except NoResultFound as e:
            # POSTing to the URL with ID already set?
            if self.request.method == 'POST' and self.cls != None:
                cls = self.cls()
                cls.__parent__ = self

            raise KeyError