def json2bib(jsonstring, key, type='article'): """Convert a json string into a Bibentry object.""" if not json: return data = json.loads(jsonstring) # need to remove authors field from data authors = None if 'author' in data: authors = data['author'] del data['author'] if 'issued' in data: data['year'] = str(data['issued']['date-parts'][0][0]) del data['issued'] # delete other problematic fields if 'editor' in data: del data['editor'] entry = Entry(type, fields=data) if authors: for author in authors: entry.add_person( Person(first=author['given'], last=author['family']), 'author') return Bibentry(key, entry).as_string()
def process_entry(self, entry): e = Entry(entry["type"]) for (k, v) in entry.iteritems(): if k in Person.valid_roles: for names in v: e.add_person(Person(**names), k) elif k == "type": pass else: e.fields[k] = unicode(v) return e
def process_entry(self, entry): e = Entry(entry['type']) for (k, v) in entry.iteritems(): if k in Person.valid_roles: for names in v: e.add_person(Person(**names), k) elif k == 'type': pass else: e.fields[k] = unicode(v) return e
def process_entry(self, entry): bib_entry = Entry(entry['type']) for (key, value) in entry.iteritems(): key_lower = key.lower() if key_lower in Person.valid_roles: for names in value: bib_entry.add_person(Person(**names), key) elif key_lower == 'type': pass else: bib_entry.fields[key] = unicode(value) return bib_entry
def process_entry(self, entry_type, key, fields): entry = Entry(entry_type) if key is None: key = 'unnamed-%i' % self.unnamed_entry_counter self.unnamed_entry_counter += 1 for field_name, field_value_list in fields: field_value = textutils.normalize_whitespace(self.flatten_value_list(field_value_list)) if field_name in self.person_fields: for name in split_name_list(field_value): entry.add_person(Person(name), field_name) else: entry.fields[field_name] = field_value self.data.add_entry(key, entry)
def process_entry(self, entry_type, key, fields): entry = Entry(entry_type) if key is None: key = 'unnamed-%i' % self.unnamed_entry_counter self.unnamed_entry_counter += 1 seen_fields = set() for field_name, field_value_list in fields: if field_name.lower() in seen_fields: self.handle_error(DuplicateField(key, field_name)) continue field_value = textutils.normalize_whitespace(self.flatten_value_list(field_value_list)) if field_name in self.person_fields: for name in split_name_list(field_value): entry.add_person(Person(name), field_name) else: entry.fields[field_name] = field_value seen_fields.add(field_name.lower()) self.data.add_entry(key, entry)
def data2bib(data, key, type='article'): """Convert a python dict into a Bibentry object.""" if not data: return # need to remove authors field from data authors = None if 'authors' in data: authors = data['authors'] if isinstance(authors, str): authors = split_name_list(authors) if len(authors) == 1: authors = authors[0].split(',') del data['authors'] entry = Entry(type, fields=data) if authors: for p in authors: entry.add_person(Person(p), 'author') return Bibentry(key, entry).as_string()
def process_entry(self, entry_type, key, fields): entry = Entry(entry_type) if key is None: key = 'unnamed-%i' % self.unnamed_entry_counter self.unnamed_entry_counter += 1 already_handled_person_fields = set() for field_name, field_value_list in fields: field_value = textutils.normalize_whitespace( self.flatten_value_list(field_value_list)) if field_name in self.person_fields: if field_name in already_handled_person_fields: error_message = 'entry with key {} has a duplicate {} field'.format( key, field_name) self.handle_error(DuplicatePersonField(error_message)) continue for name in split_name_list(field_value): entry.add_person(Person(name), field_name) already_handled_person_fields.add(field_name) else: entry.fields[field_name] = field_value self.data.add_entry(key, entry)