Spaces:
Runtime error
Runtime error
from typing import Dict, List | |
from video import YoutubeVideo | |
from errors import DifferentNumberOfArgumentsError | |
def accepts_types(*expected_types): | |
"""Decorator that checks that the arguments of a method are valid. | |
:raise TypeError: If type of argument isn't valid | |
:raise DifferentNumberOfArgumentsError: If number of arguments passed to the | |
decorator and to the method (minus self) aren't the same | |
""" | |
def check_types(func): | |
def wrapper(*args, **kwargs): | |
args_without_self = args[1:] | |
_raise_error_if_number_of_passed_and_expected_arguments_dont_match(args_without_self, expected_types) | |
_raise_type_error_if_passed_and_expected_types_dont_match(args_without_self, expected_types) | |
return func(*args, **kwargs) | |
return wrapper | |
return check_types | |
def _raise_error_if_number_of_passed_and_expected_arguments_dont_match(passed_args, expected_types): | |
if len(passed_args) != len(expected_types): | |
msg = "Number of arguments passed in decorator " \ | |
f"{len(expected_types)} doesn't match with number of " \ | |
f"arguments in method, i.e., {len(passed_args)}" | |
raise DifferentNumberOfArgumentsError(msg) | |
def _raise_type_error_if_passed_and_expected_types_dont_match(passed_args, expected_types): | |
for (arg, expected_type) in zip(passed_args, expected_types): | |
if not isinstance(arg, expected_type): | |
raise TypeError(f"Argument '{arg}' is of type {type(arg)}. " | |
f"'{expected_type}' expected instead") | |
def create_videos(video_parameters: List[Dict]) -> List[YoutubeVideo]: | |
"""Factory function that creates a list of YoutubeVideos from a list of | |
dictionaries representing video parameters | |
""" | |
youtube_videos = [] | |
for params in video_parameters: | |
youtube_video = YoutubeVideo(channel_name=params["channel_name"], | |
url=params["url"]) | |
youtube_videos.append(youtube_video) | |
return youtube_videos | |
def nest_list(list: list, nested_list_length: int) -> List[List]: | |
new_list = [] | |
nested_list = [] | |
for item in list: | |
nested_list.append(item) | |
if len(nested_list) == nested_list_length: | |
new_list.append(nested_list) | |
nested_list = [] | |
if len(nested_list) != 0: | |
new_list.append(nested_list) | |
return new_list | |
def is_google_colab(): | |
try: | |
import google.colab | |
return True | |
except: | |
return False |