Source code for flexget.plugins.cli.perf_tests

from loguru import logger

from flexget import options
from flexget.event import event
from flexget.manager import Session
from flexget.terminal import console

logger = logger.bind(name='perftests')

TESTS = ['imdb_query']


[docs] def cli_perf_test(manager, options): if options.test_name not in TESTS: console(f'Unknown performance test {options.test_name}') return session = Session() try: if options.test_name == 'imdb_query': imdb_query(session) finally: session.close()
[docs] def imdb_query(session): import time from rich.progress import track from sqlalchemy.orm import joinedload from sqlalchemy.sql.expression import select # NOTE: importing other plugins directly is discouraged from flexget.components.imdb.db import Movie from flexget.plugins.cli.performance import log_query_count imdb_urls = [] logger.info('Getting imdb_urls ...') # query so that we avoid loading whole object (maybe cached?) for _, url in session.execute(select(Movie.id, Movie.url)): imdb_urls.append(url) logger.info('Got {} urls from database', len(imdb_urls)) if not imdb_urls: logger.info('so .. aborting') return # commence testing log_query_count('test') start_time = time.time() for url in track(imdb_urls, description='Benchmarking...'): # movie = session.query(Movie).filter(Movie.url == url).first() # movie = session.query(Movie).options(subqueryload(Movie.genres)).filter(Movie.url == url).one() movie = ( session .query(Movie) .options( joinedload(Movie.genres), joinedload(Movie.languages), joinedload(Movie.actors), joinedload(Movie.directors), ) .filter(Movie.url == url) .first() ) # access it's members so they're loaded [x.name for x in movie.genres] [x.name for x in movie.directors] [x.name for x in movie.actors] [x.language for x in movie.languages] log_query_count('test') took = time.time() - start_time logger.debug('Took {:.2f} seconds to query {} movies', took, len(imdb_urls))
[docs] @event('options.register') def register_parser_arguments(): perf_parser = options.register_command('perf-test', cli_perf_test) perf_parser.add_argument('test_name', metavar='<test name>', choices=TESTS)