def test_calc_post_proc_size(self):
        # REFACTOR Not an actual method
        # should transfer to TestUpdateStats
        ditem = DownloadItem("url", ["-f", "flv"])

        ditem.update_stats({
            "filename": "file.f123",
            "extension": ".webm",
            "filesize": "10.00MiB",
            "percent": "100%",
            "speed": "",
            "eta": "",
            "status": "Downloading",
            "path": "/home/user",
        })

        ditem.update_stats({
            "filename": "file.f456",
            "extension": ".m4a",
            "filesize": "3.45MiB",
            "percent": "100%",
            "speed": "",
            "eta": "",
            "status": "Downloading",
            "path": "/home/user",
        })

        # Mimic youtube-dl post process behaviour
        ditem.update_stats({
            "filename": "file",
            "extension": ".webm",
            "percent": "100%",
            "speed": "",
            "eta": "",
            "status": "Post Processing",
        })

        self.assertEqual(ditem.filesizes,
                         [10485760.00, 3617587.20, 14103347.20])

        self.assertEqual(
            ditem.progress_stats,
            {
                "filename": "file",
                "extension": ".webm",
                "filesize": "13.45MiB",
                "percent": "100%",
                "speed": "-",
                "eta": "-",
                "status": "Post Processing",
                "playlist_size": "",
                "playlist_index": "",
            },
        )
Example #2
0
    def test_calc_post_proc_size(self):
        # REFACTOR Not an actual method
        # should transfer to TestUpdateStats
        ditem = DownloadItem("url", ["-f", "flv"])

        ditem.update_stats({"filename": "file.f123",
                            "extension": ".webm",
                            "filesize": "10.00MiB",
                            "percent": "100%",
                            "speed": "",
                            "eta": "",
                            "status": "Downloading",
                            "path": "/home/user"})

        ditem.update_stats({"filename": "file.f456",
                            "extension": ".m4a",
                            "filesize": "3.45MiB",
                            "percent": "100%",
                            "speed": "",
                            "eta": "",
                            "status": "Downloading",
                            "path": "/home/user"})

        # Mimic youtube-dl post process behaviour
        ditem.update_stats({"filename": "file",
                            "extension": ".webm",
                            "percent": "100%",
                            "speed": "",
                            "eta": "",
                            "status": "Post Processing"})

        self.assertEqual(ditem.filesizes, [10485760.00, 3617587.20, 14103347.20])

        self.assertEqual(
            ditem.progress_stats,
            {"filename": "file",
             "extension": ".webm",
             "filesize": "13.45MiB",
             "percent": "100%",
             "speed": "-",
             "eta": "-",
             "status": "Post Processing",
             "playlist_size": "",
             "playlist_index": ""}
        )
