I am using Python 3.12 along with Flask,
it's Flask App with mongo db.
I'm encountering an UnboundLocalError
in my Flask application. The error occurs when I try to access the request
object within one of my view functions. Here is the full traceback:
The error suggests that the request
object is not available within the get_user_contribution_requests
function. However, I have imported request
from flask
, and I believe it should be accessible.
File "/Users/divakaryadav/road-guardian/backend/env/lib/python3.12/site-packages/flask/app.py", line 880, in full_dispatch_request
rv = self.dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/divakaryadav/road-guardian/backend/env/lib/python3.12/site-packages/flask/app.py", line 865, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/divakaryadav/road-guardian/backend/env/lib/python3.12/site-packages/flask_jwt_extended/view_decorators.py", line 170, in decorator
return current_app.ensure_sync(fn)(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/divakaryadav/Documents/GitHub/Sync1.0/backend/app.py", line 163, in get_user_contribution_requests
page_str = request.args.get('page', 1)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
UnboundLocalError: cannot access local variable 'request' where it is not associated with a value
Here is the relevant portion of my code:
@app.route('/user-contribution-requests', methods=['GET'])
@jwt_required()
def get_user_contribution_requests():
contribution_requests = db.contribution_requests
user_id = get_jwt_identity()
page_str = request.args.get('page', 1)
page = int(page_str)
rows_per_page = int(request.args.get('rowsPerPage', 5))
total_count = contribution_requests.count_documents({'user_id': user_id})
requests = list(contribution_requests.find({'user_id': user_id})
.skip((page - 1) * rows_per_page)
.limit(rows_per_page))
for request in requests:
request['_id'] = str(request['_id'])
if 'project_id' in request:
request['project_id'] = str(request['project_id'])
# Convert date strings to datetime objects
for date_field in ['request_creation_date', 'created_at', 'updated_at']:
if date_field in request and isinstance(request[date_field], str):
try:
request[date_field] = datetime.fromisoformat(request[date_field])
except ValueError:
request[date_field] = None
# Format dates as ISO strings
request['request_creation_date'] = request['request_creation_date'].isoformat() if request['request_creation_date'] else None
request['created_at'] = request['created_at'].isoformat() if request['created_at'] else None
request['updated_at'] = request['updated_at'].isoformat() if request['updated_at'] else None
return jsonify({'contribution_requests': requests, 'totalCount': total_count}), 200
The most likely cause of this error is a name conflict. In your function, you're using request as a variable name in the loop.
for request in requests:
request['_id'] = str(request['_id'])
rename the request to req and it should work as intended
for req in requests:
req['_id'] = str(req['_id'])