Exemplo n.º 1
0
def curation_ticket_context(user, obj):
    recid = obj.extra_data.get('recid')
    record_url = obj.extra_data.get('url')

    arxiv_ids = get_value(obj.data, 'arxiv_eprints.value') or []
    for index, arxiv_id in enumerate(arxiv_ids):
        if arxiv_id and is_arxiv_post_2007(arxiv_id):
            arxiv_ids[index] = 'arXiv:{0}'.format(arxiv_id)

    report_numbers = get_value(obj.data, 'report_numbers.value') or []
    dois = [
        "doi:{0}".format(doi)
        for doi in get_value(obj.data, 'dois.value') or []
    ]
    link_to_pdf = obj.extra_data.get('formdata', {}).get('url')

    subject = ' '.join(
        filter(lambda x: x is not None,
               arxiv_ids + dois + report_numbers + ['(#{0})'.format(recid)]))

    references = obj.extra_data.get('formdata', {}).get('references')
    user_comment = obj.extra_data.get('formdata', {}).get('extra_comments', '')

    return dict(recid=recid,
                record_url=record_url,
                link_to_pdf=link_to_pdf,
                email=user.email if user else '',
                references=references,
                user_comment=user_comment,
                subject=subject)
Exemplo n.º 2
0
def arxiv_eprints2marc(self, key, values):
    """Populate the ``037`` MARC field.

    Also populates the ``035`` and the ``65017`` MARC fields through side effects.
    """
    result_037 = self.get('037', [])
    result_035 = self.get('035', [])
    result_65017 = self.get('65017', [])

    for value in values:
        arxiv_id = value.get('value')
        arxiv_id = 'arXiv:' + arxiv_id if is_arxiv_post_2007(
            arxiv_id) else arxiv_id
        result_037.append({
            '9': 'arXiv',
            'a': arxiv_id,
            'c': force_single_element(value.get('categories')),
        })

        result_035.append({
            '9': 'arXiv',
            'a': 'oai:arXiv.org:' + value.get('value'),
        })

        categories = force_list(value.get('categories'))
        for category in categories:
            result_65017.append({
                '2': 'arXiv',
                'a': category,
            })

    self['65017'] = result_65017
    self['035'] = result_035
    return result_037
Exemplo n.º 3
0
def curation_ticket_context(user, obj):
    recid = obj.extra_data.get('recid')
    record_url = obj.extra_data.get('url')

    arxiv_ids = get_value(obj.data, 'arxiv_eprints.value') or []
    for index, arxiv_id in enumerate(arxiv_ids):
        if arxiv_id and is_arxiv_post_2007(arxiv_id):
            arxiv_ids[index] = 'arXiv:{0}'.format(arxiv_id)

    report_numbers = get_value(obj.data, 'report_numbers.value') or []
    dois = [
        "doi:{0}".format(doi)
        for doi in get_value(obj.data, 'dois.value') or []
    ]
    link_to_pdf = obj.extra_data.get('formdata', {}).get('url')

    subject = ' '.join(filter(
        lambda x: x is not None,
        arxiv_ids + dois + report_numbers + ['(#{0})'.format(recid)]
    ))

    references = obj.extra_data.get('formdata').get('references')
    user_comment = obj.extra_data.get('formdata', {}).get('extra_comments', '')

    return dict(
        recid=recid,
        record_url=record_url,
        link_to_pdf=link_to_pdf,
        email=user.email,
        references=references,
        user_comment=user_comment,
        subject=subject
    )
Exemplo n.º 4
0
def references2marc(self, key, value):
    reference = value['reference']

    pids = force_list(reference.get('persistent_identifiers'))
    a_values = ['doi:' + el for el in force_list(reference.get('dois'))]
    a_values.extend(
        ['hdl:' + el['value'] for el in pids if el.get('schema') == 'HDL'])
    a_values.extend(
        ['urn:' + el['value'] for el in pids if el.get('schema') == 'URN'])

    authors = force_list(reference.get('authors'))
    e_values = [
        el['full_name'] for el in authors if el.get('inspire_role') == 'editor'
    ]
    h_values = [
        el['full_name'] for el in authors if el.get('inspire_role') != 'editor'
    ]

    r_values = force_list(reference.get('report_numbers'))
    if reference.get('arxiv_eprint'):
        arxiv_eprint = reference['arxiv_eprint']
        r_values.append(
            'arXiv:' +
            arxiv_eprint if is_arxiv_post_2007(arxiv_eprint) else arxiv_eprint)

    journal_title = get_value(reference, 'publication_info.journal_title')
    journal_volume = get_value(reference, 'publication_info.journal_volume')
    page_start = get_value(reference, 'publication_info.page_start')
    page_end = get_value(reference, 'publication_info.page_end')
    artid = get_value(reference, 'publication_info.artid')
    s_value = build_pubnote(journal_title, journal_volume, page_start,
                            page_end, artid)

    m_value = ' / '.join(force_list(reference.get('misc')))

    return {
        '0': get_recid_from_ref(value.get('record')),
        'a': a_values,
        'b': get_value(reference, 'publication_info.cnum'),
        'c': reference.get('collaborations'),
        'e': e_values,
        'h': h_values,
        'i': reference.get('isbn'),
        'k': reference.get('texkey'),
        'm': m_value,
        'o': reference.get('label'),
        'p': get_value(reference, 'imprint.publisher'),
        'q': get_value(reference, 'publication_info.parent_title'),
        'r': r_values,
        's': s_value,
        't': get_value(reference, 'title.title'),
        'u': get_value(reference, 'urls.value'),
        'x': get_value(value, 'raw_refs.value'),
        'y': get_value(reference, 'publication_info.year'),
    }
