示例#1
0
    def render(self, objects,
                     title_force_uppercase=False,
                     output_encoding=None,
                     msdos_eol_style=False,
                     omit_fields_mapping={}):
        """ Export a bunch of bibliographic entries in bibex format"""

        # This implementation here is completely bullshit from the 
        # beginning. Why is there no interface and API for getting hold
        # of the exportable items? The iterator interface here sucks.
        # This method should also work with *single* bibliographic entries.

        #request = getattr(objects[0], 'REQUEST', None)
        #if request is None:
        request = TestRequest()

        # Adapt to IBibliography if necessary/possible
        # If not, it could be ok if `entries' can be iterated over anyway.
        objects = IBibliography(objects, objects)

        found = False
        if HAVE_CMFBIB_AT:
            if IBibliographicItem.providedBy(objects):
                entries = [objects]
                found = True

        if not found:
            try:
                # We want the values from a dictionary-ish/IBibliography object
                entries = objects.itervalues()
            except AttributeError:
                # Otherwise we just iterate over what is presumably something
                # sequence-ish.
                entries = iter(objects)

        rendered = []
        for obj in entries:
            ref = queryAdapter(obj, interface=IBibliographicReference,
                                    name=self.__name__)
            if ref is None:
                # if there is no named adapter, get the default adapter
                # compatibility with older versions
                ref = IBibliographicReference(obj, None)
            if ref is None:
                continue

            # do rendering for entry
            view = getMultiAdapter((ref, request), name=self.view_name)
            omit_fields = omit_fields_mapping.get(ref.publication_type, [])
            bibtex_string = view.render(title_force_uppercase=title_force_uppercase,
                                        omit_fields=omit_fields
                                        )
            rendered.append(bibtex_string)

        rendered = ''.join(rendered)
        if msdos_eol_style:
            rendered = rendered.replace('\n', '\r\n')
        return rendered
    def render(
        self, objects, title_force_uppercase=False, output_encoding=None, msdos_eol_style=False, omit_fields_mapping={}
    ):
        """ Export a bunch of bibliographic entries in ref format"""
        request = TestRequest()
        objects = IBibliography(objects, objects)
        found = False
        if IBibliographicItem.providedBy(objects):
            entries = [objects]
            found = True

        if not found:
            try:
                # We want the values from a dictionary-ish/IBibliography object
                entries = objects.itervalues()
            except AttributeError:
                # Otherwise we just iterate over what is presumably something
                # sequence-ish.
                entries = iter(objects)
        rendered = []
        for obj in entries:
            ref = queryAdapter(obj, interface=IBibliographicReference, name=self.__name__)
            if ref is None:
                # if there is no named adapter, get the default adapter
                # compatibility with older versions
                ref = IBibliographicReference(obj, None)
            if ref is None:
                continue

            # do rendering for entry
            view = getMultiAdapter((ref, request), name=self.view_name)
            omit_fields = omit_fields_mapping.get(ref.publication_type, [])
            ref_string = view.render(title_force_uppercase=title_force_uppercase, omit_fields=omit_fields)
            rendered.append(ref_string)

        rendered = "".join(rendered)
        if msdos_eol_style:
            rendered = rendered.replace("\n", "\r\n")
        return rendered