Add run and thumbnails commands

This commit is contained in:
Ales (Shagi) Zabala Alava 2020-11-03 18:35:27 +01:00
parent 257ec9301b
commit ccbca5c79d
6 changed files with 109 additions and 12 deletions

View File

@ -8,7 +8,7 @@ from jinja2 import Environment, PackageLoader, select_autoescape
from jinja2.utils import Markup from jinja2.utils import Markup
import srt import srt
from negromate.songs import load_songs from negromate.songs.loader import load_songs
from .karaoke_templates import update_karaoke_songs from .karaoke_templates import update_karaoke_songs

View File

@ -1,11 +0,0 @@
from pathlib import Path
from .builder import Builder
def build():
builder = Builder(
Path(sys.argv[1]),
Path(sys.argv[2]),
)
builder.build()

View File

@ -0,0 +1,38 @@
import argparse
import sys
from . import run, build, thumbnail
def main():
"""
Build parser for all the commands and launch appropiate command.
Each command must be a module with at least the following members:
* name: String with the command name. Will be used for
argparse subcommand.
* help_text: String with the help text.
* options: Function to build the parser of the command. Takes
one parametter, the argparser parser instance for this
subcommand.
* run: Function that runs the actual command. Takes one
parametter, the Namespace with the arguments.
"""
commands = [
build,
run,
thumbnail,
]
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
for command in commands:
command_parser = subparsers.add_parser(command.name, help=command.help_text)
command_parser.set_defaults(command=command.name)
command.options(command_parser)
args = parser.parse_args()
for command in commands:
if args.command == command.name:
command.run(args)

View File

@ -0,0 +1,21 @@
from pathlib import Path
from ..builder import Builder
name = 'build'
help_text = 'Generate static website'
def options(parser):
parser.add_argument(
'song_folder', help="Folder with the song database.")
parser.add_argument(
'lyrics_file', help="File with the lyrics of the songs.")
def run(args):
builder = Builder(
Path(args.song_folder),
Path(args.lyrics_file),
)
builder.build()

View File

@ -0,0 +1,26 @@
from http.server import test, SimpleHTTPRequestHandler
from functools import partial
name = 'run'
help_text = 'Start web server to test the website'
def options(parser):
parser.add_argument(
'song_folder', help="Folder with the song database.")
parser.add_argument(
'port', action='store', default=8000, type=int, nargs='?',
help='Specify alternate port [default: 8000]')
parser.add_argument(
'--bind', '-b', default='', metavar='ADDRESS',
help='Specify alternate bind address [default: all interfaces]')
def run(args):
Handler = partial(
SimpleHTTPRequestHandler,
directory=args.song_folder,
)
test(HandlerClass=Handler, port=args.port, bind=args.bind)

View File

@ -0,0 +1,23 @@
import subprocess
from pathlib import Path
from negromate.songs.utils import generate_cover, generate_thumbnail
name = 'thumbnail'
help_text = 'Generate cover and thumbnail for a video.'
def options(parser):
parser.add_argument(
'video', help="Video of the song.", type=Path)
parser.add_argument(
'second', type=int,
help='Take snapshot at this second.')
def run(args):
video = args.video
cover = video.parent / 'cover.jpg'
thumbnail = video.parent / 'thumb.jpg'
generate_cover(video, cover, args.second)
generate_thumbnail(cover, thumbnail)