Exemplo n.º 5
0
def arxiv_id(self, key, value):
    if is_arxiv_post_2007(value):
        arxiv_rep_number = {'value': 'arXiv:' + value}
    else:
        arxiv_rep_number = {'value': value}
    if len(value.split('/')) == 2:
        arxiv_rep_number['categories'] = value.split('/')[0]
    if 'arxiv_eprints' in self:
        self['arxiv_eprints'].append(arxiv_rep_number)
    else:
        self['arxiv_eprints'] = [arxiv_rep_number]
    raise IgnoreKey
Exemplo n.º 6
0
def arxiv_id(self, key, value):
    if is_arxiv_post_2007(value):
        arxiv_rep_number = {'value': 'arXiv:' + value}
    else:
        arxiv_rep_number = {'value': value}
    if len(value.split('/')) == 2:
        arxiv_rep_number['categories'] = value.split('/')[0]
    if 'arxiv_eprints' in self:
        self['arxiv_eprints'].append(arxiv_rep_number)
    else:
        self['arxiv_eprints'] = [arxiv_rep_number]
    raise IgnoreKey
Exemplo n.º 7
0
def _normalize_arxiv(obj):
    """Return a normalized arXiv identfier.

    As in ``_is_arxiv``, we need to handle arXiv references as well
    as arXiv identifiers. We also need to return a simpler arXiv
    identifier than what ``idutils`` would output, so we use some
    of its helpers instead of ``normalize_arxiv``.
    """
    obj = obj.split()[0]

    m = idutils.is_arxiv_pre_2007(obj)
    if m:
        return ''.join(m.group(2, 4, 5))

    m = idutils.is_arxiv_post_2007(obj)
    if m:
        return '.'.join(m.group(2, 3))
Exemplo n.º 8
0
def get_curation_body(template, metadata, email, extra_data):
    """
    Get ticket content.

    Ticket used by curators to curate the given record.
    """
    from idutils import is_arxiv_post_2007

    recid = extra_data.get('recid')
    record_url = extra_data.get('url')

    arxiv_id = metadata.get('arxiv_id')
    if arxiv_id and is_arxiv_post_2007(arxiv_id):
        arxiv_id = ''.join(['arXiv:', arxiv_id])

    report_number = metadata.get('report_numbers')
    if report_number:
        report_number = report_number[0].get('value')

    link_to_pdf = extra_data.get('submission_data').get('pdf')

    subject = ' '.join(filter(lambda x: x is not None,
                       [arxiv_id,
                        " ".join(["doi:{0}".format(d) for d in metadata.get('dois')]),
                        report_number,
                        '(#{0})'.format(recid)]))

    references = extra_data.get('submission_data').get('references')
    user_comment = extra_data.get('submission_data').get('extra_comments')

    body = render_template(
        template,
        recid=recid,
        record_url=record_url,
        link_to_pdf=link_to_pdf,
        email=email,
        references=references,
        user_comment=user_comment,
    ).strip()

    return subject, body
Exemplo n.º 9
0
def get_curation_body(template, record, email, extra_data):
    """
    Get ticket content.

    Ticket used by curators to curate the given record.
    """
    from idutils import is_arxiv_post_2007

    recid = extra_data.get('recid')
    record_url = extra_data.get('url')

    arxiv_ids = record.get('arxiv_eprints.value')
    for index, arxiv_id in enumerate(arxiv_ids):
        if arxiv_id and is_arxiv_post_2007(arxiv_id):
            arxiv_ids[index] = 'arXiv:{0}'.format(arxiv_id)

    report_numbers = record.get('report_numbers.value')
    dois = ["doi:{0}".format(record.get('dois.value'))]
    link_to_pdf = extra_data.get('submission_data').get('pdf')

    subject = ' '.join(filter(
        lambda x: x is not None,
        arxiv_ids + dois + report_numbers + ['(#{0})'.format(recid)]
    ))

    references = extra_data.get('submission_data').get('references')
    user_comment = extra_data.get('submission_data').get('extra_comments')

    body = render_template(
        template,
        recid=recid,
        record_url=record_url,
        link_to_pdf=link_to_pdf,
        email=email,
        references=references,
        user_comment=user_comment,
    ).strip()

    return subject, body
