added translate feature; added iterator to TranscriptList
This commit is contained in:
		
							parent
							
								
									a1b1e001fe
								
							
						
					
					
						commit
						409141ab51
					
				|  | @ -43,6 +43,14 @@ class TranscriptsDisabled(CouldNotRetrieveTranscript): | ||||||
|     CAUSE_MESSAGE = 'Subtitles are disabled for this video' |     CAUSE_MESSAGE = 'Subtitles are disabled for this video' | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | class NotTranslatable(CouldNotRetrieveTranscript): | ||||||
|  |     CAUSE_MESSAGE = 'The requested language is not translatable' | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class TranslationLanguageNotAvailable(CouldNotRetrieveTranscript): | ||||||
|  |     CAUSE_MESSAGE = 'The requested translation language is not available' | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| class NoTranscriptFound(CouldNotRetrieveTranscript): | class NoTranscriptFound(CouldNotRetrieveTranscript): | ||||||
|     CAUSE_MESSAGE = ( |     CAUSE_MESSAGE = ( | ||||||
|         'No transcripts were found for any of the requested language codes: {requested_language_codes}\n\n' |         'No transcripts were found for any of the requested language codes: {requested_language_codes}\n\n' | ||||||
|  |  | ||||||
|  | @ -12,7 +12,9 @@ from xml.etree import ElementTree | ||||||
| import re | import re | ||||||
| 
 | 
 | ||||||
| from ._html_unescaping import unescape | from ._html_unescaping import unescape | ||||||
| from ._errors import VideoUnavailable, NoTranscriptFound, TranscriptsDisabled | from ._errors import ( | ||||||
|  |     VideoUnavailable, NoTranscriptFound, TranscriptsDisabled, NotTranslatable, TranslationLanguageNotAvailable | ||||||
|  | ) | ||||||
| from ._settings import WATCH_URL | from ._settings import WATCH_URL | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -53,9 +55,6 @@ class TranscriptList(): | ||||||
|     This object represents a list of transcripts. It can be iterated over to list all transcripts which are available |     This object represents a list of transcripts. It can be iterated over to list all transcripts which are available | ||||||
|     for a given YouTube video. Also it provides functionality to search for a transcript in a given language. |     for a given YouTube video. Also it provides functionality to search for a transcript in a given language. | ||||||
|     """ |     """ | ||||||
| 
 |  | ||||||
|     # TODO implement iterator |  | ||||||
| 
 |  | ||||||
|     def __init__(self, video_id, manually_created_transcripts, generated_transcripts): |     def __init__(self, video_id, manually_created_transcripts, generated_transcripts): | ||||||
|         """ |         """ | ||||||
|         The constructor is only for internal use. Use the static build method instead. |         The constructor is only for internal use. Use the static build method instead. | ||||||
|  | @ -117,6 +116,9 @@ class TranscriptList(): | ||||||
|             generated_transcripts, |             generated_transcripts, | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
|  |     def __iter__(self): | ||||||
|  |         return iter(list(self._manually_created_transcripts.values()) + list(self._generated_transcripts.values())) | ||||||
|  | 
 | ||||||
|     def find_transcript(self, language_codes): |     def find_transcript(self, language_codes): | ||||||
|         """ |         """ | ||||||
|         Finds a transcript for a given language code. Manually created transcripts are returned first and only if none |         Finds a transcript for a given language code. Manually created transcripts are returned first and only if none | ||||||
|  | @ -220,6 +222,10 @@ class Transcript(): | ||||||
|         self.language_code = language_code |         self.language_code = language_code | ||||||
|         self.is_generated = is_generated |         self.is_generated = is_generated | ||||||
|         self.translation_languages = translation_languages |         self.translation_languages = translation_languages | ||||||
|  |         self._translation_languages_dict = { | ||||||
|  |             translation_language['language_code']: translation_language['language'] | ||||||
|  |             for translation_language in translation_languages | ||||||
|  |         } | ||||||
| 
 | 
 | ||||||
|     def fetch(self): |     def fetch(self): | ||||||
|         """ |         """ | ||||||
|  | @ -238,27 +244,26 @@ class Transcript(): | ||||||
|             language_code=self.language_code, |             language_code=self.language_code, | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
| # TODO integrate translations in future release |     @property | ||||||
| #     @property |     def is_translatable(self): | ||||||
| #     def is_translatable(self): |         return len(self.translation_languages) > 0 | ||||||
| #         return len(self.translation_languages) > 0 | 
 | ||||||
| # |     def translate(self, language_code): | ||||||
| # |         if not self.is_translatable: | ||||||
| # class TranslatableTranscript(Transcript): |             raise NotTranslatable(self.video_id) | ||||||
| #     def __init__(self, http_client, url, translation_languages): | 
 | ||||||
| #         super(TranslatableTranscript, self).__init__(http_client, url) |         if language_code not in self._translation_languages_dict: | ||||||
| #         self._translation_languages = translation_languages |             raise TranslationLanguageNotAvailable(self.video_id) | ||||||
| #         self._translation_language_codes = {language['language_code'] for language in translation_languages} | 
 | ||||||
| # |         return Transcript( | ||||||
| # |             self._http_client, | ||||||
| #     def translate(self, language_code): |             self.video_id, | ||||||
| #         if language_code not in self._translation_language_codes: |             '{url}&tlang={language_code}'.format(url=self._url, language_code=language_code), | ||||||
| #             raise TranslatableTranscript.TranslationLanguageNotAvailable() |             self._translation_languages_dict[language_code], | ||||||
| # |             language_code, | ||||||
| #         return Transcript( |             True, | ||||||
| #             self._http_client, |             [], | ||||||
| #             '{url}&tlang={language_code}'.format(url=self._url, language_code=language_code) |         ) | ||||||
| #         ) |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class _TranscriptParser(): | class _TranscriptParser(): | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue