def render_fragments(template, issue_format, fragments, definitions, underlines, wrap):
    """
    Render the fragments into a news file.
    """

    jinja_template = Template(template, trim_blocks=True)

    data = OrderedDict()

    for section_name, section_value in fragments.items():

        data[section_name] = OrderedDict()

        for category_name, category_value in section_value.items():
            # Suppose we start with an ordering like this:
            #
            # - Fix the thing (#7, #123, #2)
            # - Fix the other thing (#1)

            # First we sort the issues inside each line:
            #
            # - Fix the thing (#2, #7, #123)
            # - Fix the other thing (#1)
            entries = []
            for text, issues in category_value.items():
                entries.append((text, sorted(issues, key=issue_key)))

            # Then we sort the lines:
            #
            # - Fix the other thing (#1)
            # - Fix the thing (#2, #7, #123)
            entries.sort(key=entry_key)

            # Then we put these nicely sorted entries back in an ordered dict
            # for the template, after formatting each issue number
            categories = OrderedDict()
            for text, issues in entries:
                rendered = [render_issue(issue_format, i) for i in issues]
                categories[text] = rendered

            data[section_name][category_name] = categories

    done = []

    res = jinja_template.render(
        sections=data, definitions=definitions, underlines=underlines
    )

    for line in res.split(u"\n"):
        if wrap:
            done.append(
                textwrap.fill(
                    line,
                    width=79,
                    subsequent_indent=u"  ",
                    break_long_words=False,
                    break_on_hyphens=False,
                )
            )
        else:
            done.append(line)

    return u"\n".join(done).rstrip() + u"\n"
def render_fragments ( template , issue_format , fragments , definitions , underlines , wrap ) : jinja_template = Template ( template , trim_blocks = True ) data = OrderedDict ( ) for section_name , section_value in fragments . items ( ) : data [ section_name ] = OrderedDict ( ) for category_name , category_value in section_value . items ( ) : entries = [ ] for text , issues in category_value . items ( ) : entries . append ( ( text , sorted ( issues , key = issue_key ) ) ) entries . sort ( key = entry_key ) categories = OrderedDict ( ) for text , issues in entries : rendered = [ render_issue ( issue_format , i ) for i in issues ] categories [ text ] = rendered data [ section_name ] [ category_name ] = categories done = [ ] res = jinja_template . render ( sections = data , definitions = definitions , underlines = underlines ) for line in res . split ( u"\n" ) : if wrap : done . append ( textwrap . fill ( line , width = 79 , subsequent_indent = u"  " , break_long_words = False , break_on_hyphens = False , ) ) else : done . append ( line ) return u"\n" . join ( done ) . rstrip ( ) + u"\n"
Render the fragments into a news file.