<s> import sys <EOL> import json <EOL> import six <EOL> from django . conf import settings <EOL> from django . core . management . base import CommandError <EOL> from django_extensions . compat import CompatibilityBaseCommand as BaseCommand <EOL> from django_extensions . management . modelviz import generate_graph_data , generate_dot <EOL> from django_extensions . management . utils import signalcommand <EOL> try : <EOL> import pygraphviz <EOL> HAS_PYGRAPHVIZ = True <EOL> except ImportError : <EOL> HAS_PYGRAPHVIZ = False <EOL> try : <EOL> import pydot <EOL> HAS_PYDOT = True <EOL> except ImportError : <EOL> HAS_PYDOT = False <EOL> class Command ( BaseCommand ) : <EOL> help = "<STR_LIT>" <EOL> args = "<STR_LIT>" <EOL> label = '<STR_LIT>' <EOL> can_import_settings = True <EOL> def __init__ ( self , * args , ** kwargs ) : <EOL> """<STR_LIT>""" <EOL> self . arguments = { <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT:action>' : '<STR_LIT:store_true>' , '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' } , <EOL> '<STR_LIT>' : { '<STR_LIT:action>' : '<STR_LIT:store_true>' , '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' } , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT:action>' : '<STR_LIT:store_true>' , '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' } , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT:action>' : '<STR_LIT:store_true>' , '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' <EOL> '<STR_LIT>' } , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT:action>' : '<STR_LIT:store_true>' , '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' <EOL> '<STR_LIT>' } , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT:action>' : '<STR_LIT:store>' , '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' <EOL> '<STR_LIT>' } , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT:action>' : '<STR_LIT:store>' , '<STR_LIT>' : '<STR_LIT>' , '<STR_LIT:default>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' <EOL> '<STR_LIT>' } , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT:action>' : '<STR_LIT:store_true>' , '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' } , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT:action>' : '<STR_LIT:store>' , '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' } , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT:action>' : '<STR_LIT:store>' , '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' <EOL> '<STR_LIT>' } , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT:action>' : '<STR_LIT:store>' , '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' <EOL> '<STR_LIT>' } , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT:action>' : '<STR_LIT:store>' , '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' <EOL> '<STR_LIT>' } , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT:action>' : '<STR_LIT:store_true>' , '<STR_LIT>' : '<STR_LIT>' , '<STR_LIT:default>' : True , <EOL> '<STR_LIT>' : '<STR_LIT>' } , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT:action>' : '<STR_LIT>' , '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' } , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT:action>' : '<STR_LIT>' , '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT:default>' : True , <EOL> '<STR_LIT>' : '<STR_LIT>' } , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT:action>' : '<STR_LIT>' , '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT:default>' : True , '<STR_LIT>' : '<STR_LIT>' } , <EOL> '<STR_LIT>' : { '<STR_LIT:action>' : '<STR_LIT:store_true>' , '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' } <EOL> } <EOL> defaults = getattr ( settings , '<STR_LIT>' , None ) <EOL> if defaults : <EOL> for argument in self . arguments : <EOL> arg_split = argument . split ( '<STR_LIT:U+0020>' ) <EOL> setting_opt = arg_split [ <NUM_LIT:0> ] . lstrip ( '<STR_LIT:->' ) . replace ( '<STR_LIT:->' , '<STR_LIT:_>' ) <EOL> if setting_opt in defaults : <EOL> self . arguments [ argument ] [ '<STR_LIT:default>' ] = defaults [ setting_opt ] <EOL> super ( Command , self ) . __init__ ( * args , ** kwargs ) <EOL> def add_arguments ( self , parser ) : <EOL> """<STR_LIT>""" <EOL> for argument in self . arguments : <EOL> parser . add_argument ( * argument . split ( '<STR_LIT:U+0020>' ) , <EOL> ** self . arguments [ argument ] ) <EOL> @ signalcommand <EOL> def handle ( self , * args , ** options ) : <EOL> if len ( args ) < <NUM_LIT:1> and not options [ '<STR_LIT>' ] : <EOL> raise CommandError ( "<STR_LIT>" ) <EOL> use_pygraphviz = options . get ( '<STR_LIT>' , False ) <EOL> use_pydot = options . get ( '<STR_LIT>' , False ) <EOL> use_json = options . get ( '<STR_LIT>' , False ) <EOL> if use_json and ( use_pydot or use_pygraphviz ) : <EOL> raise CommandError ( "<STR_LIT>" ) <EOL> cli_options = '<STR_LIT:U+0020>' . join ( sys . argv [ <NUM_LIT:2> : ] ) <EOL> graph_data = generate_graph_data ( args , cli_options = cli_options , ** options ) <EOL> if use_json : <EOL> self . render_output_json ( graph_data , ** options ) <EOL> return <EOL> dotdata = generate_dot ( graph_data ) <EOL> if not six . PY3 : <EOL> dotdata = dotdata . encode ( '<STR_LIT:utf-8>' ) <EOL> if options [ '<STR_LIT>' ] : <EOL> if not use_pygraphviz and not use_pydot : <EOL> if HAS_PYGRAPHVIZ : <EOL> use_pygraphviz = True <EOL> elif HAS_PYDOT : <EOL> use_pydot = True <EOL> if use_pygraphviz : <EOL> self . render_output_pygraphviz ( dotdata , ** options ) <EOL> elif use_pydot : <EOL> self . render_output_pydot ( dotdata , ** options ) <EOL> else : <EOL> raise CommandError ( "<STR_LIT>" ) <EOL> else : <EOL> self . print_output ( dotdata ) <EOL> def print_output ( self , dotdata ) : <EOL> if six . PY3 and isinstance ( dotdata , six . binary_type ) : <EOL> dotdata = dotdata . decode ( ) <EOL> print ( dotdata ) <EOL> def render_output_json ( self , graph_data , ** kwargs ) : <EOL> output_file = kwargs . get ( '<STR_LIT>' ) <EOL> if output_file : <EOL> with open ( output_file , '<STR_LIT>' ) as json_output_f : <EOL> json . dump ( graph_data , json_output_f ) <EOL> else : <EOL> print ( json . dumps ( graph_data ) ) <EOL> def render_output_pygraphviz ( self , dotdata , ** kwargs ) : <EOL> """<STR_LIT>""" <EOL> if not HAS_PYGRAPHVIZ : <EOL> raise CommandError ( "<STR_LIT>" ) <EOL> version = pygraphviz . __version__ . rstrip ( "<STR_LIT>" ) <EOL> try : <EOL> if tuple ( int ( v ) for v in version . split ( '<STR_LIT:.>' ) ) < ( <NUM_LIT:0> , <NUM_LIT> ) : <EOL> import tempfile <EOL> tmpfile = tempfile . NamedTemporaryFile ( ) <EOL> tmpfile . write ( dotdata ) <EOL> tmpfile . seek ( <NUM_LIT:0> ) <EOL> dotdata = tmpfile . name <EOL> except ValueError : <EOL> pass <EOL> graph = pygraphviz . AGraph ( dotdata ) <EOL> graph . layout ( prog = kwargs [ '<STR_LIT>' ] ) <EOL> graph . draw ( kwargs [ '<STR_LIT>' ] ) <EOL> def render_output_pydot ( self , dotdata , ** kwargs ) : <EOL> """<STR_LIT>""" <EOL> if not HAS_PYDOT : <EOL> raise CommandError ( "<STR_LIT>" ) <EOL> graph = pydot . graph_from_dot_data ( dotdata ) <EOL> if not graph : <EOL> raise CommandError ( "<STR_LIT>" ) <EOL> output_file = kwargs [ '<STR_LIT>' ] <EOL> formats = [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , <EOL> '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , <EOL> '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , <EOL> '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , <EOL> '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] <EOL> ext = output_file [ output_file . rfind ( '<STR_LIT:.>' ) + <NUM_LIT:1> : ] <EOL> format = ext if ext in formats else '<STR_LIT>' <EOL> graph . write ( output_file , format = format ) </s>
