from rest_framework import authentication, permissions from rest_framework.response import Response from rest_framework.views import APIView from ishtar_common.models import ApiSearchModel from ishtar_common.views_item import get_item class IpModelPermission(permissions.BasePermission): def has_permission(self, request, view): if not request.user or not getattr(request.user, "apiuser", None): return False ip_addr = request.META['REMOTE_ADDR'] q = view.search_model_query(request).filter(user__ip=ip_addr) return bool(q.count()) class SearchAPIView(APIView): model = None authentication_classes = (authentication.TokenAuthentication,) permission_classes = (permissions.IsAuthenticated, IpModelPermission) def __init__(self, **kwargs): assert self.model is not None super(SearchAPIView, self).__init__(**kwargs) def search_model_query(self, request): return ApiSearchModel.objects.filter( user=request.user.apiuser, content_type__app_label=self.model._meta.app_label, content_type__model=self.model._meta.model_name) def get(self, request, format=None): _get_item = get_item( self.model, "get_" + self.model.SLUG, self.model.SLUG, # TODO: own_table_cols=get_table_cols_for_ope() - adapt columns ) search_model = self.search_model_query(request).all()[0] if search_model.limit_query: # TODO # request.GET[] += " " + search_model.limit_query pass response = _get_item(request) return response #return Response({})