import os
import sys
import unittest
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from gallery_dl import path, extractor, config
KWDICT = {
"category" : "test",
"filename" : "file",
"extension": "ext",
"name" : "test-テスト-'&>-/:~",
"ext" : "txt",
"foo" : "bar",
"id" : 123,
}
class TestPath(unittest.TestCase):
def _pfmt(self, data={}, kwdict=False, extr=extractor.find("noop")):
pathfmt = path.PathFormat(extr)
if kwdict:
pathfmt.set_directory({
**(kwdict if isinstance(kwdict, dict) else KWDICT),
**data,
})
return pathfmt
def setUp(self):
config.clear()
path.WINDOWS = False
class TestPathObject(TestPath):
def test_default(self):
pfmt = self._pfmt()
self.assertEqual(pfmt.kwdict, {})
self.assertEqual(pfmt.delete, False)
self.assertEqual(pfmt.filename, "")
self.assertEqual(pfmt.extension, "")
self.assertEqual(pfmt.directory, "")
self.assertEqual(pfmt.realdirectory, "")
self.assertEqual(pfmt.path, "")
self.assertEqual(pfmt.realpath, "")
self.assertEqual(pfmt.temppath, "")
self.assertEqual(pfmt.basedirectory, "./gallery-dl/")
self.assertEqual(pfmt.strip, "")
self.assertIs(pfmt.filename_conditions, None)
self.assertIs(pfmt.directory_conditions, None)
self.assertTrue(callable(pfmt.extension_map))
self.assertTrue(callable(pfmt.extension_map))
self.assertTrue(callable(pfmt.extension_map))
self.assertTrue(callable(pfmt.clean_segment))
self.assertTrue(callable(pfmt.clean_path))
self.assertTrue(callable(pfmt.filename_formatter))
for fmt in pfmt.directory_formatters:
self.assertTrue(callable(fmt))
def test_str(self):
pfmt = self._pfmt()
self.assertEqual(str(pfmt), pfmt.realdirectory)
self.assertEqual(str(pfmt), "")
pfmt = self._pfmt()
pfmt.set_directory(KWDICT)
pfmt.set_filename(KWDICT)
pfmt.build_path()
self.assertEqual(str(pfmt), pfmt.realpath)
self.assertEqual(str(pfmt), "./gallery-dl/test/file.ext")
class TestPathOptions(TestPath):
def test_option_filename(self):
fname = self._pfmt().build_filename(KWDICT)
self.assertEqual(fname , "file.ext")
config.set((), "filename", "foo.{foo}")
fname = self._pfmt().build_filename(KWDICT)
self.assertEqual(fname, "foo.bar")
config.set((), "filename", {
"foo == 'baz'": "foo",
"id % 2" : "bar",
"" : "baz",
})
fname = self._pfmt().build_filename(KWDICT)
self.assertEqual(fname, "bar")
def test_option_directory(self):
pfmt = self._pfmt(kwdict=True)
self.assertEqual(pfmt.directory , "./gallery-dl/test/")
self.assertEqual(pfmt.realdirectory, "./gallery-dl/test/")
config.set((), "directory", ["{foo}", "bar"])
pfmt = self._pfmt(kwdict=True)
self.assertEqual(pfmt.directory , "./gallery-dl/bar/bar/")
self.assertEqual(pfmt.realdirectory, "./gallery-dl/bar/bar/")
config.set((), "directory", {
"foo == 'baz'": ["a", "b", "c"],
"id % 2" : ["odd", "{id}"],
"" : ["{foo}", "bar"],
})
pfmt = self._pfmt(kwdict=True)
self.assertEqual(pfmt.directory , "./gallery-dl/odd/123/")
self.assertEqual(pfmt.realdirectory, "./gallery-dl/odd/123/")
def test_option_basedirectory(self):
config.set((), "base-directory", "{foo}")
pfmt = self._pfmt(kwdict=True)
self.assertEqual(pfmt.realdirectory, "{foo}/test/")
config.set((), "base-directory", {
"foo == 'baz'": "bar",
"id % 2" : "./odd",
"" : "./default",
})
pfmt = self._pfmt(kwdict=True)
self.assertEqual(pfmt.realdirectory, "./odd/test/")
def test_option_keywordsdefault(self):
config.set((), "directory", ["{baz}"])
config.set((), "base-directory", "")
pfmt = self._pfmt(kwdict=True)
self.assertEqual(pfmt.realdirectory, "None/")
config.set((), "keywords-default", "ND")
pfmt = self._pfmt(kwdict=True)
self.assertEqual(pfmt.realdirectory, "ND/")
config.set((), "keywords-default", "")
pfmt = self._pfmt(kwdict=True)
self.assertEqual(pfmt.realdirectory, "")
def test_option_extensionmap_default(self):
kwdict = KWDICT.copy()
pfmt = self._pfmt()
pfmt.set_filename(kwdict)
self.assertEqual(pfmt.extension, "ext")
pfmt.set_extension("jpg")
self.assertEqual(pfmt.extension, "jpg")
self.assertEqual(kwdict["extension"], "jpg")
pfmt.set_extension("png")
self.assertEqual(pfmt.extension, "png")
self.assertEqual(kwdict["extension"], "png")
pfmt.set_extension("jpeg")
self.assertEqual(pfmt.extension, "jpg")
self.assertEqual(kwdict["extension"], "jpg")
for ext, repl in path.EXTENSION_MAP.items():
pfmt.set_extension(ext)
self.assertEqual(pfmt.extension, repl)
self.assertEqual(kwdict["extension"], repl)
def test_option_extensionmap_custom(self):
extmap = {
"bitmap": "bmp",
"ping" : "png",
"jiff" : "gif",
}
config.set((), "extension-map", extmap)
kwdict = KWDICT.copy()
pfmt = self._pfmt()
pfmt.set_filename(kwdict)
pfmt.set_extension("jpg")
self.assertEqual(pfmt.extension, "jpg")
self.assertEqual(kwdict["extension"], "jpg")
pfmt.set_extension("ping")
self.assertEqual(pfmt.extension, "png")
self.assertEqual(kwdict["extension"], "png")
for ext, repl in extmap.items():
pfmt.set_extension(ext)
self.assertEqual(pfmt.extension, repl)
self.assertEqual(kwdict["extension"], repl)
for ext, repl in path.EXTENSION_MAP.items():
pfmt.set_extension(ext)
self.assertNotEqual(pfmt.extension, repl)
self.assertNotEqual(kwdict["extension"], repl)
def test_option_pathrestrict(self):
config.set((), "filename", "{name}.{ext}")
config.set((), "path-restrict", "unix")
fname = self._pfmt().build_filename(KWDICT)
self.assertEqual(fname, "test-テスト-'&>-_:~.txt", "unix")
config.set((), "path-restrict", "windows")
fname = self._pfmt().build_filename(KWDICT)
self.assertEqual(fname, "test-テスト-'&_-__~.txt", "windows")
config.set((), "path-restrict", "ascii")
fname = self._pfmt().build_filename(KWDICT)
self.assertEqual(fname, "test____________.txt", "ascii")
config.set((), "path-restrict", "ascii+")
fname = self._pfmt().build_filename(KWDICT)
self.assertEqual(fname, "test-___-'&_-__~.txt", "ascii+")
def test_option_pathrestrict_custom(self):
config.set((), "filename", "{name}.{ext}")
config.set((), "path-restrict", "ts-")
fname = self._pfmt().build_filename(KWDICT)
self.assertEqual(fname, "_e___テスト_'&>_/:~._x_", "custom str")
config.set((), "path-restrict", {
"t": "A",
"s": "B",
"-": "###",
"/": "|"
})
fname = self._pfmt().build_filename(KWDICT)
self.assertEqual(fname, "AeBA###テスト###'&>###|:~.AxA", "custom dict")
config.set((), "path-restrict", {
"a-z": "x",
"テ": "te",
"ス": "su",
"ト": "to",
})
fname = self._pfmt().build_filename(KWDICT)
self.assertEqual(fname, "xxxx-tesuto-'&>-/:~.xxx", "custom dict range")
def test_option_pathreplace(self):
config.set((), "filename", "{name}.{ext}")
config.set((), "path-restrict", "unix")
config.set((), "path-replace", "&")
fname = self._pfmt().build_filename(KWDICT)
self.assertEqual(fname, "test-テスト-'&>-&:~.txt", "&")
config.set((), "path-restrict", "windows")
config.set((), "path-replace", "***")
fname = self._pfmt().build_filename(KWDICT)
self.assertEqual(fname, "test-テスト-'&***-******~.txt", "***")
def test_option_pathremove(self):
config.set((), "filename", "{name}.{ext}")
config.set((), "path-remove", "-&/")
fname = self._pfmt().build_filename(KWDICT)
self.assertEqual(fname, "testテスト'>_:~.txt")
config.set((), "path-remove", "a-z0-9")
fname = self._pfmt().build_filename(KWDICT)
self.assertEqual(fname, "-テスト-'&>-_:~.")
def test_option_pathstrip(self):
config.set((), "directory", [" . {name}.{ext} . "])
config.set((), "base-directory", "")
config.set((), "path-restrict", "unix")
config.set((), "path-strip", "unix")
pfmt = self._pfmt(kwdict=True)
self.assertEqual(
pfmt.realdirectory, ". test-テスト-'&>-_:~.txt ./", "unix")
config.set((), "path-strip", "windows")
pfmt = self._pfmt(kwdict=True)
self.assertEqual(
pfmt.realdirectory, ". test-テスト-'&>-_:~.txt/", "windows")
config.set((), "path-strip", "txt")
pfmt = self._pfmt(kwdict=True)
self.assertEqual(
pfmt.realdirectory, ". test-テスト-'&>-_:~.txt ./", "custom")
if __name__ == "__main__":
unittest.main()