def _get_creators(self): creators = [] n = mods.Name(type='personal') np = mods.NamePart(text=self.thesis.candidate.person.get_formatted_name()) n.name_parts.append(np) r = mods.Role(type='text', text='creator') n.roles.append(r) creators.append(n) return creators
def _get_department_names(self): department_names = [] n = mods.Name(type='corporate') name_text = 'Brown University. %s' % self.thesis.candidate.department.name np = mods.NamePart(text=name_text) n.name_parts.append(np) r = mods.Role(type='text', text='sponsor') n.roles.append(r) department_names.append(n) return department_names
def _get_committee_names(self): committee_names = [] for cm in self.thesis.candidate.committee_members.all(): n = mods.Name(type='personal') np = mods.NamePart(text=cm.person.get_formatted_name()) n.name_parts.append(np) r = mods.Role(type='text', text=cm.get_role_display()) n.roles.append(r) committee_names.append(n) return committee_names
def _add_name_data(self, base_element, location_sections, data_vals): '''Method to handle more complicated name data. ''' for data in data_vals: name = mods.Name() #we're always going to be creating a name if u'type' in base_element[u'attributes']: name.type = base_element[u'attributes'][u'type'] data_divs = data for index, section in enumerate(location_sections): try: div = data_divs[index].strip() except: div = None #make sure we have data for this section (except for mods:role, which could just have a constant) if not div and section[0][u'element'] != u'mods:role': continue for element in section: #handle base name if element[ 'element'] == u'mods:namePart' and u'type' not in element[ 'attributes']: np = mods.NamePart(text=div) name.name_parts.append(np) elif element[ u'element'] == u'mods:namePart' and u'type' in element[ u'attributes']: np = mods.NamePart(text=div) np.type = element[u'attributes'][u'type'] name.name_parts.append(np) elif element['element'] == u'mods:roleTerm': role_attrs = element['attributes'] if element[u'data']: role = mods.Role(text=element['data']) else: if div: role = mods.Role(text=div) else: continue if u'type' in role_attrs: role.type = role_attrs['type'] if u'authority' in role_attrs: role.authority = role_attrs[u'authority'] name.roles.append(role) self._xml_obj.names.append(name)
def get_mods_obj(self, update=False): if self._mods_obj: #if we have mods already, and we're not updating, just return it if not update: return self._mods_obj else: #no self._mods_obj if update: raise Exception('no mods obj - can\'t update') self._mods_obj = mods.make_mods() #at this point, we want to put the form data into the mods obj (could be update or new) self._mods_obj.title_info_list = [] #clear out any old titles title = mods.TitleInfo() title.title = self._form_data['title'] if self._form_data['title_language']: title.node.set('lang', self._form_data['title_language']) self._mods_obj.title_info_list.append(title) if self._form_data['english_title']: english_title = mods.TitleInfo() english_title.title = self._form_data['english_title'] english_title.node.set('lang', 'en') self._mods_obj.title_info_list.append(english_title) if self._form_data['genre']: self._mods_obj.genres = [] #clear out any old genres genre = mods.Genre(text=self._form_data['genre'].text) genre.authority = 'aat' self._mods_obj.genres.append(genre) if self._form_data['abstract']: if not self._mods_obj.abstract: self._mods_obj.create_abstract() self._mods_obj.abstract.text = self._form_data[ 'abstract'] #overwrites old abstract if present if self._form_data['impression_date']: #clear out old dateOther data, or create originInfo if needed if self._mods_obj.origin_info: self._mods_obj.origin_info.other = [] else: self._mods_obj.create_origin_info() date_other = mods.DateOther( date=self._form_data['impression_date']) date_other.type = 'impression' self._mods_obj.origin_info.other.append(date_other) #clear out any old names: # if this is a new object, there aren't any names anyway. # if this is an update, either the new names will be put in, or they don't want any names. self._mods_obj.names = [] for p in self._person_formset_data: name = mods.Name() np = mods.NamePart(text=p['person'].name) name.name_parts.append(np) role = mods.Role(text=p['role'].text) name.roles.append(role) href = '{%s}href' % app_settings.XLINK_NAMESPACE name.node.set(href, p['person'].trp_id) self._mods_obj.names.append(name) #clear out old notes data, preserving any annotor info self._mods_obj.notes = [ note for note in self._mods_obj.notes if note.type == 'resp' ] for i in self._inscription_formset_data: note = mods.Note(text=i['text']) note.type = 'inscription' note.label = i['location'] self._mods_obj.notes.append(note) annotator_note = mods.Note(text=self._annotator) annotator_note.type = 'resp' self._mods_obj.notes.append(annotator_note) return self._mods_obj