@@ -336,7 +336,9 @@ def construct_group_menu_context(request, group, selected, group_type, others):
336336 entries .append (("Email expansions" , urlreverse ("ietf.group.info.email" , kwargs = kwargs )))
337337 entries .append (("History" , urlreverse ("ietf.group.info.history" , kwargs = kwargs )))
338338 if group .features .has_documents :
339- entries .append ((mark_safe ("Dependency graph »" ), urlreverse ("ietf.group.info.dependencies_pdf" , kwargs = kwargs )))
339+ kwargs ["output_type" ] = "svg"
340+ entries .append ((mark_safe ("Dependency graph »" ), urlreverse ("ietf.group.info.dependencies" , kwargs = kwargs )))
341+ del kwargs ["output_type" ]
340342
341343 if group .list_archive .startswith ("http:" ) or group .list_archive .startswith ("https:" ) or group .list_archive .startswith ("ftp:" ):
342344 entries .append ((mark_safe ("List archive »" ), group .list_archive ))
@@ -656,50 +658,44 @@ def make_dot(group):
656658 dict ( nodes = nodes , edges = edges )
657659 )
658660
659- def dependencies_dot (request , acronym , group_type = None ):
661+ @cache_page (60 * 60 )
662+ def dependencies (request , acronym , group_type = None , output_type = "pdf" ):
660663 group = get_group_or_404 (acronym , group_type )
661664 if not group .features .has_documents :
662665 raise Http404
663666
664- return HttpResponse (make_dot (group ),
665- content_type = 'text/plain; charset=UTF-8'
666- )
667-
668- @cache_page ( 60 * 60 )
669- def dependencies_pdf (request , acronym , group_type = None ):
670- group = get_group_or_404 (acronym , group_type )
671- if not group .features .has_documents :
672- raise Http404
673-
674- dothandle ,dotname = mkstemp ()
667+ dothandle , dotname = mkstemp ()
675668 os .close (dothandle )
676- dotfile = open (dotname ,"w" )
669+ dotfile = open (dotname , "w" )
677670 dotfile .write (make_dot (group ))
678671 dotfile .close ()
679672
680- unflathandle ,unflatname = mkstemp ()
681- os .close (unflathandle )
673+ if (output_type == "dot" ):
674+ return HttpResponse (make_dot (group ),
675+ content_type = 'text/plain; charset=UTF-8'
676+ )
682677
683- pshandle ,psname = mkstemp ()
684- os .close (pshandle )
678+ unflathandle , unflatname = mkstemp ()
679+ os .close (unflathandle )
680+ outhandle , outname = mkstemp ()
681+ os .close (outhandle )
685682
686- pdfhandle , pdfname = mkstemp ( )
687- os . close ( pdfhandle )
683+ pipe ( "%s -f -l 10 -o %s %s" % ( settings . UNFLATTEN_BINARY , unflatname , dotname ) )
684+ pipe ( "%s -T%s -o %s %s" % ( settings . DOT_BINARY , output_type , outname , unflatname ) )
688685
689- pipe ("%s -f -l 10 -o %s %s" % (settings .UNFLATTEN_BINARY ,unflatname ,dotname ))
690- pipe ("%s -Tps -Gsize=10.5,8.0 -Gmargin=0.25 -Gratio=auto -Grotate=90 -o %s %s" % (settings .DOT_BINARY ,psname ,unflatname ))
691- pipe ("%s %s %s" % (settings .PS2PDF_BINARY ,psname ,pdfname ))
692-
693- pdfhandle = open (pdfname ,"r" )
694- pdf = pdfhandle .read ()
695- pdfhandle .close ()
686+ outhandle = open (outname , "r" )
687+ out = outhandle .read ()
688+ outhandle .close ()
696689
697- os .unlink (pdfname )
698- os .unlink (psname )
690+ os .unlink (outname )
699691 os .unlink (unflatname )
700692 os .unlink (dotname )
701693
702- return HttpResponse (pdf , content_type = 'application/pdf' )
694+ if (output_type == "pdf" ):
695+ output_type = "application/pdf"
696+ elif (output_type == "svg" ):
697+ output_type = "image/svg+xml"
698+ return HttpResponse (out , content_type = output_type )
703699
704700def email_aliases (request , acronym = None , group_type = None ):
705701 group = get_group_or_404 (acronym ,group_type ) if acronym else None
0 commit comments