Exemplo n.º 1
0
class Profile(APIView):
    """
    <div style='border: 1px solid lightgray;padding:0.5rem; background-color:#f7f7f9'>
    <h4>Description:</h4> To display user's profile, followed events and feeds.
    </div>
    """
    gm = GeneralMethods()
    authentication_classes = [AppUserAuthentication]

    def get(self, request, *args, **kwargs):
        try:
            mobile = bleach.clean(request.META.get('HTTP_MOBILE', ''))

            # user's profile
            user = User.objects.filter(is_deleted=False).get(mobile=mobile)
            data = dict()
            user_serializer = UserSerializer(user)
            data.update({'user': user_serializer.data})

            # Followed feeds
            followed_feed = LikedFeed.objects.filter(is_deleted=False).filter(user__id=user.pk).select_related()
            followed_feed_serializer = FollowedFeedSerializer(followed_feed, many=True)
            data.update({'following_feeds': followed_feed_serializer.data})

            return self.gm.success_response(data)
        except Exception as e:
            print(e)
            return self.gm.error_response()
Exemplo n.º 2
0
class FeedDetails(RetrieveAPIView):
    """
    <div style='border: 1px solid lightgray;padding:0.5rem; background-color:#f7f7f9'>
    <h4>Description:</h4> Return an of the existing feed by it's id.
    </div>
    """
    authentication_classes = [AppUserAuthentication]
    serializer_class = FeedSerializer
    lookup_field = 'id'
    queryset = Feed.objects.filter(is_deleted=False).all()
    gm = GeneralMethods()

    def retrieve(self, request, *args, **kwargs):
        instance = self.get_object()
        serializer = self.get_serializer(instance)
        data = dict()
        data.update(serializer.data)
        mobile = bleach.clean(request.META.get('HTTP_MOBILE', ''))
        user = User.objects.get(mobile=mobile)
        liked_feed = LikedFeed.objects.filter(is_deleted=False).filter(
            feed__pk=data['id'])
        if liked_feed and liked_feed.get(
                feed__pk=data['id']).user.pk == user.pk:
            data.update({'liked_by_me': True})
        else:
            data.update({'liked_by_me': False})
        return self.gm.success_response(serializer.data)

    def handle_exception(self, exc):
        """
        If `request.method` does not correspond to a handler method,
        determine what kind of exception to raise.
        """
        return self.gm.client_error_response('No feed found')
Exemplo n.º 3
0
class FeedList(ListAPIView):
    """
    <div style='border: 1px solid lightgray;padding:0.5rem; background-color:#f7f7f9'>
    <h4>Description:</h4> Return a list of all the existing feeds.
    For Pagination append this in URL (default list of  objects is 20)
    <span style='color: red'>(?page=2)</span>
    </div>
    """
    authentication_classes = [AppUserAuthentication]
    serializer_class = FeedSerializer
    queryset = Feed.objects.filter(is_deleted=False).all().select_related()
    gm = GeneralMethods()

    def list(self, request, *args, **kwargs):
        queryset = self.paginate_queryset(self.get_queryset())
        serializer = self.get_serializer(queryset, many=True)
        data = self.get_paginated_response(serializer.data)
        mobile = bleach.clean(request.META.get('HTTP_MOBILE', ''))
        feeds_id_list = [row['id'] for row in data['results']]
        liked_feeds = LikedFeed.objects.filter(is_deleted=False).filter(
            id__in=feeds_id_list).filter(user__pk=User.objects.get(
                mobile=mobile).pk)
        feeds_liked_by_me = [row.feed.id for row in liked_feeds]
        for row in data['results']:
            row.update({
                'liked_by_me':
                True if row['id'] in feeds_liked_by_me else False
            })
        return self.gm.success_response(data)
