def update_metadata(self): # we use title, description, profile and banner of channel/user # or channel of first playlist main_channel_json = get_channel_json(self.main_channel_id) save_channel_branding(self.channels_dir, self.main_channel_id, save_banner=True) self.copy_default_banner(self.main_channel_id) # if a single playlist was requested, use if for names; # otherwise, use main_channel's details. auto_title = (self.playlists[0].title if self.is_playlist and len(self.playlists) == 1 else main_channel_json["snippet"]["title"].strip()) auto_description = (clean_text(self.playlists[0].description) if self.is_playlist and len(self.playlists) == 1 else clean_text( main_channel_json["snippet"]["description"])) self.title = self.title or auto_title or "-" self.description = self.description or auto_description or "-" if self.creator is None: if self.is_single_channel: self.creator = _("Youtube Channel “{title}”").format( title=main_channel_json["snippet"]["title"]) else: self.creator = _("Youtube Channels") self.publisher = self.publisher or "Kiwix" self.tags = self.tags or ["youtube"] if "_videos:yes" not in self.tags: self.tags.append("_videos:yes") # copy our main_channel branding into /(profile|banner).jpg if not supplied if not self.profile_path.exists(): shutil.copy( self.channels_dir.joinpath(self.main_channel_id, "profile.jpg"), self.profile_path, ) if not self.banner_path.exists(): shutil.copy( self.channels_dir.joinpath(self.main_channel_id, "banner.jpg"), self.banner_path, ) # set colors from images if not supplied if self.main_color is None or self.secondary_color is None: profile_main, profile_secondary = get_colors(self.profile_path) self.main_color = self.main_color or profile_main self.secondary_color = self.secondary_color or profile_secondary resize_image( self.profile_path, width=48, height=48, method="thumbnail", dst=self.build_dir.joinpath("favicon.jpg"), )
def test_colors_jpg_palette(jpg_image): assert get_colors(jpg_image, True) == ("#221C1B", "#F4F3F1")
def test_colors_png_palette(png_image): assert get_colors(png_image, True) == ("#04649C", "#FFE7E7")
def test_colors_jpg_nopalette(jpg_image): assert get_colors(jpg_image, False) == ("#C1BBB3", "#F4F3F1")
def test_colors_png_nopalette(png_image): assert get_colors(png_image, False) == ("#04649C", "#E7F6FF")
def test_colors_noimage(): with pytest.raises(FileNotFoundError): get_colors("nofile.here")