Esempio n. 1
0
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()
Esempio n. 2
0
 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
Esempio n. 3
0
 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
Esempio n. 4
0
 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
Esempio n. 5
0
 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
Esempio n. 6
0
    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)
Esempio n. 7
0
    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)
Esempio n. 8
0
    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)
Esempio n. 9
0
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()
Esempio n. 10
0
    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)