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
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
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