cutcutcodec.core.compilation.ast_to_file.ast_to_file

cutcutcodec.core.compilation.ast_to_file.ast_to_file(module: Module, filename: str | bytes | Path)[source]

Write the module into an excecutable python file.

Parameters

moduleast.Module

The pre compiled graph, could be the output of the function cutcutcodec.core.compilation.graph_to_ast.graph_to_ast.

filenamepathlib.Path

The name of the targeted file.

Examples

>>> import os
>>> from cutcutcodec.core.compilation.ast_to_file import ast_to_file
>>> from cutcutcodec.core.compilation.graph_to_ast import graph_to_ast
>>> from cutcutcodec.core.compilation.tree_to_graph import tree_to_graph
>>> from cutcutcodec.core.io.write_ffmpeg import ContainerOutputFFMPEG
>>> tree = ContainerOutputFFMPEG.default()
>>> filename = tree.filename.with_suffix(".py")
>>> module = graph_to_ast(tree_to_graph(tree))
>>> ast_to_file(module, filename)
>>> with open(filename, "r", encoding="utf-8") as raw:
...     print(raw.read())  
...
#!/usr/bin/env python3

"""Autogenerated project exportation script.

Creation: ...
Graph: MultiDiGraph with 3 nodes and 2 edges
"""
from cutcutcodec.core.classes.node import Node
from cutcutcodec.core.generation.audio.noise import GeneratorAudioNoise
from cutcutcodec.core.generation.video.noise import GeneratorVideoNoise
from cutcutcodec.core.io.write_ffmpeg import ContainerOutputFFMPEG


def get_container_output_ffmpeg_1(
    generator_audio_noise_1: Node, generator_video_noise_1: Node
) -> ContainerOutputFFMPEG:
    """Create the node 'container_output_ffmpeg_1'."""
    container_output_ffmpeg_1 = ContainerOutputFFMPEG.__new__(ContainerOutputFFMPEG)
    container_output_ffmpeg_1.setstate(
        [
            generator_audio_noise_1.out_streams[0],
            generator_video_noise_1.out_streams[0],
        ],
        state={
            "filename": "/tmp/....mkv",
            "streams_settings": [
                {"encodec": "libopus", "rate": "8000", "options": {}, "bitrate": None},
                {
                    "encodec": "libx264",
                    "rate": "12",
                    "shape": (2, 2),
                    "options": {},
                    "bitrate": None,
                    "pix_fmt": None,
                },
            ],
            "container_settings": {
                "format": None,
                "options": {},
                "container_options": {},
            },
        },
    )
    return container_output_ffmpeg_1


def get_generator_audio_noise_1() -> GeneratorAudioNoise:
    """Create the node 'generator_audio_noise_1'."""
    generator_audio_noise_1 = GeneratorAudioNoise.__new__(GeneratorAudioNoise)
    generator_audio_noise_1.setstate([], state={"seed": 0.0, "layout": "stereo"})
    return generator_audio_noise_1


def get_generator_video_noise_1() -> GeneratorVideoNoise:
    """Create the node 'generator_video_noise_1'."""
    generator_video_noise_1 = GeneratorVideoNoise.__new__(GeneratorVideoNoise)
    generator_video_noise_1.setstate([], state={"seed": 0.0})
    return generator_video_noise_1


def get_complete_tree() -> ContainerOutputFFMPEG:
    """Retrive the complete assembly graph."""
    generator_audio_noise_1 = get_generator_audio_noise_1()
    generator_video_noise_1 = get_generator_video_noise_1()
    container_output_ffmpeg_1 = get_container_output_ffmpeg_1(
        generator_audio_noise_1, generator_video_noise_1
    )
    return container_output_ffmpeg_1


if __name__ == "__main__":
    get_complete_tree().write()

>>> os.remove(filename)
>>>