Подтвердить что ты не робот

Написание пользовательской команды управления с помощью аргументов и опций - объяснение необходимых полей

В моем приложении django я пишу собственную команду управления, которая создаст экземпляр объекта на основе переданных аргументов и будет иметь возможность сохранить его в базе данных в зависимости от того, передана опция --save или нет.

Я получил большую помощь по этому вопросу из самой документации django. здесь также есть важные указания о том, как передавать несколько аргументов, и здесь о том, как иметь параметры.

from optparse import make_option

class Command(BaseCommand):
  option_list = BaseCommand.option_list + (
    make_option('--delete',
        action='store_true',
        dest='delete',
        default=False,
        help='Delete poll instead of closing it'),
    )

  def handle(self, *args, **options):
    # ...
    if options['delete']:
        poll.delete()
    # ...

Однако я не могу найти подробное объяснение полей в make_option. Например, optparse.make_option списки

Instance attributes:
_short_opts : [string]
_long_opts : [string]

action : string
type : string
dest : string
default : any
nargs : int
const : any
choices : [string]
callback : function
callback_args : (any*)
callback_kwargs : { string : any }
help : string
metavar : string

Это help говорит само за себя, и я понял, что будет значить dest, но мне не ясно, что означает action='store_true'. На самом деле было бы замечательно, если бы кто-нибудь мог дать мне краткое описание того, что означают все аргументы make_option...

большое спасибо

4b9b3361

Ответ 1

Документы optparse могут быть немного полезнее. Вы в основном говорите функции управления, что каждый вариант, который вам нужен, должен делать.

Ключевое слово action является наиболее показательным, и оно настраивает то, что вы хотите сделать с этой опцией - это просто флаг что-то специальное (a callback, т.е. "--enable-feature" ), или если он принимает параметр, например (store, т.е. '-things 10').

Имея это в виду, остальные варианты имеют немного больше смысла, чем все это имеет в виду. Прочитайте атрибуты ", чтобы получить объяснение того, что вы указали, а затем " действия ", чтобы увидеть, что я упомянул выше.

Ответ 2

Объяснение make_option из документов http://docs.python.org/2/library/optparse.html#populating-the-parser

make_option() - это функция factory для создания экземпляров Option; в настоящее время это псевдоним для конструктора Option. Будущая версия optparse может разделить Option на несколько классов и make_option() выберет подходящий класс для создания экземпляра. Не создавать экземпляр опции непосредственно.

Это все возможные атрибуты опции:

http://docs.python.org/2/library/optparse.html#option-attributes

Общее использование в команде управления django:

class Command(BaseCommand):
    help = "Command to import a list of X"
    option_list = BaseCommand.option_list + (
        make_option(
            "-f", 
            "--file", 
            dest = "filename",
            help = "specify import file", 
            metavar = "FILE"
        ),
    )

    option_list = option_list + (
        make_option(
            "-s", 
            "--slug", 
            dest = "category",
            help = "category slug", 
            metavar = "SLUG"
        ),
    )

    def handle(self, *args, **options):
            # make sure file option is present
            if options['filename'] == None :
                raise CommandError("Option `--file=...` must be specified.")

            # make sure file path resolves
            if not os.path.isfile(options['filename']) :
                raise CommandError("File does not exist at the specified path.")

            # make sure form option is present
            if options['category'] == None :
                raise CommandError("Option `--slug=...` must be specified.")