Exemplo n.º 1
0
    def getResult(self, episodes):
        """
        Returns a result of the correct type for this provider
        """
        result = classes.NZBDataSearchResult(episodes)
        result.provider = self

        return result
Exemplo n.º 2
0
    def get_result(self, episodes, url):

        result = None
        if url and False is self._init_api():
            result = classes.NZBDataSearchResult(episodes)
            result.get_data_func = self.get_data
            result.url = url

        if None is result:
            result = classes.NZBSearchResult(episodes)
            result.url = url

        result.provider = self

        return result
Exemplo n.º 3
0
    def get_result(self, episodes, url):

        result = None
        if url and False is self._init_api():
            data = self.get_url(url)
            if data:
                if '</nzb>' not in data or 'seem to be logged in' in data:
                    logger.log(u'Failed nzb data response: %s' % data,
                               logger.DEBUG)
                    return result
                result = classes.NZBDataSearchResult(episodes)
                result.extraInfo += [data]

        if None is result:
            result = classes.NZBSearchResult(episodes)
            result.url = url

        result.provider = self

        return result
Exemplo n.º 4
0
    def get_result(self, episodes, url):

        result = None
        if url and False is self._init_api():
            data = self.get_url(url, timeout=90)
            if not data:
                return result
            if '<strong>Limit Reached</strong>' in data:
                logger.log('Daily Nzb Download limit reached', logger.DEBUG)
                return result
            if '</nzb>' not in data or 'seem to be logged in' in data:
                logger.log('Failed nzb data response: %s' % data, logger.DEBUG)
                return result
            result = classes.NZBDataSearchResult(episodes)
            result.extraInfo += [data]

        if None is result:
            result = classes.NZBSearchResult(episodes)
            result.url = url

        result.provider = self

        return result
Exemplo n.º 5
0
def split_result(obj):
    """
    Split obj into separate episodes.

    :param obj: to search for results
    :return: a list of episode objects or an empty list
    """
    url_data = helpers.getURL(obj.url,
                              session=helpers.make_session(),
                              returns='content')
    if url_data is None:
        logger.log(
            "Unable to load url " + obj.url + ", can't download season NZB",
            logger.ERROR)
        return []

    # parse the season ep name
    try:
        parsed_obj = NameParser(False, showObj=obj.show).parse(obj.name)
    except (InvalidNameException, InvalidShowException) as error:
        logger.log("{0}".format(error), logger.DEBUG)
        return []

    # bust it up
    season = 1 if parsed_obj.season_number is None else parsed_obj.season_number

    separate_nzbs, xmlns = get_season_nzbs(obj.name, url_data, season)

    result_list = []

    # TODO: Re-evaluate this whole section
    #   If we have valid results and hit an exception, we ignore the results found so far.
    #   Maybe we should return the results found or possibly continue with the next iteration of the loop
    #   Also maybe turn this into a function and generate the results_list with a list comprehension instead
    for new_nzb in separate_nzbs:
        logger.log("Split out " + new_nzb + " from " + obj.name, logger.DEBUG)  # pylint: disable=no-member

        # parse the name
        try:
            parsed_obj = NameParser(False, showObj=obj.show).parse(new_nzb)
        except (InvalidNameException, InvalidShowException) as error:
            logger.log("{0}".format(error), logger.DEBUG)
            return []

        # make sure the result is sane
        if (parsed_obj.season_number !=
                season) or (parsed_obj.season_number is None and season != 1):
            # pylint: disable=no-member
            logger.log(
                "Found " + new_nzb + " inside " + obj.name +
                " but it doesn't seem to belong to the same season, ignoring it",
                logger.WARNING)
            continue
        elif not parsed_obj.episode_numbers:
            # pylint: disable=no-member
            logger.log(
                "Found " + new_nzb + " inside " + obj.name +
                " but it doesn't seem to be a valid episode NZB, ignoring it",
                logger.WARNING)
            continue

        want_ep = True
        for ep_num in parsed_obj.episode_numbers:
            if not obj.extraInfo[0].wantEpisode(season, ep_num, obj.quality):
                logger.log("Ignoring result: " + new_nzb, logger.DEBUG)
                want_ep = False
                break
        if not want_ep:
            continue

        # get all the associated episode objects
        ep_obj_list = [
            obj.extraInfo[0].getEpisode(season, ep)
            for ep in parsed_obj.episode_numbers
        ]

        # make a result
        cur_obj = classes.NZBDataSearchResult(ep_obj_list)
        cur_obj.name = new_nzb
        cur_obj.provider = obj.provider
        cur_obj.quality = obj.quality
        cur_obj.extraInfo = [create_nzb_string(separate_nzbs[new_nzb], xmlns)]

        result_list.append(cur_obj)

    return result_list