class TestUpdateStats(unittest.TestCase):

    """Test case for DownloadItem update_stats method."""

    def setUp(self):
        self.ditem = DownloadItem("url", ["-f", "flv"])

    def test_update_stats(self):
        path = os.path.join("/home", "user")

        # 1st playlist item

        self.ditem.update_stats({"filename": "somefilename.f1",
                                 "extension": ".mp4",
                                 "filesize": "9.45MiB",
                                 "percent": "2.0%",
                                 "speed": "200.00KiB/s",
                                 "eta": "00:38",
                                 "status": "Downloading",
                                 "path": path,
                                 "playlist_size": "10",
                                 "playlist_index": "1"})

        self.assertEqual(self.ditem.path, path)
        self.assertEqual(self.ditem.filenames, ["somefilename.f1"])
        self.assertEqual(self.ditem.extensions, [".mp4"])

        # Do not update filesizes unless percentage is 100%
        # See https://github.com/MrS0m30n3/youtube-dl-gui/issues/162
        self.assertEqual(self.ditem.filesizes, [])

        self.assertEqual(
            self.ditem.progress_stats,
            {"filename": "somefilename.f1",
             "extension": ".mp4",
             "filesize": "9.45MiB",
             "percent": "2.0%",
             "speed": "200.00KiB/s",
             "eta": "00:38",
             "status": "Downloading",
             "playlist_size": "10",
             "playlist_index": "1"}
        )

        # Since the percentage is 100% this should update the filesizes list
        self.ditem.update_stats({"filesize": "9.45MiB",
                                 "percent": "100%",
                                 "speed": "",
                                 "eta": "",
                                 "status": "Downloading"})

        self.assertEqual(self.ditem.filesizes, [9909043.20])


        self.ditem.update_stats({"filename": "somefilename.f2",
                                 "extension": ".m4a",
                                 "filesize": "2.22MiB",
                                 "percent": "33.0%",
                                 "speed": "200.00KiB/s",
                                 "eta": "00:20",
                                 "status": "Downloading",
                                 "path": path})

        self.assertEqual(self.ditem.path, path)
        self.assertEqual(self.ditem.filenames, ["somefilename.f1", "somefilename.f2"])
        self.assertEqual(self.ditem.extensions, [".mp4", ".m4a"])
        self.assertEqual(self.ditem.filesizes, [9909043.20])

        self.assertEqual(
            self.ditem.progress_stats,
            {"filename": "somefilename.f2",
             "extension": ".m4a",
             "filesize": "2.22MiB",
             "percent": "33.0%",
             "speed": "200.00KiB/s",
             "eta": "00:20",
             "status": "Downloading",
             "playlist_size": "10",
             "playlist_index": "1"}
        )

        # Since the percentage is 100% this should update the filesizes list
        self.ditem.update_stats({"filesize": "2.22MiB",
                                 "percent": "100%",
                                 "speed": "",
                                 "eta": "",
                                 "status": "Downloading"})

        self.assertEqual(self.ditem.filesizes, [9909043.20, 2327838.72])

        # Moving to the 2nd playlist item

        self.ditem.update_stats({"filename": "someotherfilename.f1",
                                 "extension": ".mp4",
                                 "filesize": "10.25MiB",
                                 "percent": "50.0%",
                                 "speed": "200.00KiB/s",
                                 "eta": "00:38",
                                 "status": "Downloading",
                                 "path": path,
                                 "playlist_size": "10",
                                 "playlist_index": "2"})

        # We must reset filenames, extensions & filesizes lists when changing playlist index
        # else the filesizes for the post processed files will be wrong
        self.assertEqual(self.ditem.filenames, ["someotherfilename.f1"])
        self.assertEqual(self.ditem.extensions, [".mp4"])
        self.assertEqual(self.ditem.filesizes, [])

        self.assertEqual(
            self.ditem.progress_stats,
            {"filename": "someotherfilename.f1",
             "extension": ".mp4",
             "filesize": "10.25MiB",
             "percent": "50.0%",
             "speed": "200.00KiB/s",
             "eta": "00:38",
             "status": "Downloading",
             "playlist_size": "10",
             "playlist_index": "2"}
        )

        # Since the percentage is 100% this should update the filesizes list
        self.ditem.update_stats({"filesize": "10.25MiB",
                                 "percent": "100%",
                                 "speed": "",
                                 "eta": "",
                                 "status": "Downloading"})

        self.assertEqual(self.ditem.filesizes, [10747904.0])


        self.ditem.update_stats({"filename": "someotherfilename.f2",
                                 "extension": ".m4a",
                                 "filesize": "3.33MiB",
                                 "percent": "33.0%",
                                 "speed": "200.00KiB/s",
                                 "eta": "00:30",
                                 "status": "Downloading",
                                 "path": path})

        self.assertEqual(self.ditem.path, path)
        self.assertEqual(self.ditem.filenames, ["someotherfilename.f1", "someotherfilename.f2"])
        self.assertEqual(self.ditem.extensions, [".mp4", ".m4a"])
        self.assertEqual(self.ditem.filesizes, [10747904.0])

        self.assertEqual(
            self.ditem.progress_stats,
            {"filename": "someotherfilename.f2",
             "extension": ".m4a",
             "filesize": "3.33MiB",
             "percent": "33.0%",
             "speed": "200.00KiB/s",
             "eta": "00:30",
             "status": "Downloading",
             "playlist_size": "10",
             "playlist_index": "2"}
        )

        # Since the percentage is 100% this should update the filesizes list
        self.ditem.update_stats({"filesize": "3.33MiB",
                                 "percent": "100%",
                                 "speed": "",
                                 "eta": "",
                                 "status": "Downloading"})

        self.assertEqual(self.ditem.filesizes, [10747904.0, 3491758.08])

        # Let's move to the 3rd playlist item

        # Here we mimic youtube-dl's "max downloads limit reached"
        # this line should not reset the filenames, extensions & filesizes lists
        # since we will lose the ability to play the last playlist item
        self.ditem.update_stats({"status": "Downloading",
                                 "playlist_size": "10",
                                 "playlist_index": "3"})

        self.assertEqual(self.ditem.filenames, ["someotherfilename.f1", "someotherfilename.f2"])
        self.assertEqual(self.ditem.extensions, [".mp4", ".m4a"])
        self.assertEqual(self.ditem.filesizes, [10747904.0, 3491758.08])
        self.assertEqual(
            self.ditem.progress_stats,
            {"filename": "someotherfilename.f2",
             "extension": ".m4a",
             "filesize": "3.33MiB",
             "percent": "100%",
             "speed": "-",
             "eta": "-",
             "status": "Downloading",
             "playlist_size": "10",
             "playlist_index": "3"}
        )

    def test_update_stats_invalid_input(self):
        self.assertRaises(AssertionError, self.ditem.update_stats, [])

    def test_update_stats_empty_strings(self):
        self.ditem.update_stats({"filename": "",
                                 "extension": "",
                                 "filesize": "",
                                 "percent": "",
                                 "speed": "",
                                 "eta": "",
                                 "status": "",
                                 "playlist_size": "",
                                 "playlist_index": ""})

        self.assertEqual(
            self.ditem.progress_stats,
            {"filename": "url",
             "extension": "-",
             "filesize": "-",
             "percent": "0%",
             "speed": "-",
             "eta": "-",
             "status": "Queued",
             "playlist_size": "",
             "playlist_index": ""}
        )

    def test_update_stats_not_string(self):
        self.ditem.update_stats({"filename": None, "status": 1234, "eta": False})

        self.assertEqual(self.ditem.progress_stats["filename"], "url")
        self.assertEqual(self.ditem.progress_stats["status"], "Queued")
        self.assertEqual(self.ditem.progress_stats["eta"], "-")
