def add_names(self, data: dict, referrer=None, role=None, **kwargs): ''' Based on the presence of `auth_name` and/or `name` fields in `data`, sets the `label`, `names`, and `identifier` keys to appropriate strings/`model.Identifier` values. If the `role` string is given (e.g. 'artist'), also sets the `role_label` key to a value (e.g. 'artist “RUBENS, PETER PAUL”'). ''' data.setdefault('identifiers', []) auth_name = data.get('auth_name', '') disp_name = data.get('auth_display_name') name_type = vocab.PrimaryName if disp_name: data['identifiers'].append(vocab.Name(ident='', content=auth_name)) auth_name = disp_name name_type = vocab.Name role_label = None if self.acceptable_person_auth_name(auth_name): if role: role_label = f'{role} “{auth_name}”' data['label'] = auth_name pname = name_type( ident='', content=auth_name ) # NOTE: most of these are also vocab.SortName, but not 100%, so witholding that assertion for now if referrer: pname.referred_to_by = referrer data['identifiers'].append(pname) data.setdefault('names', []) names = [] name = data.get('name') if name: del data[ 'name'] # this will be captured in the 'names' array, so remove it here so the output isn't duplicated names.append(name) variant_names = data.get('variant_names') if variant_names: names += [n.strip() for n in variant_names.split(';')] for name in names: if role and not role_label: role_label = f'{role} “{name}”' name_kwargs = {} # name_kwargs['classified_as'] = model.Type(ident='http://vocab.getty.edu/aat/300266386', label='Personal Name') name_kwargs['classified_as'] = vocab.PersonalName if referrer: name_kwargs['referred_to_by'] = [referrer] data['names'].append((name, name_kwargs)) data.setdefault('label', name) data.setdefault('label', '(Anonymous)') if role and not role_label: role_label = f'anonymous {role}' if role: data['role_label'] = role_label
def model_term_group(record, data): record.setdefault('identifiers', []) pname = data.get('primary_name', '') sname = data.get('secondary_name', '') qual = data.get('name_qualifier') if pname and sname: name = f'{sname} {pname}' elif pname or sname: name = ''.join([pname, sname]) else: return if qual: name += f' {qual}' record.setdefault('label', name) record['identifiers'].append(vocab.Name(ident='', content=name))
def model_term_group(record, data): record.setdefault('identifiers', []) name = data.get('term_name') state = data.get('state_province') # print(f'*** PLACE: {name}') country = data.get('country', {}).get('label') if state: parent = data.get('country') # print(f'*** STATE: {state}') state = {'name': state, 'label': state, 'type': 'state'} if country: state['uri'] = self.helper.named_place_uri(country, state), state['label'] = f'{state}, {country}' record['state'] = state if name: record.setdefault('label', name) record.setdefault('name', name) record['identifiers'].append(vocab.Name(ident='', content=name))
def __call__(self, data: dict, post_sale_map, unique_catalogs, subject_genre, destruction_types_map): '''Add modeling for an object described by a sales record''' hmo = get_crom_object(data) parent = data['parent_data'] auction_data = parent.get('auction_of_lot') if auction_data: lno = str(auction_data['lot_number']) data.setdefault('identifiers', []) if not lno: warnings.warn(f'Setting empty identifier on {hmo.id}') data['identifiers'].append(vocab.LotNumber(ident='', content=lno)) else: warnings.warn(f'***** NO AUCTION DATA FOUND IN populate_object') cno = auction_data['catalog_number'] lno = auction_data['lot_number'] date = implode_date(auction_data, 'lot_sale_') lot = self.helper.shared_lot_number_from_lno( lno ) # the current key for this object; may be associated later with prev and post object keys now_key = (cno, lno, date) data['_locations'] = [] data['_events'] = [] record = self._populate_object_catalog_record(data, parent, lot, cno, parent['pi_record_no']) self._populate_object_visual_item(data, subject_genre) self._populate_object_destruction(data, parent, destruction_types_map) self.populate_object_statements(data) self._populate_object_present_location(data, now_key, destruction_types_map) self._populate_object_notes(data, parent, unique_catalogs) self._populate_object_prev_post_sales(data, now_key, post_sale_map) for p in data.get('portal', []): url = p['portal_url'] hmo.referred_to_by = vocab.WebPage(ident=url, label=url) if 'title' in data: title = data['title'] if not hasattr(hmo, '_label'): typestring = data.get('object_type', 'Object') hmo._label = f'{typestring}: “{title}”' del data['title'] shorter = truncate_with_ellipsis(title, 100) if shorter: description = vocab.Description(ident='', content=title) description.referred_to_by = record hmo.referred_to_by = description title = shorter t = vocab.PrimaryName(ident='', content=title) t.classified_as = model.Type( ident='http://vocab.getty.edu/aat/300417193', label='Title') t.referred_to_by = record data['identifiers'].append(t) for d in data.get('other_titles', []): title = d['title'] t = vocab.Name(ident='', content=title) data['identifiers'].append(t) return data