""" Define and check rules for a film object. """ # Rules for the film object parse_options = { 'type': 'film', 'runtime_min': 80, 'runtime_max': 140, 'inlude_unkown_runtime': False, 'score_range_min': '6.9', 'score_range_max': '10.0', 'include_unknown_score': False, 'year_range_oldest': 1990, 'year_range_newest': 2019, 'wanted_genres': ['drama'], 'unwanted_genres': ['romance', 'musical','horror', 'documentary'], # Whether add or remove a film # whose genre neither in wanted_genres nor unwanted_genres list 'add_not_unwanted_&_not_wanted': True, 'include_watched': False } def check_runtime(film_runtime): if film_runtime == 'unknown': return parse_options['inlude_unkown_runtime'] min_runtime = parse_options['runtime_min'] max_runtime = parse_options['runtime_max'] return film_runtime >= min_runtime and film_runtime <= max_runtime def check_genre(film_genre_list): for genre in film_genre_list: if genre.lower() in parse_options['unwanted_genres']: return False if parse_options['wanted_genres'] is None or len(parse_options['wanted_genres']) == 0: return True for genre in film_genre_list: if genre.lower() in parse_options['wanted_genres']: return True return parse_options['add_not_unwanted_&_not_wanted'] def check_score(score_range): if score_range == 'unknown': return parse_options['include_unknown_score'] min_score = float(parse_options['score_range_min']) * 10 max_score = float(parse_options['score_range_max']) * 10 return score_range >= min_score and score_range <= max_score def check_year(year_range): min_year = parse_options['year_range_oldest'] max_year = parse_options['year_range_newest'] return int(year_range) >= min_year and int(year_range) <= max_year def check_type(film_type): if parse_options['type'] == 'both': return True elif parse_options['type'] == film_type: return True return False def watched_included(): return parse_options['include_watched'] def check_film_object(film_object, watched_films=None): if not check_runtime(film_object.runtime): return False if not check_genre(film_object.genres): return False if not check_score(film_object.rating): return False if film_object.type == 'film' and not check_year(film_object.year): return False if not check_type(film_object.type): return False if watched_films is not None and film_object.name in watched_films: return False # All of the above rules applied for the object return True