def handle_request(movies): try: movie_list = [] for movie in movies: movie_map = {} movie_map["name"] = movie.name movie_map["director"] = movie.director.name movie_map["imdb_score"] = movie.imdb_score movie_map["99popularity"] = movie.popularity genre_list = [] for genre in movie.genre.all(): genre_list.append(genre.name) movie_map["genre"] = genre_list movie_list.append(movie_map) return Response({"size": len(movie_list), "result": movie_list}) except: logger.info(traceback.format_exc())
def get(self, request): ''' Gets the matching movie list w.r.t. the query data ''' try: logger.info("GET Search movies %s" % (request.GET.values()[0])) request_dict = json.loads(request.GET.values()[0]) movie_ids = [] is_lone_value = True if "movie_name" in request_dict.keys(): movie_tmp_ids = (Movie.objects.filter(name__icontains=request_dict['movie_name']). values_list('id', flat=True)) movie_ids.extend(movie_tmp_ids) is_lone_value = False if "director" in request_dict.keys(): if movie_ids: movie_tmp_ids = (Movie.objects.filter(director__name__icontains=request_dict['director'], id__in=movie_ids).values_list('id', flat=True)) movie_ids = list(set(movie_tmp_ids).intersection(movie_ids)) elif is_lone_value: movie_ids = (Movie.objects.filter(director__name__icontains=request_dict['director']). values_list('id', flat=True)) is_lone_value = False if "genre" in request_dict.keys(): if movie_ids: movie_tmp_ids = (Movie.objects.filter(genre__name__icontains=request_dict['genre'], id__in=movie_ids).values_list('id', flat=True)) movie_ids = list(set(movie_tmp_ids).intersection(movie_ids)) elif is_lone_value: movie_ids = (Movie.objects.filter(genre__name__icontains=request_dict['genre']). values_list('id', flat=True)) is_lone_value = False if "imdb_score" in request_dict.keys(): if movie_ids: movie_tmp_ids = (Movie.objects.filter(imdb_score=request_dict['imdb_score'], id__in=movie_ids).values_list('id', flat=True)) movie_ids = list(set(movie_tmp_ids).intersection(movie_ids)) elif is_lone_value: movie_ids = (Movie.objects.filter(imdb_score=request_dict['imdb_score']). values_list('id', flat=True)) is_lone_value = False if "popularity" in request_dict.keys(): if movie_ids: movie_tmp_ids = (Movie.objects.filter(popularity=request_dict['popularity'], id__in=movie_ids).values_list('id', flat=True)) movie_ids = list(set(movie_tmp_ids).intersection(movie_ids)) elif is_lone_value: movie_ids = (Movie.objects.filter(popularity=request_dict['popularity']). values_list('id', flat=True)) is_lone_value = False movies = Movie.objects.filter(id__in=movie_ids) if movies: return handle_request(movies) else: logger.info("No entries in DB for given query data") return Response("No Results matching the search query", status.HTTP_204_NO_CONTENT) except: logger.error(traceback.format_exc()) return Response("Error", status.HTTP_500_INTERNAL_SERVER_ERROR)
def get(self, request): ''' Gets the matching movie list w.r.t. the query data ''' try: logger.info("GET Search movies %s" % (request.GET.values()[0])) request_dict = json.loads(request.GET.values()[0]) movie_ids = [] is_lone_value = True if "movie_name" in request_dict.keys(): movie_tmp_ids = (Movie.objects.filter( name__icontains=request_dict['movie_name']).values_list( 'id', flat=True)) movie_ids.extend(movie_tmp_ids) is_lone_value = False if "director" in request_dict.keys(): if movie_ids: movie_tmp_ids = (Movie.objects.filter( director__name__icontains=request_dict['director'], id__in=movie_ids).values_list('id', flat=True)) movie_ids = list( set(movie_tmp_ids).intersection(movie_ids)) elif is_lone_value: movie_ids = (Movie.objects.filter( director__name__icontains=request_dict['director']). values_list('id', flat=True)) is_lone_value = False if "genre" in request_dict.keys(): if movie_ids: movie_tmp_ids = (Movie.objects.filter( genre__name__icontains=request_dict['genre'], id__in=movie_ids).values_list('id', flat=True)) movie_ids = list( set(movie_tmp_ids).intersection(movie_ids)) elif is_lone_value: movie_ids = (Movie.objects.filter( genre__name__icontains=request_dict['genre']). values_list('id', flat=True)) is_lone_value = False if "imdb_score" in request_dict.keys(): if movie_ids: movie_tmp_ids = (Movie.objects.filter( imdb_score=request_dict['imdb_score'], id__in=movie_ids).values_list('id', flat=True)) movie_ids = list( set(movie_tmp_ids).intersection(movie_ids)) elif is_lone_value: movie_ids = (Movie.objects.filter( imdb_score=request_dict['imdb_score']).values_list( 'id', flat=True)) is_lone_value = False if "popularity" in request_dict.keys(): if movie_ids: movie_tmp_ids = (Movie.objects.filter( popularity=request_dict['popularity'], id__in=movie_ids).values_list('id', flat=True)) movie_ids = list( set(movie_tmp_ids).intersection(movie_ids)) elif is_lone_value: movie_ids = (Movie.objects.filter( popularity=request_dict['popularity']).values_list( 'id', flat=True)) is_lone_value = False movies = Movie.objects.filter(id__in=movie_ids) if movies: return handle_request(movies) else: logger.info("No entries in DB for given query data") return Response("No Results matching the search query", status.HTTP_204_NO_CONTENT) except: logger.error(traceback.format_exc()) return Response("Error", status.HTTP_500_INTERNAL_SERVER_ERROR)