Example #1
0
def cli_revert_to_revision(revid):
    """Submit specified record revision REVID upload, to replace current
    version.

    """
    if not revision_format_valid_p(revid):
        print('ERROR: revision %s is invalid; ' \
              'must be NNN.YYYYMMDDhhmmss.' % revid)
        sys.exit(1)

    xml_record = get_marcxml_of_revision_id(revid)
    if xml_record == '':
        print('ERROR: Revision %s does not exist. ' % revid)
        sys.exit(1)

    recid = split_revid(revid)[0]

    if record_locked_by_other_user(recid, -1):
        print('The record is currently being edited. ' \
            'Please try again in a few minutes.')
        sys.exit(1)

    if record_locked_by_queue(recid):
        print('The record is locked because of unfinished upload tasks. ' \
            'Please try again in a few minutes.')
        sys.exit(1)

    save_xml_record(recid, 0, xml_record)
    print('Your modifications have now been submitted. They will be ' \
        'processed as soon as the task queue is empty.')
Example #2
0
def cli_revert_to_revision(revid):
    """Submit specified record revision REVID upload, to replace current
    version.

    """
    if not revision_format_valid_p(revid):
        print('ERROR: revision %s is invalid; ' \
              'must be NNN.YYYYMMDDhhmmss.' % revid)
        sys.exit(1)

    xml_record = get_marcxml_of_revision_id(revid)
    if xml_record == '':
        print('ERROR: Revision %s does not exist. ' % revid)
        sys.exit(1)

    recid = split_revid(revid)[0]

    if record_locked_by_other_user(recid, -1):
        print('The record is currently being edited. ' \
            'Please try again in a few minutes.')
        sys.exit(1)

    if record_locked_by_queue(recid):
        print('The record is locked because of unfinished upload tasks. ' \
            'Please try again in a few minutes.')
        sys.exit(1)

    save_xml_record(recid, 0, xml_record)
    print('Your modifications have now been submitted. They will be ' \
        'processed as soon as the task queue is empty.')
Example #3
0
def _get_record_slave(recid, result, mode=None, uid=None):
    """Check if record exists and return it in dictionary format.
       If any kind of error occurs returns None.
       If mode=='revision' then recid parameter is considered as revid."""
    record = None
    if recid == 'none':
        mode = 'none'
    if mode == 'recid':
        record_status = record_exists(recid)
        #check for errors
        if record_status == 0:
            result['resultCode'], result[
                'resultText'] = 1, 'Non-existent record: %s' % recid
        elif record_status == -1:
            result['resultCode'], result[
                'resultText'] = 1, 'Deleted record: %s' % recid
        elif record_locked_by_queue(recid):
            result['resultCode'], result[
                'resultText'] = 1, 'Record %s locked by queue' % recid
        else:
            record = create_record(print_record(recid, 'xm'))[0]

    elif mode == 'tmpfile':
        file_path = '%s_%s.xml' % (_get_file_path(
            recid, uid), cfg['CFG_BIBEDIT_TO_MERGE_SUFFIX'])
        if not os.path.isfile(file_path):  #check if file doesn't exist
            result['resultCode'], result[
                'resultText'] = 1, 'Temporary file doesnt exist'
        else:  #open file
            tmpfile = open(file_path, 'r')
            record = create_record(tmpfile.read())[0]
            tmpfile.close()

    elif mode == 'revision':
        if revision_format_valid_p(recid):
            marcxml = get_marcxml_of_revision_id(recid)
            if marcxml:
                record = create_record(marcxml)[0]
            else:
                result['resultCode'], result[
                    'resultText'] = 1, 'The specified revision does not exist'
        else:
            result['resultCode'], result[
                'resultText'] = 1, 'Invalid revision id'

    elif mode == 'none':
        return {}

    else:
        result['resultCode'], result[
            'resultText'] = 1, 'Invalid record mode for record2'
    record_order_subfields(record)
    return record
