Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Не отрабатывает флаг "Обязательный" #63

Open
arkuznetsov opened this issue Jul 22, 2021 · 16 comments
Open

Comments

@arkuznetsov
Copy link

Указываю опцию для команды:

	Команда.Опция("i id", "", "идентификатор")
	       .ТСтрока()
	       .Обязательный();

Ожидаю что если не указана опция "id", то должно ругнуться, но этого не происходит.

PS: Искал по коды библиотеки, не нашел кода проверки обязательности опций :-(

@khorevaa
Copy link
Member

Да верно. Обязательность вводилась для аргументов и на скорую руку.

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

https://github.com/khorevaa/cli#необязательность

@arkuznetsov
Copy link
Author

@khorevaa А если Спек указать, то нет подробностей, просто пишет "Ошибка разбора параметров".

@khorevaa
Copy link
Member

khorevaa commented Jan 26, 2022

Ага есть такое.. Не все идеально

@arkuznetsov
Copy link
Author

@khorevaa Может все-таки запилить проверку обязательных опций, без учета Спека?
В каком только месте конкретно это лучше сделать?

@khorevaa
Copy link
Member

Я даже не представляю как это сделать, т.к. по факту (по капотом) там все равно формируется строка стека. Может проще ошибку просто детализировать...

@arkuznetsov
Copy link
Author

@khorevaa Как ошибку детализировать я долго разбираться буду :-(
И еще я не совсем понимаю работу со Спеком. Вот когда спек по умолчанию я могу опции в любом составе и порядке указывать. А когда Спек задан, то порядок уже строго определен?

@khorevaa
Copy link
Member

вообще как в спеке задано так и вводит. там в хелпе примеры есть

@arkuznetsov
Copy link
Author

@khorevaa Я про то что с [ОПЦИИ] - порядок не важен, с конкретным спеком важен, можно как-то указать спек (чтоб обязательность проверялась), но при этом оставить произвольный порядок опций?

@khorevaa
Copy link
Member

[ -x | - y ] -r ...
r обязательный остальные нет

@arkuznetsov
Copy link
Author

arkuznetsov commented Jan 28, 2022

@khorevaa Это понятно. Но могу ли я в таком варианте указать -r блабла -x блабла?

@khorevaa
Copy link
Member

khorevaa commented Jan 28, 2022

@khorevaa Это понятно. Но могу ли я в таком варианте указать -r блабла -x блабла?

пробовать надо ))) Почитай тут https://github.com/khorevaa/cli#все-опции

@arkuznetsov
Copy link
Author

@khorevaa Ну разумеется читал, но ответа на мой вопрос про произвольный порядок не увидел. Ну и когда проверял нарвался на отсутствие конкретики по ошибке. :-)

@khorevaa
Copy link
Member

Короче от пеории к делу нужен пример. где хочешь сделать спек ну я его тогда посмотрю и скажу что надо сделать

@arkuznetsov
Copy link
Author

arkuznetsov commented Jan 28, 2022

@khorevaa например, я пытался сделать спек для новой версии cpdb для команды database restore, у меня получилось следующее: -d -p [-c] [-o] [--cd] [--sd] [--sl] --pd --pl [-r] [--cn] [--ds]
при корректном указании ключей команда отрабатывала, при некорректном - "Ошибка разбора команды" без подробностей.
Сейчас версия в фича-ветке: https://github.com/arkuznetsov/cpdb/tree/go2cli. Команда в классе https://github.com/arkuznetsov/cpdb/blob/go2cli/src/cmd/%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D1%8B/%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B0%D0%92%D0%BE%D1%81%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D1%8C%D0%98%D0%B7%D0%A0%D0%B5%D0%B7%D0%B5%D1%80%D0%B2%D0%BD%D0%BE%D0%B9%D0%9A%D0%BE%D0%BF%D0%B8%D0%B8.os.

@arkuznetsov
Copy link
Author

@khorevaa Я пока себе напилил "почти универсальную" проверку по опциям команды в зависимости от флага обязательности. :-)

@khorevaa
Copy link
Member

khorevaa commented Jan 30, 2022

Надо возвращать ошибки тут Попробуй эту сборку #61

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants