Esempio n. 1
0
    def __init__(self, data) -> None:
        StatsAppend(erina.erinaParsingCount, "Erina")
        # Normalize to get the same type of data everytime
        if isinstance(data, list):
            "\n".join(data)
        else:
            data = str(data)

        self.data = data.split("\n")

        self.path = None
        self.anilist_id = None
        self.hash = None
        self.similarity = None
        self.cache_timestamp = None

        for element in self.data:
            element = str(element).replace("\n", "")
            if element[:5] == 'Path:':
                self.path = str(element[6:])
            elif element[:11] == 'AniList ID:':
                self.anilist_id = utils.convert_to_int(element[12:])
            elif element[:5] == 'Hash:':
                self.hash = str(element[6:])
            elif element[:11] == 'Similarity:':
                self.similarity = utils.convert_to_float(element[12:])
            elif element[:16] == 'Cache Timestamp:':
                self.cache_timestamp = self.CacheTimestamp(element[17:])
Esempio n. 2
0
            def addValue(timestamp, data=None):
                """
                Adds a value to the results
                """
                timestamp = timestamp.timestamp()
                if data is None:
                    if timestamp in results[category][subcategory]["values"]:
                        results[category][subcategory]["values"][
                            timestamp] += 1
                    else:
                        results[category][subcategory]["values"][timestamp] = 1

                    if category == "search" and subcategory in [
                            "anilistIDSearchCount", "titleSearchCount",
                            "imageSearchCount"
                    ]:
                        if timestamp in results["search"]["searchCount"][
                                "values"]:
                            results["search"]["searchCount"]["values"][
                                timestamp] += 1
                        else:
                            results["search"]["searchCount"]["values"][
                                timestamp] = 1

                elif subcategory in [
                        "manamiDBTitleVectorLookups", "erinaDatabaseLookups"
                ]:
                    if timestamp in results[category][subcategory]["values"]:
                        results[category][subcategory]["values"][
                            timestamp] += convert_to_int(
                                element.split("    ")[1])
                    else:
                        results[category][subcategory]["values"][
                            timestamp] = convert_to_int(
                                element.split("    ")[1])
                elif subcategory == "cacheFilesCount":
                    results[category][subcategory]["values"][
                        timestamp] = convert_to_int(element.split("    ")[1])
                elif subcategory == "responsePolarity":
                    if timestamp in results[category][subcategory]["values"]:
                        results[category][subcategory]["values"][
                            timestamp].append(
                                convert_to_float(element.split("    ")[1]))
                    else:
                        results[category][subcategory]["values"][timestamp] = [
                            convert_to_float(element.split("    ")[1])
                        ]
Esempio n. 3
0
 def addTiming(self, from_time=None, to=None, at=None) -> None:
     if from_time is not None:
         self.from_time = utils.convert_to_float(from_time)
         self.from_formatted = str(datetime.timedelta(seconds=self.from_time)).split(".")[0]
     else:
         self.from_time = None
         self.from_formatted = None
     if to is not None:
         self.to = utils.convert_to_float(to)
         self.to_formatted = str(datetime.timedelta(seconds=self.to)).split(".")[0]
     else:
         self.to = None
         self.to_formatted = None
     if at is not None:
         self.at = utils.convert_to_float(at)
         self.at_formatted = str(datetime.timedelta(seconds=self.at)).split(".")[0]
     else:
         self.at = None
         self.at_formatted = None
    def __init__(self, data) -> None:
        StatsAppend(erina.erinaParsingCount, "SauceNAO")
        # Normalize to get the same type of data everytime
        if isinstance(data, list):
            "\n".join(data)
        else:
            data = str(data)

        self.data = data.split("\n")

        self.similarity = None
        self.database = None
        self.title = None
        self.link = None
        self.author = None
        self.thumbnail = None
        self.is_manga = None
        self.is_anime = None
        self.part = None
        self.year = None
        self.timing = None
        self.cache_timestamp = None

        for element in self.data:
            element = str(element).replace("\n", "")

            if element[:11] == 'Similarity:':
                self.similarity = utils.convert_to_float(element[12:])
            elif element[:9] == 'Index ID:':
                self.database = self.Index(element[10:])
            elif element[:6] == 'Title:':
                self.title = self.AnimeTitle(native_title=element[7:])
            elif element[:4] == 'URL:':
                self.link = str(element[5:])
            elif element[:7] == 'Author:':
                self.author = str(element[8:])
            elif element[:10] == 'Thumbnail:':
                self.thumbnail = str(element[11:])
            elif element[:8] == 'isManga:':
                self.is_manga = utils.convert_to_boolean(element[9:])
            elif element[:5] == 'Part:':
                self.part = utils.convert_to_int(element[6:])
            elif element[:8] == 'isAnime:':
                self.is_anime = utils.convert_to_boolean(element[9:])
            elif element[:
                         8] == 'Episode:':  #### COMPATIBILITY WITH OLD SAUCENAO CACHE
                self.part = utils.convert_to_int(element[9:])
            elif element[:5] == 'Year:':
                self.year = utils.convert_to_int(element[6:])
            elif element[:15] == 'Estimated Time:':
                self.timing = self.Timing(from_time=element[16:],
                                          to=element[16:],
                                          at=element[16:])
            elif element[:16] == 'Cache Timestamp:':
                self.cache_timestamp = self.CacheTimestamp(element[17:])
Esempio n. 5
0
def environ(erina_environ):
    """
    Returns an env variable if it has the correct erina environ format
    """
    if str(erina_environ)[:2] == "{{" and str(erina_environ)[-2:] == "}}":
        environResult = os.environ.get(str(erina_environ)[2:-2], None)
        if environResult is None:
            return erina_environ
        elif re.sub("[0-9-]", "", str(environResult)) == "":
            return convert_to_int(environResult)
        elif re.sub("[0-9.-]", "", str(environResult)) == "":
            return convert_to_float(environResult)
        else:
            return environResult
    else:
        return erina_environ
Esempio n. 6
0
 def __init__(self, key) -> None:
     self.key = str(key)
     self.authFile = TextFile(erina_dir +
                              "/ErinaServer/Erina/auth/apiAuth/" +
                              self.key + ".erina")
     self.name = None
     self.rate_limit = None
     self.stats = []
     inStats = False
     for line in self.authFile:
         currentLine = line.replace("\n", "")
         if currentLine[:5] == "Name:":
             self.name = currentLine[6:]
         elif currentLine[:11] == "Rate Limit:":
             self.rate_limit = convert_to_float(currentLine[12:])
         elif currentLine == "----STATS----":
             inStats = True
         elif inStats:
             self.stats.append(convert_to_int(currentLine))
Esempio n. 7
0
    def __init__(self, data) -> None:
        StatsAppend(erina.erinaParsingCount, "IQDB")
        # Normalize to get the same type of data everytime
        if isinstance(data, list):
            "\n".join(data)
        else:
            data = str(data)

        self.data = data.split("\n")

        self.tags = None
        self.link = None
        self.title = None
        self.size = None
        self.hentai = None
        self.similarity = None
        self.database = None

        self.author = None

        for element in self.data:
            element = str(element).replace("\n", "")

            if element[:10] == 'IQDB Tags:':
                self.tags = [
                    utils.capitalize_string(tag)
                    for tag in str(element[11:]).split(':::')
                ]
            elif element[:4] == 'URL:':
                self.link = str(element[5:])
            elif element[:6] == 'Title:':
                self.title = str(element[7:])
            elif element[:5] == 'Size:':
                self.size = self.Size(element[6:])
            elif element[:7] == 'isSafe:':
                self.hentai = utils.convert_to_boolean(element[8:])
            elif element[:11] == 'Similarity:':
                self.similarity = utils.convert_to_float(element[12:])
            elif element[:9] == 'Database:':
                self.database = str(element[10:])
            elif element[:16] == 'Cache Timestamp:':
                self.cache_timestamp = self.CacheTimestamp(element[17:])
Esempio n. 8
0
    def __init__(self, data) -> None:
        StatsAppend(erina.erinaParsingCount, "ErinaDB")
        # Normalize to get the same type of data everytime
        if isinstance(data, list):
            "\n".join(data)
        else:
            data = str(data)

        self.data = data.split("\n")

        self.anilist_id = None
        self.title = None
        self.season = None
        self.episode = None
        self.first_frame = None
        self.last_frame = None
        self.timing = None
        self.hash = None
        self.hash_algorithm = None
        self.filename = None
        self.framerate = None
        self.episode_duration = None
        self.episode_framecount = None
        self.analyze_timestamp = None
        
        for element in self.data:
            element = str(element).replace("\n", "")
            if element[:11] == 'AniList ID:':
                self.anilist_id = utils.convert_to_int(element[12:])
            elif element[:6] == 'Anime:':
                self.title = self.AnimeTitle(romaji_title=element[7:])
            elif element[:7] == 'Season:':
                self.season = utils.convert_to_int(element[8:])
            elif element[:8] == 'Episode:':
                self.episode = utils.convert_to_int(element[9:])
            elif element[:12] == 'First Frame:':
                self.first_frame = utils.convert_to_int(element[13:]) 
            elif element[:11] == 'Last Frame:':
                self.last_frame = utils.convert_to_int(element[12:])
            elif element[:5] == 'From:':
                if self.timing is None:
                    self.timing = self.Timing(from_time=element[6:])
                else:
                    self.timing.addTiming(from_time=element[6:])
            elif element[:3] == 'To:':
                if self.timing is None:
                    self.timing = self.Timing(to=element[4:])
                else:
                    self.timing.addTiming(to=element[4:])
            elif element[:3] == 'At:':
                if self.timing is None:
                    self.timing = self.Timing(at=element[4:])
                else:
                    self.timing.addTiming(at=element[4:])
            elif element[:5] == 'Hash:':
                self.hash = str(element[6:])
            elif element[:18] == 'Hashing Algorithm:':
                self.hash_algorithm = str(element[19:])
            elif element[:9] == 'Filename:':
                self.filename = str(element[10:])
            elif element[:18] == 'Episode Framerate:':
                self.framerate = utils.convert_to_float(element[19:])
            elif element[:17] == 'Episode Duration:':
                self.episode_duration = utils.convert_to_float(element[18:])
            elif element[:20] == 'Episode Frame Count:':
                self.episode_framecount = utils.convert_to_int(element[21:])
            elif element[:13] == 'Analyze Date:':
                self.analyze_timestamp = self.AnalyzeTimestamp(element[14:])
Esempio n. 9
0
 def __init__(self, timestamp) -> None:
     self.datetime = datetime.datetime.fromtimestamp(utils.convert_to_float(timestamp))
     self.timestamp = timestamp
     self.formatted = f"{str(self.datetime.year)}-{str(self.datetime.month)}-{str(self.datetime.day)} at {str(self.datetime.hour)}:{str(self.datetime.minute)}:{str(self.datetime.second)}"
Esempio n. 10
0
    def __init__(self, data) -> None:
        StatsAppend(erina.erinaParsingCount, "AniList")
        # Normalize to get the same type of data everytime
        if isinstance(data, list):
            "\n".join(data)
        else:
            data = str(data)

        self.data = data.split("\n")
        episode_fallback = 0

        ### Data initialization
        self.anilist_id = None
        self.myanimelist_id = None
        self.title = None
        self.type = None
        self.format = None
        self.status = None
        self.description = None
        self.season = None
        self.year = None
        self.number_of_episodes = None
        self.episode_duration = None
        self.first_episode_release_date = None
        self.last_episode_release_date = None
        self.country = None
        self.source_type = None
        self.licensed = None
        self.hentai = None
        self.twitter_hashtag = None
        self.average_score = None
        self.cover_image = None
        self.average_cover_color = None
        self.banner_image = None
        self.trailer = None
        self.genres = None
        self.studios = None
        self.tags = None
        self.relations = None
        self.characters = None
        self.staff = None
        self.recommendations = None
        self.link = None
        self.streaming_links = None
        self.external_links = None
        self.cache_timestamp = None

        for element in self.data:
            element = str(element).replace("\n", "")
            #print(element)

            if element[:11] == "AniList ID:":
                self.anilist_id = utils.convert_to_int(element[12:])
            elif element[:15] == "MyAnimeList ID:":
                self.myanimelist_id = utils.convert_to_int(element[16:])
            elif element[:13] == 'Romaji Title:':
                if self.title is None:
                    self.title = self.AnimeTitle(element[14:])
                else:
                    self.title.addTitle(romaji_title=element[14:])
            elif element[:14] == 'English Title:':
                if self.title is None:
                    self.title = self.AnimeTitle(english_title=element[15:])
                else:
                    self.title.addTitle(english_title=element[15:])
            elif element[:13] == 'Native Title:':
                if self.title is None:
                    self.title = self.AnimeTitle(native_title=element[14:])
                else:
                    self.title.addTitle(native_title=element[14:])
            elif element[:21] == 'Alternative Title(s):':
                if self.title is None:
                    self.title = self.AnimeTitle(
                        alternative_titles=element[22:].split(':::'))
                else:
                    self.title.addAlternativeTitle(element[22:].split(':::'))
            elif element[:5] == 'Type:':
                self.type = str(element[6:])
            elif element[:7] == 'Format:':
                self.format = str(element[8:])
            elif element[:7] == 'Status:':
                self.status = str(element[8:])
            elif element[:12] == 'Description:':
                self.description = self.AnimeDescription(element[13:])
            elif element[:7] == 'Season:':
                self.season = str(element[8:])
            elif element[:5] == 'Year:':
                self.year = utils.convert_to_int(element[6:])
            elif element[:9] == 'Episodes:':
                self.number_of_episodes = utils.convert_to_int(element[10:])
            elif element[:17] == 'Average Duration:':
                self.episode_duration = utils.convert_to_int(element[18:])
            elif element[:27] == 'First Episode Release Date:':
                self.first_episode_release_date = self.AnimeDate(element[28:])
            elif element[:26] == 'Last Episode Release Date:':
                self.last_episode_release_date = self.AnimeDate(element[27:])
            elif element[:8] == 'Country:':
                self.country = str(element[9:])
            elif element[:18] == 'Source Media Type:':
                self.source_type = str(element[19:])
            elif element[:9] == 'Licensed?':
                self.licensed = utils.convert_to_boolean(element[10:])
            elif element[:7] == 'Hentai?':
                self.hentai = utils.convert_to_boolean(element[8:])
            elif element[:16] == 'Twitter Hashtag:':
                self.twitter_hashtag = str(element[17:])
            elif element[:14] == 'Average Score:':
                self.average_score = utils.convert_to_int(element[15:])
            elif element[:12] == 'Cover Image:':
                self.cover_image = str(element[13:])
            elif element[:20] == 'Average Cover Color:':
                self.average_cover_color == str(element[21:])
            elif element[:13] == 'Banner Image:':
                self.banner_image = str(element[14:])
            elif element[:8] == 'Trailer:':
                self.trailer = str(element[9:])
            elif element[:7] == 'Genres:':
                self.genres = self.AnimeGenres(element[8:].split(':::'))
            elif element[:8] == '[STUDIO]':
                if self.studios is None:
                    self.studios = [self.AnimeStudio(element[9:].split('|||'))]
                else:
                    self.studios.append(
                        self.AnimeStudio(element[9:].split('|||')))
            elif element[:5] == '[TAG]':
                if self.tags is None:
                    self.tags = [self.AnimeTag(element[6:].split('|||'))]
                else:
                    self.tags.append(self.AnimeTag(element[6:].split('|||')))
            elif element[:10] == '[RELATION]':
                if self.relations is None:
                    self.relations = [
                        self.AnimeRelation(element[11:].split('|||'))
                    ]
                else:
                    self.relations.append(
                        self.AnimeRelation(element[11:].split('|||')))
            elif element[:11] == '[CHARACTER]':
                if self.characters is None:
                    self.characters = [
                        self.AnimeCharacter(element[12:].split('|||'))
                    ]
                else:
                    self.characters.append(
                        self.AnimeCharacter(element[12:].split('|||')))
            elif element[:7] == '[STAFF]':
                if self.staff is None:
                    self.staff = [self.AnimeStaff(element[8:].split('|||'))]
                else:
                    self.staff.append(self.AnimeStaff(
                        element[8:].split('|||')))
            elif element[:16] == '[RECOMMENDATION]':
                if self.recommendations is None:
                    self.recommendations = [
                        self.AnimeRecommendation(element[17:].split('|||'))
                    ]
                else:
                    self.recommendations.append(
                        self.AnimeRecommendation(element[17:].split('|||')))
            elif element[:16] == '[streaming link]':
                episode_fallback += 1
                # Info extraction
                try:
                    element = element[17:]
                    link = re.findall("(https?:\/\/\S+)", element)[0]
                    if link.find('www.crunchyroll.com') != -1:
                        element = element.split(": http")[0].split(" - ")
                        episode = utils.convert_to_int(
                            element[0].lower().replace("episode", ""))
                        title = str(element[1])
                    else:
                        element = element.split(": http")[0]
                        episode = episode_fallback + 1
                        title = str(element[0])

                    # Appending results
                    if self.streaming_links is None:
                        self.streaming_links = [
                            self.AnimeStreamingLink(link=link,
                                                    episode=episode,
                                                    title=title)
                        ]
                    else:
                        self.streaming_links.append(
                            self.AnimeStreamingLink(link=link,
                                                    episode=episode,
                                                    title=title))
                except:
                    pass

            elif element[:15] == '[external link]':
                element = element[16:]
                link = re.findall("(https?:\/\/\S+)", element)[0]
                site = element.split(": ")[0]
                if self.external_links is None:
                    self.external_links = [
                        self.AnimeExternalLink(link=link, site=site)
                    ]
                else:
                    self.external_links.append(
                        self.AnimeExternalLink(link=link, site=site))
            elif element[:16] == 'Cache Timestamp:':
                self.cache_timestamp = self.CacheTimestamp(
                    utils.convert_to_float(element[17:]))
        if self.anilist_id is not None:
            self.link = "https://anilist.co/anime/" + str(self.anilist_id)
Esempio n. 11
0
    def __init__(self, data) -> None:
        StatsAppend(erina.erinaParsingCount, "trace.moe")
        # Normalize to get the same type of data everytime
        if isinstance(data, list):
            "\n".join(data)
        else:
            data = str(data)

        self.data = data.split("\n")

        self.anilist_id = None
        self.myanimelist_id = None
        self.title = None
        self.season = None
        self.episode = None
        self.hentai = None
        self.filename = None
        self.timing = None
        self.similarity = None
        self.tokenthumb = None
        self.cache_timestamp = None

        for element in self.data:
            element = str(element).replace("\n", "")

            if element[:11] == 'AniList ID:':
                self.anilist_id = utils.convert_to_int(element[12:])
            elif element[:15] == 'MyAnimeList ID:':
                self.myanimelist_id = utils.convert_to_int(element[16:])

            elif element[:6] == 'Title:':
                self.title = self.AnimeTitle(romaji_title=element[7:])
            elif element[:13] == 'Title Native:':
                if self.title is not None:
                    self.title.addTitle(native_title=element[14:])
                else:
                    self.title = self.AnimeTitle(native_title=element[14:])
            elif element[:14] == 'Title Chinese:':
                if self.title is not None:
                    self.title.addTitle(chinese_title=element[15:])
                else:
                    self.title = self.AnimeTitle(chinese_title=element[15:])
            elif element[:14] == 'Title English:':
                if self.title is not None:
                    self.title.addTitle(english_title=element[15:])
                else:
                    self.title = self.AnimeTitle(english_title=element[15:])
            elif element[:13] == 'Title Romaji:':
                if self.title is not None:
                    self.title.addTitle(romaji_title=element[14:])
                else:
                    self.title = self.AnimeTitle(romaji_title=element[14:])
            elif element[:6] == 'Anime:':
                if self.title is not None:
                    self.title.addAlternativeTitle(element[7:])
                else:
                    self.title = self.AnimeTitle(
                        alternative_titles=element[7:])
            elif element[:9] == 'Synonyms:':
                if self.title is not None:
                    self.title.addAlternativeTitle(element[10:].split(':::'))
                else:
                    self.title = self.AnimeTitle(
                        alternative_titles=element[10:].split(':::'))
            elif element[:17] == 'Synonyms Chinese:':
                if self.title is not None:
                    self.title.addAlternativeTitle(element[18:].split(':::'))
                else:
                    self.title = self.AnimeTitle(
                        alternative_titles=element[18:].split(':::'))
            elif element[:7] == 'Season:':
                self.season = str(element[8:])
            elif element[:8] == 'Episode:':
                self.episode = utils.convert_to_int(element[9:])
            elif element[:8] == 'isAdult:':
                self.hentai = utils.convert_to_boolean(element[9:])
            elif element[:9] == 'Filename:':
                self.filename = str(element[10:])
            elif element[:5] == 'From:':
                if self.timing is None:
                    self.timing = self.Timing(from_time=element[6:])
                else:
                    self.timing.addTiming(from_time=element[6:])
            elif element[:3] == 'To:':
                if self.timing is None:
                    self.timing = self.Timing(to=element[4:])
                else:
                    self.timing.addTiming(to=element[4:])
            elif element[:3] == 'At:':
                if self.timing is None:
                    self.timing = self.Timing(at=element[4:])
                else:
                    self.timing.addTiming(at=element[4:])
            elif element[:11] == 'Similarity:':
                self.similarity = utils.convert_to_float(element[12:])
            elif element[:11] == 'TokenThumb:':
                self.tokenthumb = str(element[12:])
            elif element[:16] == 'Cache Timestamp:':
                self.cache_timestamp = self.CacheTimestamp(element[17:])