Beispiel #1
0
def _team_to_rst(name, info):
    yield '.. _project-%s:' % projects.slugify(name)
    yield ''
    yield '=' * len(name)
    yield name.title()
    yield '=' * len(name)
    yield ''
    yield ':Home Page: ' + info.get('url', '')
    ptl = info.get('ptl', {'name': '', 'irc': ''})
    yield ':PTL: %(name)s (%(irc)s)' % ptl
    irc_channel = info.get('irc-channel')
    if irc_channel:
        yield ':IRC Channel: `#%s <%s%s>`__' % (
            irc_channel, IRC_LOG_URL_BASE, irc_channel)
    service = info.get('service')
    if service:
        yield ':Service: ' + service
    yield ''
    mission = info.get('mission', '').rstrip()
    if mission:
        yield "Mission"
        yield '-------'
        yield ''
        yield mission
        yield ''
    tags = info.get('tags', [])
    if tags:
        yield 'Team based tags'
        yield '----------------'
        yield ''
        for tag in tags:
            yield '- :ref:`tag-%s`' % tag
        yield ''
    yield 'Deliverables and Tags'
    yield '---------------------'
    yield ''
    deliverables = info.get('deliverables', [])
    if deliverables:
        for name, deliverable in deliverables.items():
            title = '- %s' %  name
            repos = deliverable.get('repos', [])
            if repos:
                repolist = " ("
                for repo in repos:
                    repolist += ':repo:`%s`, ' % repo
                title += repolist[0:-2] + ")"
            yield title
            tags = deliverable.get('tags', [])
            if tags is not []:
                yield ''
            for tag in tags:
                yield '  - :ref:`tag-%s`' % tag
    else:
        yield 'None'
    yield ''
    yield 'Extra ATCs'
    yield '-----------'
    yield '.. extraatcstable:: '
    yield '   :project: %s' % name
    yield ''
Beispiel #2
0
def _generate_teams_badges(app):
    all_teams = projects.get_project_data()
    files = []

    badges_dir = os.path.join(app.outdir, 'badges')
    if not os.path.exists(badges_dir):
        os.mkdir(badges_dir)

    filename = os.path.join(badges_dir, 'project-unofficial.svg')
    svg_data = _generate_badge('project', 'unofficial', colorscheme='red')
    svg = FLAT_BADGE_TEMPLATE.format(**svg_data).encode('utf-8')
    with open(filename, 'w') as f:
        f.write(SVG_ROOT.format(height=20, width=106, svg=svg))
    files.append(filename)

    for team, info in all_teams.items():
        app.info('generating team badge for %s' % team)

        for name, deliverable in info['deliverables'].items():
            tags = info.get('tags', []) + deliverable.get('tags', [])
            badges = _organize_badges(_generate_tag_badges(tags))
            svg = '\n'.join(_to_svg(chain(*badges)))

            root_width = badges[-1][-1]['svg_x'] + badges[-1][-1]['width']
            root_height = badges[-1][0]['svg_y'] + badges[-1][0]['height']

            for repo in deliverable.get('repos', []):
                repo_name = repo.split('/')[1]
                filename = os.path.join(badges_dir, '%s.svg' % projects.slugify(repo_name))
                with open(filename, 'w') as f:
                    f.write(SVG_ROOT.format(height=root_height, width=root_width, svg=svg))
                files.append(filename)

    return files
Beispiel #3
0
def _team_to_rst(name, info):
    yield '.. _project-%s:' % projects.slugify(name)
    yield ''
    yield '=' * len(name)
    yield name.title()
    yield '=' * len(name)
    yield ''
    yield ':Home Page: ' + info.get('url', '')
    yield ':PTL: ' + info.get('ptl', '')
    irc_channel = info.get('irc-channel')
    if irc_channel:
        yield ':IRC Channel: `#%s <%s%s>`__' % (irc_channel, IRC_LOG_URL_BASE,
                                                irc_channel)
    service = info.get('service')
    if service:
        yield ':Service: ' + service
    yield ''
    mission = info.get('mission', '').rstrip()
    if mission:
        yield "Mission"
        yield '-------'
        yield ''
        yield mission
        yield ''
    tags = info.get('tags', [])
    if tags:
        yield 'Team based tags'
        yield '----------------'
        yield ''
        for tag in tags:
            yield '- :ref:`tag-%s`' % tag
        yield ''
    yield 'Deliverables and Tags'
    yield '---------------------'
    yield ''
    deliverables = info.get('deliverables', [])
    if deliverables:
        for name, deliverable in deliverables.items():
            title = '- %s' % name
            repos = deliverable.get('repos', [])
            if repos:
                repolist = " ("
                for repo in repos:
                    repolist += ':repo:`%s`, ' % repo
                title += repolist[0:-2] + ")"
            yield title
            tags = deliverable.get('tags', [])
            if tags is not []:
                yield ''
            for tag in tags:
                yield '  - :ref:`tag-%s`' % tag
    else:
        yield 'None'
    yield ''
    yield 'Extra ATCs'
    yield '-----------'
    yield '.. extraatcstable:: '
    yield '   :project: %s' % name
    yield ''
Beispiel #4
0
def _team_to_rst(name, info):
    yield '.. _project-%s:' % projects.slugify(name)
    yield ''
    yield '=' * len(name)
    yield name.title()
    yield '=' * len(name)
    yield ''
    yield ':Home Page: ' + info.get('url', '')
    yield ':PTL: ' + info.get('ptl', '')
    irc_channel = info.get('irc-channel')
    if irc_channel:
        yield ':IRC Channel: `#%s <%s%s>`__' % (
            irc_channel, IRC_LOG_URL_BASE, irc_channel)
    service = info.get('service')
    if service:
        yield ':Service: ' + service
    yield ''
    mission = info.get('mission', '').rstrip()
    if mission:
        yield "Mission"
        yield '-------'
        yield ''
        yield mission
        yield ''
    tags = [
        ':ref:`tag-%s`' % t['name']
        for t in info.get('tags', [])
    ]
    if tags:
        yield 'Team based tags'
        yield '----------------'
        yield ''
        for tag in tags:
            yield '- %s' % tag
        yield ''
    yield 'Repositories and Tags'
    yield '---------------------'
    yield ''
    project_repos = info.get('projects', [])
    if project_repos:
        for project in project_repos:
            yield '- :repo:`%s`' % project['repo']
            tags = project.get('tags', [])
            if tags is not []:
                yield ''
            for tag in tags:
                yield '  - :ref:`tag-%s`' % tag['name']
    else:
        yield 'None'
    yield ''
    yield 'Extra ATCs'
    yield '-----------'
    yield '.. extraatcstable:: '
    yield '   :project: %s' % name
    yield ''
Beispiel #5
0
def _write_team_pages(app):
    all_teams = projects.get_project_data()
    files = []
    for team, info in all_teams.items():
        slug = projects.slugify(team)
        filename = 'reference/projects/%s.rst' % slug
        app.info('generating team page for %s' % team)
        with open(filename, 'w') as f:
            f.write('\n'.join(_team_to_rst(team, info)))
        files.append(filename)
    return files
Beispiel #6
0
def _write_team_pages(app):
    all_teams = projects.get_project_data()
    files = []
    for team, info in all_teams.items():
        slug = projects.slugify(team)
        filename = 'reference/projects/%s.rst' % slug
        app.info('generating team page for %s' % team)
        with open(filename, 'w', encoding='utf-8') as f:
            f.write('\n'.join(_team_to_rst(team, info)))
        files.append(filename)
    return files
Beispiel #7
0
    def run(self):
        env = self.state.document.settings.env
        app = env.app

        tagname = ' '.join(self.content)
        app.info('building list of projects tagged %r' % tagname)
        if not tagname:
            error = self.state_machine.reporter.error(
                'No tagname in tagged-projects directive',
                nodes.literal_block(self.block_text, self.block_text),
                line=self.lineno)
            return [error]

        # Build the view of the data to be parsed for rendering.
        result = ViewList()
        project_data = _projects_by_tag.get(tagname)
        source_name = '<' + __name__ + '>'
        if not project_data:
            result.append(
                '.. note:: No projects are using %s, yet.' % tagname,
                source_name,
            )
        else:
            for team_name, deliverable in sorted(project_data):
                if deliverable is None:
                    line = '- :ref:`project-%s`' % projects.slugify(team_name)
                else:
                    line = '- %s (:ref:`project-%s`)' % (
                        deliverable,
                        projects.slugify(team_name),
                    )
                result.append(line, source_name)

        # Parse what we have into a new section.
        node = nodes.section()
        node.document = self.state.document
        nested_parse_with_titles(self.state, result, node)

        return node.children
Beispiel #8
0
    def run(self):
        env = self.state.document.settings.env
        app = env.app

        tagname = ' '.join(self.content)
        app.info('building list of projects tagged %r' % tagname)
        if not tagname:
            error = self.state_machine.reporter.error(
                'No tagname in tagged-projects directive',
                nodes.literal_block(self.block_text, self.block_text),
                line=self.lineno)
            return [error]

        # Build the view of the data to be parsed for rendering.
        result = ViewList()
        project_data = _projects_by_tag.get(tagname)
        source_name = '<' + __name__ + '>'
        if not project_data:
            result.append(
                '.. note:: No projects are using %s, yet.' % tagname,
                source_name,
            )
        else:
            for team_name, deliverable in sorted(project_data):
                if deliverable is None:
                    line = '- :ref:`project-%s`' % projects.slugify(team_name)
                else:
                    line = '- %s (:ref:`project-%s`)' % (
                        deliverable,
                        projects.slugify(team_name),
                    )
                result.append(line, source_name)

        # Parse what we have into a new section.
        node = nodes.section()
        node.document = self.state.document
        nested_parse_with_titles(self.state, result, node)

        return node.children
Beispiel #9
0
    def run(self):
        tagname = ' '.join(self.content)
        LOG.info('building list of projects tagged %r' % tagname)
        if not tagname:
            error = self.state_machine.reporter.error(
                'No tagname in tagged-projects directive',
                nodes.literal_block(self.block_text, self.block_text),
                line=self.lineno)
            return [error]

        # Build the view of the data to be parsed for rendering.
        result = statemachine.ViewList()
        project_data = _projects_by_tag.get(tagname)
        source_name = '<' + __name__ + '>'
        if not project_data:
            result.append(
                '.. note:: No projects are using %s, yet.' % tagname,
                source_name,
            )
        else:
            team_deliverables = defaultdict(list)

            for team_name, deliverable in project_data:
                team = projects.slugify(team_name)
                if deliverable is None:
                    team_deliverables[team] = []
                else:
                    team_deliverables[team].append(deliverable)

            for team in sorted(team_deliverables, key=lambda x: x.lower()):
                line = '- :ref:`project-%s`%s %s' % (
                    team,
                    ':' if team_deliverables[team] else '',
                    ', '.join(team_deliverables[team]))
                result.append(line, source_name)

        # Parse what we have into a new section.
        node = nodes.section()
        node.document = self.state.document
        nested_parse_with_titles(self.state, result, node)

        return node.children
Beispiel #10
0
    def run(self):
        tagname = ' '.join(self.content)
        LOG.info('building list of projects tagged %r' % tagname)
        if not tagname:
            error = self.state_machine.reporter.error(
                'No tagname in tagged-projects directive',
                nodes.literal_block(self.block_text, self.block_text),
                line=self.lineno)
            return [error]

        # Build the view of the data to be parsed for rendering.
        result = statemachine.ViewList()
        project_data = _projects_by_tag.get(tagname)
        source_name = '<' + __name__ + '>'
        if not project_data:
            result.append(
                '.. note:: No projects are using %s, yet.' % tagname,
                source_name,
            )
        else:
            team_deliverables = defaultdict(list)

            for team_name, deliverable in project_data:
                team = projects.slugify(team_name)
                if deliverable is None:
                    team_deliverables[team] = []
                else:
                    team_deliverables[team].append(deliverable)

            for team in sorted(team_deliverables, key=lambda x: x.lower()):
                line = '- :ref:`project-%s`%s %s' % (
                    team,
                    ':' if team_deliverables[team] else '',
                    ', '.join(team_deliverables[team]))
                result.append(line, source_name)

        # Parse what we have into a new section.
        node = nodes.section()
        node.document = self.state.document
        nested_parse_with_titles(self.state, result, node)

        return node.children
Beispiel #11
0
def _generate_teams_badges(app, exception=None):
    LOG.info('Generating team badges')
    all_teams = projects.get_project_data()
    files = []

    badges_dir = os.path.join(app.outdir, 'badges')
    if not os.path.exists(badges_dir):
        os.mkdir(badges_dir)

    filename = os.path.join(badges_dir, 'project-unofficial.svg')
    svg_data = _generate_badge('project', 'unofficial', colorscheme='red')
    svg = FLAT_BADGE_TEMPLATE.format(**svg_data)
    with open(filename, 'w', encoding='utf-8') as f:
        f.write(SVG_ROOT.format(height=20, width=106, svg=svg))
    files.append(filename)

    for team, info in all_teams.items():
        LOG.info('generating team badge for %s' % team)

        for name, deliverable in info['deliverables'].items():
            tags = info.get('tags', []) + deliverable.get('tags', [])
            badges = _organize_badges(_generate_tag_badges(tags))
            svg = '\n'.join(_to_svg(chain(*badges)))

            root_width = max([bdg_row[-1]['width'] + bdg_row[-1]['svg_x']
                              for bdg_row in badges])
            root_height = badges[-1][0]['svg_y'] + badges[-1][0]['height']

            for repo in deliverable.get('repos', []):
                repo_name = repo.split('/')[1]
                filename = os.path.join(badges_dir, '%s.svg' % projects.slugify(repo_name))
                with open(filename, 'w') as f:
                    f.write(SVG_ROOT.format(height=root_height, width=root_width, svg=svg))
                files.append(filename)

    return files
