В методе BaseCommand.create_parser () создается набор аргументов по умолчанию и анализируется для всех подклассовых команд. Каков наилучший способ расширить этот метод, добавив дополнительный аргумент?
Один из вариантов воздействия на желаемое поведение - переопределить каждую из доступных команд, расширяя метод add_arguments()
(как показано ниже); Я бы предпочел этого избежать, так как это звучит как кошмар обслуживания.
Желаемое поведение
Следующий модуль переопределяет команду print_settings
, предоставляемую django -extensions обеспечить добавление нужного аргумента в одну команду. Однако я хочу добавить этот аргумент ко всем командам в моем приложении.
"""Override the ``print_settings`` command provided by ``django-extensions``.
Add support to load a specified config file.
.. module:: odlogging.management.commands.print_settings
:synopsis: override the ``print_settings`` command provided by ``django-extensions``
"""
# stdlib
import logging
from pathlib import Path
from typing import Any
# django packages
from django.core.management import base
# third party
from django_extensions.management.commands import print_settings
# local
from odlogging.common import config_parse
logger = logging.getLogger(__name__)
class Command(print_settings.Command):
"""Override the ``print_settings`` command to config files."""
def add_arguments(self, parser: base.CommandParser):
"""Add the ``--config`` argument for specifying the environment configuration.
:param parser: the parser used for parsing command arguments
:type parser: base.CommandParser
"""
super().add_arguments(parser)
parser.add_argument(
"--config",
default=".config.json",
type=Path,
help="specify the path to the config file containing environment settings",
)
def handle(self, *args: Any, **options: Any):
"""Override the default method to load the specified config file.
:param options: the arguments parsed from the command line
:type options: Any
"""
# execute internal config file handling
config_parse.load_and_validate_config(options["config"])
super().handle(*args, **options)