Таблица [app.func.<id>.examples] хранит именованные примеры вызова функции. Это namespace-контейнер: сам блок может быть пустым, а реальные примеры живут в [app.func.<id>.examples.<name>].
| Ключ | Что делает | Как влияет на поведение |
|---|---|---|
inputs |
Значения входов для примера | Опциональное поле. Если его не указать, оно считается равным inputs={} и пример всё равно остаётся валидным. |
type |
Формат результата примера | Опциональное поле. Значения: json по умолчанию, text для текстовых ответов и image для image-стримов. |
@Test |
Помечает пример как тестовый контракт | Делает пример источником generated contract tests: codegen помечает endpoint-методы @autotest, пишет tests/api_test.py и поддерживает fixtures/hooks/params для canonical JSON примеров. |
@Docs |
Помечает пример как документируемый сценарий | Делает пример пригодным для показа в документации и как пользовательский sample. Может принимать print=..., чтобы сгенерировать дополнительные print(...) в mini-guide. |
description |
Краткое описание примера | Используется генератором для README и mini-docs только если явно задано; без него комментарий не пишется. |
inputs должен быть inline table с ключами, которые совпадают с именами объявленных input-ов функции. Если inputs не указан, анализатор трактует пример как inputs={}.
- анализатор проверяет, что каждый
inputs.<key>действительно существует в функции; - анализатор проверяет типы и допустимые значения;
@Testexamples используются генератором для contract tests: JSON-примеры становятся canonical fixtures, аtext/imageпримеры превращаются в ручные проверки;FUNCRESULTможно использовать внутриinputs.<key>.valueи внутри@Docs(print=...), чтобы связать один пример с результатом другой функции; ссылка должна указывать имя source example перед result-kind, например<FUNCRESULT.<function>.<example>.JSON[@Key(0)]["id"]>;@Docsможет принимать необязательный аргументprint=...; значение может быть одним выражением или списком выражений, и генератор превратит их вprint(...)подряд в generated mini-guide;- если текущий пример помечен
@Docsили@Test, то referenced example сFUNCRESULTдолжен иметь те же флаги; если у текущего примера флага нет, проверку для него не выполняем; typeуправляет тем, как генератор покажет пример в README:jsonпо умолчанию,textдля строкового ответа,imageдля image-stream;descriptionможно использовать как короткую статическую подпись для документации и generated README; если поле отсутствует, комментарий в mini-guide не пишется;- generated README/example.py/quick_start.rst включают все примеры, помеченные
@Docs;@Testостаётся независимым флагом для тестового контракта; - если
@Docsпример ссылается на не-@Docsпример черезFUNCRESULT, LSP сообщает об этом, а codegen падает во время генерации вместо того, чтобы скрывать проблему в output; - если
inputsотсутствует, это эквивалентноinputs={}и не считается ошибкой. - имя примера становится именем переменной в generated README/example.py/quick_start.rst; если два выбранных примера сводятся к одному имени переменной, LSP покажет ошибку до генерации.
@Testпомечает пример для contract testing.@Docsпомечает пример для отображения в документации.
FUNCRESULTдопускается внутри example inputs и внутри@Docs(print=...); он должен указывать source example по имени, например<FUNCRESULT.<function>.<example>.JSON>. ПослеJSONможно применять@Key(id)для выбора ключа или элемента:idдолжен быть целым числом>= -1;id=0означаетnext(iter(data)),id=-1означаетnext(reversed(data)), другие значения используютlist(data)[id].- Если пример ссылается на несуществующий input или даёт значение неподходящего типа, analyzer выдаёт диагностику.