From 4f693aec14b39b3dbdf09ba75997280a5cd160d0 Mon Sep 17 00:00:00 2001 From: Zach Chan Date: Thu, 1 Jul 2021 11:05:48 +0800 Subject: [PATCH 1/3] Challenge Completed! --- python/src/video.py | 21 +++ python/src/video_player.py | 255 +++++++++++++++++++++++++++++++---- python/src/video_playlist.py | 74 ++++++++++ 3 files changed, 325 insertions(+), 25 deletions(-) diff --git a/python/src/video.py b/python/src/video.py index 52da908..c498815 100644 --- a/python/src/video.py +++ b/python/src/video.py @@ -15,6 +15,13 @@ def __init__(self, video_title: str, video_id: str, video_tags: Sequence[str]): # in case the caller changes the 'video_tags' they passed to us self._tags = tuple(video_tags) + # custom property: flag + self._flag = None + + def __str__(self): + """Custom String Representation""" + return "{title} ({id}) [{tags}]".format(title=self._title, id=self._video_id, tags=" ".join(self._tags)) + @property def title(self) -> str: """Returns the title of a video.""" @@ -29,3 +36,17 @@ def video_id(self) -> str: def tags(self) -> Sequence[str]: """Returns the list of tags of a video.""" return self._tags + + # Custom property: flag + @property + def flag(self) -> str: + """Returns the flag of a video.""" + return self._flag + + # Custom flag video method + def action_flag(self, reason): + self._flag = reason + + # Custom flag removal method + def remove_flag(self): + self._flag = None diff --git a/python/src/video_player.py b/python/src/video_player.py index bb79af8..7517935 100644 --- a/python/src/video_player.py +++ b/python/src/video_player.py @@ -1,13 +1,21 @@ """A video player class.""" from .video_library import VideoLibrary - +from .video_playlist import Playlist +import random +import re class VideoPlayer: """A class used to represent a Video Player.""" def __init__(self): self._video_library = VideoLibrary() + self._video_playing = None + self._video_paused = False + self._playlists = list() + + def get_video_library(self): + return self._video_library def number_of_videos(self): num_videos = len(self._video_library.get_all_videos()) @@ -15,8 +23,12 @@ def number_of_videos(self): def show_all_videos(self): """Returns all videos.""" - - print("show_all_videos needs implementation") + print("Here's a list of all available videos:") + videos = self._video_library.get_all_videos() + for vid in sorted(videos, key=lambda v: v.title[0]): + # Part 4 FLAG_VIDEO task: add flag when showing flagged videos + print("\t{0}{1}".format(vid, " - FLAGGED (reason: {0})".format(vid.flag) if vid.flag else "")) + # print("show_all_videos needs implementation") def play_video(self, video_id): """Plays the respective video. @@ -24,32 +36,88 @@ def play_video(self, video_id): Args: video_id: The video_id to be played. """ - print("play_video needs implementation") + # print("play_video needs implementation") + # 1. Search video by id + video_result = self._video_library.get_video(video_id) + if video_result is None: + print("Cannot play video: Video does not exist") + return + # 2. Part 4 FLAG_VIDEO task: Check if the video is flagged + if video_result.flag: + print("Cannot play video: Video is currently flagged (reason: {0})".format(video_result.flag)) + return + # 3. Check and Try stop playing video + if self._video_playing is not None: + self.stop_video() + # 4. Play video + print("Playing video: {0}".format(video_result.title)) + self._video_playing = video_result + self._video_paused = False def stop_video(self): """Stops the current video.""" - - print("stop_video needs implementation") + # print("stop_video needs implementation") + # 1. Check if any video is playing + if self._video_playing is None: + print("Cannot stop video: No video is currently playing") + return + # 2. Stop playing video + print("Stopping video: {0}".format(self._video_playing.title)) + self._video_playing = None + self._video_paused = False def play_random_video(self): """Plays a random video from the video library.""" - - print("play_random_video needs implementation") + videos = self._video_library.get_all_videos() + # 1. Part 4 FLAG_VIDEO task: filter all flagged video(s) out + videos = list(filter(lambda vid: not vid.flag, videos)) + # 2. Check if any videos available + if len(videos) == 0: + print("No videos available") + return + # 3. shuffle and play first vid + random.shuffle(videos) + self.play_video(videos[0].video_id) + # print("play_random_video needs implementation") def pause_video(self): """Pauses the current video.""" - - print("pause_video needs implementation") + # 1. Check if a video is playing + if self._video_playing is None: + print("Cannot pause video: No video is currently playing") + return + # 2. Check if the video is already paused + if self._video_paused: + print("Video already paused: {0}".format(self._video_playing.title)) + return + # 3. Pause the video + print("Pausing video: {0}".format(self._video_playing.title)) + self._video_paused = True + # print("pause_video needs implementation") def continue_video(self): """Resumes playing the current video.""" - - print("continue_video needs implementation") + # 1. Check pause-ability + if not self._video_playing: + print("Cannot continue video: No video is currently playing") + return + if not self._video_paused: + print("Cannot continue video: Video is not paused") + return + # 2. Continue paused video + print("Continuing video: {0}".format(self._video_playing.title)) + self._video_paused = False + # print("continue_video needs implementation") def show_playing(self): """Displays video currently playing.""" - - print("show_playing needs implementation") + # 1. Check any video playing + if not self._video_playing: + print("No video is currently playing") + return + # 2. Show the video playing + print("Currently playing: {0}{1}".format(self._video_playing, " - PAUSED" if self._video_paused else "")) + # print("show_playing needs implementation") def create_playlist(self, playlist_name): """Creates a playlist with a given name. @@ -57,7 +125,16 @@ def create_playlist(self, playlist_name): Args: playlist_name: The playlist name. """ - print("create_playlist needs implementation") + # 1. find if there is any playlist with same name exists + exist_playlist = self.is_playlist_exist(playlist_name) + if exist_playlist: + print("Cannot create playlist: A playlist with the same name already exists") + return + # 2. Create playlist and append to the list of playlists + new_playlist = Playlist(self, playlist_name) + self._playlists.append(new_playlist) + print("Successfully created new playlist: {0}".format(new_playlist.get_name())) + # print("create_playlist needs implementation") def add_to_playlist(self, playlist_name, video_id): """Adds a video to a playlist with a given name. @@ -66,12 +143,26 @@ def add_to_playlist(self, playlist_name, video_id): playlist_name: The playlist name. video_id: The video_id to be added. """ - print("add_to_playlist needs implementation") + # 1. Check if playlist exists + exist_playlist = self.is_playlist_exist(playlist_name) + if not exist_playlist: + print("Cannot add video to {0}: Playlist does not exist".format(playlist_name)) + return + # 2. Pass the job to the playlist to add + exist_playlist.add_video(playlist_name, video_id) + # print("add_to_playlist needs implementation") def show_all_playlists(self): """Display all playlists.""" + if len(self._playlists) == 0: + print("No playlists exist yet") + return + + print("Showing all playlists:") + for playlist in sorted(self._playlists, key=lambda pl: pl.get_name()): + print("\t{0}".format(playlist.get_name())) - print("show_all_playlists needs implementation") + # print("show_all_playlists needs implementation") def show_playlist(self, playlist_name): """Display all videos in a playlist with a given name. @@ -79,7 +170,21 @@ def show_playlist(self, playlist_name): Args: playlist_name: The playlist name. """ - print("show_playlist needs implementation") + # 1. Check if playlist exists + exist_playlist = self.is_playlist_exist(playlist_name) + if not exist_playlist: + print("Cannot show playlist {0}: Playlist does not exist".format(playlist_name)) + return + # 2. Show videos + print("Showing playlist: {0}".format(playlist_name)) + exist_playlist_videos = exist_playlist.get_videos() + if len(exist_playlist_videos) == 0: + print("\tNo videos here yet") + return + for vid in exist_playlist_videos.values(): + # Part 4 FLAG_VIDEO task: add flag when showing flagged videos + print("\t{0}{1}".format(vid, " - FLAGGED (reason: {0})".format(vid.flag) if vid.flag else "")) + # print("show_playlist needs implementation") def remove_from_playlist(self, playlist_name, video_id): """Removes a video to a playlist with a given name. @@ -88,7 +193,14 @@ def remove_from_playlist(self, playlist_name, video_id): playlist_name: The playlist name. video_id: The video_id to be removed. """ - print("remove_from_playlist needs implementation") + # 1. Check if playlist exists + exist_playlist = self.is_playlist_exist(playlist_name) + if not exist_playlist: + print("Cannot remove video from {0}: Playlist does not exist".format(playlist_name)) + return + # 2. Pass the job to the playlist + exist_playlist.remove_video(playlist_name, video_id) + # print("remove_from_playlist needs implementation") def clear_playlist(self, playlist_name): """Removes all videos from a playlist with a given name. @@ -96,7 +208,14 @@ def clear_playlist(self, playlist_name): Args: playlist_name: The playlist name. """ - print("clears_playlist needs implementation") + # 1. Check if playlist exists + exist_playlist = self.is_playlist_exist(playlist_name) + if not exist_playlist: + print("Cannot clear playlist {0}: Playlist does not exist".format(playlist_name)) + return + # 2. Pass the job to the playlist + exist_playlist.clear(playlist_name) + # print("clears_playlist needs implementation") def delete_playlist(self, playlist_name): """Deletes a playlist with a given name. @@ -104,7 +223,15 @@ def delete_playlist(self, playlist_name): Args: playlist_name: The playlist name. """ - print("deletes_playlist needs implementation") + # 1. Check if playlist exists + exist_playlist = self.is_playlist_exist(playlist_name) + if not exist_playlist: + print("Cannot delete playlist {0}: Playlist does not exist".format(playlist_name)) + return + # 2. Delete playlist + self._playlists = [i for i in self._playlists if i.get_name() != playlist_name] + print("Deleted playlist: {0}".format(playlist_name)) + # print("deletes_playlist needs implementation") def search_videos(self, search_term): """Display all the videos whose titles contain the search_term. @@ -112,7 +239,9 @@ def search_videos(self, search_term): Args: search_term: The query to be used in search. """ - print("search_videos needs implementation") + # Pass to Helper Function + self.search_videos_general(search_term, lambda vid: search_term.lower() in vid.title.lower()) + # print("search_videos needs implementation") def search_videos_tag(self, video_tag): """Display all videos whose tags contains the provided tag. @@ -120,7 +249,9 @@ def search_videos_tag(self, video_tag): Args: video_tag: The video tag to be used in search. """ - print("search_videos_tag needs implementation") + # Pass to Helper Function + self.search_videos_general(video_tag, lambda vid: video_tag.lower() in ";".join(vid.tags).lower().split(";")) + # print("search_videos_tag needs implementation") def flag_video(self, video_id, flag_reason=""): """Mark a video as flagged. @@ -129,7 +260,24 @@ def flag_video(self, video_id, flag_reason=""): video_id: The video_id to be flagged. flag_reason: Reason for flagging the video. """ - print("flag_video needs implementation") + # 1. Search video by id + video_result = self._video_library.get_video(video_id) + if video_result is None: + print("Cannot flag video: Video does not exist") + return + # 2. Check if the video is flagged + if video_result.flag: + print("Cannot flag video: Video is already flagged") + return + # 3. Stop playing-video and Flag the video + # 3.1. check if the playing vid is the one to flag + if self._video_playing and self._video_playing.video_id == video_id: + self.stop_video() + if flag_reason == "": + flag_reason = "Not supplied" + video_result.action_flag(flag_reason) + print("Successfully flagged video: {0} (reason: {1})".format(video_result.title, video_result.flag)) + # print("flag_video needs implementation") def allow_video(self, video_id): """Removes a flag from a video. @@ -137,4 +285,61 @@ def allow_video(self, video_id): Args: video_id: The video_id to be allowed again. """ - print("allow_video needs implementation") + # 1. Search video by id + video_result = self._video_library.get_video(video_id) + if video_result is None: + print("Cannot remove flag from video: Video does not exist") + return + # 2. Check if the video is not flagged + if not video_result.flag: + print("Cannot remove flag from video: Video is not flagged") + return + # 3. Remove the flag + video_result.remove_flag() + print("Successfully removed flag from video: {0}".format(video_result.title)) + # print("allow_video needs implementation") + + # ===========HELPER FUNCTIONS======================================================================================= + # Custom Helper Function for Part 2 + def is_playlist_exist(self, playlist_name): + """ + Return if requested playlist exists + :param playlist_name: + :return: + """ + return next((pl for pl in self._playlists if pl.get_name().lower() == playlist_name.lower()), None); + + # Custom Helper Function for Part 3 + def search_videos_general(self, search_keyword, search_filter): + """ + General Helper Function for search videos + :param search_keyword: + :param search_filter: + :return: + """ + # 1. Search matching results + search_results = sorted( + list(filter(search_filter, self._video_library.get_all_videos())), + key=lambda vid: vid.title) + # 2. Part 4 FLAG_VIDEO task: Filter out flagged video + search_results = list(filter(lambda vid: not vid.flag, search_results)) + # 2. Return if no search results + if len(search_results) == 0: + print("No search results for {0}".format(search_keyword)) + return + # 3. Print results + print("Here are the results for {0}:".format(search_keyword)) + for i, vid in enumerate(search_results, start=1): + print("\t{0}) {1}".format(i, vid)) + # 4. Ask user to play or not + print("Would you like to play any of the above? If yes, specify the number of the video.") + print("If your answer is not a valid number, we will assume it's a no.") + # 5. Check and Use regex to get valid number + is_numeric = re.search(r'^\d+$', input()) + if not is_numeric: + return + user_input = int(is_numeric.group()) + if not (1 <= user_input <= len(search_results)): + return + # 6. Play the selected video + self.play_video(search_results[user_input - 1].video_id) \ No newline at end of file diff --git a/python/src/video_playlist.py b/python/src/video_playlist.py index 5836da4..b0b2702 100644 --- a/python/src/video_playlist.py +++ b/python/src/video_playlist.py @@ -1,5 +1,79 @@ """A video playlist class.""" +from .video_library import VideoLibrary class Playlist: """A class used to represent a Playlist.""" + def __init__(self, _player, _name): + self._player = _player + self._name = _name + self._videos = {} + + def get_name(self): + """ + Returns name of the playlist + :return: playlist_name + """ + return self._name + + def get_videos(self): + """ + Returns videos in the playlist + :return: playlist_videos + """ + return self._videos + + def add_video(self, playlist_name, video_id): + """ + Custom method to add video to the playlist + :param playlist_name: + :param video_id: + :return: + """ + # 1. Check if video exists + video_result = self._player.get_video_library().get_video(video_id) + if video_result is None: + print("Cannot add video to {0}: Video does not exist".format(playlist_name)) + return + # 2. Part 4 FLAG_VIDEO task: Check if video is flagged + if video_result.flag: + print("Cannot add video to {0}: Video is currently flagged (reason: {1})" + .format(playlist_name, video_result.flag)) + return + # 3. Check if video is already added + if video_id in self._videos: + print("Cannot add video to {0}: Video already added".format(playlist_name)) + return + # 4. Add the video + self._videos[video_id] = video_result + print("Added video to {0}: {1}".format(playlist_name, video_result.title)) + + def remove_video(self, playlist_name, video_id): + """ + Custom method to remove video from the playlist + :param playlist_name: + :param video_id: + :return: + """ + # 1. Check if video exists + exist_video = self._player.get_video_library().get_video(video_id) + if not exist_video: + print("Cannot remove video from {0}: Video does not exist".format(playlist_name)) + return + # 2. Check if video in playlist + is_video_in_playlist = video_id in self._videos + if not is_video_in_playlist: + print("Cannot remove video from {0}: Video is not in playlist".format(playlist_name)) + return + # 3. Remove the video + self._videos.pop(video_id) + print("Removed video from {0}: {1}".format(playlist_name, exist_video.title)) + + def clear(self, playlist_name): + """ + Custom method to remove video from the playlist + :param playlist_name: + :return: + """ + self._videos = {} + print("Successfully removed all videos from {0}".format(playlist_name)) \ No newline at end of file From e89b45f4a7adae55a8ef70970eab378bb0e57820 Mon Sep 17 00:00:00 2001 From: Zach Chan Date: Thu, 1 Jul 2021 12:29:56 +0800 Subject: [PATCH 2/3] Python Challenge Completed: Add screenshots --- python/test_results/Part_1_tests.png | Bin 0 -> 36229 bytes python/test_results/Part_2_tests.png | Bin 0 -> 37277 bytes python/test_results/Part_3_tests.png | Bin 0 -> 19779 bytes python/test_results/Part_4_tests.png | Bin 0 -> 32975 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 python/test_results/Part_1_tests.png create mode 100644 python/test_results/Part_2_tests.png create mode 100644 python/test_results/Part_3_tests.png create mode 100644 python/test_results/Part_4_tests.png diff --git a/python/test_results/Part_1_tests.png b/python/test_results/Part_1_tests.png new file mode 100644 index 0000000000000000000000000000000000000000..ecd9ababa22a5f424d3517887d0e4a142380badd GIT binary patch literal 36229 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 RS5TLR%StIq7Kt1A|6d6-CK~_% literal 0 HcmV?d00001 diff --git a/python/test_results/Part_2_tests.png b/python/test_results/Part_2_tests.png new file mode 100644 index 0000000000000000000000000000000000000000..13c3918c905cbdc8506ad3232a21b3c4efc52574 GIT binary patch literal 37277 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 literal 0 HcmV?d00001 diff --git a/python/test_results/Part_4_tests.png b/python/test_results/Part_4_tests.png new file mode 100644 index 0000000000000000000000000000000000000000..044b3801489985b777bfc6b20733427a392b5371 GIT binary patch literal 32975 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 literal 0 HcmV?d00001 From 4886e39583581b7b5d6427fb9fa5361cba26ae0f Mon Sep 17 00:00:00 2001 From: Zach Chan Date: Thu, 1 Jul 2021 12:30:28 +0800 Subject: [PATCH 3/3] Python Challenge Completed: Add README --- README.md | 54 +++++++++++++++++++++++++++++ README_imgs/bright_network_logo.svg | 1 + README_imgs/google_logo.svg | 9 +++++ python/README.md | 3 ++ 4 files changed, 67 insertions(+) create mode 100644 README.md create mode 100644 README_imgs/bright_network_logo.svg create mode 100644 README_imgs/google_logo.svg diff --git a/README.md b/README.md new file mode 100644 index 0000000..406c245 --- /dev/null +++ b/README.md @@ -0,0 +1,54 @@ + + +Written by [Zach CHAN](https://zachan.dev/) +(Links: [Website](https://zachan.dev/) +[LinkedIn](https://www.linkedin.com/in/zach-chan-hk/) +[Email](mailto:zach@zachan.dev)) + +Participant ID: [shc39@student.london.ac.uk](mailto:zach@zachan.dev) + +## Table of Contents + + + +- [Coding Challenge Introduction](#coding-challenge-introduction) +- [Programming Language Chosen](#programming-language-chosen) +- [Passed Tests Screenshot](#passed-tests-screenshot) + - [Part 1](#part-1) + - [Part 2](#part-2) + - [Part 3](#part-3) + - [Part 4](#part-4) + + + +
+ +# Coding Challenge Introduction +It is my honour to become part of the Bright Network Internship, July 2021. I have chosen to take part in Google’s Coding Challenge for Bright Network. And this is my repository for submission! + +# Programming Language Chosen +Python, I used [PyCharm](https://www.jetbrains.com/pycharm/) for easier coding and debugging. + +[Click to see the Python coding](./python/) + +# Passed Tests Screenshot +## Part 1 +![Part 1 Tests Screenshot](./python/test_results/Part_1_tests.png) + +## Part 2 +![Part 2 Tests Screenshot](./python/test_results/Part_2_tests.png) + +## Part 3 +![Part 3 Tests Screenshot](./python/test_results/Part_3_tests.png) + +## Part 4 +![Part 4 Tests Screenshot](./python/test_results/Part_4_tests.png) \ No newline at end of file diff --git a/README_imgs/bright_network_logo.svg b/README_imgs/bright_network_logo.svg new file mode 100644 index 0000000..09b2692 --- /dev/null +++ b/README_imgs/bright_network_logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/README_imgs/google_logo.svg b/README_imgs/google_logo.svg new file mode 100644 index 0000000..c652a5a --- /dev/null +++ b/README_imgs/google_logo.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/python/README.md b/python/README.md index d259b4a..c26bc90 100644 --- a/python/README.md +++ b/python/README.md @@ -1,3 +1,6 @@ +# Click [**here**](../README.md) to view my Submission Report +---------------------------------------------------------------- + # Youtube Challenge - Python The Python Youtube Challenge uses Python3. The below commands use Python3 specifically, to account for users that might

+ UOL + test +
+ 2021 Bright Network Internship +
+ Google Youtube Coding Challenge +
+ Challenge Completed! +