def test_formatted_time():
    # From Josiah
    dt = datetime.fromtimestamp(float(raw_time_str)).strftime("%Y-%m-%d %H:%M")
    rating = Rating(timestamp=dt)
    rating.save()
    print(' timestamp ' + str(rating.timestamp))
    assert rating.timestamp is not None
def change_or_create_user_rating_for_current_movie(current_movie, current_user, new_value):
    if current_user.rating_set.filter(movie=current_movie).exists():
        rating = current_user.rating_set.get(movie=current_movie)
        rating.value = new_value

    else:
        rating = Rating(value=new_value)
        rating.user = current_user
        rating.movie = current_movie

    rating.save()
Esempio n. 3
0
def seed_ratings():
    raters = Rater.objects.all()
    movies = Movie.objects.all()

    rating_id = 1
    for movie in movies:
        for num in range(20):
            random_rater = raters[random.randint(0, len(raters)-1)]
            rating = random.randint(1, 5)
            date = fake.date_time()
            new_rating = Rating(rating_id, random_rater.pk, movie.pk, date, rating)
            new_rating.save()
            rating_id += 1
Esempio n. 4
0
def update_ratings_from_json(id, array):
    movie = Movie.objects.get(pk=id)
    movie.rating_set.all().delete()
    new_rating_set = [
        Rating(movie=movie, source=r['source'], value=r['value'])
        for r in array
    ]
    Rating.objects.bulk_create(new_rating_set)
Esempio n. 5
0
def omdb_to_model(json):
    logger.info("Processing movie data: %s", json)
    # Copy, to avoid modifying input
    json = dict(json)
    # Response isn't a part of the movie
    json.pop("Response", '')
    # TODO: (Maybe) Replace "N/A" with nulls
    # Ratings need special handling
    ratings_json = json.pop("Ratings", None)
    new_args = {omdb_name_mapping[k]: v for k, v in json.items()}
    movie = Movie(**new_args)
    # In case omdb tries to match the title more aggressively and the user tries multiple variants of the same title
    # Not using get_or_create because we want the query (not object), for url
    movie_in_db = Movie.objects.filter(title=movie.title)
    if movie_in_db.exists():
        return movie_in_db.first()
    movie.save()
    logger.info("Added new movie with id:%d, title:%s", movie.id, movie.title)
    if ratings_json is not None:
        ratings = [Rating(movie=movie, source=r['Source'], value=r['Value']) for r in ratings_json]
        Rating.objects.bulk_create(ratings)
    return movie
Esempio n. 6
0
    def setUp(self):
        """Set up the test database"""

        self.m = Rating(user_id=1, movie_id=1, rating=5)
Esempio n. 7
0
from django.contrib.auth.models import User
from movies.models import Rating, Movie
ratings = {1: [i for i in range(0,20)],
			2: [i for i in range(0,5)],
			3: [i for i in range(0,10)]}

print('adding ratings')

for i in ratings:
	u = User.objects.create_user(str(i),str(i)+'@z.com',str(i)*10)
	u.save()
	for j in ratings[i]:
		m = Movie.objects.get(movie_no = j+1)
		r = Rating(user_id = u,movie_id = m, rating = 5)
		r.save()
def test_raw_time():
    rating = Rating(raw_time=raw_time)
    rating.save()
    assert rating.raw_time == raw_time
Esempio n. 9
0
    def post(self, request):
        # Get title from service API
        service_api_serializer = MovieSerialier(data=request.data)
        if not service_api_serializer.is_valid():
            return Response({'title': 'Not valid title provided!'},
                            status=status.HTTP_400_BAD_REQUEST)

        # Initialize Service locator class and get data from external API
        movie_service = MovieService(api_key, url)

        data = movie_service.get_movie(service_api_serializer.data['title'])

        print(data)
        # run ModelSerializers, save models if all pass
        serializers = {
            'movie':
            MovieExternalApiSerializer(data=data),
            'imdbinfo':
            ImdbInfoSeriaize(data=data),
            'staff':
            StaffExternalApiSerializer(data=data),
            'marketinginfo':
            MarketingInfoExternalApiSerializer(data=data),
            'timeline':
            TimelineExternalApiSerializer(data=data),
            'ratings': [
                RatingExternalApiSerializer(data=rating)
                for rating in data['ratings']
            ],
        }
        errors = {}
        for name, serializer in serializers.items():
            if name != 'ratings':
                if not serializer.is_valid():
                    errors.update(serializer.errors)
            else:
                for rating_serializer in serializer:
                    if not rating_serializer.is_valid():
                        errors.update(rating_serializer.errors)

        if not errors:
            movie = serializers['movie'].save()
            ImdbInfo(movie=movie,
                     **serializers['imdbinfo'].validated_data).save()
            Staff(movie=movie, **serializers['staff'].validated_data).save()
            MarketingInfo(
                movie=movie,
                **serializers['marketinginfo'].validated_data).save()
            Timeline(movie=movie,
                     **serializers['timeline'].validated_data).save()
            for rating in serializers['ratings']:
                Rating(movie=movie, **rating.validated_data).save()
        else:
            return Response({
                'Errors':
                errors,
                'message':
                'Errors occured during data retrieveing!'
            })
        # Return record from database to user.
        return Response({
            'Movie Details':
            MovieExternalApiSerializer(movie).data,
            'Staff Details':
            StaffExternalApiSerializer(movie.staff).data,
            'Timeline':
            TimelineExternalApiSerializer(movie.timeline).data,
            'Marketing Info':
            MarketingInfoExternalApiSerializer(movie.marketinginfo).data,
            'Imdb Info':
            ImdbInfoSeriaize(movie.imdbinfo).data,
            'Ratings': [
                RatingExternalApiSerializer(rating).data
                for rating in movie.rating_set.all()
            ],
        })
 def parse_rating(dictionary):
     x = dictionary["results"][0]
     return Rating(float(x["vote_average"]), int(x["vote_count"]))