Пример #1
0
 def test_not_equivalent(self):
     l = Localization("es_ES")
     self.assertFalse(l.equivalent(language="eng"))
     self.assertFalse(l.equivalent(language="en"))
     self.assertFalse(l.equivalent(language="en", country="US"))
     self.assertFalse(l.equivalent(language="en", country="United States"))
     self.assertFalse(l.equivalent(language="en", country="ES"))
     self.assertFalse(l.equivalent(language="en", country="Spain"))
Пример #2
0
 def localization(self):
     return Localization(self.get_option("locale"))
Пример #3
0
 def test_get_language(self):
     self.assertEqual("eng", Localization.get_language("en").alpha3)
     self.assertEqual("fre", Localization.get_language("fra").bibliographic)
     self.assertEqual("fra", Localization.get_language("fre").alpha3)
     self.assertEqual("gre", Localization.get_language("gre").bibliographic)
Пример #4
0
 def test_get_country(self):
     self.assertEqual("US", Localization.get_country("USA").alpha2)
     self.assertEqual("GB", Localization.get_country("GB").alpha2)
     self.assertEqual("United States",
                      Localization.get_country("United States").name)
Пример #5
0
 def test_default(self, getdefaultlocale):
     getdefaultlocale.return_value = (None, None)
     l = Localization()
     self.assertEqual("en_US", l.language_code)
     self.assertTrue(l.equivalent(language="en", country="US"))
Пример #6
0
 def test_equivalent_remap(self):
     l = Localization("fr_FR")
     self.assertTrue(l.equivalent(language="fra"))
     self.assertTrue(l.equivalent(language="fre"))
Пример #7
0
 def test_equivalent(self):
     l = Localization("en_US")
     self.assertTrue(l.equivalent(language="eng"))
     self.assertTrue(l.equivalent(language="en"))
     self.assertTrue(l.equivalent(language="en", country="US"))
     self.assertTrue(l.equivalent(language="en", country="United States"))
Пример #8
0
 def test_language_code(self):
     l = Localization("en_US")
     self.assertEqual("en_US", l.language_code)
Пример #9
0
    def _get_streams(self):
        self.session.http.headers = {"User-Agent": useragents.CHROME}
        res = self.session.http.get(self.url)

        # remap en to english, and ja to japanese
        rlanguage = {
            "en": "english",
            "ja": "japanese"
        }.get(
            self.get_option("language").lower(),
            self.get_option("language").lower())
        if "_Incapsula_Resource" in res.text:
            log.error("This page is protected by Incapsula, please see "
                      "https://github.com/streamlink/streamlink/issues/2088"
                      " for a workaround.")
            return

        if "Out of Territory" in res.text:
            log.error(
                "The content requested is not available in your territory.")
            return

        id_m = self.experience_id_re.search(res.text)
        experience_id = id_m and int(id_m.group(1))
        if experience_id:
            log.debug("Found experience ID: {0}", experience_id)
            exp = Experience(self.session, experience_id)
            if self.get_option("email") and self.get_option("password"):
                if exp.login(self.get_option("email"),
                             self.get_option("password")):
                    log.info("Logged in to Funimation as {0}",
                             self.get_option("email"))
                else:
                    log.warning("Failed to login")

            if exp.episode_info:
                log.debug("Found episode: {0}",
                          exp.episode_info["episodeTitle"])
                log.debug("  has languages: {0}",
                          ", ".join(exp.episode_info["languages"].keys()))
                log.debug("  requested language: {0}", rlanguage)
                log.debug("  current language:   {0}", exp.language)
                if rlanguage != exp.language:
                    log.debug("switching language to: {0}", rlanguage)
                    exp.set_language(rlanguage)
                    if exp.language != rlanguage:
                        log.warning(
                            "Requested language {0} is not available, continuing with {1}",
                            rlanguage, exp.language)
                    else:
                        log.debug("New experience ID: {0}", exp.experience_id)

                subtitles = None
                stream_metadata = {}
                disposition = {}
                for subtitle in exp.subtitles():
                    log.debug("Subtitles: {0}", subtitle["src"])
                    if subtitle["src"].endswith(
                            ".vtt") or subtitle["src"].endswith(".srt"):
                        sub_lang = Localization.get_language(
                            subtitle["language"]).alpha3
                        # pick the first suitable subtitle stream
                        subtitles = subtitles or HTTPStream(
                            self.session, subtitle["src"])
                        stream_metadata["s:s:0"] = [
                            "language={0}".format(sub_lang)
                        ]
                    stream_metadata["s:a:0"] = [
                        "language={0}".format(exp.language_code)
                    ]

                sources = exp.sources()
                if 'errors' in sources:
                    for error in sources['errors']:
                        log.error("{0} : {1}".format(error['title'],
                                                     error['detail']))
                    return

                for item in sources["items"]:
                    url = item["src"]
                    if ".m3u8" in url:
                        for q, s in HLSStream.parse_variant_playlist(
                                self.session, url).items():
                            if self.get_option("mux_subtitles") and subtitles:
                                yield q, MuxedStream(self.session,
                                                     s,
                                                     subtitles,
                                                     metadata=stream_metadata,
                                                     disposition=disposition)
                            else:
                                yield q, s
                    elif ".mp4" in url:
                        # TODO: fix quality
                        s = HTTPStream(self.session, url)
                        if self.get_option("mux_subtitles") and subtitles:
                            yield self.mp4_quality, MuxedStream(
                                self.session,
                                s,
                                subtitles,
                                metadata=stream_metadata,
                                disposition=disposition)
                        else:
                            yield self.mp4_quality, s

        else:
            log.error("Could not find experience ID?!")
Пример #10
0
 def test_get_language(self):
     self.assertEqual("eng", Localization.get_language("en").part2b)
     self.assertEqual("fre", Localization.get_language("fra").part2b)
     self.assertEqual("fre", Localization.get_language("fre").part2b)
     self.assertEqual("gre", Localization.get_language("gre").part2b)