У меня есть приложение фляги с корневой папкой с именем project_folder
.
Фрагмент кода из файла __init__.py
этого пакета project_folder
:
@jwt.token_in_blacklist_loader
def check_if_token_in_blacklist(decrypted_token):
jti = decrypted_token['jti']
return project_folder.Model.RevokedTokenModel.is_jti_blacklisted(jti)
from project_folder.Controller.root import root
from project_folder.Controller import auth_controller
from project_folder.Controller import item_controller
ТеперьИнтересно, что пакет project_folder
, естественно, сам имеет другие меньшие пакеты, которые я импортирую, чтобы использовать их (для ресурсов REST в этом примере). Это последние 3 строки, пока ничего не выдает ошибку.
Но, если вы посмотрите на аннотированную функцию (в этом примере она всегда запускается до того, как используется какой-то токен JWT), яЯ возвращаю функцию внутреннего пакета. Теперь, когда логика действительно выполняет эту часть, код ломается:
PROJECT_ROUTE\project_folder\__init__.py", line 38, in check_if_token_in_blacklist
return project_folder.Model.RevokedTokenModel.is_jti_blacklisted(jti)
NameError: name 'project_folder' is not defined
Подумав об этом, это кажется понятным. При импорте из project_folder
происходит импорт из файла __init__.py
пакета, который является фактическим файлом, которым в настоящее время является интерпретатор. Таким образом, удаление префикса имени пакета с
return project_folder.Model.RevokedTokenModel.is_jti_blacklisted(jti)
до
return Model.RevokedTokenModel.is_jti_blacklisted(jti)
больше не вызывает ошибку.
Вопрос: почему это только проблема? внутри функции обратного вызова, а не с последними 3 импортами?