Exemplo n.º 6
0
def splitResult(result):

    urlData = helpers.getURL(result.url)

    if urlData is None:
        logger.log(
            u"Unable to load url " + result.url +
            ", can't download season NZB", logger.ERROR)
        return False

    # parse the season ep name
    try:
        np = NameParser(False)
        parse_result = np.parse(result.name, True)
    except InvalidNameException:
        logger.log(
            u"Unable to parse the filename " + result.name +
            " into a valid episode", logger.WARNING)
        return False

    # bust it up
    season = parse_result.season_number if parse_result.season_number != None else 1

    separateNZBs, xmlns = getSeasonNZBs(result.name, urlData, season)

    resultList = []

    for newNZB in separateNZBs:

        logger.log(u"Split out " + newNZB + " from " + result.name,
                   logger.DEBUG)

        # parse the name
        try:
            np = NameParser(False)
            parse_result = np.parse(newNZB, True)
        except InvalidNameException:
            logger.log(
                u"Unable to parse the filename " + newNZB +
                " into a valid episode", logger.WARNING)
            return False

        # make sure the result is sane
        if (parse_result.season_number != None
                and parse_result.season_number != season) or (
                    parse_result.season_number == None and season != 1):
            logger.log(
                u"Found " + newNZB + " inside " + result.name +
                " but it doesn't seem to belong to the same season, ignoring it",
                logger.WARNING)
            continue
        elif len(parse_result.episode_numbers) == 0:
            logger.log(
                u"Found " + newNZB + " inside " + result.name +
                " but it doesn't seem to be a valid episode NZB, ignoring it",
                logger.WARNING)
            continue

        wantEp = True
        for epNo in parse_result.episode_numbers:
            if not result.extraInfo[0].wantEpisode(season, epNo,
                                                   result.quality):
                logger.log(
                    u"Ignoring result " + newNZB +
                    " because we don't want an episode that is " +
                    Quality.qualityStrings[result.quality], logger.DEBUG)
                wantEp = False
                break
        if not wantEp:
            continue

        # get all the associated episode objects
        epObjList = []
        for curEp in parse_result.episode_numbers:
            epObjList.append(result.extraInfo[0].getEpisode(season, curEp))

        # make a result
        curResult = classes.NZBDataSearchResult(epObjList)
        curResult.name = newNZB
        curResult.provider = result.provider
        curResult.quality = result.quality
        curResult.extraInfo = [createNZBString(separateNZBs[newNZB], xmlns)]

        resultList.append(curResult)

    return resultList
Exemplo n.º 7
0
def splitResult(result):
    """
    Split result into seperate episodes

    :param result: search result object
    :return: False upon failure, a list of episode objects otherwise
    """
    urlData = helpers.getURL(result.url, session=requests.Session(), needBytes=True)
    if urlData is None:
        logging.error("Unable to load url " + result.url + ", can't download season NZB")
        return False

    # parse the season ep name
    try:
        np = NameParser(False, showObj=result.show)
        parse_result = np.parse(result.name)
    except InvalidNameException:
        logging.debug("Unable to parse the filename " + result.name + " into a valid episode")
        return False
    except InvalidShowException:
        logging.debug("Unable to parse the filename " + result.name + " into a valid show")
        return False

    # bust it up
    season = parse_result.season_number if parse_result.season_number != None else 1

    separateNZBs, xmlns = getSeasonNZBs(result.name, urlData, season)

    resultList = []

    for newNZB in separateNZBs:

        logging.debug("Split out " + newNZB + " from " + result.name)

        # parse the name
        try:
            np = NameParser(False, showObj=result.show)
            parse_result = np.parse(newNZB)
        except InvalidNameException:
            logging.debug("Unable to parse the filename " + newNZB + " into a valid episode")
            return False
        except InvalidShowException:
            logging.debug("Unable to parse the filename " + newNZB + " into a valid show")
            return False

        # make sure the result is sane
        if (parse_result.season_number != None and parse_result.season_number != season) or (
                        parse_result.season_number == None and season != 1):
            logging.warning(
                    "Found " + newNZB + " inside " + result.name + " but it doesn't seem to belong to the same season, ignoring it")
            continue
        elif len(parse_result.episode_numbers) == 0:
            logging.warning(
                    "Found " + newNZB + " inside " + result.name + " but it doesn't seem to be a valid episode NZB, ignoring it")
            continue

        wantEp = True
        for epNo in parse_result.episode_numbers:
            if not result.extraInfo[0].wantEpisode(season, epNo, result.quality):
                logging.info("Ignoring result " + newNZB + " because we don't want an episode that is " +
                            Quality.qualityStrings[result.quality])
                wantEp = False
                break
        if not wantEp:
            continue

        # get all the associated episode objects
        epObjList = []
        for curEp in parse_result.episode_numbers:
            epObjList.append(result.extraInfo[0].getEpisode(season, curEp))

        # make a result
        curResult = classes.NZBDataSearchResult(epObjList)
        curResult.name = newNZB
        curResult.provider = result.provider
        curResult.quality = result.quality
        curResult.extraInfo = [createNZBString(separateNZBs[newNZB], xmlns)]

        resultList.append(curResult)

    return resultList
Exemplo n.º 8
0
        if (parse_result.season_number != None and parse_result.season_number != season) or (parse_result.season_number == None and season != 1):
            logger.log(u"Found "+newNZB+" inside "+result.name+" but it doesn't seem to belong to the same season, ignoring it", logger.WARNING)
            continue
        elif len(parse_result.episode_numbers) == 0:
            logger.log(u"Found "+newNZB+" inside "+result.name+" but it doesn't seem to be a valid episode NZB, ignoring it", logger.WARNING)
            continue

        wantEp = True
        for epNo in parse_result.episode_numbers:
            if not result.extraInfo[0].wantEpisode(season, epNo, result.quality):
                logger.log(u"Ignoring result "+newNZB+" because we don't want an episode that is "+Quality.qualityStrings[result.quality], logger.DEBUG)
                wantEp = False
                break
        if not wantEp:
            continue

        # get all the associated episode objects
        epObjList = []
        for curEp in parse_result.episode_numbers:
            epObjList.append(result.extraInfo[0].getEpisode(season, curEp))

        # make a result
        curResult = classes.NZBDataSearchResult(epObjList)
        curResult.name = newNZB
        curResult.provider = result.provider
        curResult.quality = result.quality
        curResult.extraInfo = [createNZBString(separateNZBs[newNZB], xmlns)]

        resultList.append(curResult)

    return resultList