Esempio n. 1
0
 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
Esempio n. 2
0
 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
Esempio n. 3
0
 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
Esempio n. 4
0
 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)
Esempio n. 5
0
 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