Exemplo n.º 4
0
class FeedLiked(APIView):
    """
    <div style='border: 1px solid lightgray;padding:0.5rem; background-color:#f7f7f9'>
    <h4>Description:</h4> To like or undo-like an feed.
    </div>
    """
    authentication_classes = [AppUserAuthentication]
    gm = GeneralMethods()

    def get(self, request, *args, **kwargs):
        try:
            mobile = bleach.clean(request.META.get('HTTP_MOBILE', ''))
            user = User.objects.filter(is_deleted=False).get(mobile=mobile)
            feed_id = kwargs.get('id', '')
            if not feed_id:
                return self.gm.client_error_response('Feed Id is required')

            feed_exists = Feed.objects.filter(is_deleted=False).filter(
                id=feed_id)
            if not feed_exists:
                return self.gm.client_error_response('Invalid feed id')
            feed = feed_exists.get(id=feed_id)
            # # Check if already exists or not
            # # If exists, deleted it.
            already_liked = LikedFeed.objects.filter(is_deleted=False).filter(
                user__id=user.id).filter(feed__id=feed.id)
            if already_liked:
                already_liked.update(is_deleted=True)
                Feed.objects.filter(is_deleted=False).filter(
                    id=feed_id).update(likes=F('likes') - 1)
                return self.gm.success_response('disliked')
            else:
                LikedFeed.objects.create(user=user, feed=feed)
                Feed.objects.filter(is_deleted=False).filter(
                    id=feed_id).update(likes=F('likes') + 1)
                return self.gm.success_response('liked')
        except Exception as e:
            print(e)
            logger.error(e)
            return self.gm.error_response()

    def handle_exception(self, exc):
        """
        If `request.method` does not correspond to a handler method,
        determine what kind of exception to raise.
        """
        return self.gm.client_error_response('No feed found')
Exemplo n.º 5
0
 def create(self, request, *args, **kwargs):
     gm = GeneralMethods()
     try:
         data = gm.get_request_data(request)
         try:
             serializer = self.get_serializer(data=data)
             if not serializer.is_valid():
                 return gm.client_error_response_by_serializer(serializer.errors)
             user = User.objects.filter(is_deleted=False).get(email=data['email'])
             if user.is_blocked:
                 return gm.blocked_response()
             user.update_token()
             return gm.success_response(User.objects.filter(is_deleted=False).get(email=data['email']).login_data())
         except Exception as e:
             print(e)
             message = 'User not found'
             return gm.client_error_response(message)
     except Exception as e:
         print(e)
         logger.error(e)
         return gm.error_response()
Exemplo n.º 6
0
 def create(self, request, *args, **kwargs):
     gm = GeneralMethods()
     try:
         data = gm.get_request_data(request)
         try:
             serializer = self.get_serializer(data=data)
             if serializer.is_valid():
                 serializer.save(password=sha256(gm.encode(data['password'])))
                 User.objects.filter(is_deleted=False).get(email=data['email']).update_token()
                 return gm.success_response(
                     User.objects.filter(is_deleted=False).get(email=data['email']).login_data())
             else:
                 return gm.client_error_response_by_serializer(serializer.errors)
         except Exception as e:
             print(e)
             message = 'User already exists'
             return gm.client_error_response(message)
         # user = User.objects.get(Q(email=email) | Q(mobile=mobile))
     except Exception as e:
         print(e)
         logger.error(e)
         return gm.error_response()
Exemplo n.º 7
0
    def retrieve(self, request, *args, **kwargs):
        gm = GeneralMethods()
        try:
            if 'HTTP_TOKEN' not in request.META \
                    or 'HTTP_MOBILE' not in request.META:
                return gm.client_error_response('Required header missing')
            token = bleach.clean(request.META.get('HTTP_TOKEN', False))
            mobile = bleach.clean(request.META.get('HTTP_MOBILE', False))

            # Check if the data id empty or not then raise Exception
            if not token or not mobile:
                return gm.client_error_response('Invalid headers')

            user = User.objects.filter(is_deleted=False).filter(token=token).filter(mobile=mobile)
            if not user:
                return gm.client_error_response('Already logged out')
            user.get(mobile=mobile).logout()
            return gm.success_response('success')
        except Exception as e:
            print(e)
            logger.error(e)
            return gm.error_response()
Exemplo n.º 8
0
 def __init__(self, get_response):
     self.get_response = get_response
     self.gm = GeneralMethods()