Source code for mendevi.cst.encoders

#!/usr/bin/env python3

"""All the available encoders."""

import ast
import inspect

from mendevi.encode import get_transcode_cmd


[docs] def extract_encoders() -> list[str]: """Retrieve encoders names by analysing the source code of the get_transcode_cmd function.""" tree = ast.parse(inspect.getsource(get_transcode_cmd)) nodes = [ n for n in ast.walk(tree) if isinstance(n, ast.Match) and isinstance(n.subject, ast.Subscript) and (n.subject.value.id, n.subject.slice.value) == ("kwargs", "encoder") ] assert len(nodes) == 1, 'the function get_transcode_cmd must contains one ``match kwargs["encoder"]:``' node = nodes.pop() labels = [] for match_case in node.cases: labels.extend( [n.value for n in ast.walk(match_case.pattern) if isinstance(n, ast.Constant)], ) return labels
ENCODERS = set(extract_encoders())