added test_get_highest_resolution
Browse files- pytube/query.py +1 -6
- tests/test_helpers.py +16 -0
- tests/test_query.py +4 -1
pytube/query.py
CHANGED
|
@@ -282,12 +282,7 @@ class StreamQuery:
|
|
| 282 |
not found.
|
| 283 |
|
| 284 |
"""
|
| 285 |
-
return (
|
| 286 |
-
self.filter(progressive=True)
|
| 287 |
-
.order_by("resolution")
|
| 288 |
-
.asc()
|
| 289 |
-
.last()
|
| 290 |
-
)
|
| 291 |
|
| 292 |
def first(self) -> Optional[Stream]:
|
| 293 |
"""Get the first :class:`Stream <Stream>` in the results.
|
|
|
|
| 282 |
not found.
|
| 283 |
|
| 284 |
"""
|
| 285 |
+
return self.filter(progressive=True).order_by("resolution").asc().last()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 286 |
|
| 287 |
def first(self) -> Optional[Stream]:
|
| 288 |
"""Get the first :class:`Stream <Stream>` in the results.
|
tests/test_helpers.py
CHANGED
|
@@ -1,8 +1,11 @@
|
|
| 1 |
# -*- coding: utf-8 -*-
|
|
|
|
|
|
|
| 2 |
import pytest
|
| 3 |
|
| 4 |
from pytube import helpers
|
| 5 |
from pytube.exceptions import RegexMatchError
|
|
|
|
| 6 |
|
| 7 |
|
| 8 |
def test_regex_search_no_match():
|
|
@@ -18,3 +21,16 @@ def test_safe_filename():
|
|
| 18 |
"""Unsafe characters get stripped from generated filename"""
|
| 19 |
assert helpers.safe_filename("abc1245$$") == "abc1245"
|
| 20 |
assert helpers.safe_filename("abc##") == "abc"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
# -*- coding: utf-8 -*-
|
| 2 |
+
from unittest import mock
|
| 3 |
+
|
| 4 |
import pytest
|
| 5 |
|
| 6 |
from pytube import helpers
|
| 7 |
from pytube.exceptions import RegexMatchError
|
| 8 |
+
from pytube.helpers import deprecated
|
| 9 |
|
| 10 |
|
| 11 |
def test_regex_search_no_match():
|
|
|
|
| 21 |
"""Unsafe characters get stripped from generated filename"""
|
| 22 |
assert helpers.safe_filename("abc1245$$") == "abc1245"
|
| 23 |
assert helpers.safe_filename("abc##") == "abc"
|
| 24 |
+
|
| 25 |
+
|
| 26 |
+
@mock.patch("warnings.warn")
|
| 27 |
+
def test_deprecated(warn):
|
| 28 |
+
@deprecated("oh no")
|
| 29 |
+
def deprecated_function():
|
| 30 |
+
return None
|
| 31 |
+
deprecated_function()
|
| 32 |
+
warn.assert_called_with(
|
| 33 |
+
"Call to deprecated function deprecated_function (oh no).",
|
| 34 |
+
category=DeprecationWarning,
|
| 35 |
+
stacklevel=2,
|
| 36 |
+
)
|
tests/test_query.py
CHANGED
|
@@ -132,7 +132,6 @@ def test_get_by_itag(cipher_signature):
|
|
| 132 |
:class:`Stream <Stream>`.
|
| 133 |
"""
|
| 134 |
assert cipher_signature.streams.get_by_itag(18).itag == 18
|
| 135 |
-
assert cipher_signature.streams.get_by_itag("18").itag == 18
|
| 136 |
|
| 137 |
|
| 138 |
def test_get_by_non_existent_itag(cipher_signature):
|
|
@@ -147,6 +146,10 @@ def test_get_lowest_resolution(cipher_signature):
|
|
| 147 |
assert cipher_signature.streams.get_lowest_resolution().itag == 18
|
| 148 |
|
| 149 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 150 |
def test_filter_is_dash(cipher_signature):
|
| 151 |
streams = cipher_signature.streams.filter(is_dash=False).all()
|
| 152 |
itags = [s.itag for s in streams]
|
|
|
|
| 132 |
:class:`Stream <Stream>`.
|
| 133 |
"""
|
| 134 |
assert cipher_signature.streams.get_by_itag(18).itag == 18
|
|
|
|
| 135 |
|
| 136 |
|
| 137 |
def test_get_by_non_existent_itag(cipher_signature):
|
|
|
|
| 146 |
assert cipher_signature.streams.get_lowest_resolution().itag == 18
|
| 147 |
|
| 148 |
|
| 149 |
+
def test_get_highest_resolution(cipher_signature):
|
| 150 |
+
assert cipher_signature.streams.get_highest_resolution().itag == 18
|
| 151 |
+
|
| 152 |
+
|
| 153 |
def test_filter_is_dash(cipher_signature):
|
| 154 |
streams = cipher_signature.streams.filter(is_dash=False).all()
|
| 155 |
itags = [s.itag for s in streams]
|