Example #4
0
class TestUpdateStats(unittest.TestCase):

    """Test case for DownloadItem update_stats method."""

    def setUp(self):
        self.ditem = DownloadItem("url", ["-f", "flv"])

    def test_update_stats(self):
        path = os.path.join("/home", "user")

        # 1st playlist item

        self.ditem.update_stats({"filename": "somefilename.f1",
                                 "extension": ".mp4",
                                 "filesize": "9.45MiB",
                                 "percent": "2.0%",
                                 "speed": "200.00KiB/s",
                                 "eta": "00:38",
                                 "status": "Downloading",
                                 "path": path,
                                 "playlist_size": "10",
                                 "playlist_index": "1"})

        self.assertEqual(self.ditem.path, path)
        self.assertEqual(self.ditem.filenames, ["somefilename.f1"])
        self.assertEqual(self.ditem.extensions, [".mp4"])

        # Do not update filesizes unless percentage is 100%
        # See https://github.com/MrS0m30n3/youtube-dl-gui/issues/162
        self.assertEqual(self.ditem.filesizes, [])

        self.assertEqual(
            self.ditem.progress_stats,
            {"filename": "somefilename.f1",
             "extension": ".mp4",
             "filesize": "9.45MiB",
             "percent": "2.0%",
             "speed": "200.00KiB/s",
             "eta": "00:38",
             "status": "Downloading",
             "playlist_size": "10",
             "playlist_index": "1"}
        )

        # Since the percentage is 100% this should update the filesizes list
        self.ditem.update_stats({"filesize": "9.45MiB",
                                 "percent": "100%",
                                 "speed": "",
                                 "eta": "",
                                 "status": "Downloading"})

        self.assertEqual(self.ditem.filesizes, [9909043.20])


        self.ditem.update_stats({"filename": "somefilename.f2",
                                 "extension": ".m4a",
                                 "filesize": "2.22MiB",
                                 "percent": "33.0%",
                                 "speed": "200.00KiB/s",
                                 "eta": "00:20",
                                 "status": "Downloading",
                                 "path": path})

        self.assertEqual(self.ditem.path, path)
        self.assertEqual(self.ditem.filenames, ["somefilename.f1", "somefilename.f2"])
        self.assertEqual(self.ditem.extensions, [".mp4", ".m4a"])
        self.assertEqual(self.ditem.filesizes, [9909043.20])

        self.assertEqual(
            self.ditem.progress_stats,
            {"filename": "somefilename.f2",
             "extension": ".m4a",
             "filesize": "2.22MiB",
             "percent": "33.0%",
             "speed": "200.00KiB/s",
             "eta": "00:20",
             "status": "Downloading",
             "playlist_size": "10",
             "playlist_index": "1"}
        )

        # Since the percentage is 100% this should update the filesizes list
        self.ditem.update_stats({"filesize": "2.22MiB",
                                 "percent": "100%",
                                 "speed": "",
                                 "eta": "",
                                 "status": "Downloading"})

        self.assertEqual(self.ditem.filesizes, [9909043.20, 2327838.72])

        # Moving to the 2nd playlist item

        self.ditem.update_stats({"filename": "someotherfilename.f1",
                                 "extension": ".mp4",
                                 "filesize": "10.25MiB",
                                 "percent": "50.0%",
                                 "speed": "200.00KiB/s",
                                 "eta": "00:38",
                                 "status": "Downloading",
                                 "path": path,
                                 "playlist_size": "10",
                                 "playlist_index": "2"})

        # We must reset filenames, extensions & filesizes lists when changing playlist index
        # else the filesizes for the post processed files will be wrong
        self.assertEqual(self.ditem.filenames, ["someotherfilename.f1"])
        self.assertEqual(self.ditem.extensions, [".mp4"])
        self.assertEqual(self.ditem.filesizes, [])

        self.assertEqual(
            self.ditem.progress_stats,
            {"filename": "someotherfilename.f1",
             "extension": ".mp4",
             "filesize": "10.25MiB",
             "percent": "50.0%",
             "speed": "200.00KiB/s",
             "eta": "00:38",
             "status": "Downloading",
             "playlist_size": "10",
             "playlist_index": "2"}
        )

        # Since the percentage is 100% this should update the filesizes list
        self.ditem.update_stats({"filesize": "10.25MiB",
                                 "percent": "100%",
                                 "speed": "",
                                 "eta": "",
                                 "status": "Downloading"})

        self.assertEqual(self.ditem.filesizes, [10747904.0])


        self.ditem.update_stats({"filename": "someotherfilename.f2",
                                 "extension": ".m4a",
                                 "filesize": "3.33MiB",
                                 "percent": "33.0%",
                                 "speed": "200.00KiB/s",
                                 "eta": "00:30",
                                 "status": "Downloading",
                                 "path": path})

        self.assertEqual(self.ditem.path, path)
        self.assertEqual(self.ditem.filenames, ["someotherfilename.f1", "someotherfilename.f2"])
        self.assertEqual(self.ditem.extensions, [".mp4", ".m4a"])
        self.assertEqual(self.ditem.filesizes, [10747904.0])

        self.assertEqual(
            self.ditem.progress_stats,
            {"filename": "someotherfilename.f2",
             "extension": ".m4a",
             "filesize": "3.33MiB",
             "percent": "33.0%",
             "speed": "200.00KiB/s",
             "eta": "00:30",
             "status": "Downloading",
             "playlist_size": "10",
             "playlist_index": "2"}
        )

        # Since the percentage is 100% this should update the filesizes list
        self.ditem.update_stats({"filesize": "3.33MiB",
                                 "percent": "100%",
                                 "speed": "",
                                 "eta": "",
                                 "status": "Downloading"})

        self.assertEqual(self.ditem.filesizes, [10747904.0, 3491758.08])

        # Let's move to the 3rd playlist item

        # Here we mimic youtube-dl's "max downloads limit reached"
        # this line should not reset the filenames, extensions & filesizes lists
        # since we will lose the ability to play the last playlist item
        self.ditem.update_stats({"status": "Downloading",
                                 "playlist_size": "10",
                                 "playlist_index": "3"})

        self.assertEqual(self.ditem.filenames, ["someotherfilename.f1", "someotherfilename.f2"])
        self.assertEqual(self.ditem.extensions, [".mp4", ".m4a"])
        self.assertEqual(self.ditem.filesizes, [10747904.0, 3491758.08])
        self.assertEqual(
            self.ditem.progress_stats,
            {"filename": "someotherfilename.f2",
             "extension": ".m4a",
             "filesize": "3.33MiB",
             "percent": "100%",
             "speed": "-",
             "eta": "-",
             "status": "Downloading",
             "playlist_size": "10",
             "playlist_index": "3"}
        )

    def test_update_stats_invalid_input(self):
        self.assertRaises(AssertionError, self.ditem.update_stats, [])

    def test_update_stats_empty_strings(self):
        self.ditem.update_stats({"filename": "",
                                 "extension": "",
                                 "filesize": "",
                                 "percent": "",
                                 "speed": "",
                                 "eta": "",
                                 "status": "",
                                 "playlist_size": "",
                                 "playlist_index": ""})

        self.assertEqual(
            self.ditem.progress_stats,
            {"filename": "url",
             "extension": "-",
             "filesize": "-",
             "percent": "0%",
             "speed": "-",
             "eta": "-",
             "status": "Queued",
             "playlist_size": "",
             "playlist_index": ""}
        )

    def test_update_stats_not_string(self):
        self.ditem.update_stats({"filename": None, "status": 1234, "eta": False})

        self.assertEqual(self.ditem.progress_stats["filename"], "url")
        self.assertEqual(self.ditem.progress_stats["status"], "Queued")
        self.assertEqual(self.ditem.progress_stats["eta"], "-")