diff --git a/manage.py b/manage.py index 9b8518937d48..b27a04ca41af 100755 --- a/manage.py +++ b/manage.py @@ -23,9 +23,32 @@ import sys from argparse import ArgumentParser +from openedx_filters.tooling import OpenEdxPublicFilter + + +class ManagementCommandExecutionRequested(OpenEdxPublicFilter): + """ + Filter triggered before a management command is executed. + """ + + filter_type = 'org.openedx.platform.management.command.execute.requested.v1' + + @classmethod + def run_filter(cls, command_name, service_variant, command_runner): + """ + Run the management command execution pipeline. + """ + return cls.run_pipeline( + command_name=command_name, + service_variant=service_variant, + command_runner=command_runner, + ) + def parse_args(): - """Parse edx specific arguments to manage.py""" + """ + Parse edx specific arguments to manage.py + """ parser = ArgumentParser() subparsers = parser.add_subparsers(title='system', description='edX service to run') @@ -96,4 +119,22 @@ def parse_args(): django_args.append('--help') from django.core.management import execute_from_command_line - execute_from_command_line([sys.argv[0]] + django_args) + + def command_runner(): + return execute_from_command_line([sys.argv[0]] + django_args) + + command_name = next((arg for arg in django_args if not arg.startswith('-')), 'help') + + pipeline_output = ManagementCommandExecutionRequested.run_filter( + command_name=command_name, + service_variant=os.environ.get("SERVICE_VARIANT", edx_args.service_variant), + command_runner=command_runner, + ) + + runner = command_runner + if isinstance(pipeline_output, dict): + runner = pipeline_output.get('command_runner', command_runner) + if not callable(runner): + runner = command_runner + + runner()