Skip to content

final viewing_party panthers Kallie_Gannon#169

Open
kalliegannon wants to merge 1 commit intoAda-C18:masterfrom
kalliegannon:master
Open

final viewing_party panthers Kallie_Gannon#169
kalliegannon wants to merge 1 commit intoAda-C18:masterfrom
kalliegannon:master

Conversation

@kalliegannon
Copy link
Copy Markdown

No description provided.

Copy link
Copy Markdown

@kelsey-steven-ada kelsey-steven-ada left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Congrats on your first project! 🎉 I’ve added some suggestions & questions, please let me know if there's anything I can clarify ^_^

Comment thread tests/test_wave_01.py
assert new_movie is None

@pytest.mark.skip()
#this is start of error
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure what code this comment relates to. As part of our code clean up before opening PRs, we should take a look for and remove commented out code and comments/pseudo code we don't need anymore. It helps keep our code concise and reduces possible confusion down the road, especially for other folks working in the same project.

Comment thread tests/test_wave_01.py
assert len(updated_data["watchlist"]) == 0
assert len(updated_data["watched"]) == 1

raise Exception("Test needs to be completed.")
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should add our own assertions here after removing the Exception. What information would we need to check to ensure the specific movie from watchlist was moved to the watched list?

Comment thread tests/test_wave_01.py
# Assert
assert len(updated_data["watchlist"]) == 1
assert len(updated_data["watched"]) == 2
assert updated_data["watched"][1] == movie_to_watch
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Our problem statement doesn't specify what order a movie should be added to the watched list in. If movies were added to the beginning to the list rather than the end, these tests would fail. A more flexible way we could check if the movie is in watched, is to check if the entire movie dictionary exists in the list:

assert movie_to_watch in updated_data["watched"]

# Another option:
assert HORROR_1 in updated_data["watched"]

Right now the assertions check if movie_to_watch was moved to updated_data["watched"], but what if we want to be sure no other data was affected? We would also want to confirm that the other 2 movies are in the places we expect:

assert HORROR_1 in updated_data["watched"]
assert FANTASY_2 in updated_data["watched"]
assert FANTASY_1 in updated_data["watchlist"]

Comment thread tests/test_wave_03.py

# Assert
assert len(friends_unique_movies) == 3
assert INTRIGUE_3 in friends_unique_movies
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are 3 values in the list friends_unique_movies, we generally would want to confirm all 3 values are what we expect. What assert statements would we need to write to check the other 2 movies in friends_unique_movies?

Comment thread viewing_party/party.py

def create_movie(title, genre, rating):
pass
if title == None or genre == None or rating == None:
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice one-line statement for checking inputs!

In Python when we test if a variable is pointing to None the PEP8 style guide recommends using is or is not for comparison rather than operators like ==.

None is a special object in Python, it’s a singleton, meaning there is only ever one instance of None in memory. All variables holding None are actually pointing to the same instance. By using is to compare against None, we avoid issues that could be caused by a class’s custom implementation of the comparison operators, and we gain some speed over a check using == since we are checking against identity rather than looking up if the variable's held type has a comparison function that should be used.

If you’d like more info on this, here’s a couple resources to get started =]
https://peps.python.org/pep-0008/#programming-recommendations
http://jaredgrubb.blogspot.com/2009/04/python-is-none-vs-none.html

In this case, we could also rely on the truthy/falsy value of the variables rather than checking for None specifically:

if not title or not genre or not rating:

Comment thread viewing_party/party.py
def get_available_recs(user_data):
friends_unique_movies = get_friends_unique_watched(user_data)
rec_movies = []
for movies in friends_unique_movies:
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

movies is plural, and there is a convention in programming that a plural name implies that it's a collection holding multiple objects. Since movies will hold a dictionary representing a single movie, I'd recommend using singular movie.

Comment thread viewing_party/party.py
Comment on lines +180 to +181
user_genre = get_most_watched_genre(user_data)
friends_unique_movies = get_friends_unique_watched(user_data)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great code reuse across waves 4 & 5!

Comment thread viewing_party/party.py
Comment on lines +183 to +185
for movies in friends_unique_movies:
if movies['genre'] == user_genre:
rec_list.append(movies)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I probably wouldn't recommend doing this in shared code because of how long the line gets and how many expressions we have to parse on one line, but as an example of how powerful list comprehensions can be, we could create and assign rec_list to its final contents in a single line:

rec_list = [movies if movies['genre'] == user_genre for movies in friends_unique_movies:]

Comment thread viewing_party/party.py
Comment on lines +190 to +197
fav_rec_list = []
friends_unique_movies = get_friends_unique_watched(user_data)

for movie in get_unique_watched(user_data):
if movie not in friends_unique_movies:
fav_rec_list.append(movie)
print(fav_rec_list)
return fav_rec_list
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This implementation is passing the test test_unique_rec_from_favorites, but there's an issue. This approach will return every item in get_unique_watched(user_data) whether or not they are in the list user_data['favorites']. How could you update this function to consider the user's favorite list?

Comment thread viewing_party/party.py
Comment on lines +190 to +195
fav_rec_list = []
friends_unique_movies = get_friends_unique_watched(user_data)

for movie in get_unique_watched(user_data):
if movie not in friends_unique_movies:
fav_rec_list.append(movie)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

get_unique_watched(user_data) will only return movies that our friends have not seen, so we could factor out the variable friends_unique_movies:

    fav_rec_list = []

    for movie in get_unique_watched(user_data):
            fav_rec_list.append(movie)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants