Пример #1
0
def load_single(mgr, section, parm, vers=None):
    stream = utilities.MemoryStream()
    if vers:
        stream << metadata.open_line(C.MD_V, vers)
    stream << metadata.open_line(section, parm)
    stream.rewind()
    mgr.load_meta(stream)
Пример #2
0
def load_section(mgr, section, wordlist, vers=None):
    stream = utilities.MemoryStream()
    if vers:
        stream << '{{VERSION ' + vers + '}}\n'
    stream << metadata.open_line(section)
    for word in wordlist:
        stream.writeLine(word)
    stream << metadata.close_line(section)
    stream.rewind()
    mm.load_meta(stream)
Пример #3
0
def load_section(mgr, section, line_list, vers=None):
    stream = utilities.MemoryStream()
    if vers:
        stream << metadata.open_line(C.MD_V, vers)
    stream << metadata.open_line(section)
    for line in line_list:
        stream.writeLine(line)
    stream << metadata.close_line(section)
    stream.rewind()
    mgr.load_meta(stream)
Пример #4
0
def check_section(mgr, section, jsonbits):
    stream = utilities.MemoryStream()
    mgr.write_section(stream, section)
    stream.rewind()
    received = stream.readAll()
    received = strip_white(received)
    expected = strip_white(jsonbits)
    t = (expected == received)
    if not t:  # about to fail assertion in caller
        print('expected', expected)
        print('received', received)
    return t
Пример #5
0
def check_section(mgr, section, line_list):
    stream = utilities.MemoryStream()
    mm.write_meta(stream)
    stream.rewind()
    while True:
        line = stream.readLine()
        if stream.atEnd(): break
        if line == metadata.open_string(section) : break
    assert (not stream.atEnd())
    saved = set()
    for line in metadata.read_to(stream, section):
        saved.add(line)
    assert saved == set(line_list)
Пример #6
0
file_nexiste = os.path.join(T.path_to_Files, 'fubar')  # not existing file
file_unreadable = os.path.join(T.path_to_Files,
                               'unreadable.txt')  # has mode 0222
dir_name = os.path.join(T.path_to_Files, 'pngs')  # existing dir
import utilities
# The following incidentally test class key_dependent_default
assert utilities.file_is_accessible(file_exists)
assert not utilities.file_is_accessible(dir_name)
assert not utilities.file_is_accessible(file_nexiste)
assert not utilities.file_is_accessible(file_unreadable)
assert ('en_US.aff', T.path_to_Files) == utilities.file_split(file_exists)
assert ('pngs', T.path_to_Files) == utilities.file_split(dir_name)
assert ('en_US.aff', T.path_to_Files) == utilities.file_split('en_US.aff')
assert len(utilities._FI_DICT) == 5
# Not much to test in MemoryStream other than added methods
memstream = utilities.MemoryStream()
THETA = 'Θ'
STRING = THETA + 'foobar!'
memstream.writeLine(STRING)
assert (len(STRING) + 1) * 2 == memstream.pos()
memstream.rewind()
assert memstream.readLine() == STRING
# n.b. it does no good to check .pos() now, it is a bytes offset
# on a unicode stream. useless...
memstream.rewind()
assert memstream.pos() == 0
assert memstream.readAll() == STRING + '\n'
# FBTS gets used a lot. Check base functionality
from PyQt5.QtCore import QFile
qfile_exists = QFile(file_exists)
fbts = utilities.FileBasedTextStream(qfile_exists)
Пример #7
0
def load_section(mgr, jsonbits):
    stream = utilities.MemoryStream()
    stream << '\n'  # must start section with newline
    stream << jsonbits
    stream.rewind()
    mgr.load_meta(stream)
Пример #8
0
def get_section(mgr, section):
    stream = utilities.MemoryStream()
    mgr.write_section(stream, section)
    stream.rewind()
    return stream.readAll()
Пример #9
0
def push_ub(fpanel, butno, udict):
    stream = utilities.MemoryStream()
    stream << '{} : {}'.format(butno, udict)
    stream.rewind()
    fpanel.user_button_input(stream)
Пример #10
0
def check_single(mgr, section, parm):
    stream = utilities.MemoryStream()
    mgr.write_meta(stream)
    stream.rewind()
    txt = stream.readAll()
    assert (section + ' ' + parm) in txt
Пример #11
0
def _move_meta( from_mgr, to_mgr, section ) :
    stream = utilities.MemoryStream()
    from_mgr.write_section( stream, section )
    stream.rewind()
    to_mgr.load_meta( stream )
    stream.rewind()
Пример #12
0
def xlt_book( source_book, xlt_index, main_window ) :
    global WORK_UNITS

    # Get the namespace of the chosen Translator, based on the index saved in
    # the menu action.
    xlt_namespace = _XLT_NAMESPACES[ xlt_index ]
    menu_name = getattr( xlt_namespace, 'MENU_NAME' )
    xlt_logger.info('Translating {}: {}'.format(xlt_index, menu_name) )

    # If it has an option dialog, now is the time to run it. If the
    # user clicks Cancel, we are done.
    dialog_list = getattr( xlt_namespace, 'OPTION_DIALOG', None )
    if dialog_list :
        answer = _run_dialog( dialog_list, menu_name, main_window )
        if not answer :
            xlt_logger.error('User cancelled option dialog for', menu_name)
            return None

    # Perform the document parse. If it succeeds, the list of work units is
    # ready. If it fails, a message has been shown to the user and we exit.
    WORK_UNITS = []
    if not _do_parse( source_book, main_window ) :
        return None

    # Initialize the translator. Create three streams. Collect the book facts
    # dict. Make a page boundary offset list filled with -1. Pass all that to
    # the initialize function to store.

    prolog = utilities.MemoryStream()
    body = utilities.MemoryStream()
    epilog = utilities.MemoryStream()
    book_facts = source_book.get_book_facts()
    source_page_model = source_book.get_page_model()
    page_list = []
    if source_page_model.active() :
        page_list = [ -1 for x in range( source_page_model.page_count() ) ]

    try:
        result = xlt_namespace.initialize( prolog, body, epilog, book_facts, page_list )
    except Exception as e :
        m1 = _TR( 'Translator throws exception',
                  'Unexpected error initializing translator' ) + ' ' + menu_name
        m2 = str(e)
        utilities.warning_msg( m1, m2, main_window )
        xlt_logger.error('Exception from {}.initialize()'.format(menu_name))
        xlt_logger.error(m2)
        return None
    if not result : return None

    # The translator is initialized, so call its translate() passing our
    # event_generator(), below.

    try:
        event_iterator = event_generator( source_page_model, source_book.get_edit_model() )
        result = xlt_namespace.translate( event_iterator )
    except Exception as e :
        m1 = _TR( 'Translator throws exception',
                  'Unexpected error in translate() function of') + ' ' + menu_name
        m2 = str(e)
        utilities.warning_msg( m1, m2, main_window )
        xlt_logger.error('Exception from {}.translate()'.format(menu_name))
        xlt_logger.error(m2)
        return None
    if not result : return None

    # Translating over, finalize it.

    try:
        result = xlt_namespace.finalize( )
    except Exception as e :
        m1 = _TR( 'Translator throws exception',
                  'Unexpected error in finalize() function of') + ' ' + menu_name
        m2 = str(e)
        utilities.warning_msg( m1, m2, main_window )
        xlt_logger.error('Exception from {}.finalize()'.format(menu_name))
        xlt_logger.error(m2)
        return None
    if not result : return None

    # Now put it all together as a Book. First, have mainwindow create a
    # New book and display it.

    new_book = main_window.do_new()

    # Get an edit cursor and use it to insert all the translated text.

    new_edit_view = new_book.get_edit_view()
    qtc = new_edit_view.get_cursor()
    prolog.rewind()
    qtc.insertText( prolog.readAll() )
    body.rewind()
    qtc.insertText( body.readAll() )
    epilog.rewind()
    qtc.insertText( epilog.readAll() )

    # Position the file at the top.

    new_edit_view.go_to_line_number( 1 )

    # Read relevant metadata sections from the source book and install them
    # on the new book. metadata.write_section() gets a specific section.
    # metadata.load_meta() doesn't care if the stream is a single section
    # or a whole file.

    source_mgr = source_book.get_meta_manager()
    new_mgr = new_book.get_meta_manager()

    new_book.book_folder = source_book.book_folder # base folder
    _move_meta( source_mgr, new_mgr, C.MD_BW ) # badwords
    _move_meta( source_mgr, new_mgr, C.MD_FR ) # find memory
    _move_meta( source_mgr, new_mgr, C.MD_FU ) # find userbuttons
    _move_meta( source_mgr, new_mgr, C.MD_GW ) # goodwords
    _move_meta( source_mgr, new_mgr, C.MD_MD ) # main dictionary
    _move_meta( source_mgr, new_mgr, C.MD_NO ) # notes
    if source_page_model.active() and page_list[0] > -1 :
        # It looks as if the translator did update the page offset list. Get
        # the source page metadata and modify it. (Note the original design
        # was to just transfer the old page metadata the way we transfer the
        # other types, above, then use pagedata.set_position() to set the new
        # positions. HOWEVER there is a possibility that the new book is
        # shorter than the old one, in which case pagedata.read_pages() would
        # see some of the (old) positions as invalid, and would discard some
        # of the final rows. So we get the metadata; translate it back to
        # python; modify it in place with the new positions which are
        # presumably all valid for the new book; convert it to json and feed
        # that to the new book. If the translator messed up any of those
        # positions, there will be log messages.
        stream = utilities.MemoryStream()
        source_mgr.write_section( stream, C.MD_PT )
        stream.rewind()
        pdata = json.loads( stream.readAll() )
        plist = pdata['PAGETABLE']
        for j in range( len( plist ) ) :
            plist[j][0] = page_list[j]
        stream = utilities.MemoryStream()
        stream << json.dumps( pdata )
        stream.rewind()
        new_mgr.load_meta( stream )
        new_book.hook_images()