def marc21_to_edition_statement(self, key, value): """Get edition statement data. editionDesignation: 250 [$a non repetitive] (without trailing /) responsibility: 250 [$b non repetitive] """ key_per_code = {'a': 'editionDesignation', 'b': 'responsibility'} def build_edition_data(code, label, index, link): data = [{'value': remove_trailing_punctuation(label)}] try: alt_gr = marc21.alternate_graphic['250'][link] subfield = \ marc21.get_subfields(alt_gr['field'])[index] data.append({ 'value': remove_trailing_punctuation(subfield), 'language': get_language_script(alt_gr['script']) }) except Exception as err: pass return data tag_link, link = get_field_link_data(value) items = get_field_items(value) index = 1 edition_data = {} subfield_selection = {'a', 'b'} for blob_key, blob_value in items: if blob_key in subfield_selection: subfield_selection.remove(blob_key) edition_data[key_per_code[blob_key]] = \ build_edition_data(blob_key, blob_value, index, link) if blob_key != '__order__': index += 1 return edition_data or None
def marc21_to_edition_statement(self, key, value): """Get edition statement data. editionDesignation: 250 [$a non repetitive] (without trailing /) responsibility: 250 [$b non repetitive] """ key_per_code = {'a': 'editionDesignation', 'b': 'responsibility'} tag_link, link = get_field_link_data(value) items = get_field_items(value) index = 1 edition_data = {} subfield_selection = {'a', 'b'} for blob_key, blob_value in items: if blob_key in subfield_selection: subfield_selection.remove(blob_key) edition_data[key_per_code[blob_key]] = \ marc21.build_value_with_alternate_graphic( '250', blob_key, blob_value, index, link, ',.', ':;/-=') if blob_key != '__order__': index += 1 return edition_data or None
def marc21_to_summary(self, key, value): """Get summary from repetitive field 520.""" key_per_code = {'a': 'label', 'c': 'source'} # parse field 520 subfields for extracting: # summary and source parts tag_link, link = get_field_link_data(value) items = get_field_items(value) index = 1 summary = {} subfield_selection = {'a', 'c'} for blob_key, blob_value in items: if blob_key in subfield_selection: subfield_selection.remove(blob_key) if blob_key == 'a': summary_data = marc21.build_value_with_alternate_graphic( '520', blob_key, blob_value, index, link, ',.', ':;/-=') else: summary_data = blob_value if summary_data: summary[key_per_code[blob_key]] = summary_data if blob_key != '__order__': index += 1 return summary or None
def build_statement(field_value, ind2): def build_agent_data(code, label, index, link): type_per_code = {'a': 'bf:Place', 'b': 'bf:Agent'} agent_data = { 'type': type_per_code[code], 'label': [{ 'value': remove_trailing_punctuation(label) }] } try: alt_gr = marc21.alternate_graphic['264'][link] subfield = \ marc21.get_subfields(alt_gr['field'])[index] agent_data['label'].append({ 'value': remove_trailing_punctuation(subfield), 'language': marc21.get_language_script(alt_gr['script']) }) except Exception as err: pass return agent_data # function build_statement start here tag_link, link = get_field_link_data(field_value) items = get_field_items(field_value) statement = [] index = 1 for blob_key, blob_value in items: if blob_key in ('a', 'b'): agent_data = build_agent_data(blob_key, blob_value, index, link) statement.append(agent_data) if blob_key != '__order__': index += 1 return statement
def marc21_to_provisionActivity(self, key, value): """Get publisher data. publisher.name: 264 [$b repetitive] (without the , but keep the ;) publisher.place: 264 [$a repetitive] (without the : but keep the ;) publicationDate: 264 [$c repetitive] (but take only the first one) """ def build_statement(field_value, ind2): def build_agent_data(code, label, index, link): type_per_code = {'a': 'bf:Place', 'b': 'bf:Agent'} agent_data = { 'type': type_per_code[code], 'label': [{ 'value': remove_trailing_punctuation(label) }] } try: alt_gr = marc21.alternate_graphic['264'][link] subfield = \ marc21.get_subfields(alt_gr['field'])[index] agent_data['label'].append({ 'value': remove_trailing_punctuation(subfield), 'language': marc21.get_language_script(alt_gr['script']) }) except Exception as err: pass return agent_data # function build_statement start here tag_link, link = get_field_link_data(field_value) items = get_field_items(field_value) statement = [] index = 1 for blob_key, blob_value in items: if blob_key in ('a', 'b'): agent_data = build_agent_data(blob_key, blob_value, index, link) statement.append(agent_data) if blob_key != '__order__': index += 1 return statement def build_place(): place = {} if marc21.cantons: place['canton'] = marc21.cantons[0] if marc21.country: place['country'] = marc21.country if place: place['type'] = 'bf:Place' return place # the function marc21_to_provisionActivity start here ind2 = key[4] type_per_ind2 = { ' ': 'bf:Publication', '0': 'bf:Production', '1': 'bf:Publication', '2': 'bf:Distribution', '3': 'bf:Manufacture' } publication = { 'type': type_per_ind2[ind2], 'statement': [], } subfields_c = utils.force_list(value.get('c', [])) if ind2 in (' ', '1'): publication['startDate'] = marc21.date['start_date'] if 'end_date' in marc21.date: publication['endDate'] = marc21.date['end_date'] if 'note' in marc21.date: publication['note'] = marc21.date['note'] place = build_place() if place: publication['place'] = [place] publication['statement'] = build_statement(value, ind2) if subfields_c: subfield_c = subfields_c[0] date = {'label': [{'value': subfield_c}], 'type': 'Date'} tag_link, link = get_field_link_data(value) try: alt_gr = marc21.alternate_graphic['264'][link] subfield = \ marc21.get_subfields(alt_gr['field'], code='c') date['label'].append({ 'value': subfield[0], 'language': marc21.get_language_script(alt_gr['script']) }) except Exception as err: pass publication['statement'].append(date) return publication or None
def marc21_to_title(self, key, value): """Get title data. The title data are extracted from the following fields: field 245: $a : non repetitive $b : non repetitive $c : non repetitive $n : repetitive $p : repetitive $6 : non repetitive field 246: $a : non repetitive $n : repetitive $p : repetitive $6 : non repetitive """ # extraction and initialization of data for further processing subfield_245_a = '' subfield_245_b = '' fields_245 = marc21.get_fields(tag='245') if fields_245: subfields_245_a = marc21.get_subfields(fields_245[0], 'a') subfields_245_b = marc21.get_subfields(fields_245[0], 'b') if subfields_245_a: subfield_245_a = subfields_245_a[0] if subfields_245_b: subfield_245_b = subfields_245_b[0] field_245_a_end_with_equal = re.search(r'\s*=\s*$', subfield_245_a) field_245_a_end_with_colon = re.search(r'\s*:\s*$', subfield_245_a) field_245_a_end_with_semicolon = re.search(r'\s*;\s*$', subfield_245_a) field_245_b_contains_equal = re.search(r'=', subfield_245_b) fields_246 = marc21.get_fields(tag='246') subfield_246_a = '' if fields_246: subfields_246_a = marc21.get_subfields(fields_246[0], 'a') if subfields_246_a: subfield_246_a = subfields_246_a[0] tag_link, link = get_field_link_data(value) items = get_field_items(value) index = 1 title_list = [] title_data = {} part_list = TitlePartList(part_number_code='n', part_name_code='p') parallel_titles = [] pararalel_title_data_list = [] pararalel_title_string_set = set() responsibility = {} # parse field 245 subfields for extracting: # main title, subtitle, parallel titles and the title parts subfield_selection = {'a', 'b', 'c', 'n', 'p'} for blob_key, blob_value in items: if blob_key in subfield_selection: value_data = marc21.build_value_with_alternate_graphic( '245', blob_key, blob_value, index, link, ',.', ':;/-=') if blob_key in {'a', 'b', 'c'}: subfield_selection.remove(blob_key) if blob_key == 'a': if value_data: title_data['mainTitle'] = value_data elif blob_key == 'b': if subfield_246_a: subtitle, parallel_titles, pararalel_title_string_set = \ extract_subtitle_and_parallel_titles_from_field_245_b( value_data, field_245_a_end_with_equal) if subtitle: title_data['subtitle'] = subtitle elif not subfield_246_a and value_data: title_data['subtitle'] = value_data elif blob_key == 'c': responsibility = build_responsibility_data(value_data) elif blob_key in ['n', 'p']: part_list.update_part(value_data, blob_key, blob_value) if blob_key != '__order__': index += 1 title_data['type'] = 'bf:Title' the_part_list = part_list.get_part_list() if the_part_list: title_data['part'] = the_part_list if title_data: title_list.append(title_data) for parallel_title in parallel_titles: title_list.append(parallel_title) # extract variant titles variant_title_list = \ marc21.build_variant_title_data(pararalel_title_string_set) for variant_title_data in variant_title_list: title_list.append(variant_title_data) # extract responsibilities if responsibility: new_responsibility = self.get('responsibilityStatement', []) for resp in responsibility: new_responsibility.append(resp) self['responsibilityStatement'] = new_responsibility return title_list or None
if subfields_245_a: subfield_245_a = subfields_245_a[0] if subfields_245_b: subfield_245_b = subfields_245_b[0] field_245_a_end_with_equal = re.search(r'\s*=\s*$', subfield_245_a) field_245_a_end_with_colon = re.search(r'\s*:\s*$', subfield_245_a) field_245_a_end_with_semicolon = re.search(r'\s*;\s*$', subfield_245_a) field_245_b_contains_equal = re.search(r'=', subfield_245_b) fields_246 = marc21.get_fields(tag='246') subfield_246_a = '' if fields_246: if subfields_246_a := marc21.get_subfields(fields_246[0], 'a'): subfield_246_a = subfields_246_a[0] tag_link, link = get_field_link_data(value) items = get_field_items(value) index = 1 title_list = [] title_data = {} part_list = TitlePartList(part_number_code='n', part_name_code='p') parallel_titles = [] pararalel_title_data_list = [] pararalel_title_string_set = set() responsibility = {} subfield_selection = {'a', 'b', 'c', 'n', 'p'} for blob_key, blob_value in items: if blob_key in subfield_selection: value_data = marc21.build_value_with_alternate_graphic( '245', blob_key, blob_value, index, link, ',.', ':;/-=')