mirror of
				https://github.com/django/django.git
				synced 2025-10-26 07:06:08 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			39 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """
 | |
| An interpreted text role to link docs to Trac tickets.
 | |
| 
 | |
| To use: :ticket:`XXXXX`
 | |
| 
 | |
| Based on code from psycopg2 by Daniele Varrazzo.
 | |
| """
 | |
| from docutils import nodes, utils
 | |
| from docutils.parsers.rst import roles
 | |
| 
 | |
| 
 | |
| def ticket_role(name, rawtext, text, lineno, inliner, options=None, content=None):
 | |
|     if options is None:
 | |
|         options = {}
 | |
|     try:
 | |
|         num = int(text.replace('#', ''))
 | |
|     except ValueError:
 | |
|         msg = inliner.reporter.error(
 | |
|             "ticket number must be... a number, got '%s'" % text)
 | |
|         prb = inliner.problematic(rawtext, rawtext, msg)
 | |
|         return [prb], [msg]
 | |
| 
 | |
|     url_pattern = inliner.document.settings.env.app.config.ticket_url
 | |
|     if url_pattern is None:
 | |
|         msg = inliner.reporter.warning(
 | |
|             "ticket not configured: please configure ticket_url in conf.py")
 | |
|         prb = inliner.problematic(rawtext, rawtext, msg)
 | |
|         return [prb], [msg]
 | |
| 
 | |
|     url = url_pattern % num
 | |
|     roles.set_classes(options)
 | |
|     node = nodes.reference(rawtext, '#' + utils.unescape(text), refuri=url, **options)
 | |
|     return [node], []
 | |
| 
 | |
| 
 | |
| def setup(app):
 | |
|     app.add_config_value('ticket_url', None, 'env')
 | |
|     app.add_role('ticket', ticket_role)
 |