Пример #1
0
def special_coded_dates(self, key, value):
    """Special Coded Dates."""
    return {
        'death_date': value.get('g'),
        'birth_date': value.get('f'),
        'beginning_or_single_date_created': value.get('k'),
        'source_of_information': utils.force_list(
            value.get('v')
        ),
        'ending_date_created': value.get('l'),
        'single_or_starting_date_for_aggregated_content': value.get('o'),
        'establishment_date': value.get('q'),
        'ending_date_for_aggregated_content': value.get('p'),
        'start_period': value.get('s'),
        'source_of_date_scheme': value.get('2'),
        'uniform_resource_identifier': utils.force_list(
            value.get('u')
        ),
        'end_period': value.get('t'),
        'linkage': value.get('6'),
        'field_link_and_sequence_number': utils.force_list(
            value.get('8')
        ),
        'termination_date': value.get('r'),
    }
Пример #2
0
def see_also_from_tracing_medium_of_performance_term(self, key, value):
    """See Also From Tracing-Medium of Performance Term."""
    field_map = {
        'a': 'medium_of_performance_term',
        'i': 'relationship_information',
        'w': 'control_subfield',
        '0': 'authority_record_control_number_or_standard_number',
        '4': 'relationship_code',
        '5': 'institution_to_which_field_applies',
        '6': 'linkage',
        '8': 'field_link_and_sequence_number',
    }
    order = utils.map_order(field_map, value)

    return {
        '__order__': tuple(order) if len(order) else None,
        'medium_of_performance_term': value.get('a'),
        'relationship_information': utils.force_list(
            value.get('i')
        ),
        'authority_record_control_number_or_standard_number': utils.force_list(
            value.get('0')
        ),
        'institution_to_which_field_applies': utils.force_list(
            value.get('5')
        ),
        'relationship_code': utils.force_list(
            value.get('4')
        ),
        'control_subfield': value.get('w'),
        'linkage': value.get('6'),
        'field_link_and_sequence_number': utils.force_list(
            value.get('8')
        ),
    }
Пример #3
0
def added_entry_uncontrolled_related_analytical_title(self, key, value):
    """Added Entry-Uncontrolled Related/Analytical Title."""
    indicator_map1 = {str(x): str(x) for x in range(10)}
    indicator_map2 = {"2": "Analytical entry", "_": "No information provided"}
    field_map = {
        "a": "uncontrolled_related_analytical_title",
        "h": "medium",
        "5": "institution_to_which_field_applies",
        "8": "field_link_and_sequence_number",
        "p": "name_of_part_section_of_a_work",
        "n": "number_of_part_section_of_a_work",
        "6": "linkage",
    }

    order = utils.map_order(field_map, value)

    if key[3] in indicator_map1:
        order.append("nonfiling_characters")

    if key[4] in indicator_map2:
        order.append("type_of_added_entry")

    return {
        "__order__": tuple(order) if len(order) else None,
        "uncontrolled_related_analytical_title": value.get("a"),
        "medium": value.get("h"),
        "institution_to_which_field_applies": value.get("5"),
        "field_link_and_sequence_number": utils.force_list(value.get("8")),
        "name_of_part_section_of_a_work": utils.force_list(value.get("p")),
        "number_of_part_section_of_a_work": utils.force_list(value.get("n")),
        "linkage": value.get("6"),
        "nonfiling_characters": indicator_map1.get(key[3]),
        "type_of_added_entry": indicator_map2.get(key[4]),
    }
Пример #4
0
def index_term_uncontrolled(self, key, value):
    """Index Term-Uncontrolled."""
    indicator_map1 = {
        "#": "No information provided",
        "0": "No level specified",
        "1": "Primary",
        "2": "Secondary"}
    indicator_map2 = {
        "#": "No information provided",
        "0": "Topical term",
        "1": "Personal name",
        "2": "Corporate name",
        "3": "Meeting name",
        "4": "Chronological term",
        "5": "Geographic name",
        "6": "Genre/form term"}
    return {
        'uncontrolled_term': utils.force_list(
            value.get('a')
        ),
        'field_link_and_sequence_number': utils.force_list(
            value.get('8')
        ),
        'linkage': value.get('6'),
        'institute_of_the_uncontrolled_term': value.get('9'),
        'level_of_index_term': indicator_map1.get(key[3]),
        'type_of_term_or_name': indicator_map2.get(key[4]),
    }
Пример #5
0
def added_entry_geographic_name(self, key, value):
    """Added Entry-Geographic Name."""
    field_map = {
        "e": "relator_term",
        "a": "geographic_name",
        "8": "field_link_and_sequence_number",
        "3": "materials_specified",
        "0": "authority_record_control_number",
        "2": "source_of_heading_or_term",
        "4": "relator_code",
        "6": "linkage",
    }

    order = utils.map_order(field_map, value)

    return {
        "__order__": tuple(order) if len(order) else None,
        "relator_term": utils.force_list(value.get("e")),
        "geographic_name": value.get("a"),
        "field_link_and_sequence_number": utils.force_list(value.get("8")),
        "materials_specified": value.get("3"),
        "authority_record_control_number": utils.force_list(value.get("0")),
        "source_of_heading_or_term": value.get("2"),
        "relator_code": utils.force_list(value.get("4")),
        "linkage": value.get("6"),
    }
Пример #6
0
def dewey_decimal_call_number(self, key, value):
    """Dewey Decimal Call Number."""
    indicator_map1 = {
        "0": "Full",
        "1": "Abridged",
        "7": "Other edition specified in subfield $2"}
    indicator_map2 = {
        "#": "No information provided",
        "0": "Assigned by LC",
        "4": "Assigned by agency other than LC"}
    return {
        'classification_number': value.get('a'),
        'item_number': value.get('b'),
        'volumes_dates_to_which_call_number_applies': value.get('d'),
        'edition_number': value.get('2'),
        'institution_to_which_field_applies': utils.force_list(
            value.get('5')
        ),
        'linkage': value.get('6'),
        'field_link_and_sequence_number': utils.force_list(
            value.get('8')
        ),
        'type_of_edition': indicator_map1.get(key[3]),
        'source_of_call_number': indicator_map2.get(key[4]),
    }
Пример #7
0
def deleted_heading_information(self, key, value):
    """Deleted Heading Information."""
    field_map = {
        'a': 'replacement_heading',
        'i': 'explanatory_text',
        '0': 'replacement_authority_record_control_number',
        '6': 'linkage',
        '8': 'field_link_and_sequence_number',
    }
    order = utils.map_order(field_map, value)

    return {
        '__order__': tuple(order) if len(order) else None,
        'replacement_heading': utils.force_list(
            value.get('a')
        ),
        'replacement_authority_record_control_number': utils.force_list(
            value.get('0')
        ),
        'explanatory_text': utils.force_list(
            value.get('i')
        ),
        'field_link_and_sequence_number': utils.force_list(
            value.get('8')
        ),
        'linkage': value.get('6'),
    }
Пример #8
0
def restrictions_on_access_note(self, key, value):
    """Restrictions on Access Note."""
    indicator_map1 = {"#": "No information provided",
                      "0": "No restrictions", "1": "Restrictions apply"}
    return {
        'terms_governing_access': utils.force_list(
            value.get('a')
        ),
        'physical_access_provisions': value.get('c'),
        'jurisdiction': value.get('b'),
        'authorization': value.get('e'),
        'authorized_users': value.get('d'),
        'standardized_terminology_for_access_restriction': value.get('f'),
        'materials_specified': utils.force_list(
            value.get('3')
        ),
        'source_of_term': utils.force_list(
            value.get('2')
        ),
        'institution_to_which_field_applies': utils.force_list(
            value.get('5')
        ),
        'linkage': utils.force_list(
            value.get('6')
        ),
        'field_link_and_sequence_number': value.get('8'),
        'uniform_resource_identifier': value.get('u'),
        'restriction': indicator_map1.get(key[3]),
    }
Пример #9
0
def other_standard_identifier(self, key, value):
    """Other Standard Identifier."""
    indicator_map1 = {
        "0": "International Standard Recording Code",
        "1": "Universal Product Code",
        "2": "International Standard Music Number",
        "3": "International Article Number",
        "4": "Serial Item and Contribution Identifier",
        "7": "Source specified in subfield $2",
        "8": "Unspecified type of standard number or code"}
    indicator_map2 = {
        "#": "No information provided",
        "0": "No difference",
        "1": "Difference"}
    return {
        'standard_number_or_code': value.get('a'),
        'terms_of_availability': value.get('c'),
        'additional_codes_following_the_standard_number_or_code': value.get(
            'd'),
        'qualifying_information': utils.force_list(
            value.get('q')),
        'source_of_number_or_code': value.get('2'),
        'linkage': value.get('6'),
        'field_link_and_sequence_number': utils.force_list(
            value.get('8')),
        'canceled_invalid_standard_number_or_code': utils.force_list(
            value.get('z')),
        'type_of_standard_number_or_code': indicator_map1.get(
            key[3]),
        'difference_indicator': indicator_map2.get(
            key[4]),
    }
Пример #10
0
def series_statement_added_entry_title(self, key, value):
    """Series Statement/Added Entry-Title."""
    indicator_map2 = {
        "0": "No nonfiling characters",
        "1": "Number of nonfiling characters",
        "2": "Number of nonfiling characters",
        "3": "Number of nonfiling characters",
        "4": "Number of nonfiling characters",
        "5": "Number of nonfiling characters",
        "6": "Number of nonfiling characters",
        "7": "Number of nonfiling characters",
        "8": "Number of nonfiling characters",
        "9": "Number of nonfiling characters"}
    return {
        'title': value.get('a'),
        'international_standard_serial_number': value.get('x'),
        'name_of_part_section_of_a_work': utils.force_list(
            value.get('p')
        ),
        'volume_sequential_designation': value.get('v'),
        'number_of_part_section_of_a_work': utils.force_list(
            value.get('n')
        ),
        'authority_record_control_number': utils.force_list(
            value.get('0')
        ),
        'bibliographic_record_control_number': utils.force_list(
            value.get('w')
        ),
        'linkage': value.get('6'),
        'field_link_and_sequence_number': utils.force_list(
            value.get('8')
        ),
        'nonfiling_characters': indicator_map2.get(key[4]),
    }
Пример #11
0
def cumulative_index_finding_aids_note(self, key, value):
    """Cumulative Index/Finding Aids Note."""
    indicator_map1 = {
        "#": "Indexes",
        "0": "Finding aids",
        "8": "No display constant generated"}
    return {
        'cumulative_index_finding_aids_note': utils.force_list(
            value.get('a')
        ),
        'degree_of_control': utils.force_list(
            value.get('c')
        ),
        'availability_source': value.get('b'),
        'bibliographic_reference': utils.force_list(
            value.get('d')
        ),
        'materials_specified': utils.force_list(
            value.get('3')
        ),
        'uniform_resource_identifier': value.get('u'),
        'linkage': utils.force_list(
            value.get('6')
        ),
        'field_link_and_sequence_number': value.get('8'),
        'display_constant_controller': indicator_map1.get(key[3]),
    }
Пример #12
0
def parse_institution_address(address, city, state_province,
                              country, postal_code, country_code):
    """Parse an institution address."""
    state_province = match_us_state(state_province) or state_province

    postal_code = force_list(postal_code)
    country = force_list(country)
    country_code = match_country_code(country_code)

    if isinstance(postal_code, (tuple, list)):
        postal_code = ', '.join(postal_code)

    if isinstance(city, (tuple, list)):
        city = ', '.join(city)

    if isinstance(country, (tuple, list)):
        country = ', '.join(set(country))

    if not country_code and country:
        country_code = match_country_name_to_its_code(country)

    if not country_code and state_province.startswith('US-'):
        country_code = 'US'

    return {
        'original_address': force_list(address),
        'city': city,
        'state': state_province,
        'country': country,
        'postal_code': postal_code,
        'country_code': country_code,
    }
Пример #13
0
def translation_of_title_by_cataloging_agency(self, key, value):
    """Translation of Title by Cataloging Agency."""
    indicator_map1 = {"0": "No added entry", "1": "Added entry"}
    indicator_map2 = {
        "0": "No nonfiling characters",
        "1": "Number of nonfiling characters",
        "2": "Number of nonfiling characters",
        "3": "Number of nonfiling characters",
        "4": "Number of nonfiling characters",
        "5": "Number of nonfiling characters",
        "6": "Number of nonfiling characters",
        "7": "Number of nonfiling characters",
        "8": "Number of nonfiling characters",
        "9": "Number of nonfiling characters"}
    return {
        'title': value.get('a'),
        'statement_of_responsibility': value.get('c'),
        'remainder_of_title': value.get('b'),
        'medium': value.get('h'),
        'number_of_part_section_of_a_work': utils.force_list(
            value.get('n')
        ),
        'name_of_part_section_of_a_work': utils.force_list(
            value.get('p')
        ),
        'linkage': value.get('6'),
        'language_code_of_translated_title': value.get('y'),
        'field_link_and_sequence_number': utils.force_list(
            value.get('8')
        ),
        'title_added_entry': indicator_map1.get(key[3]),
        'nonfiling_characters': indicator_map2.get(key[4]),
    }
Пример #14
0
def security_classification_control(self, key, value):
    """Security Classification Control."""
    indicator_map1 = {
        "0": "Document",
        "1": "Title",
        "2": "Abstract",
        "3": "Contents note",
        "4": "Author",
        "5": "Record",
        "8": "None of the above"}
    return {
        'security_classification': value.get('a'),
        'external_dissemination_information': utils.force_list(
            value.get('c')
        ),
        'handling_instructions': utils.force_list(
            value.get('b')
        ),
        'classification_system': value.get('e'),
        'downgrading_or_declassification_event': value.get('d'),
        'downgrading_date': value.get('g'),
        'country_of_origin_code': value.get('f'),
        'declassification_date': value.get('h'),
        'authorization': utils.force_list(
            value.get('j')
        ),
        'linkage': value.get('6'),
        'field_link_and_sequence_number': utils.force_list(
            value.get('8')
        ),
        'controlled_element': indicator_map1.get(key[3]),
    }
Пример #15
0
def normalized_date_and_sequential_designation(self, key, value):
    """Normalized Date and Sequential Designation."""
    indicator_map1 = {
        "#": "No information provided",
        "0": "Starting information",
        "1": "Ending information"}
    indicator_map2 = {"#": "Not specified", "0": "Closed", "1": "Open"}
    return {
        'first_level_of_enumeration': value.get('a'),
        'nonpublic_note': utils.force_list(
            value.get('x')
        ),
        'third_level_of_enumeration': value.get('c'),
        'second_level_of_enumeration': value.get('b'),
        'fifth_level_of_enumeration': value.get('e'),
        'fourth_level_of_enumeration': value.get('d'),
        'alternative_numbering_scheme_first_level_of_enumeration': value.get('g'),
        'sixth_level_of_enumeration': value.get('f'),
        'first_level_of_chronology': value.get('i'),
        'alternative_numbering_scheme_second_level_of_enumeration': value.get('h'),
        'third_level_of_chronology': value.get('k'),
        'second_level_of_chronology': value.get('j'),
        'alternative_numbering_scheme_chronology': value.get('m'),
        'fourth_level_of_chronology': value.get('l'),
        'first_level_textual_designation': value.get('u'),
        'linkage': value.get('6'),
        'field_link_and_sequence_number': value.get('8'),
        'public_note': utils.force_list(
            value.get('z')
        ),
        'first_level_of_chronology_issuance': value.get('v'),
        'start_end_designator': indicator_map1.get(key[3]),
        'state_of_issuance': indicator_map2.get(key[4]),
    }
Пример #16
0
def classification_numbers_assigned_in_canada(self, key, value):
    """Classification Numbers Assigned in Canada."""
    indicator_map1 = {"#": "Information not provided",
                      "0": "Work held by LAC", "1": "Work not held by LAC"}
    indicator_map2 = {
        "0": "LC-based call number assigned by LAC",
        "1": "Complete LC class number assigned by LAC",
        "2": "Incomplete LC class number assigned by LAC",
        "3": "LC-based call number assigned by the contributing library",
        "4": "Complete LC class number assigned by the contributing library",
        "5": "Incomplete LC class number assigned by the contributing library",
        "6": "Other call number assigned by LAC",
        "7": "Other class number assigned by LAC",
        "8": "Other call number assigned by the contributing library",
        "9": "Other class number assigned by the contributing library"}
    return {
        'classification_number': utils.force_list(
            value.get('a')),
        'field_link_and_sequence_number': value.get('8'),
        'source_of_call_class_number': utils.force_list(
            value.get('2')),
        'item_number': utils.force_list(
            value.get('b')),
        'linkage': utils.force_list(
            value.get('6')),
        'existence_in_lac_collection': indicator_map1.get(
            key[3]),
        'type_completeness_source_of_class_call_number': indicator_map2.get(
            key[4]),
    }
Пример #17
0
def copyright_or_legal_deposit_number(self, key, value):
    """Copyright or Legal Deposit Number."""
    indicator_map2 = {
        "#": "Copyright or legal deposit number",
        "8": "No display constant generated"}
    return {
        'copyright_or_legal_deposit_number': value.get('a'),
        'assigning_agency': utils.force_list(
            value.get('b')
        ),
        'date': utils.force_list(
            value.get('d')
        ),
        'display_text': utils.force_list(
            value.get('i')
        ),
        'source': utils.force_list(
            value.get('2')
        ),
        'linkage': utils.force_list(
            value.get('6')
        ),
        'field_link_and_sequence_number': value.get('8'),
        'canceled_invalid_copyright_or_legal_deposit_number': value.get('z'),
        'display_constant_controller': indicator_map2.get(key[4]),
    }
Пример #18
0
def publisher_number(self, key, value):
    """Publisher Number."""
    indicator_map1 = {
        "0": "Issue number",
        "1": "Matrix number",
        "2": "Plate number",
        "3": "Other music number",
        "4": "Videorecording number",
        "5": "Other publisher number"}
    indicator_map2 = {"0": "No note, no added entry", "1": "Note, added entry",
                      "2": "Note, no added entry", "3": "No note, added entry"}
    return {
        'publisher_number': utils.force_list(
            value.get('a')
        ),
        'field_link_and_sequence_number': value.get('8'),
        'source': utils.force_list(
            value.get('b')
        ),
        'qualifying_information': value.get('q'),
        'linkage': utils.force_list(
            value.get('6')
        ),
        'type_of_publisher_number': indicator_map1.get(key[3]),
        'note_added_entry_controller': indicator_map2.get(key[4]),
    }
Пример #19
0
def complex_linking_entry_data(self, key, value):
    """Complex Linking Entry Data."""
    indicator_map2 = {
        "0": "Library of Congress Subject Headings",
        "1": "LC subject headings for children\u0027s literature",
        "2": "Medical Subject Headings",
        "3": "National Agricultural Library subject authority file",
        "4": "Source not specified",
        "5": "Canadian Subject Headings",
        "6": "R\\xc3\\xa9pertoire de vedettes-mati\\xc3\\xa8re",
        "7": "Source specified in subfield $2"}
    return {
        'heading_referred_to': utils.force_list(
            value.get('a')
        ),
        'explanatory_text': utils.force_list(
            value.get('i')
        ),
        'source_of_heading_or_term': value.get('2'),
        'institution_to_which_field_applies': utils.force_list(
            value.get('5')
        ),
        'relationship_code': utils.force_list(
            value.get('4')
        ),
        'linkage': value.get('6'),
        'field_link_and_sequence_number': utils.force_list(
            value.get('8')
        ),
        'thesaurus': indicator_map2.get(key[4]),
    }
Пример #20
0
def established_heading_linking_entry_meeting_name(self, key, value):
    """Established Heading Linking Entry-Meeting Name."""
    indicator_map1 = {
        "0": "Inverted name",
        "1": "Jurisdiction name",
        "2": "Name in direct order"}
    indicator_map2 = {
        "0": "                  Library of Congress Subject Headings",
        "1": "LC subject headings for children\u0027s literature",
        "2": "                  Medical Subject Headings",
        "3": "National Agricultural Library subject authority file",
        "4": "Source not specified",
        "5": "                  Canadian Subject Headings",
        "6": "                  R\\xc3\\xa9pertoire de vedettes-mati\\xc3\\xa8re",
        "7": "Source specified in subfield $2"}
    return {
        'authority_record_control_number_or_standard_number': utils.force_list(
            value.get('0')), 'source_of_heading_or_term': value.get('2'), 'institution_to_which_field_applies': utils.force_list(
            value.get('5')), 'relationship_code': utils.force_list(
                value.get('4')), 'linkage': value.get('6'), 'field_link_and_sequence_number': utils.force_list(
                    value.get('8')), 'meeting_name_or_jurisdiction_name_as_entry_element': value.get('a'), 'location_of_meeting': utils.force_list(
                        value.get('c')), 'subordinate_unit': utils.force_list(
                            value.get('e')), 'date_of_meeting': value.get('d'), 'miscellaneous_information': utils.force_list(
                                value.get('g')), 'date_of_a_work': value.get('f'), 'relationship_information': utils.force_list(
                                    value.get('i')), 'medium': value.get('h'), 'form_subheading': utils.force_list(
                                        value.get('k')), 'relator_term': utils.force_list(
                                            value.get('j')), 'language_of_a_work': value.get('l'), 'number_of_part_section_meeting': utils.force_list(
                                                value.get('n')), 'name_of_meeting_following_jurisdiction_name_entry_element': value.get('q'), 'name_of_part_section_of_a_work': utils.force_list(
                                                    value.get('p')), 'version': value.get('s'), 'title_of_a_work': value.get('t'), 'control_subfield': value.get('w'), 'form_subdivision': utils.force_list(
                                                        value.get('v')), 'chronological_subdivision': utils.force_list(
                                                            value.get('y')), 'general_subdivision': utils.force_list(
                                                                value.get('x')), 'geographic_subdivision': utils.force_list(
                                                                    value.get('z')), 'type_of_meeting_name_entry_element': indicator_map1.get(
                                                                        key[3]), 'thesaurus': indicator_map2.get(
                                                                            key[4]), }
Пример #21
0
def language_code(self, key, value):
    """Language Code."""
    indicator_map1 = {
        "#": "No information provided",
        "0": "Item not a translation/does not include a translation",
        "1": "Item is or includes a translation"}
    return {
        'language_code_of_text_sound_track_or_separate_title': value.get('a'),
        'language_code_of_summary_or_abstract': value.get('b'),
        'language_code_of_librettos': value.get('e'),
        'language_code_of_sung_or_spoken_text': value.get('d'),
        'language_code_of_accompanying_material_other_than_librettos': value.get('g'),
        'language_code_of_table_of_contents': value.get('f'),
        'language_code_of_original': value.get('h'),
        'language_code_of_intermediate_translations': value.get('k'),
        'language_code_of_subtitles_or_captions': value.get('j'),
        'language_code_of_original_accompanying_materials_other_than_librettos': value.get('m'),
        'language_code_of_original_libretto': value.get('n'),
        'source_of_code': utils.force_list(
            value.get('2')),
        'linkage': utils.force_list(
            value.get('6')),
        'field_link_and_sequence_number': value.get('8'),
        'translation_indication': indicator_map1.get(
            key[3]),
    }
Пример #22
0
def dewey_decimal_classification_number(self, key, value):
    """Dewey Decimal Classification Number."""
    indicator_map1 = {"0": "Full edition", "1": "Abridged edition",
                      "7": "Other edition specified in subfield $2"}
    indicator_map2 = {
        "#": "No information provided",
        "0": "Assigned by LC",
        "4": "Assigned by agency other than LC"}
    return {
        'classification_number': value.get('a'),
        'item_number': utils.force_list(
            value.get('b')
        ),
        'standard_or_optional_designation': utils.force_list(
            value.get('m')
        ),
        'assigning_agency': utils.force_list(
            value.get('q')
        ),
        'edition_number': utils.force_list(
            value.get('2')
        ),
        'linkage': utils.force_list(
            value.get('6')
        ),
        'field_link_and_sequence_number': value.get('8'),
        'type_of_edition': indicator_map1.get(key[3]),
        'source_of_classification_number': indicator_map2.get(key[4]),
    }
Пример #23
0
def production_publication_distribution_manufacture_and_copyright_notice(
        self, key, value):
    """Production, Publication, Distribution, Manufacture, and Copyright Notice."""
    indicator_map1 = {
        "#": "Not applicable/No information provided/Earliest",
        "2": "Intervening",
        "3": "Current/latest"}
    indicator_map2 = {
        "0": "Production",
        "1": "Publication",
        "2": "Distribution",
        "3": "Manufacture",
        "4": "Copyright notice date"}
    return {
        'place_of_production_publication_distribution_manufacture': utils.force_list(
            value.get('a')
        ),
        'date_of_production_publication_distribution_manufacture_or_copyright_notice': utils.force_list(
            value.get('c')
        ),
        'name_of_producer_publisher_distributor_manufacturer': utils.force_list(
            value.get('b')
        ),
        'materials_specified': value.get('3'),
        'linkage': value.get('6'),
        'field_link_and_sequence_number': utils.force_list(
            value.get('8')
        ),
        'sequence_of_statements': indicator_map1.get(key[3]),
        'function_of_entity': indicator_map2.get(key[4]),
    }
Пример #24
0
def replacement_record_information(self, key, value):
    """Replacement Record Information."""
    field_map = {
        'a': 'replacement_title',
        'i': 'explanatory_text',
        'w': 'replacement_bibliographic_record_control_number',
        '6': 'linkage',
        '8': 'field_link_and_sequence_number',
    }

    order = utils.map_order(field_map, value)

    return {
        '__order__': tuple(order) if len(order) else None,
        'replacement_title': utils.force_list(
            value.get('a')
        ),
        'explanatory_text': utils.force_list(
            value.get('i')
        ),
        'replacement_bibliographic_record_control_number': utils.force_list(
            value.get('w')
        ),
        'linkage': value.get('6'),
        'field_link_and_sequence_number': utils.force_list(
            value.get('8')
        ),
    }
Пример #25
0
def dewey_decimal_classification_number(self, key, value):
    """Dewey Decimal Classification Number."""
    indicator_map1 = {
        "0": "Full",
        "1": "Abridged",
        "7": "Other edition specified in subfield $2"}
    indicator_map2 = {
        "0": "Assigned by LC",
        "4": "Assigned by agency other than LC"}
    return {
        'classification_number_element_single_number_or_beginning_number_of_span': value.get('a'),
        'explanatory_term': value.get('c'),
        'classification_number_element_ending_number_of_span': value.get('b'),
        'edition_number': value.get('2'),
        'institution_to_which_field_applies': utils.force_list(
            value.get('5')),
        'linkage': value.get('6'),
        'table_sequence_number_for_internal_subarrangement_or_add_table': utils.force_list(
            value.get('y')),
        'field_link_and_sequence_number': utils.force_list(
            value.get('8')),
        'table_identification_table_number': value.get('z'),
        'type_of_edition': indicator_map1.get(
            key[3]),
        'source_of_classification_number': indicator_map2.get(
            key[4]),
    }
Пример #26
0
def international_standard_serial_number(self, key, value):
    """International Standard Serial Number."""
    indicator_map1 = {
        "#": "No level specified",
        "0": "Continuing resource of international interest",
        "1": "Continuing resource not of international interest"}
    return {
        'international_standard_serial_number': utils.force_list(
            value.get('a')
        ),
        'canceled_issn_l': value.get('m'),
        'issn_l': utils.force_list(
            value.get('l')
        ),
        'source': utils.force_list(
            value.get('2')
        ),
        'linkage': utils.force_list(
            value.get('6')
        ),
        'incorrect_issn': value.get('y'),
        'field_link_and_sequence_number': value.get('8'),
        'canceled_issn': value.get('z'),
        'level_of_international_interest': indicator_map1.get(key[3]),
    }
Пример #27
0
def added_entry_uncontrolled_name(self, key, value):
    """Added Entry-Uncontrolled Name."""
    indicator_map1 = {"1": "Personal", "2": "Other", "_": "Not specified"}
    field_map = {
        "e": "relator_term",
        "a": "name",
        "4": "relator_code",
        "6": "linkage",
        "8": "field_link_and_sequence_number",
    }

    order = utils.map_order(field_map, value)

    if key[3] in indicator_map1:
        order.append("type_of_name")

    return {
        "__order__": tuple(order) if len(order) else None,
        "relator_term": utils.force_list(value.get("e")),
        "name": value.get("a"),
        "relator_code": utils.force_list(value.get("4")),
        "linkage": value.get("6"),
        "field_link_and_sequence_number": utils.force_list(value.get("8")),
        "type_of_name": indicator_map1.get(key[3]),
    }
Пример #28
0
def public_general_note(self, key, value):
    """Public General Note."""
    field_map = {
        'a': 'heading_or_subdivision_term',
        'i': 'explanatory_text',
        '5': 'institution_to_which_field_applies',
        '6': 'linkage',
        '8': 'field_link_and_sequence_number',
    }
    order = utils.map_order(field_map, value)

    return {
        '__order__': tuple(order) if len(order) else None,
        'heading_or_subdivision_term': utils.force_list(
            value.get('a')
        ),
        'field_link_and_sequence_number': utils.force_list(
            value.get('8')
        ),
        'institution_to_which_field_applies': utils.force_list(
            value.get('5')
        ),
        'explanatory_text': utils.force_list(
            value.get('i')
        ),
        'linkage': value.get('6'),
    }
Пример #29
0
def index_term_curriculum_objective(self, key, value):
    """Index Term-Curriculum Objective."""
    field_map = {
        'a': 'main_curriculum_objective',
        'b': 'subordinate_curriculum_objective',
        'c': 'curriculum_code',
        'd': 'correlation_factor',
        '2': 'source_of_term_or_code',
        '6': 'linkage',
        '8': 'field_link_and_sequence_number',
    }

    order = utils.map_order(field_map, value)

    return {
        '__order__': tuple(order) if len(order) else None,
        'main_curriculum_objective': value.get('a'),
        'subordinate_curriculum_objective': utils.force_list(
            value.get('b')
        ),
        'curriculum_code': value.get('c'),
        'correlation_factor': value.get('d'),
        'source_of_term_or_code': value.get('2'),
        'linkage': value.get('6'),
        'field_link_and_sequence_number': utils.force_list(
            value.get('8')
        ),
    }
Пример #30
0
def succeeding_entry(self, key, value):
    """Succeeding Entry."""
    indicator_map1 = {"0": "Display note", "1": "Do not display note"}
    indicator_map2 = {
        "0": "Continued by",
        "1": "Continued in part by",
        "2": "Superseded by",
        "3": "Superseded in part by",
        "4": "Absorbed by",
        "5": "Absorbed in part by",
        "6": "Split into ... and ...",
        "7": "Merged with ... to form ...",
        "8": "Changed back to"}
    return {
        'relationship_code': utils.force_list(
            value.get('4')
        ),
        'control_subfield': value.get('7'),
        'linkage': value.get('6'),
        'field_link_and_sequence_number': utils.force_list(
            value.get('8')
        ),
        'main_entry_heading': value.get('a'),
        'qualifying_information': value.get('c'),
        'edition': value.get('b'),
        'place_publisher_and_date_of_publication': value.get('d'),
        'related_parts': utils.force_list(
            value.get('g')
        ),
        'relationship_information': utils.force_list(
            value.get('i')
        ),
        'physical_description': value.get('h'),
        'series_data_for_related_item': utils.force_list(
            value.get('k')
        ),
        'material_specific_details': value.get('m'),
        'other_item_identifier': utils.force_list(
            value.get('o')
        ),
        'note': utils.force_list(
            value.get('n')
        ),
        'uniform_title': value.get('s'),
        'report_number': utils.force_list(
            value.get('r')
        ),
        'standard_technical_report_number': value.get('u'),
        'title': value.get('t'),
        'record_control_number': utils.force_list(
            value.get('w')
        ),
        'coden_designation': value.get('y'),
        'international_standard_serial_number': value.get('x'),
        'international_standard_book_number': utils.force_list(
            value.get('z')
        ),
        'note_controller': indicator_map1.get(key[3]),
        'type_of_relationship': indicator_map2.get(key[4]),
    }
Пример #31
0
def marc21_to_translated_from(self, key, value):
    """Get language.

    languages: 008 and 041 [$a, repetitive]
    """
    languages = self.get('language', [])
    unique_lang = []
    if languages != []:
        unique_lang.extend(language['value'] for language in languages)
    if language := value.get('a'):
        for lang in utils.force_list(language):
            if lang not in unique_lang:
                unique_lang.append(lang)
                languages.append({'type': 'bf:Language', 'value': lang})
Пример #32
0
def marc21_to_title(self, key, value):
    """Get title.

    title: 245$a
    without the punctuaction. If there's a $b, then 245$a : $b without the " /"
    """
    main_title = remove_punctuation(value.get('a'))
    sub_title = value.get('b')
    # responsability = value.get('c')
    if sub_title:
        main_title += ' : ' + ' : '.join(
            utils.force_list(remove_punctuation(sub_title))
        )
    return main_title
Пример #33
0
def key(self, key, value):
    """Key."""
    indicator_map1 = {
        "#": "Relationship to original unknown ",
        "0": "Original key ",
        "1": "Transposed key "}
    return {
        'key': value.get('a'),
        'field_link_and_sequence_number': utils.force_list(
            value.get('8')
        ),
        'linkage': value.get('6'),
        'key_type': indicator_map1.get(key[3]),
    }
Пример #34
0
def physical_description(self, key, value):
    """Physical Description."""
    return {
        'extent': utils.force_list(
            value.get('a')
        ),
        'dimensions': utils.force_list(
            value.get('c')
        ),
        'other_physical_details': value.get('b'),
        'accompanying_material': value.get('e'),
        'size_of_unit': utils.force_list(
            value.get('g')
        ),
        'type_of_unit': utils.force_list(
            value.get('f')
        ),
        'materials_specified': value.get('3'),
        'linkage': value.get('6'),
        'field_link_and_sequence_number': utils.force_list(
            value.get('8')
        ),
    }
Пример #35
0
def unimarclanguages(self, key, value):
    """Get languages.

    languages: 008 and 041 [$a, repetitive]
    """
    languages = utils.force_list(value.get('a'))
    to_return = []
    schema_in_bytes = resource_string('rero_ils.modules.documents.jsonschemas',
                                      'documents/document-v0.0.1.json')
    schema = loads(schema_in_bytes.decode('utf8'))
    langs = schema['properties']['language']['items']['properties']['value'][
        'enum']
    for language in languages:
        if language in langs:
            to_return.append({'language': language})

    translatedsfrom = utils.force_list(value.get('c'))
    if translatedsfrom:
        self['translatedFrom'] = []
        for translatedfrom in translatedsfrom:
            self['translatedFrom'].append(translatedfrom)

    return to_return
Пример #36
0
def immediate_source_of_acquisition_note(self, key, value):
    """Immediate Source of Acquisition Note."""
    indicator_map1 = {
        "#": "No information provided",
        "0": "Private",
        "1": "Not private"
    }
    return {
        'source_of_acquisition': value.get('a'),
        'method_of_acquisition': value.get('c'),
        'address': value.get('b'),
        'accession_number': value.get('e'),
        'date_of_acquisition': value.get('d'),
        'owner': value.get('f'),
        'purchase_price': value.get('h'),
        'type_of_unit': utils.force_list(value.get('o')),
        'extent': utils.force_list(value.get('n')),
        'materials_specified': value.get('3'),
        'institution_to_which_field_applies': value.get('5'),
        'linkage': value.get('6'),
        'field_link_and_sequence_number': utils.force_list(value.get('8')),
        'privacy': indicator_map1.get(key[3]),
    }
Пример #37
0
def marc21_to_description(self, key, value):
    """Get extent, otherMaterialCharacteristics, formats.

    extent: 300$a (the first one if many)
    otherMaterialCharacteristics: 300$b (the first one if many)
    formats: 300 [$c repetitive]
    """
    if value.get('a'):
        if not self.get('extent', None):
            self['extent'] = remove_punctuation(
                utils.force_list(value.get('a'))[0])
    if value.get('b'):
        if self.get('otherMaterialCharacteristics', []) == []:
            self['otherMaterialCharacteristics'] = remove_punctuation(
                utils.force_list(value.get('b'))[0])
    if value.get('c'):
        formats = self.get('formats', None)
        if not formats:
            data = value.get('c')
            formats = list(utils.force_list(data))
        return formats
    else:
        return None
Пример #38
0
def references(self, key, value):
    """Produce list of references."""
    value = utils.force_list(value)

    def get_value(value):
        recid = None
        number = ''
        year = ''
        if '0' in value:
            try:
                recid = int(value.get('0'))
            except:
                pass
        if 'o' in value:
            try:
                number = int(value.get('o'))
            except:
                pass
        if 'y' in value:
            try:
                year = int(value.get('y'))
            except:
                pass
        return {
            'record': inspire_dojson_utils.get_record_ref(recid, 'literature'),
            'texkey': value.get('1'),
            'doi': value.get('a'),
            'collaboration': utils.force_list(value.get('c')),
            'editors': value.get('e'),
            'authors': utils.force_list(value.get('h')),
            'misc': utils.force_list(value.get('m')),
            'number': number,
            'isbn': value.get('i'),
            'publisher': utils.force_list(value.get('p')),
            'maintitle': value.get('q'),
            'report_number': utils.force_list(value.get('r')),
            'title': utils.force_list(value.get('t')),
            'url': utils.force_list(value.get('u')),
            'journal_pubnote': utils.force_list(value.get('s')),
            'raw_reference': utils.force_list(value.get('x')),
            'year': year,
        }

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

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

    return inspire_dojson_utils.remove_duplicates_from_list(
        strip_empty_values(references))
Пример #39
0
def unimarc_languages(self, key, value):
    """Get languages.

    languages: 008 and 041 [$a, repetitive]
    """
    languages = utils.force_list(value.get('a'))
    to_return = []
    schema_in_bytes = resource_string('rero_ils.jsonschemas',
                                      'common/languages-v0.0.1.json')
    schema = jsonref.loads(schema_in_bytes.decode('utf8'))
    langs = schema['language']['enum']

    for language in languages:
        if language in langs:
            to_return.append({'value': language, 'type': 'bf:Language'})

    translatedsfrom = utils.force_list(value.get('c'))
    if translatedsfrom:
        self['translatedFrom'] = []
        for translatedfrom in translatedsfrom:
            self['translatedFrom'].append(translatedfrom)

    return to_return
Пример #40
0
def dewey_decimal_call_number(self, key, value):
    """Dewey Decimal Call Number."""
    indicator_map1 = {
        "0": "Full",
        "1": "Abridged",
        "7": "Other edition specified in subfield $2"
    }
    indicator_map2 = {
        "#": "No information provided",
        "0": "Assigned by LC",
        "4": "Assigned by agency other than LC"
    }
    return {
        'classification_number': value.get('a'),
        'item_number': value.get('b'),
        'volumes_dates_to_which_call_number_applies': value.get('d'),
        'edition_number': value.get('2'),
        'institution_to_which_field_applies': utils.force_list(value.get('5')),
        'linkage': value.get('6'),
        'field_link_and_sequence_number': utils.force_list(value.get('8')),
        'type_of_edition': indicator_map1.get(key[3]),
        'source_of_call_number': indicator_map2.get(key[4]),
    }
Пример #41
0
def other_distinguishing_characteristics_of_work_or_expression(self, key, value):
    """Other Distinguishing Characteristics of Work or Expression."""
    field_map = {
        "a": "other_distinguishing_characteristic",
        "u": "uniform_resource_identifier",
        "v": "source_of_information",
        "0": "record_control_number",
        "2": "source_of_term",
        "6": "linkage",
        "8": "field_link_and_sequence_number",
    }
    order = utils.map_order(field_map, value)

    return {
        "__order__": tuple(order) if len(order) else None,
        "other_distinguishing_characteristic": utils.force_list(value.get("a")),
        "source_of_information": utils.force_list(value.get("v")),
        "record_control_number": utils.force_list(value.get("0")),
        "source_of_term": value.get("2"),
        "uniform_resource_identifier": utils.force_list(value.get("u")),
        "linkage": value.get("6"),
        "field_link_and_sequence_number": utils.force_list(value.get("8")),
    }
Пример #42
0
def dois(self, key, value):
    """Translates dois fields."""
    _identifiers = self.get("identifiers", [])
    dois_url_prefix = current_app.config['CDS_ILS_DOI_URL_PREFIX']

    def _clean_doi_access(subfield):
        return subfield.lower().replace("(open access)", "").strip()

    def clean_material(subfield_q):
        return re.sub(r'\([^)]*\)', '', subfield_q).strip()

    def create_eitem(subfield_a, subfield_q):
        eitems_external = self["_migration"]["eitems_external"]
        open_access = False
        if subfield_q:
            open_access = "open access" in subfield_q.lower()
            subfield_q = _clean_doi_access(subfield_q)
        eitem = {
            "url": {
                "description": subfield_q or "e-book",
                "value": dois_url_prefix.format(doi=subfield_a),
            },
            "open_access": open_access
        }
        eitems_external.append(eitem)

    for v in force_list(value):
        subfield_q = clean_val("q", v, str)
        subfield_a = clean_val("a", v, str, req=True)
        create_eitem(subfield_a=subfield_a, subfield_q=subfield_q)
        if subfield_q:
            subfield_q = clean_material(subfield_q)

        # vocabulary controlled
        material = mapping(
            IDENTIFIERS_MEDIUM_TYPES,
            subfield_q,
            raise_exception=True,
        )
        doi = {
            "value": subfield_a,
            "material": material,
            "scheme": "DOI",
        }
        if doi not in _identifiers:
            _identifiers.append(doi)

    self["_migration"]["eitems_has_external"] = True

    return _identifiers
Пример #43
0
def title_variation(self, key, value):
    """Title variation."""
    value = utils.force_list(value)

    def get_value(value):
        return value.get('a')

    title_variation_list = self.get('title_variation', [])

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

    return inspire_dojson_utils.remove_duplicates_from_list(
        title_variation_list)
Пример #44
0
def unimarctitle(self, key, value):
    """Get title.

    title: 200$a
    If there's a $e, then 245$a : $e
    """
    main_title = value.get('a')
    sub_title = value.get('e')
    # responsability = value.get('c')
    if sub_title:
        main_title += ' : ' + ' : '.join(
            utils.force_list(sub_title)
        )
    return main_title
Пример #45
0
def creator_contributor_characteristics(self, key, value):
    """Creator/Contributor Characteristics."""
    return {
        'creator_contributor_term': value.get('a'),
        'creator_contributor_code': value.get('b'),
        'demographic_group_term': utils.force_list(
            value.get('m')
        ),
        'demographic_group_code': utils.force_list(
            value.get('n')
        ),
        'authority_record_control_number_or_standard_number': value.get('0'),
        'materials_specified': utils.force_list(
            value.get('3')
        ),
        'source': utils.force_list(
            value.get('2')
        ),
        'linkage': utils.force_list(
            value.get('6')
        ),
        'field_link_and_sequence_number': value.get('8'),
    }
Пример #46
0
def heading_genre_form_term(self, key, value):
    """Heading-Genre/Form Term."""
    field_map = {
        "a": "genre_form_term",
        "v": "form_subdivision",
        "x": "general_subdivision",
        "y": "chronological_subdivision",
        "z": "geographic_subdivision",
        "6": "linkage",
        "8": "field_link_and_sequence_number",
    }
    order = utils.map_order(field_map, value)

    return {
        "__order__": tuple(order) if len(order) else None,
        "genre_form_term": value.get("a"),
        "general_subdivision": utils.force_list(value.get("x")),
        "linkage": value.get("6"),
        "form_subdivision": utils.force_list(value.get("v")),
        "chronological_subdivision": utils.force_list(value.get("y")),
        "field_link_and_sequence_number": utils.force_list(value.get("8")),
        "geographic_subdivision": utils.force_list(value.get("z")),
    }
Пример #47
0
def immediate_source_of_acquisition_note(self, key, value):
    """Immediate Source of Acquisition Note."""
    return {
        'source_of_acquisition': value.get('a'),
        'method_of_acquisition': value.get('c'),
        'address': value.get('b'),
        'accession_number': value.get('e'),
        'date_of_acquisition': value.get('d'),
        'owner': value.get('f'),
        'purchase_price': value.get('h'),
        'type_of_unit': utils.force_list(
            value.get('o')
        ),
        'extent': utils.force_list(
            value.get('n')
        ),
        'materials_specified': value.get('3'),
        'institution_to_which_field_applies': value.get('5'),
        'linkage': value.get('6'),
        'field_link_and_sequence_number': utils.force_list(
            value.get('8')
        ),
    }
Пример #48
0
def occupation(self, key, value):
    """Occupation."""
    return {
        'occupation': utils.force_list(
            value.get('a')
        ),
        'source_of_information': utils.force_list(
            value.get('v')
        ),
        'record_control_number': utils.force_list(
            value.get('0')
        ),
        'start_period': value.get('s'),
        'source_of_term': value.get('2'),
        'uniform_resource_identifier': utils.force_list(
            value.get('u')
        ),
        'end_period': value.get('t'),
        'linkage': value.get('6'),
        'field_link_and_sequence_number': utils.force_list(
            value.get('8')
        ),
    }
Пример #49
0
def marc21_to_subjects(self, key, value):
    """Get subjects.

    subjects: 6xx [duplicates could exist between several vocabularies,
        if possible deduplicate]
    """
    subjects = self.get('subjects', [])
    subfields_a = utils.force_list(value.get('a'))
    if subfields_a:
        for subfield_a in subfields_a:
            if subfield_a not in subjects:
                subjects.append(subfield_a)
        if subjects:
            self['subjects'] = subjects
Пример #50
0
def sound_characteristics(self, key, value):
    """Sound Characteristics."""
    return {
        'type_of_recording': value.get('a'),
        'playing_speed': value.get('c'),
        'recording_medium': value.get('b'),
        'track_configuration': value.get('e'),
        'groove_characteristic': value.get('d'),
        'configuration_of_playback_channels': value.get('g'),
        'tape_configuration': value.get('f'),
        'special_playback_characteristics': value.get('h'),
        'authority_record_control_number_or_standard_number': value.get('0'),
        'materials_specified': utils.force_list(
            value.get('3')
        ),
        'source': utils.force_list(
            value.get('2')
        ),
        'linkage': utils.force_list(
            value.get('6')
        ),
        'field_link_and_sequence_number': value.get('8'),
    }
Пример #51
0
def national_bibliographic_agency_control_number(self, key, value):
    """National Bibliographic Agency Control Number."""
    field_map = {
        'a': 'record_control_number',
        'z': 'canceled_or_invalid_record_control_number',
        '2': 'source',
        '8': 'field_link_and_sequence_number',
    }
    order = utils.map_order(field_map, value)

    return {
        '__order__': tuple(order) if len(order) else None,
        'record_control_number': value.get('a'),
        'field_link_and_sequence_number': utils.force_list(
            value.get('8')
        ),
        'source': value.get('2'),
        'canceled_or_invalid_record_control_number': utils.force_list(
            value.get('z')
        ),
        'national_bibliographic_agency':
            value.get('2') if key[3] == '7' else 'Library and Archives Canada',
    }
Пример #52
0
def eitem(self, key, value):
    """Translate included eitems."""
    _eitem = self.get("_eitem", {})

    urls = []
    for v in force_list(value):
        urls.append(
            {
                "description": "E-book by Springer",
                "value": clean_val("u", v, str),
            }
        )
    _eitem.update({"urls": urls})
    return _eitem
Пример #53
0
def dewey_decimal_classification_number(self, key, value):
    """Dewey Decimal Classification Number."""
    indicator_map1 = {
        "0": "Full edition",
        "1": "Abridged edition",
        "7": "Other edition specified in subfield $2"
    }
    indicator_map2 = {
        "#": "No information provided",
        "0": "Assigned by LC",
        "4": "Assigned by agency other than LC"
    }
    return {
        'classification_number': utils.force_list(value.get('a')),
        'item_number': value.get('b'),
        'standard_or_optional_designation': value.get('m'),
        'assigning_agency': value.get('q'),
        'edition_number': value.get('2'),
        'linkage': value.get('6'),
        'field_link_and_sequence_number': utils.force_list(value.get('8')),
        'type_of_edition': indicator_map1.get(key[3]),
        'source_of_classification_number': indicator_map2.get(key[4]),
    }
Пример #54
0
def heading_genre_form_term(self, key, value):
    """Heading-Genre/Form Term."""
    field_map = {
        'a': 'genre_form_term',
        'v': 'form_subdivision',
        'x': 'general_subdivision',
        'y': 'chronological_subdivision',
        'z': 'geographic_subdivision',
        '6': 'linkage',
        '8': 'field_link_and_sequence_number',
    }
    order = utils.map_order(field_map, value)

    return {
        '__order__': tuple(order) if len(order) else None,
        'genre_form_term': value.get('a'),
        'general_subdivision': utils.force_list(value.get('x')),
        'linkage': value.get('6'),
        'form_subdivision': utils.force_list(value.get('v')),
        'chronological_subdivision': utils.force_list(value.get('y')),
        'field_link_and_sequence_number': utils.force_list(value.get('8')),
        'geographic_subdivision': utils.force_list(value.get('z')),
    }
Пример #55
0
def see_from_tracing_medium_of_performance_term(self, key, value):
    """See From Tracing-Medium of Performance Term."""
    field_map = {
        'a': 'medium_of_performance_term',
        'i': 'relationship_information',
        'w': 'control_subfield',
        '4': 'relationship_code',
        '5': 'institution_to_which_field_applies',
        '6': 'linkage',
        '8': 'field_link_and_sequence_number',
    }
    order = utils.map_order(field_map, value)

    return {
        '__order__': tuple(order) if len(order) else None,
        'medium_of_performance_term': value.get('a'),
        'relationship_information': utils.force_list(value.get('i')),
        'institution_to_which_field_applies': utils.force_list(value.get('5')),
        'relationship_code': utils.force_list(value.get('4')),
        'control_subfield': value.get('w'),
        'linkage': value.get('6'),
        'field_link_and_sequence_number': utils.force_list(value.get('8')),
    }
Пример #56
0
def see_also_from_tracing_geographic_name(self, key, value):
    """See Also From Tracing-Geographic Name."""
    return {
        'geographic_name': value.get('a'),
        'general_subdivision': utils.force_list(
            value.get('x')
        ),
        'miscellaneous_information': utils.force_list(
            value.get('g')
        ),
        'relationship_information': utils.force_list(
            value.get('i')
        ),
        'form_subdivision': utils.force_list(
            value.get('v')
        ),
        'authority_record_control_number_or_standard_number': utils.force_list(
            value.get('0')
        ),
        'institution_to_which_field_applies': utils.force_list(
            value.get('5')
        ),
        'relationship_code': utils.force_list(
            value.get('4')
        ),
        'control_subfield': value.get('w'),
        'linkage': value.get('6'),
        'chronological_subdivision': utils.force_list(
            value.get('y')
        ),
        'field_link_and_sequence_number': utils.force_list(
            value.get('8')
        ),
        'geographic_subdivision': utils.force_list(
            value.get('z')
        ),
    }
Пример #57
0
def time_period_of_heading(self, key, value):
    """Time Period of Heading."""
    field_map = {
        "a": "time_period_code",
        "b": "formatted_9999_bc_through_ce_time_period",
        "c": "formatted_pre_9999_bc_time_period",
        "6": "linkage",
        "8": "field_link_and_sequence_number",
    }
    order = utils.map_order(field_map, value)

    indicator_map1 = {
        "_": "Subfield $b or $c not present",
        "0": "Single date/time",
        "1": "Multiple single dates/times",
        "2": "Range of dates/times",
    }

    if key[3] in indicator_map1:
        order.append("type_of_time_period_in_subfield_b_or_c")

    return {
        "__order__":
        tuple(order) if len(order) else None,
        "time_period_code":
        utils.force_list(value.get("a")),
        "field_link_and_sequence_number":
        utils.force_list(value.get("8")),
        "formatted_pre_9999_bc_time_period":
        utils.force_list(value.get("c")),
        "formatted_9999_bc_through_ce_time_period":
        utils.force_list(value.get("b")),
        "linkage":
        value.get("6"),
        "type_of_time_period_in_subfield_b_or_c":
        indicator_map1.get(key[3]),
    }
Пример #58
0
def established_heading_linking_entry_genre_form_term(self, key, value):
    """Established Heading Linking Entry-Genre/Form Term."""
    indicator_map2 = {
        "0": "Library of Congress Subject Headings",
        "1": "LC subject headings for children's literature",
        "2": "Medical Subject Headings",
        "3": "National Agricultural Library subject authority file",
        "4": "Source not specified",
        "5": "Canadian Subject Headings",
        "6": "Répertoire de vedettes-matière",
        "7": "Source specified in subfield $2"
    }
    return {
        'genre_form_term_as_entry_element':
        value.get('a'),
        'general_subdivision':
        utils.force_list(value.get('x')),
        'relationship_information':
        utils.force_list(value.get('i')),
        'form_subdivision':
        utils.force_list(value.get('v')),
        'authority_record_control_number_or_standard_number':
        utils.force_list(value.get('0')),
        'source_of_heading_or_term':
        value.get('2'),
        'institution_to_which_field_applies':
        utils.force_list(value.get('5')),
        'relationship_code':
        utils.force_list(value.get('4')),
        'control_subfield':
        value.get('w'),
        'linkage':
        value.get('6'),
        'chronological_subdivision':
        utils.force_list(value.get('y')),
        'field_link_and_sequence_number':
        utils.force_list(value.get('8')),
        'geographic_subdivision':
        utils.force_list(value.get('z')),
        'thesaurus':
        indicator_map2.get(key[4]),
    }
Пример #59
0
def creator_contributor_characteristics(self, key, value):
    """Creator/Contributor Characteristics."""
    field_map = {
        'a': 'creator_contributor_term',
        'b': 'creator_contributor_code',
        'm': 'demographic_group_term',
        'n': 'demographic_group_code',
        '0': 'authority_record_control_number_or_standard_number',
        '2': 'source',
        '3': 'materials_specified',
        '6': 'linkage',
        '8': 'field_link_and_sequence_number',
    }
    order = utils.map_order(field_map, value)

    return {
        '__order__':
        tuple(order) if len(order) else None,
        'creator_contributor_term':
        utils.force_list(value.get('a')),
        'creator_contributor_code':
        utils.force_list(value.get('b')),
        'demographic_group_term':
        value.get('m'),
        'demographic_group_code':
        value.get('n'),
        'authority_record_control_number_or_standard_number':
        utils.force_list(value.get('0')),
        'materials_specified':
        value.get('3'),
        'source':
        value.get('2'),
        'linkage':
        value.get('6'),
        'field_link_and_sequence_number':
        utils.force_list(value.get('8')),
    }
Пример #60
0
def abbreviated_title(self, key, value):
    """Abbreviated Title."""
    indicator_map1 = {
        '0': 'No added entry',
        '1': 'Added entry',
    }

    indicator_map2 = {
        '_': 'Abbreviated key title',
        '0': 'Other abbreviated title',
    }

    field_map = {
        'a': 'abbreviated_title',
        'b': 'qualifying_information',
        '2': 'source',
        '6': 'linkage',
        '8': 'field_link_and_sequence_number',
    }

    order = utils.map_order(field_map, value)

    if key[3] in indicator_map1:
        order.append('title_added_entry')
    if key[4] in indicator_map2:
        order.append('type')

    return {
        '__order__': tuple(order) if len(order) else None,
        'abbreviated_title': value.get('a'),
        'field_link_and_sequence_number': utils.force_list(value.get('8')),
        'source': utils.force_list(value.get('2')),
        'qualifying_information': value.get('b'),
        'linkage': value.get('6'),
        'title_added_entry': indicator_map1.get(key[3]),
        'type': indicator_map2.get(key[4]),
    }