Какой вариант использования stealth_options в Django? - PullRequest
1 голос
/ 14 июля 2020

согласно документации :

Для пользовательских команд управления, которые используют параметры, не созданные с помощью parser.add_argument (), добавьте атрибут stealth_options в команду:

class MyCommand(BaseCommand):
    stealth_options = ('option_name', ...)

но почему бы просто не добавить эти параметры в parser.add_argument ()? Есть ли выгода от использования stealth_options?

1 Ответ

1 голос
/ 14 июля 2020

В основном для целей тестирования ИМО, проверьте этот фрагмент кода, взятый из этого примера .

 def inspectdb_tables_only(table_name):
    """
    Limit introspection to tables created for models of this app.
    Some databases such as Oracle are extremely slow at introspection.
    """
    return table_name.startswith('inspectdb_')


class InspectDBTestCase(TestCase):
    unique_re = re.compile(r'.*unique_together = \((.+),\).*')

    def test_stealth_table_name_filter_option(self):
        out = StringIO()
        call_command('inspectdb', table_name_filter=inspectdb_tables_only, stdout=out)
        error_message = "inspectdb has examined a table that should have been filtered out."
        self.assertNotIn("class DjangoContentType(models.Model):", out.getvalue(), msg=error_message)

Теперь мы можем использовать stealth_options, чтобы упростить процесс обхода call_command () проверьте и уточните наш тестовый метод , скрывая эти параметры из открытого API команд .

call_command () теперь проверяет, что аргумент парсер вызываемой команды определяет все параметры, передаваемые call_command ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...