Example #4
0
def _get_record_slave(recid, result, mode=None, uid=None):
    """Check if record exists and return it in dictionary format.
       If any kind of error occurs returns None.
       If mode=='revision' then recid parameter is considered as revid."""
    record = None
    if recid == 'none':
        mode = 'none'
    if mode == 'recid':
        record_status = record_exists(recid)
        #check for errors
        if record_status == 0:
            result['resultCode'], result['resultText'] = 1, 'Non-existent record: %s' % recid
        elif record_status == -1:
            result['resultCode'], result['resultText'] = 1, 'Deleted record: %s' % recid
        elif record_locked_by_queue(recid):
            result['resultCode'], result['resultText'] = 1, 'Record %s locked by queue' % recid
        else:
            record = create_record( print_record(recid, 'xm') )[0]
            record_order_subfields(record)

    elif mode == 'tmpfile':
        file_path = '%s_%s.xml' % (_get_file_path(recid, uid),
                                       CFG_BIBEDIT_TO_MERGE_SUFFIX)
        if not os.path.isfile(file_path): #check if file doesn't exist
            result['resultCode'], result['resultText'] = 1, 'Temporary file doesnt exist'
        else: #open file
            tmpfile = open(file_path, 'r')
            record = create_record( tmpfile.read() )[0]
            tmpfile.close()

    elif mode == 'revision':
        if revision_format_valid_p(recid):
            marcxml = get_marcxml_of_revision_id(recid)
            if marcxml:
                record = create_record(marcxml)[0]
            else:
                result['resultCode'], result['resultText'] = 1, 'The specified revision does not exist'
        else:
            result['resultCode'], result['resultText'] = 1, 'Invalid revision id'

    elif mode == 'none':
        return {}

    else:
        result['resultCode'], result['resultText'] = 1, 'Invalid record mode for record2'
    return record
Example #5
0
def _get_record(recid, uid, result, fresh_record=False):
    """Retrieve record structure.
    """
    record = None
    mtime = None
    cache_dirty = None
    record_status = record_exists(recid)
    existing_cache = cache_exists(recid, uid)
    if record_status == 0:
        result['resultCode'], result[
            'resultText'] = 1, 'Non-existent record: %s' % recid
    elif record_status == -1:
        result['resultCode'], result[
            'resultText'] = 1, 'Deleted record: %s' % recid
    elif not existing_cache and record_locked_by_other_user(recid, uid):
        result['resultCode'], result[
            'resultText'] = 1, 'Record %s locked by user' % recid
    elif existing_cache and cache_expired(recid, uid) and \
        record_locked_by_other_user(recid, uid):
        result['resultCode'], result[
            'resultText'] = 1, 'Record %s locked by user' % recid
    elif record_locked_by_queue(recid):
        result['resultCode'], result[
            'resultText'] = 1, 'Record %s locked by queue' % recid
    else:
        if fresh_record:
            delete_cache(recid, uid)
            existing_cache = False
        if not existing_cache:
            record_revision, record = create_cache(recid, uid)
            mtime = get_cache_mtime(recid, uid)
            cache_dirty = False
        else:
            tmpRes = get_cache_contents(recid, uid)
            cache_dirty, record_revision, record = tmpRes[0], tmpRes[
                1], tmpRes[2]
            touch_cache(recid, uid)
            mtime = get_cache_mtime(recid, uid)
            if not latest_record_revision(recid, record_revision):
                result['cacheOutdated'] = True
        result['resultCode'], result['resultText'], result[
            'cacheDirty'], result[
                'cacheMTime'] = 0, 'Record OK', cache_dirty, mtime
    record_order_subfields(record)
    return record
Example #6
0
def _get_record(recid, uid, result, fresh_record=False):
    """Retrieve record structure.
    """
    record = None
    mtime = None
    cache_dirty = None
    record_status = record_exists(recid)
    existing_cache = cache_exists(recid, uid)
    if record_status == 0:
        result['resultCode'], result['resultText'] = 1, 'Non-existent record: %s' % recid
    elif record_status == -1:
        result['resultCode'], result['resultText'] = 1, 'Deleted record: %s' % recid
    elif not existing_cache and record_locked_by_other_user(recid, uid):
        result['resultCode'], result['resultText'] = 1, 'Record %s locked by user' % recid
    elif existing_cache and cache_expired(recid, uid) and \
        record_locked_by_other_user(recid, uid):
        result['resultCode'], result['resultText'] = 1, 'Record %s locked by user' % recid
    elif record_locked_by_queue(recid):
        result['resultCode'], result['resultText'] = 1, 'Record %s locked by queue' % recid
    else:
        if fresh_record:
            delete_cache(recid, uid)
            existing_cache = False
        if not existing_cache:
            record_revision, record = create_cache(recid, uid)
            mtime = get_cache_mtime(recid, uid)
            cache_dirty = False
        else:
            tmpRes = get_cache_contents(recid, uid)
            cache_dirty, record_revision, record = tmpRes[0], tmpRes[1], tmpRes[2]
            touch_cache(recid, uid)
            mtime = get_cache_mtime(recid, uid)
            if not latest_record_revision(recid, record_revision):
                result['cacheOutdated'] = True
        result['resultCode'], result['resultText'], result['cacheDirty'], result['cacheMTime'] = 0, 'Record OK', cache_dirty, mtime
    record_order_subfields(record)
    return record
