braintree / braintree_python

Braintree Python library
https://developer.paypal.com/braintree/docs/start/overview
MIT License
242 stars 116 forks source link

Can't upgrade to Braintree 4.18.1 / Python 3.10.9 (DeprecationWarning: Use ProtectionLevel enum instead) #148

Closed tammyalexandra closed 1 year ago

tammyalexandra commented 1 year ago

Braintree 4.18.1 (trying to upgrade from 4.17.1) Python 3.10.9 (recently upgraded; works with 4.17.1) Running locally on Mac OS X 13.1

The upgrade is causing automated tests with import braintree to fail with the following:

...

    import braintree
../Library/Caches/pypoetry/virtualenvs/xxx-08n5XoMP-py3.10/lib/python3.10/site-packages/braintree/__init__.py:10: in <module>
    from braintree.braintree_gateway import BraintreeGateway
../Library/Caches/pypoetry/virtualenvs/xxx-08n5XoMP-py3.10/lib/python3.10/site-packages/braintree/braintree_gateway.py:10: in <module>
    from braintree.dispute_gateway import DisputeGateway
../Library/Caches/pypoetry/virtualenvs/xxx-08n5XoMP-py3.10/lib/python3.10/site-packages/braintree/dispute_gateway.py:4: in <module>
    from braintree.dispute import Dispute
../Library/Caches/pypoetry/virtualenvs/xxx-08n5XoMP-py3.10/lib/python3.10/site-packages/braintree/dispute.py:8: in <module>
    class Dispute(AttributeGetter):
../Library/Caches/pypoetry/virtualenvs/xxx-08n5XoMP-py3.10/lib/python3.10/site-packages/braintree/dispute.py:72: in Dispute
    class ChargebackProtectionLevel(object):
../Library/Caches/pypoetry/virtualenvs/xxx-08n5XoMP-py3.10/lib/python3.10/site-packages/braintree/dispute.py:80: in ChargebackProtectionLevel
    warnings.warn("Use ProtectionLevel enum instead", DeprecationWarning)
E   DeprecationWarning: Use ProtectionLevel enum instead

Thanks for your help in resolving this!

hollabaq86 commented 1 year ago

👋 thanks for reaching out! In v 4.18.0 we deprecated ChargebackProtectionLevel. You've got two options in my opinion:

  1. update your code to use ProtectionLevel instead of ChargebackProtectionLevel
  2. update your tests to ignore these level warnings (not ideal, but technically gets your tests back up and running until you can update your code to use ProtectionLevel)

Hope this helps!

tammyalexandra commented 1 year ago

I don't think you understood my report. We are not using ChargebackProtectionLevel anywhere in our code. I am simply trying to import braintree, and it is failing.

If you look at the full stack trace and compare your code, this is why: the class is still there.

https://github.com/braintree/braintree_python/blob/master/braintree/dispute.py#L72

hollabaq86 commented 1 year ago

Hey @tammyalexandra thanks for the clarification. Going to re-open this issue and take a deeper look.

hollabaq86 commented 1 year ago

@tammyalexandra I've tried replicating this issue spinning up a Docker image that's got python 3.10 and then running a test file that imports the braintree library, and I'm not able to reproduce this error. Are you running tests in development mode?

How are you setting the PYTHONWARNINGS variable?

pehala commented 1 year ago

I could reproduce it by simply running python -W default and then import braintree. By default, the DeprecationWarnings are now shown, so you need to enable them specifically, however pytest (at least with our settings) shows these errors.

hollabaq86 commented 1 year ago

for internal tracking, issue 7868

dod-cogbuehi commented 1 year ago

Is there any update on this draft PR? We're experiencing the same issue when attempting to update braintree

saralvasquez commented 1 year ago

That draft PR had some breaking changes that made it an unfeasible solution unfortunately. I would like to circle back to what @hollabaq86 asked before though. The only way I could replicate the errors from the original description on this issue was to run tests or import braintree with -W error. This makes me think there may be some hidden variables configured outside of the SDK that are causing python warnings to be raised to exceptions. This doc on PYTHONWARNINGS seems to confirm that idea.

How are you all setting the PYTHONWARNINGS variable? @pehala you metioned using -W deafult, did that cause errors or just surface the deprecation warnings?

pehala commented 1 year ago

We are using this library in our tests with pytest and we see these errors. It is annoying for us as those errors are not in our code. It does not cause failures in the tests itself at least for our use case.

hollabaq86 commented 1 year ago

pytest allows you to filter and suppress warnings, since this isn't causing failures I'm going to go ahead and close this issue.

cedk commented 5 months ago

I think it should be reopen because deprecation warning should not be raised on import of the module but only when accessing the deprecated ChargebackProtectionLevel. #155 fix that. The current behavior is annoying because it prevents to use the library with -Werror.