Пример #1
0
def etranslate_book(bookname, scid, ecid):
    logger.debug("Enter etranslate book func")
    book = Tnovel(bookname, loglevel=book_log_level, dbfile=dbfilename)
    etransmap = book.read_book_etransmap()
    translator = TNovelETranslator(name=bookname, etransmap=etransmap)
    bookdata = book.read_book()
    raw_data_list = []
    chapid_list = []
    cid_list = []
    transcount = 0
    count = 0
    scid, chapcount = calc_chap_count(scid, ecid, book.get_chapter_count())
    logger.debug("traslate book scid %d count %d book:%d", scid, chapcount, len(bookdata))
    for index in range(chapcount):
        cid = scid + index
        if book.is_chapter_exist(cid):
            continue
        else:
            cid_list.append(cid)
    if len(cid_list) > 0:
        logger.debug('Following chapters are not available')
        logger.debug(cid_list)
        raise(ValueError)
    for chapid,chaptitle,chapdata,rawdata in bookdata:
        if chapid < scid or chapid >= (scid + chapcount):
                continue
        logger.debug("chapid id %d is withing the range %d-%d", chapid, scid, scid+chapcount)
        chapid_list.append(chapid)
        raw_data_list.append(chapdata)
        count = count + 1
        if count >= 200:
            logger.debug("in loop going to etranslate chapter count %d", len(raw_data_list))
            trans_data_list = translator.translate(raw_data_list)
            for cid in range(len(chapid_list)):
                book.update_chapter_data(chapid_list[cid],trans_data_list[cid])
                transcount = transcount + 1
            chapid_list = []
            raw_data_list = []
            count = 0

    logger.debug("going to etranslate chapter count %d", len(raw_data_list))
    if count > 0:
        trans_data_list = translator.translate(raw_data_list)
        for cid in range(len(chapid_list)):
            book.update_chapter_data(chapid_list[cid],trans_data_list[cid])
            transcount = transcount + 1

    logger.debug('total number of chapters etranslated %d', transcount)