Size: a a a

2019 October 16

KK

Kirill (Cykooz) Kuzminykh in rannts
Ладно бы если оно могло вернуть NotFoundResult(), у которого есть поле body
источник

KK

Kirill (Cykooz) Kuzminykh in rannts
Можно было бы простым isinstace() отделаться
источник

KK

Kirill (Cykooz) Kuzminykh in rannts
Просто OpenAPI генерит код не для того что бы через него тестировать что-то, а что бы использовать в боевом коде. У нас для тестов специальный код написан, который делает вот то что ты видимо хочешь - мы говорим что ожидаем от запроса к API ответ с кодом 404 и вот "этим" содержимым тела. И наш код это всё обрабатывает и райзит исключение только если получит что-то другое вместо 404.
источник

SZ

Sergey Z in rannts
Kirill (Cykooz) Kuzminykh
Так а что оно возвращает в случае 200-ого кода? Объект класса OkResult, у которого есть поле body со словариком, который вынули из JSON-ки? Или сразу словарик?
в случае 200 ответа возвращается специальный объект который соответствующий именно этому api  и именно этому коду ответа.
источник

KK

Kirill (Cykooz) Kuzminykh in rannts
Sergey Z
в случае 200 ответа возвращается специальный объект который соответствующий именно этому api  и именно этому коду ответа.
Типа там могут быть другие объекты для других кодов ответа?
источник

KK

Kirill (Cykooz) Kuzminykh in rannts
Хотя, как я написал выше: кардинально разные типы результатов у одной функции - это не очень хорошая практика.
источник

KK

Kirill (Cykooz) Kuzminykh in rannts
Уж лучше пачку исключений завести - их проще обрабатывать через try...except, чем проверять ответ через if isinstace()
источник

SZ

Sergey Z in rannts
для 404 кода есть другой нагенереный объект именно для этого api с цифрами 404 в названии.
то есть генератор создаёт респонс объекты на каждый чих для каждого кода ответа, но при этом возвращает не имеющийся объект как в случае с 2ХХ а исключение.
источник

KK

Kirill (Cykooz) Kuzminykh in rannts
Может нужный тебе объект сидит внутри исключения?
источник

SZ

Sergey Z in rannts
ты пытаешься мне помочь, а мне не помощь нужны а либо сочувствие либо объяснение в соответствии с какой логикой я получаю исключение на ожидаемый и описаный ответ :)
источник

SZ

Sergey Z in rannts
даже если нужный объект сидит внутри исключения, почему он там сидит и зачем вообще нужно генерить исключение...
я как бы допускаю вариант, что я не понимаю какого-то великого замысла
источник

SZ

Sergey Z in rannts
допустим у меня описаны ответы (и нагенерены объекты) для 200 и 404 кодов.
но тут внезапно приходит ответ с 400, для которого ни описания ни объекта нет. вот тут то и неплохо бы исключение сгенерить, поведение то не определено
источник

RB

Roman Bolkhovitin in rannts
Так а в постмане (любом другом клиенте) что будет если эту твою апишечку дергать? Правильный джейсон или исключение?
источник

SZ

Sergey Z in rannts
исключение генерит не api, исключение генерится генерёным кодом (клиентским кодом) созданным на основе описания api
источник

SZ

Sergey Z in rannts
сложно без примеров, а писать пример сложно и не нужно
источник

KK

Kirill (Cykooz) Kuzminykh in rannts
Sergey Z
допустим у меня описаны ответы (и нагенерены объекты) для 200 и 404 кодов.
но тут внезапно приходит ответ с 400, для которого ни описания ни объекта нет. вот тут то и неплохо бы исключение сгенерить, поведение то не определено
Можешь вспомнить про языки со статической типизацией, где без всяких "высоких сфер ООП и интерфейсов" очень проблемно возвращать из функции объекты разных типов. Но зато как хорошо в них делать статический анализ кода и всякие плюшки в IDE.
Ну и ещё можешь мне просто поверить на слово, что возвращать разные типы ответа из функции может вылится в попа-боль. Исключение только для None - это ещё более менее просто обрабатываемый случай результата.
Предполагаю что все те разные типы нагенереных объектов, под каждый код ошибки, не достаточно однородны, что бы можно было без лапши из if-чиков работать с ними одним и тем же кодом.
источник

KK

Kirill (Cykooz) Kuzminykh in rannts
Поэтому генератор кода сделан так, что бы у функции был всегда результат конкретного типа (или None), а все остальные варианты возвращаются как исключение.
источник

AM

Artem Malyshev in rannts
Alexander Gorokhov
Недавно внезапно узнал что в пайтесте можно импортить тесты. Тобишь в файле test_foo.py пишешь
from common_tests import test_foo, test_bar
from data_tests import *

И пайтест нормально все понимает
Это сайд эффект, который получается в силу специфики внутренней механики pytest. Эсли фаза луны поменяется, то вашы тесты сломаются.
источник

AG

Alexander Gorokhov in rannts
Artem Malyshev
Это сайд эффект, который получается в силу специфики внутренней механики pytest. Эсли фаза луны поменяется, то вашы тесты сломаются.
Чето не похоже на сайд еффект, сам пайтест даже указывает что прогнал такой то тест в таком файле  который на самом деле из другого файла
источник

AM

Artem Malyshev in rannts
Alexander Gorokhov
Чето не похоже на сайд еффект, сам пайтест даже указывает что прогнал такой то тест в таком файле  который на самом деле из другого файла
--import-mode={prepend,append}
                       prepend/append to sys.path when importing test modules, default is to prepend.
Даже флаги есть как этой магией рулить.
источник