Flask cache throws error - KeyError: <flask_caching.Cache object at 0x7ff585e47358>

Viewed 1246

I'm trying to add caching to my Python Flask application. I did what Flask-Caching pages suggest, so I have this in app module:

config = {
    # "DEBUG": True,
    "env": 'dev',
    "secret_key": 'my secret stuff',
    "CACHE_TYPE": "simple",
    "CACHE_DEFAULT_TIMEOUT": 300
}

app = Flask(__name__)
app.config.from_mapping(config)
cors = CORS(app, resources={"/api/*": {"origins": "*"}})
cache = Cache(app)
cache.init_app(app)


@app.before_first_request
def init_resources():
    Database.initialize()


app.register_blueprint(auth_api_blueprint, url_prefix="/api/auth")
app.register_blueprint(user_api_blueprint, url_prefix="/api/user")
app.register_blueprint(year_api_blueprint, url_prefix="/api/year")
app.register_blueprint(notice_api_blueprint, url_prefix="/api/notice")
app.register_blueprint(event_api_blueprint, url_prefix="/api/event")
app.register_blueprint(admins_api_blueprint, url_prefix="/api/admin")
app.register_blueprint(guardian_api_blueprint, url_prefix="/api/guardian")
app.register_blueprint(employee_api_blueprint, url_prefix="/api/employee")
app.register_blueprint(student_api_blueprint, url_prefix="/api/student")
app.register_blueprint(teacher_api_blueprint, url_prefix="/api/teacher")

if __name__ == '__main__':
    with app.app_context():
        cache.clear()
        
    # app.run(port=8080) - port does not work here, it is still default 5000
    app.run()

then I applied cached decorator to the method like this:

from common.database import Database
from common.decorators import requires_login

year_api_blueprint = Blueprint('api/year', __name__)

from src.app import cache

@year_api_blueprint.route('/all')
@cache.cached(timeout=500, key_prefix="years")
# @requires_login - this need to be public
def get_all_years():
    data = Database.find("years", {})
    if data is not None:
        return jsonify([year for year in data])

all seems to work fine and year above are not longer called many times (just once) However I am getting this error every time when cached years are used:

127.0.0.1 - - [20/Oct/2020 17:36:32] "OPTIONS /api/year/all HTTP/1.1" 200 -
Exception possibly due to cache backend.
Traceback (most recent call last):
  File "/home/smoczyna/Python-Projects/SchoolMateAPI/venv/lib/python3.6/site-packages/flask_caching/__init__.py", line 435, in decorated_function
    rv = self.cache.get(cache_key)
  File "/home/smoczyna/Python-Projects/SchoolMateAPI/venv/lib/python3.6/site-packages/flask_caching/__init__.py", line 244, in cache
    return app.extensions["cache"][self]
KeyError: <flask_caching.Cache object at 0x7ff585e47358>

I've seen similar post here but I don't understand the solution and don't know how to apply that. I have nothing more than this about cache in app.

So my question is what is possibly missing or misconfigured here ?

0 Answers
Related