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 ''
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
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 ''
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 ''
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
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
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
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
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
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 ''
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 ''