Beispiel #1
0
 def get_user_info(self, request):
     token = get_token_from_request(request)
     try:
         _, auth_json = AuthRequester().get_user_info(token)
     except BaseApiRequestError:
         return Response({'error': 'Проблемы с сервисом авторизации, попробуйте позже'},
                         status=status.HTTP_500_INTERNAL_SERVER_ERROR)
     return auth_json
 def get_is_accepted_by_me(self, instance: Place):
     try:
         _, user_json = AuthRequester().get_user_info(
             get_token_from_request(self.context['request']))
         return Accept.objects.filter(place_id=instance.id,
                                      created_by=user_json['id']).exists()
     except (KeyError, BaseApiRequestError):
         return False
Beispiel #3
0
 def validate_pic_id(self, value: int):
     r = MediaRequester()
     token = get_token_from_request(self.context['request'])
     try:
         _ = r.get_image_info(value, token)
         return value
     except BaseApiRequestError:
         return 1
 def get_my_rating(self, instance: Place):
     try:
         _, user_json = AuthRequester().get_user_info(
             get_token_from_request(self.context['request']))
         return Rating.objects.get(place_id=instance.id,
                                   created_by=user_json['id']).rating
     except (KeyError, Rating.DoesNotExist, BaseApiRequestError):
         return 0
 def validate_pic_id(self, value: int):
     r = MediaRequester()
     token = get_token_from_request(self.context['request'])
     try:
         _ = r.get_image_info(value, token)
         return value
     except BaseApiRequestError:
         raise serializers.ValidationError(
             'Валидация на поле pic_id свалилась, проверьте его, либо попропуйте позже'
         )
Beispiel #6
0
 def has_permission(self, request, view):
     if request.method in SAFE_METHODS:
         return True
     try:
         token = get_token_from_request(request)
         r = AuthRequester()
         _, is_superuser = r.is_superuser(token)
         return is_superuser
     except BaseApiRequestError:
         return False
Beispiel #7
0
 def delete_accept(self, request, acceptance_id):
     token = get_token_from_request(request)
     try:
         PlacesRequester().delete_acceptance(acceptance_id=acceptance_id, token=token)
     except TypeError:
         return Response({'error': 'Неправильный формат JSON'}, status=status.HTTP_400_BAD_REQUEST)
     except UnexpectedResponse as e:
         return Response(e.body, status=e.code)
     except BaseApiRequestError:
         return Response({'error': 'Проблемы с сервисом мест, попробуйте позже'},
                         status=status.HTTP_500_INTERNAL_SERVER_ERROR)
 def validate_created_by(self, value):
     if value:
         return value
     r = AuthRequester()
     token = get_token_from_request(self.context['request'])
     try:
         _, auth_json = r.get_user_info(token)
         return auth_json['id']
     except BaseApiRequestError:
         raise serializers.ValidationError(
             'Не получается найти user_id по токену, попробуйте позже')
Beispiel #9
0
 def post_place(self, request, auth_json):
     token = get_token_from_request(request)
     try:
         _, new_place = PlacesRequester().create_place(**request.data, created_by=auth_json['id'], token=token)
     except TypeError as e:
         return Response({'error': 'Неправильный формат JSON'}, status=status.HTTP_400_BAD_REQUEST)
     except UnexpectedResponse as e:
         return Response(e.body, status=e.code)
     except BaseApiRequestError:
         return Response({'error': 'Проблемы с сервисом мест, попробуйте позже'},
                         status=status.HTTP_500_INTERNAL_SERVER_ERROR)
     return new_place
Beispiel #10
0
 def buy_pin(self, request, auth_json):
     token = get_token_from_request(request)
     try:
         _, app_token = AuthRequester().app_get_token(settings.APP_ID, settings.APP_SECRET)
         _, pin_json = AwardsRequester().get_pin(**request.data, token=token)
         _, user_json = UsersRequester().buy_pin(pin_id=pin_json['id'], user_id=auth_json['id'],
                                                 price=pin_json['price'], app_token=app_token['access'])
         return user_json
     except TypeError as e:
         return Response({'error': 'Неправильный формат JSON'}, status=status.HTTP_400_BAD_REQUEST)
     except UnexpectedResponse as e:
         return Response(e.body, status=e.code)
     except BaseApiRequestError:
         return Response({'error': 'Проблемы с сервисом мест, попробуйте позже'},
                         status=status.HTTP_500_INTERNAL_SERVER_ERROR)
Beispiel #11
0
    def get_queryset(self):
        lookup_fields = {}
        with_deleted = self.request.query_params.get('with_deleted', 'False')
        with_deleted = with_deleted.lower() == 'true'
        all_ = Place.objects.with_deleted() if with_deleted else Place.objects

        only_mine = self.request.query_params.get('only_mine', 'False')
        only_mine = only_mine.lower() == 'true'
        if only_mine:
            r = AuthRequester()
            token = get_token_from_request(self.request)
            try:
                _, auth_json = r.get_user_info(token)
                lookup_fields['created_by'] = auth_json['id']
            except BaseApiRequestError:
                raise ValidationError(
                    'Не получается получить юзера по токену, попробуйте позже')

        name = self.request.query_params.get('name', None)
        if name:
            lookup_fields['name__contains'] = name

        latitude_1 = self.request.query_params.get('lat1', None)
        longitude_1 = self.request.query_params.get('long1', None)
        latitude_2 = self.request.query_params.get('lat2', None)
        longitude_2 = self.request.query_params.get('long2', None)
        llll = (latitude_1, latitude_2, longitude_1, longitude_2)
        if all(llll):
            try:
                lookup_fields['latitude__gte'] = min(float(latitude_1),
                                                     float(latitude_2))
                lookup_fields['longitude__gte'] = min(float(longitude_1),
                                                      float(longitude_2))
                lookup_fields['latitude__lte'] = max(float(latitude_1),
                                                     float(latitude_2))
                lookup_fields['longitude__lte'] = max(float(longitude_1),
                                                      float(longitude_2))
            except (ValueError, TypeError):
                raise ValidationError(
                    'Для фильтрации по сектору карты параметры должны быть числами'
                )
        elif len(list(filter(lambda x: x is not None, llll))) != 0:
            raise ValidationError(
                'Для фильтрации по сектору карты нужны 4 координаты')
        return all_.filter(**lookup_fields)
Beispiel #12
0
 def initial(self, request, *args, **kwargs):
     super().initial(request, *args, **kwargs)
     self.requester = PlacesRequester()
     self.token = get_token_from_request(request)