Я некоторое время использовал flask_restful в своем проекте, потому что мне нравится разделять свои ресурсы на разные файлы для организации c. Теперь я хотел бы добавить flask_caching, и я столкнулся с проблемой (простого?) Циклического импорта
Структура моего проекта выглядит следующим образом
flask_api.py
-resources
--my_resource.py
--my_other_resource.py
--so_many_more_resources.py
Конечные точки my_resources.py добавляются в flask_api .py, где я также создаю объект Cache flask_cache следующим образом:
# flask_api.py
from flask import Flask
from flask_restful import Api
from flask_caching import Cache
from resources import my_resource
app = Flask(__name__)
cache = Cache(app, config={'sample config'})
api = Api(app)
api.add_resource(my_resource.GetStuff, '/api/v2/stuff/get')
# this file also runs the app
Затем я (пытаюсь) импортировать кэш в my_resource.py - где я использую декоратор @cache
# resources/my_resource.py
from flask_api import cache
class GetStuff(Resource):
@cache.memoize(timeout=30)
def get():
return "Stuff"
но это вызывает ужасную проблему кругового импорта. Я мог бы поместить весь свой импорт ресурсов ниже линии cache = Cache(...)
, выше api.add_resource()
. Тем не менее, это похоже на хакерский запах кода и делает очень, очень мясной бутерброд. Я бы предпочел, чтобы они были в верхней части файла.
Как правильно решить эту проблему? (надеюсь, без переделки больших частей кодовой базы)
tl; dr: flask_api создает кеш и импортирует ресурсы -> ресурсы не могут импортировать кеш из flask_api