Beispiel #12
0
def _team_to_rst(name, info):

    if 'service' in info:
        title = "{0} ({1})".format(name.title(), info['service'])
    elif name == 'I18n':
        title = name
    else:
        title = name.title()

    yield '.. _project-%s:' % projects.slugify(name)
    yield ''
    yield '=' * len(title)
    yield title
    yield '=' * len(title)
    yield ''
    yield ':Home Page: ' + info.get('url', '')
    ptl = info.get('ptl', {'name': '', 'irc': ''})
    yield ':PTL: %(name)s (``%(irc)s``)' % ptl
    irc_channel = info.get('irc-channel')
    if irc_channel:
        yield ':IRC Channel: `#%s <%s%s>`__' % (irc_channel, IRC_LOG_URL_BASE,
                                                irc_channel)
    service = info.get('service')
    if service:
        yield ':Service: ' + service
    yield ''
    mission = info.get('mission', '').rstrip()
    if mission:
        yield "Mission"
        yield '-------'
        yield ''
        yield mission
        yield ''
    tags = info.get('tags', [])
    if tags:
        yield 'Team-based tags'
        yield '---------------'
        yield ''
        for tag in tags:
            yield '- :ref:`tag-%s`' % tag
        yield ''
    yield 'Deliverables'
    yield '------------'
    yield ''
    deliverables = info.get('deliverables', [])
    if deliverables:
        for repo_name, deliverable in deliverables.items():
            yield repo_name
            yield '~' * len(repo_name)
            yield ''
            yield ':Repositories: ' + ', '.join(
                ':repo:`%s`' % repo for repo in deliverable.get('repos', []))
            yield ''
            tags = deliverable.get('tags', [])
            if tags:
                yield ':Tags:'
                yield ''
                for tag in tags:
                    yield '  - :ref:`tag-%s`' % tag
                yield ''
    else:
        yield 'None'
    yield ''
    yield 'Extra ATCs'
    yield '-----------'
    yield '.. extraatcstable::'
    yield '   :project: %s' % name
    yield ''
Beispiel #13
0
def _team_to_rst(name, info):

    if 'service' in info:
        title = "{0} ({1})".format(name.title(), info['service'])
    elif name == 'I18n':
        title = name
    else:
        title = name.title()

    yield '.. _project-%s:' % projects.slugify(name)
    yield ''
    yield '=' * len(title)
    yield title
    yield '=' * len(title)
    yield ''
    yield ':Home Page: ' + info.get('url', '')
    ptl = info.get('ptl', {'name': '', 'irc': '', 'email': ''})
    yield ':PTL: %(name)s (``%(irc)s``) <%(email)s>' % ptl
    irc_channel = info.get('irc-channel')
    if irc_channel:
        yield ':IRC Channel: `#%s <%s%s>`__' % (
            irc_channel, IRC_LOG_URL_BASE, irc_channel)
    service = info.get('service')
    if service:
        yield ':Service: ' + service
    yield ''
    mission = info.get('mission', '').rstrip()
    if mission:
        yield "Mission"
        yield '-------'
        yield ''
        yield mission
        yield ''
    tags = info.get('tags', [])
    if tags:
        yield 'Team-based tags'
        yield '---------------'
        yield ''
        for tag in tags:
            yield '- :ref:`tag-%s`' % tag
        yield ''
    yield 'Deliverables'
    yield '------------'
    yield ''
    deliverables = info.get('deliverables', [])
    if deliverables:
        for repo_name, deliverable in deliverables.items():
            yield repo_name
            yield '~' * len(repo_name)
            yield ''
            yield ':Repositories: ' + ', '.join(
                ':repo:`%s`' % repo
                for repo in deliverable.get('repos', [])
            )
            yield ''
            tags = deliverable.get('tags', [])
            if tags:
                yield ':Tags:'
                yield ''
                for tag in tags:
                    yield '  - :ref:`tag-%s`' % tag
                yield ''
    else:
        yield 'None'
    yield ''
    if info.get('extra-atcs', []):
        yield 'Extra ATCs'
        yield '-----------'
        yield '.. extraatcstable::'
        yield '   :project: %s' % name
        yield ''