def sessions_by_film(request, id): try: film = Film.objects.get(id=id) except Film.DoesNotExist as e: return Response({'error': str(e)}) if request.method == 'GET': serializer = SessionSerializer(film.sessions.all(), many=True) return Response(serializer.data) elif request.method == 'POST': serializer = SessionSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response({'error': serializer.errors}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def retrieve(self, request: Request): try: user_id = int(request.query_params.get('user_id')) session = Session.find_by_user(user_id) page_size = request.query_params.get('page_size') page_size = int(page_size) if page_size else None if session is None: ip_address, _is_routable = get_client_ip(request) location = geocoder.ip(ip_address) if not location.lat: location = geocoder.ip('me') print('create a session for {}, ip: {}'.format( location.city, ip_address)) serializer = SessionSerializer( data={ 'user_id': user_id, 'page_size': page_size, 'location': location.latlng } ) if not serializer.is_valid(): raise APIException(str(serializer.errors), code=status.HTTP_400_BAD_REQUEST) serializer.save() return Response( serializer.data, status=status.HTTP_201_CREATED) else: if page_size: session.page_size = page_size serializer = SessionSerializer(instance=session) session.save() return Response(serializer.data, status=status.HTTP_200_OK) except Exception as error: print(error) raise APIException(error) finally: sys.stdout.flush()