Files
OmniLottie/lottie/utils/script.py
T

83 lines
2.2 KiB
Python
Raw Normal View History

2026-03-01 21:36:54 +08:00
import os
import sys
import argparse
import inspect
from ..exporters import exporters
from .stripper import float_strip
def _get_caller():
return inspect.getmodule(inspect.currentframe().f_back.f_back)
def _get_parser(caller, basename, path, formats, verbosity):
if basename is None:
basename = os.path.splitext(os.path.basename(caller.__file__))[0]
parser = argparse.ArgumentParser(
conflict_handler='resolve'
)
parser.add_argument(
"--name",
"-n",
default=basename,
help="Output basename",
)
parser.add_argument(
"--path",
default=path,
help="Output path",
)
parser.add_argument(
"--formats", "-f",
nargs="+",
choices=list(sum((e.extensions for e in exporters), [])),
default=formats,
help="Formates to render",
metavar="format"
)
parser.add_argument(
"--verbosity",
type=int,
default=int(verbosity)
)
from .. import __version__
parser.add_argument(
"--version", "-v",
action="version",
version="%(prog)s - python-lottie script " + __version__
)
exporters.set_options(parser)
return parser
def get_parser(basename=None, path="/tmp", formats=["html"], verbosity=1):
caller = _get_caller()
return _get_parser(caller, basename, path, formats, verbosity)
def run(animation, ns):
for fmt in ns.formats:
if ns.path == "" and ns.name == "-":
outfile = sys.stdout
else:
absname = os.path.abspath(os.path.join(ns.path, ns.name + "." + fmt))
if ns.verbosity:
sys.stderr.write("file://%s\n" % absname)
outfile = absname
exporter = exporters.get_from_extension(fmt)
exporter.process(animation, outfile, **exporter.argparse_options(ns))
def script_main(animation, basename=None, path="/tmp", formats=["html"], verbosity=1, strip=float_strip):
"""
Sets up a script to output an animation into various formats
"""
caller = _get_caller()
if caller and caller.__name__ == "__main__":
parser = _get_parser(caller, basename, path, formats, verbosity)
strip(animation)
run(animation, parser.parse_args())