コード例 #1
0
ファイル: view_builder.py プロジェクト: F-Secure/murphy
def _build_view(model_file_name, view_name, view_type, output_dir):
    '''
    Builds the given view
    '''
    import sys, os
    from murphy.model import Model
    from murphy import utils, graphviz
    #FIXME: this is needed in order to import the module, but may be better to
    #do it in the model object before importing?
    base_path = os.path.dirname(os.path.dirname(model_file_name))
    base_path = os.path.abspath(os.path.dirname(base_path))
    sys.path.append(base_path)

    model = Model(model_file_name)
    worker = model.new_worker()
    start_node = model.get_starting_node(view_name)
    dot = worker.graphs.generate_from_spider(start_node, {})
    temp_file = '%s/temp.dot' % output_dir
    target_file = '%s/flow.xml' % output_dir
    #FIXME: do silent_remove with proper exception handling...
    if os.path.isfile(temp_file):
        os.remove(temp_file)
    if os.path.isfile(target_file):
        os.remove(target_file)

    utils.save_file(dot, temp_file)
    graphviz.generate_svg(temp_file)
    os.rename('%s.svg' % temp_file, target_file)
    #os.remove(temp_file)

    #svg_content = utils.load_text_file(target_file)
    import zipfile
    zip = zipfile.ZipFile('%s.zip' % target_file, 'w')
    zip.write(target_file, 'flow.xml')
    zip.close()

    _build_dot_with_screenshots(dot, worker, output_dir, model.images_dir)

    svg_content = utils.load_text_file('%s/simple-flow-images.xml' %
                                       output_dir)
    svg_content = svg_content.replace('xlink:href="%s/' % output_dir,
                                      'xlink:href="')
    utils.save_file(svg_content,
                    '%s/local-simple-flow-images.xml' % output_dir)

    downloadable_name = os.path.basename(model_file_name)
    if downloadable_name.find(".") != -1:
        downloadable_name = downloadable_name.split(".")[0]
    downloadable_name = '%s-%s-simple.zip' % (downloadable_name, view_name)

    zip = zipfile.ZipFile('%s/%s' % (output_dir, downloadable_name), 'w')
    zip.write('%s/local-simple-flow-images.xml' % output_dir, 'flow.xml')
    for file_name in os.listdir(output_dir):
        if file_name.endswith(".png") or file_name.endswith(".gif"):
            zip.write('%s/%s' % (output_dir, file_name), file_name)
    zip.close()
コード例 #2
0
ファイル: view_builder.py プロジェクト: F-Secure/murphy
def _build_view(model_file_name, view_name, view_type, output_dir):
    '''
    Builds the given view
    '''
    import sys, os
    from murphy.model import Model
    from murphy import utils, graphviz
    #FIXME: this is needed in order to import the module, but may be better to
    #do it in the model object before importing?
    base_path = os.path.dirname(os.path.dirname(model_file_name))
    base_path = os.path.abspath(os.path.dirname(base_path))
    sys.path.append(base_path)
    
    model = Model(model_file_name)
    worker = model.new_worker()
    start_node = model.get_starting_node(view_name)
    dot = worker.graphs.generate_from_spider(start_node, {})
    temp_file = '%s/temp.dot' % output_dir
    target_file = '%s/flow.xml' % output_dir
    #FIXME: do silent_remove with proper exception handling...
    if os.path.isfile(temp_file):
        os.remove(temp_file)
    if os.path.isfile(target_file):
        os.remove(target_file)
        
    utils.save_file(dot, temp_file)
    graphviz.generate_svg(temp_file)
    os.rename('%s.svg' % temp_file, target_file)
    #os.remove(temp_file)

    #svg_content = utils.load_text_file(target_file)
    import zipfile
    zip = zipfile.ZipFile('%s.zip' % target_file, 'w')
    zip.write(target_file, 'flow.xml')
    zip.close()
    
    _build_dot_with_screenshots(dot, worker, output_dir, model.images_dir)
    
    svg_content = utils.load_text_file('%s/simple-flow-images.xml' % output_dir)
    svg_content = svg_content.replace('xlink:href="%s/' % output_dir, 'xlink:href="')
    utils.save_file(svg_content, '%s/local-simple-flow-images.xml' % output_dir)
    
    downloadable_name = os.path.basename(model_file_name)
    if downloadable_name.find(".") != -1:
        downloadable_name = downloadable_name.split(".")[0]
    downloadable_name = '%s-%s-simple.zip' % (downloadable_name, view_name)
    
    zip = zipfile.ZipFile('%s/%s' % (output_dir, downloadable_name), 'w')
    zip.write('%s/local-simple-flow-images.xml' % output_dir, 'flow.xml')
    for file_name in os.listdir(output_dir):
        if file_name.endswith(".png") or file_name.endswith(".gif"):
            zip.write('%s/%s' % (output_dir, file_name), file_name)
    zip.close()