Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue with functools.partial in 1.10.0 using Python 2.7.9 #83

Closed
joonathan opened this issue Dec 12, 2014 · 2 comments
Closed

Issue with functools.partial in 1.10.0 using Python 2.7.9 #83

joonathan opened this issue Dec 12, 2014 · 2 comments

Comments

@joonathan
Copy link

When upgrading to 1.10.0 in environment with Python 2.7.0 following exception is thrown:

File "/Users/joonathan/Development/App/application/app.py", line 61, in create_app
configure_extensions(app)
File "/Users/joonathan/Development/App/application/app.py", line 98, in configure_extensions
cors.init_app(app)
File "/Users/joonathan/.virtualenvs/App/lib/python2.7/site-packages/flask_cors.py", line 274, in init_app
app.handle_exception)
File "/Users/joonathan/.virtualenvs/App/lib/python2.7/site-packages/flask_cors.py", line 267, in _after_request_decorator
@wraps(f)
File "/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/functools.py", line 33, in update_wrapper
setattr(wrapper, attr, getattr(wrapped, attr))
AttributeError: 'functools.partial' object has no attribute 'module'

@corydolphin
Copy link
Owner

@joonathan thank you for the bug report, I have found the issue and I a working on a fix.

I am confused that this does not seem to happen in Python != 2.7.9. I don't believe there were any backwards incompatible changes in the 2.7.9 released two days ago.

That said, I have simplified the decorator, so it no longer causes this problem, and is even more readable :-)

PR for reference #85

@corydolphin
Copy link
Owner

While I was able to repro this by upgrading a virtualenv, I am not able to replicate this in a clean install of 2.7.9. Looking at that stack trace, it looks like something wacky is going on with virtualenv. That stack trace spans multiple Python paths. I was able to cause a similar one:

Traceback (most recent call last):
  File "/Users/Cory/Development/flask-cors/tests/test_exception_interception.py", line 75, in test_acl_abort_500
    resp = self.get('/test_acl_abort_500')
  File "/Users/Cory/Development/flask-cors/tests/base_test.py", line 53, in get
    return self._request('get', *args, **kwargs)
  File "/Users/Cory/Development/flask-cors/tests/base_test.py", line 50, in _request
    return getattr(c, verb)(*args, **kwargs)
  File "/Users/Cory/Development/flask-cors/.env/lib/python2.7/site-packages/werkzeug/test.py", line 762, in get
    return self.open(*args, **kw)
  File "/Users/Cory/Development/flask-cors/.env/lib/python2.7/site-packages/flask/testing.py", line 108, in open
    follow_redirects=follow_redirects)
  File "/Users/Cory/Development/flask-cors/.env/lib/python2.7/site-packages/werkzeug/test.py", line 736, in open
    response = self.run_wsgi_app(environ, buffered=buffered)
  File "/Users/Cory/Development/flask-cors/.env/lib/python2.7/site-packages/werkzeug/test.py", line 659, in run_wsgi_app
    rv = run_wsgi_app(self.application, environ, buffered=buffered)
  File "/Users/Cory/Development/flask-cors/.env/lib/python2.7/site-packages/werkzeug/test.py", line 855, in run_wsgi_app
    app_iter = app(environ, start_response)
  File "/Users/Cory/Development/flask-cors/.env/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__
    return self.wsgi_app(environ, start_response)
  File "/Users/Cory/Development/flask-cors/.env/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/Users/Cory/Development/flask-cors/flask_cors.py", line 270, in decorator
    return update_wrapper(wrapped_function, f)
  File "/usr/local/Cellar/python/2.7.8_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/functools.py", line 33, in update_wrapper
    setattr(wrapper, attr, getattr(wrapped, attr))
AttributeError: 'exceptions.AttributeError' object has no attribute '__module__'

I am hopeful that this issue does not occur on a clean install of Python, fingers crossed it is just a OSX issue with virtualenv. I wish my automated testing had caught this! (Looks like Travis CI is still on 2.7.8)

Sorry for the trouble and thanks again for the awesome report!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants