"""
Extract audio features and metadata, encode using PCA or Autoencoder, run clustering, and plot results.
"""
import argparse
import sys
from .log import run, Status
from .utils import add_args
def run_main(status: Status, **kwargs) -> int:
try:
from .extract import run_main as run_extract_main
from .encode import run_main as run_encode_main
from .cluster import run_main as run_cluster_main
from .plot import run_main as run_plot_main
from .playlists import run_main as run_playlists_main
run_extract_main(status, **kwargs)
run_encode_main(status, **kwargs)
run_cluster_main(status, **kwargs)
run_plot_main(status, **kwargs)
run_playlists_main(status, **kwargs)
except KeyboardInterrupt as e:
status.logger.error(e.__class__.__name__)
return 130
except BaseException as e:
status.logger.exception(str(e), exc_info=e)
return 1
else:
return 0
def main() -> int:
parser = argparse.ArgumentParser(description=__doc__.strip(), formatter_class=argparse.ArgumentDefaultsHelpFormatter)
args = add_args(parser).parse_args()
return run(run_main, **vars(args))
if __name__ == "__main__":
sys.exit(main())