feat: added testing of video id parsing
This commit is contained in:
		
							
								
								
									
										1
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							| @@ -1,5 +1,6 @@ | |||||||
| { | { | ||||||
|     "cSpell.words": [ |     "cSpell.words": [ | ||||||
|  |         "Didnt", | ||||||
|         "sponsorblock" |         "sponsorblock" | ||||||
|     ] |     ] | ||||||
| } | } | ||||||
| @@ -1,6 +1,9 @@ | |||||||
| from python_sponsorblock import SponsorBlock | from python_sponsorblock import SponsorBlock, _get_video_id | ||||||
|  |  | ||||||
|  |  | ||||||
| if __name__ == "__main__": | if __name__ == "__main__": | ||||||
|     sb = SponsorBlock() |     sb = SponsorBlock() | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     print(_get_video_id("dksaödfksöldkföslkafdsölfkas")) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,29 @@ | |||||||
| import requests | import requests | ||||||
|  | from urllib.parse import urlparse, urlunparse, parse_qs | ||||||
|  | import re | ||||||
|  |  | ||||||
| class SponsorBlockError(Exception): | from .exceptions import SponsorBlockError, SponsorBlockIdNotFoundError | ||||||
|     pass |  | ||||||
|  |  | ||||||
|  | def _get_video_id(i: str, silent: bool = False) -> None: | ||||||
|  |     # check with regex if i is already an id like r1Fa1iWJVEA | ||||||
|  |     if re.match(r"^[a-zA-Z0-9_-]{11}$", i): | ||||||
|  |         return i.strip() | ||||||
|  |  | ||||||
|  |     url = urlparse(url=i) | ||||||
|  |  | ||||||
|  |     if url.netloc == "youtu.be": | ||||||
|  |         return url.path[1:] | ||||||
|  |  | ||||||
|  |     type_frag_list = url.path.split("/") | ||||||
|  |              | ||||||
|  |     query_stuff = parse_qs(url.query) | ||||||
|  |     if "v" not in query_stuff: | ||||||
|  |         if not silent: | ||||||
|  |             raise SponsorBlockIdNotFoundError("No video id found in the url") | ||||||
|  |         return None | ||||||
|  |     else: | ||||||
|  |         return query_stuff["v"][0] | ||||||
|  |  | ||||||
|  |  | ||||||
| class SponsorBlock: | class SponsorBlock: | ||||||
|   | |||||||
							
								
								
									
										6
									
								
								python_sponsorblock/exceptions.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								python_sponsorblock/exceptions.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | |||||||
|  | class SponsorBlockError(Exception): | ||||||
|  |     pass | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class SponsorBlockIdNotFoundError(SponsorBlockError): | ||||||
|  |     pass | ||||||
							
								
								
									
										33
									
								
								tests/test_video_id.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								tests/test_video_id.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | |||||||
|  | import unittest | ||||||
|  |  | ||||||
|  | from python_sponsorblock import _get_video_id, exceptions | ||||||
|  |  | ||||||
|  |  | ||||||
|  | MAGIC_ID = "dQw4w9WgXcQ" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class TestVideoIdParsing(unittest.TestCase): | ||||||
|  |     def test_already_parsed_id(self): | ||||||
|  |         self.assertEqual(_get_video_id(MAGIC_ID), MAGIC_ID) | ||||||
|  |  | ||||||
|  |     def test_non_existing_id(self): | ||||||
|  |         with self.assertRaises(exceptions.SponsorBlockIdNotFoundError): | ||||||
|  |             _get_video_id("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee") | ||||||
|  |  | ||||||
|  |         self.assertEqual(_get_video_id("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", silent=True), None) | ||||||
|  |  | ||||||
|  |     def test_youtu_dot_be(self): | ||||||
|  |         self.assertEqual(_get_video_id("https://youtu.be/" + MAGIC_ID), MAGIC_ID) | ||||||
|  |  | ||||||
|  |     def test_youtube_dot_com(self): | ||||||
|  |         self.assertEqual(_get_video_id("https://www.youtube.com/watch?v=" + MAGIC_ID), MAGIC_ID) | ||||||
|  |  | ||||||
|  |     def test_invidious(self): | ||||||
|  |         self.assertEqual(_get_video_id("https://invidio.us/watch?v=" + MAGIC_ID), MAGIC_ID) | ||||||
|  |      | ||||||
|  |     def test_piped(self): | ||||||
|  |         self.assertEqual(_get_video_id("https://piped.video/watch?v=" + MAGIC_ID), MAGIC_ID) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | if __name__ == "__main__": | ||||||
|  |     unittest.main() | ||||||
		Reference in New Issue
	
	Block a user