Example #7
0
def perform_request_test_search(search_criteria, update_commands, output_format, page_to_display,
                                language, outputTags, collection="", compute_modifications=0,
                                upload_mode='-c', checked_records=None):
    """Returns the results of a test search.

    @param search_criteria: search criteria used in the test search
    @type search_criteria: string
    @param update_commands: list of commands used to update record contents
    @type update_commands: list of objects
    @param output_format: specifies the output format as expected from bibformat
    @type output_format: string (hm, hb, hd, xm, xn, hx)
    @param page_to_display: the number of the page that should be displayed to the user
    @type page_to_display: int
    @param language: the language used to format the content
    @param outputTags: list of tags to be displayed in search results
    @type outputTags: list of strings
    @param collection: collection to be filtered in the results
    @type collection: string
    @param compute_modifications: if equals 0 do not compute else compute modifications
    @type compute_modifications: int
    """
    RECORDS_PER_PAGE = 100
    response = {}

    if collection == "Any collection":
        collection = ""
    record_IDs = search_engine.perform_request_search(p=search_criteria, c=collection)

    # initializing checked_records if not initialized yet or empty
    if checked_records is None or not checked_records:
        checked_records = record_IDs

    number_of_records = len(record_IDs)

    if page_to_display < 1:
        page_to_display = 1

    last_page_number = number_of_records / RECORDS_PER_PAGE + 1
    if page_to_display > last_page_number:
        page_to_display = last_page_number

    first_record_to_display = RECORDS_PER_PAGE * (page_to_display - 1)
    last_record_to_display = (RECORDS_PER_PAGE * page_to_display) - 1

    if not compute_modifications:
        record_IDs = record_IDs[first_record_to_display:last_record_to_display + 1]

    # displayed_records is a list containing IDs of records that will be displayed on current page
    displayed_records = record_IDs[:RECORDS_PER_PAGE]
    records_content = []

    record_modifications = 0
    locked_records = []
    for record_id in record_IDs:
        if upload_mode == '-r' and record_locked_by_queue(record_id):
            locked_records.append(record_id)
        current_modifications = [current_command._modifications for current_command in update_commands]
        formated_record = _get_formated_record(record_id=record_id,
                             output_format=output_format,
                             update_commands=update_commands,
                             language=language, outputTags=outputTags,
                             run_diff=record_id in displayed_records,
                             checked=record_id in checked_records)
        new_modifications = [current_command._modifications for current_command in update_commands]
        if new_modifications > current_modifications:
            record_modifications += 1

        records_content.append((record_id, formated_record))
    total_modifications = []
    if compute_modifications:
        field_modifications = 0
        subfield_modifications = 0
        for current_command in update_commands:
            field_modifications += current_command._modifications
            for subfield_command in current_command._subfield_commands:
                subfield_modifications += subfield_command._modifications
        if record_modifications:
            total_modifications.append(record_modifications)
            total_modifications.append(field_modifications)
            total_modifications.append(subfield_modifications)
        records_content = records_content[first_record_to_display:last_record_to_display + 1]

    response['display_info_box'] = compute_modifications or locked_records
    response['info_html'] = multiedit_templates.info_box(language=language,
                                                total_modifications=total_modifications)
    if locked_records:
        response['info_html'] += multiedit_templates.tmpl_locked_record_list(language=language,
                                                locked_records=locked_records)
    response['search_html'] = multiedit_templates.search_results(records=records_content,
                                                number_of_records=number_of_records,
                                                current_page=page_to_display,
                                                records_per_page=RECORDS_PER_PAGE,
                                                language=language,
                                                output_format=output_format,
                                                checked_records=checked_records)
    response['checked_records'] = checked_records
    return response