flask-react-docker-app
flask-react-docker-app copied to clipboard
TypeError: 'str' object is not callable
How to reproduce
# Start
$ docker-compose up
# Run database migration
$ docker-compose exec api python manage.py db upgrade
# Run database seed
$ docker-compose exec api python manage.py seed_db
Go to:
http://localhost:8080/login
inspect the page and try login
If you look at request those errors are shown:
TypeError TypeError: 'str' object is not callable
Traceback (most recent call last) File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 2464, in call
def __call__(self, environ, start_response):
"""The WSGI server calls the Flask application object as the
WSGI application. This calls :meth:`wsgi_app` which can be
wrapped to applying middleware."""
return self.wsgi_app(environ, start_response)
def __repr__(self):
return "<%s %r>" % (self.__class__.__name__, self.name)
File "/usr/local/lib/python3.7/site-packages/werkzeug/middleware/proxy_fix.py", line 169, in call self.x_prefix, environ_get("HTTP_X_FORWARDED_PREFIX") ) if x_prefix: environ["SCRIPT_NAME"] = x_prefix
return self.app(environ, start_response)
File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 2450, in wsgi_app try: ctx.push() response = self.full_dispatch_request() except Exception as e: error = e response = self.handle_exception(e) except: # noqa: B001 error = sys.exc_info()[1] raise return response(environ, start_response) finally: File "/usr/local/lib/python3.7/site-packages/flask_restx/api.py", line 638, in error_router """ if self._has_fr_route(): try: return self.handle_error(e) except Exception as f: return original_handler(f) return original_handler(e)
def handle_error(self, e):
"""
Error handler for the API transforms a raised exception into a Flask response,
File "/usr/local/lib/python3.7/site-packages/flask_cors/extension.py", line 161, in wrapped_function # Wrap exception handlers with cross_origin # These error handlers will still respect the behavior of the route if options.get('intercept_exceptions', True): def _after_request_decorator(f): def wrapped_function(*args, **kwargs): return cors_after_request(app.make_response(f(*args, **kwargs))) return wrapped_function
if hasattr(app, 'handle_exception'):
app.handle_exception = _after_request_decorator(
app.handle_exception)
File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1867, in handle_exception # if we want to repropagate the exception, we can attempt to # raise it with the whole traceback in case we can do that # (the function was actually called from the except part) # otherwise, we just raise the error again if exc_value is e: reraise(exc_type, exc_value, tb) else: raise e
self.log_exception((exc_type, exc_value, tb))
server_error = InternalServerError()
File "/usr/local/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise import collections.abc as collections_abc
def reraise(tp, value, tb=None):
if value.__traceback__ is not tb:
raise value.with_traceback(tb)
raise value
implements_to_string = _identity
else: iterkeys = lambda d: d.iterkeys() File "/usr/local/lib/python3.7/site-packages/flask_restx/api.py", line 636, in error_router :param function original_handler: the original Flask error handler for the app :param Exception e: the exception raised while handling the request """ if self._has_fr_route(): try: return self.handle_error(e) except Exception as f: return original_handler(f) return original_handler(e)
def handle_error(self, e):
File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 2447, in wsgi_app ctx = self.request_context(environ) error = None try: try: ctx.push() response = self.full_dispatch_request() except Exception as e: error = e response = self.handle_exception(e) except: # noqa: B001 error = sys.exc_info()[1] File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1952, in full_dispatch_request request_started.send(self) rv = self.preprocess_request() if rv is None: rv = self.dispatch_request() except Exception as e: rv = self.handle_user_exception(e) return self.finalize_request(rv)
def finalize_request(self, rv, from_error_handler=False):
"""Given the return value from a view function this finalizes
the request by converting it into a response and invoking the
File "/usr/local/lib/python3.7/site-packages/flask_restx/api.py", line 638, in error_router """ if self._has_fr_route(): try: return self.handle_error(e) except Exception as f: return original_handler(f) return original_handler(e)
def handle_error(self, e):
"""
Error handler for the API transforms a raised exception into a Flask response,
File "/usr/local/lib/python3.7/site-packages/flask_cors/extension.py", line 161, in wrapped_function # Wrap exception handlers with cross_origin # These error handlers will still respect the behavior of the route if options.get('intercept_exceptions', True): def _after_request_decorator(f): def wrapped_function(*args, **kwargs): return cors_after_request(app.make_response(f(*args, **kwargs))) return wrapped_function
if hasattr(app, 'handle_exception'):
app.handle_exception = _after_request_decorator(
app.handle_exception)
File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1821, in handle_user_exception return self.handle_http_exception(e)
handler = self._find_error_handler(e)
if handler is None:
reraise(exc_type, exc_value, tb)
return handler(e)
def handle_exception(self, e):
"""Handle an exception that did not have an error handler
associated with it, or that was raised from an error handler.
File "/usr/local/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise import collections.abc as collections_abc
def reraise(tp, value, tb=None):
if value.__traceback__ is not tb:
raise value.with_traceback(tb)
raise value
implements_to_string = _identity
else: iterkeys = lambda d: d.iterkeys() File "/usr/local/lib/python3.7/site-packages/flask_restx/api.py", line 636, in error_router :param function original_handler: the original Flask error handler for the app :param Exception e: the exception raised while handling the request """ if self._has_fr_route(): try: return self.handle_error(e) except Exception as f: return original_handler(f) return original_handler(e)
def handle_error(self, e):
File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1950, in full_dispatch_request self.try_trigger_before_first_request_functions() try: request_started.send(self) rv = self.preprocess_request() if rv is None: rv = self.dispatch_request() except Exception as e: rv = self.handle_user_exception(e) return self.finalize_request(rv)
def finalize_request(self, rv, from_error_handler=False):
File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1936, in dispatch_request getattr(rule, "provide_automatic_options", False) and req.method == "OPTIONS" ): return self.make_default_options_response() # otherwise dispatch to the handler for that endpoint return self.view_functionsrule.endpoint
def full_dispatch_request(self):
"""Dispatches the request and on top of that performs request
pre and postprocessing as well as HTTP exception catching and
error handling.
File "/usr/local/lib/python3.7/site-packages/flask_restx/api.py", line 375, in wrapper :param resource: The resource as a flask view function """
@wraps(resource)
def wrapper(*args, **kwargs):
resp = resource(*args, **kwargs)
if isinstance(resp, BaseResponse):
return resp
data, code, headers = unpack(resp)
return self.make_response(data, code, headers=headers)
File "/usr/local/lib/python3.7/site-packages/flask/views.py", line 89, in view constructor of the class. """
def view(*args, **kwargs):
self = view.view_class(*class_args, **class_kwargs)
return self.dispatch_request(*args, **kwargs)
if cls.decorators:
view.__name__ = name
view.__module__ = cls.__module__
for decorator in cls.decorators:
File "/usr/local/lib/python3.7/site-packages/flask_restx/resource.py", line 40, in dispatch_request if meth is None and request.method == "HEAD": meth = getattr(self, "get", None) assert meth is not None, "Unimplemented method %r" % request.method
for decorator in self.method_decorators:
meth = decorator(meth)
self.validate_payload(meth)
resp = meth(*args, **kwargs)
TypeError: 'str' object is not callable