Exemplo n.º 10
0
def conflicts_ticket_context(user, obj):
    server_name = current_app.config['SERVER_NAME']
    workflow_id = obj.id
    arxiv_ids = get_value(obj.data, 'arxiv_eprints.value') or []
    for index, arxiv_id in enumerate(arxiv_ids):
        if arxiv_id and is_arxiv_post_2007(arxiv_id):
            arxiv_ids[index] = 'arXiv:{0}'.format(arxiv_id)
    report_numbers = get_value(obj.data, 'report_numbers.value') or []
    dois = [
        "doi:{0}".format(doi)
        for doi in get_value(obj.data, 'dois.value') or []
    ]
    recid = obj.extra_data.get('recid')
    subject = ' '.join(
        filter(lambda x: x is not None,
               arxiv_ids + dois + report_numbers + ['(#{0})'.format(recid)]))

    return dict(server_name=server_name,
                workflow_id=workflow_id,
                arxiv_ids=arxiv_ids,
                dois=dois,
                recid=recid,
                report_numbers=report_numbers,
                subject=subject)
Exemplo n.º 11
0
def get_primary_class(data, doc_type):
    eprint = get_value(data, 'arxiv_eprints.value[0]')
    if eprint and is_arxiv_post_2007(eprint):
        return get_value(data, 'arxiv_eprints[0].categories[0]')
Exemplo n.º 12
0
def references2marc(self, key, value):
    """Populate the ``999C5`` MARC field."""
    reference = value.get('reference', {})

    pids = force_list(reference.get('persistent_identifiers'))
    a_values = ['doi:' + el for el in force_list(reference.get('dois'))]
    a_values.extend(
        ['hdl:' + el['value'] for el in pids if el.get('schema') == 'HDL'])
    a_values.extend(
        ['urn:' + el['value'] for el in pids if el.get('schema') == 'URN'])

    external_ids = force_list(reference.get('external_system_identifiers'))
    u_values = force_list(get_value(reference, 'urls.value'))
    u_values.extend(
        CDS_RECORD_FORMAT.format(el['value']) for el in external_ids
        if el.get('schema') == 'CDS')
    u_values.extend(
        ADS_RECORD_FORMAT.format(el['value']) for el in external_ids
        if el.get('schema') == 'ADS')

    authors = force_list(reference.get('authors'))
    e_values = [
        el['full_name'] for el in authors if el.get('inspire_role') == 'editor'
    ]
    h_values = [
        el['full_name'] for el in authors if el.get('inspire_role') != 'editor'
    ]

    r_values = force_list(reference.get('report_numbers'))
    if reference.get('arxiv_eprint'):
        arxiv_eprint = reference['arxiv_eprint']
        r_values.append(
            'arXiv:' +
            arxiv_eprint if is_arxiv_post_2007(arxiv_eprint) else arxiv_eprint)

    if reference.get('publication_info'):
        reference['publication_info'] = convert_new_publication_info_to_old(
            [reference['publication_info']])[0]
    journal_title = get_value(reference, 'publication_info.journal_title')
    journal_volume = get_value(reference, 'publication_info.journal_volume')
    page_start = get_value(reference, 'publication_info.page_start')
    page_end = get_value(reference, 'publication_info.page_end')
    artid = get_value(reference, 'publication_info.artid')
    s_value = build_pubnote(journal_title, journal_volume, page_start,
                            page_end, artid)

    m_value = ' / '.join(force_list(reference.get('misc')))

    return {
        '0': get_recid_from_ref(value.get('record')),
        '9': 'CURATOR' if value.get('legacy_curated') else None,
        'a': a_values,
        'b': get_value(reference, 'publication_info.cnum'),
        'c': reference.get('collaborations'),
        'e': e_values,
        'h': h_values,
        'i': reference.get('isbn'),
        'k': reference.get('texkey'),
        'm': m_value,
        'o': reference.get('label'),
        'p': get_value(reference, 'imprint.publisher'),
        'q': get_value(reference, 'publication_info.parent_title'),
        'r': r_values,
        's': s_value,
        't': get_value(reference, 'title.title'),
        'u': u_values,
        'x': get_value(value, 'raw_refs.value'),
        'y': get_value(reference, 'publication_info.year'),
        'z': 1 if value.get('curated_relation') else 0,
    }
Exemplo n.º 13
0
 def get_primary_class(self, data):
     eprint = get_value(data, "arxiv_eprints.value[0]")
     if eprint and is_arxiv_post_2007(eprint):
         return get_value(data, "arxiv_eprints[0].categories[0]")
Exemplo n.º 14
0
def get_primary_class(data, doc_type):
    eprint = get_value(data, 'arxiv_eprints.value[0]')
    if eprint and is_arxiv_post_2007(eprint):
        return get_value(data, 'arxiv_eprints[0].categories[0]')