Esempio n. 1
0
def persistent_identifiers(self, key, value):
    """Persistent Standard Identifiers."""
    value = utils.force_list(value)

    dois = self.get('dois', [])
    persistent_identifiers = self.get('persistent_identifiers', [])
    for val in value:
        if val:
            items = utils.force_list(val.get('a'))
            if val.get("2") and val.get("2", '').lower() == "doi":
                for v in items:
                    dois.append({
                        'value': v,
                        'source': val.get('9')
                    })
            else:
                for v in items:
                    persistent_identifiers.append({
                        'value': v,
                        'source': val.get('9'),
                        'type': val.get('2')
                    })
    if dois:
        self['dois'] = dedupe_list_of_dicts(dois)
    return dedupe_list_of_dicts(persistent_identifiers)
Esempio n. 2
0
def report_numbers(self, key, value):
    """Report numbers and arXiv numbers from 037."""

    def get_value(value):
        return {
            'source': value.get('9'),
            'value': value.get('a', value.get('z')),
        }

    def get_value_arxiv(value):
        return {
            'value': value.get('a')[0],
            'categories': utils.force_list(value.get('c')),
        }

    report_number = self.get('report_numbers', [])
    arxiv_eprints = self.get('arxiv_eprints', [])

    value = utils.force_list(value)
    for element in value:
        if element.get('9') and element.get('9') == 'arXiv' and 'c' in element:
            arxiv_eprints.append(get_value_arxiv(element))
        else:
            report_number.append(get_value(element))

    self['arxiv_eprints'] = dedupe_list_of_dicts(arxiv_eprints)
    return dedupe_list_of_dicts(report_number[0:1])
Esempio n. 3
0
def field_categories(self, key, value):
    """Field categories."""
    self.setdefault('field_categories', [])

    _terms = utils.force_list(value.get('a'))

    if _terms:
        for _term in _terms:
            term = classify_field(_term)

            scheme = 'INSPIRE' if term else None

            _scheme = value.get('2')
            if isinstance(_scheme, (list, tuple)):
                _scheme = _scheme[0]

            source = value.get('9')
            if source:
                if 'automatically' in source:
                    source = 'INSPIRE'

            self['field_categories'].append({
                'source': source,
                '_scheme': _scheme,
                'scheme': scheme,
                '_term': _term,
                'term': term,
            })

        self['field_categories'] = dedupe_list_of_dicts(
            self['field_categories'])
Esempio n. 4
0
def collections(self, key, value):
    """Collection this record belongs to."""
    value = utils.force_list(value)

    def get_value(value):
        primary = ''
        if isinstance(value.get('a'), list):
            primary = value.get('a')[0]
        else:
            primary = value.get('a')
        return {
            'primary': primary,
            'secondary': value.get('b'),
            'deleted': value.get('c'),
        }

    collections = self.get('collections', [])

    for val in value:
        collections.append(get_value(val))

    contains_list = False
    for element in collections:
        for k, v in enumerate(element):
            if isinstance(element[v], list):
                contains_list = True
                break
    if contains_list:
        return strip_empty_values(collections)
    else:
        return dedupe_list_of_dicts(collections)
Esempio n. 5
0
def field_categories(self, key, value):
    """Field categories."""
    self.setdefault('field_categories', [])

    _terms = utils.force_list(value.get('a'))

    if _terms:
        for _term in _terms:
            term = classify_field(_term)

            scheme = 'INSPIRE' if term else None

            _scheme = value.get('2')
            if isinstance(_scheme, (list, tuple)):
                _scheme = _scheme[0]

            source = value.get('9')
            if source:
                if 'automatically' in source:
                    source = 'INSPIRE'

            self['field_categories'].append({
                'source': source,
                '_scheme': _scheme,
                'scheme': scheme,
                '_term': _term,
                'term': term,
            })

        self['field_categories'] = dedupe_list_of_dicts(
            self['field_categories'])
Esempio n. 6
0
def collections(self, key, value):
    """Collection this record belongs to."""
    value = utils.force_list(value)

    def get_value(value):
        primary = ''
        if isinstance(value.get('a'), list):
            primary = value.get('a')[0]
        else:
            primary = value.get('a')
        return {
            'primary': primary,
            'secondary': value.get('b'),
            'deleted': value.get('c'),
        }

    collections = self.get('collections', [])

    for val in value:
        collections.append(get_value(val))

    contains_list = False
    for element in collections:
        for k, v in enumerate(element):
            if isinstance(element[v], list):
                contains_list = True
                break
    if contains_list:
        return strip_empty_values(collections)
    else:
        return dedupe_list_of_dicts(collections)
Esempio n. 7
0
def free_keywords(self, key, value):
    """Free keywords."""
    value = utils.force_list(value)

    def get_value(value):
        return {
            'value': value.get('a'),
            'source': value.get('9'),
        }

    free_keywords = self.get('free_keywords', [])
    for val in value:
        free_keywords.append(get_value(val))

    return dedupe_list_of_dicts(free_keywords)
Esempio n. 8
0
def external_system_numbers(self, key, value):
    """System Control Number."""
    value = utils.force_list(value)

    def get_value(value):
        return {
            'value': value.get('a'),
            'institute': value.get('9'),
            'obsolete': bool(value.get('z')),
        }

    external_system_numbers = self.get('external_system_numbers', [])

    for val in value:
        external_system_numbers.append(get_value(val))
    return dedupe_list_of_dicts(external_system_numbers)
Esempio n. 9
0
def urls(self, key, value):
    """URL to external resource."""
    self.setdefault('urls', [])

    description = value.get('y')
    if isinstance(description, (list, tuple)):
        description = description[0]

    _urls = utils.force_list(value.get('u'))

    if _urls:
        for _url in _urls:
            self['urls'].append({
                'description': description,
                'value': _url,
            })

        self['urls'] = dedupe_list_of_dicts(self['urls'])
Esempio n. 10
0
def urls(self, key, value):
    """URL to external resource."""
    self.setdefault('urls', [])

    description = value.get('y')
    if isinstance(description, (list, tuple)):
        description = description[0]

    _urls = utils.force_list(value.get('u'))

    if _urls:
        for _url in _urls:
            self['urls'].append({
                'description': description,
                'value': _url,
            })

        self['urls'] = dedupe_list_of_dicts(self['urls'])
Esempio n. 11
0
def thesaurus_terms(self, key, value):
    """Controlled keywords."""
    value = utils.force_list(value)

    def get_value(value):
        try:
            energy_range = int(value.get('e'))
        except (TypeError, ValueError):
            energy_range = None
        return {
            'keyword': value.get('a'),
            'energy_range': energy_range,
            'classification_scheme': value.get('2'),
        }

    thesaurus_terms = self.get('thesaurus_terms', [])

    for element in value:
        thesaurus_terms.append(get_value(element))

    return dedupe_list_of_dicts(thesaurus_terms)
Esempio n. 12
0
def collaboration(self, key, value):
    """Added Entry-Corporate Name."""
    value = utils.force_list(value)

    def get_value(value):
        recid = None
        if '0' in value:
            try:
                recid = int(value.get('0'))
            except:  # noqa todo: implement proper exception handling (E722 do not use bare except)
                pass
        return {
            'value': value.get('g'),
            'record': get_record_ref(recid, 'experiments')
        }
    collaboration = self.get('collaboration', [])

    filtered_value = dedupe_list_of_dicts(value)
    for element in filtered_value:
        collaboration.append(get_value(element))

    return collaboration